//native
type Xero = {
token: string;
};
/**
* Creates a payroll employee
*
*/
export async function main(
auth: Xero,
Xero_Tenant_Id: string,
Idempotency_Key: string,
body: {
FirstName: string;
LastName: string;
DateOfBirth: string;
HomeAddress?: {
AddressLine1: string;
AddressLine2?: string;
City?: string;
Region?: "ACT" | "NSW" | "NT" | "QLD" | "SA" | "TAS" | "VIC" | "WA";
PostalCode?: string;
Country?: string;
};
StartDate?: string;
Title?: string;
MiddleNames?: string;
Email?: string;
Gender?: "N" | "M" | "F" | "I";
Phone?: string;
Mobile?: string;
TwitterUserName?: string;
IsAuthorisedToApproveLeave?: false | true;
IsAuthorisedToApproveTimesheets?: false | true;
JobTitle?: string;
Classification?: string;
OrdinaryEarningsRateID?: string;
PayrollCalendarID?: string;
EmployeeGroupName?: string;
EmployeeID?: string;
TerminationDate?: string;
TerminationReason?: "F" | "I" | "V" | "D" | "R" | "C" | "T";
BankAccounts?: {
StatementText?: string;
AccountName?: string;
BSB?: string;
AccountNumber?: string;
Remainder?: false | true;
Amount?: number;
}[];
PayTemplate?: {
EarningsLines?: {
EarningsRateID: string;
CalculationType?:
| "USEEARNINGSRATE"
| "ENTEREARNINGSRATE"
| "ANNUALSALARY";
AnnualSalary?: number;
NumberOfUnitsPerWeek?: number;
RatePerUnit?: number;
NormalNumberOfUnits?: number;
Amount?: number;
NumberOfUnits?: number;
FixedAmount?: number;
}[];
DeductionLines?: {
DeductionTypeID: string;
CalculationType?: "FIXEDAMOUNT" | "PRETAX" | "POSTTAX";
Amount?: number;
Percentage?: number;
NumberOfUnits?: number;
}[];
SuperLines?: {
SuperMembershipID?: string;
ContributionType?:
| "SGC"
| "SALARYSACRIFICE"
| "EMPLOYERADDITIONAL"
| "EMPLOYEE";
CalculationType?: "FIXEDAMOUNT" | "PERCENTAGEOFEARNINGS" | "STATUTORY";
MinimumMonthlyEarnings?: number;
ExpenseAccountCode?: string;
LiabilityAccountCode?: string;
Percentage?: number;
Amount?: number;
}[];
ReimbursementLines?: {
ReimbursementTypeID?: string;
Amount?: number;
Description?: string;
ExpenseAccount?: string;
}[];
LeaveLines?: {
LeaveTypeID?: string;
CalculationType?:
| "NOCALCULATIONREQUIRED"
| "FIXEDAMOUNTEACHPERIOD"
| "ENTERRATEINPAYTEMPLATE"
| "BASEDONORDINARYEARNINGS";
EntitlementFinalPayPayoutType?: "NOTPAIDOUT" | "PAIDOUT";
EmploymentTerminationPaymentType?: "R" | "O";
IncludeSuperannuationGuaranteeContribution?: false | true;
NumberOfUnits?: number;
AnnualNumberOfUnits?: number;
FullTimeNumberOfUnitsPerPeriod?: number;
}[];
};
OpeningBalances?: {
OpeningBalanceDate?: string;
Tax?: string;
EarningsLines?: {
EarningsRateID: string;
CalculationType?:
| "USEEARNINGSRATE"
| "ENTEREARNINGSRATE"
| "ANNUALSALARY";
AnnualSalary?: number;
NumberOfUnitsPerWeek?: number;
RatePerUnit?: number;
NormalNumberOfUnits?: number;
Amount?: number;
NumberOfUnits?: number;
FixedAmount?: number;
}[];
DeductionLines?: {
DeductionTypeID: string;
CalculationType?: "FIXEDAMOUNT" | "PRETAX" | "POSTTAX";
Amount?: number;
Percentage?: number;
NumberOfUnits?: number;
}[];
SuperLines?: {
SuperMembershipID?: string;
ContributionType?:
| "SGC"
| "SALARYSACRIFICE"
| "EMPLOYERADDITIONAL"
| "EMPLOYEE";
CalculationType?: "FIXEDAMOUNT" | "PERCENTAGEOFEARNINGS" | "STATUTORY";
MinimumMonthlyEarnings?: number;
ExpenseAccountCode?: string;
LiabilityAccountCode?: string;
Percentage?: number;
Amount?: number;
}[];
ReimbursementLines?: {
ReimbursementTypeID?: string;
Amount?: number;
Description?: string;
ExpenseAccount?: string;
}[];
LeaveLines?: {
LeaveTypeID?: string;
CalculationType?:
| "NOCALCULATIONREQUIRED"
| "FIXEDAMOUNTEACHPERIOD"
| "ENTERRATEINPAYTEMPLATE"
| "BASEDONORDINARYEARNINGS";
EntitlementFinalPayPayoutType?: "NOTPAIDOUT" | "PAIDOUT";
EmploymentTerminationPaymentType?: "R" | "O";
IncludeSuperannuationGuaranteeContribution?: false | true;
NumberOfUnits?: number;
AnnualNumberOfUnits?: number;
FullTimeNumberOfUnitsPerPeriod?: number;
}[];
PaidLeaveEarningsLines?: {
LeaveTypeID: string;
Amount: number;
SGCAppliedLeaveLoadingAmount?: number;
SGCExemptedLeaveLoadingAmount?: number;
ResetSTPCategorisation?: false | true;
}[];
};
TaxDeclaration?: {
EmployeeID?: string;
EmploymentBasis?:
| "FULLTIME"
| "PARTTIME"
| "CASUAL"
| "LABOURHIRE"
| "SUPERINCOMESTREAM"
| "NONEMPLOYEE";
TFNExemptionType?: "NOTQUOTED" | "PENDING" | "PENSIONER" | "UNDER18";
TaxFileNumber?: string;
ABN?: string;
AustralianResidentForTaxPurposes?: false | true;
ResidencyStatus?:
| "AUSTRALIANRESIDENT"
| "FOREIGNRESIDENT"
| "WORKINGHOLIDAYMAKER";
TaxScaleType?:
| "WORKINGHOLIDAYMAKER"
| "REGULAR"
| "ACTORSARTISTSENTERTAINERS"
| "HORTICULTURISTORSHEARER"
| "SENIORORPENSIONER"
| "FOREIGN";
WorkCondition?: "PROMOTIONAL" | "THREELESSPERFORMANCESPERWEEK" | "NONE";
SeniorMaritalStatus?:
| "MEMBEROFCOUPLE"
| "MEMBEROFILLNESSSEPARATEDCOUPLE"
| "SINGLE";
TaxFreeThresholdClaimed?: false | true;
TaxOffsetEstimatedAmount?: number;
HasHELPDebt?: false | true;
HasSFSSDebt?: false | true;
HasTradeSupportLoanDebt?: false | true;
UpwardVariationTaxWithholdingAmount?: number;
EligibleToReceiveLeaveLoading?: false | true;
ApprovedWithholdingVariationPercentage?: number;
HasStudentStartupLoan?: false | true;
HasLoanOrStudentDebt?: false | true;
UpdatedDateUTC?: string;
};
IncomeType?:
| "LABOURHIRE"
| "NONEMPLOYEE"
| "WORKINGHOLIDAYMAKER"
| "SALARYANDWAGES"
| "CLOSELYHELDPAYEES";
EmploymentType?: "EMPLOYEE" | "CONTRACTOR";
CountryOfResidence?:
| "SA"
| "AF"
| "AX"
| "AL"
| "DZ"
| "AS"
| "AD"
| "AO"
| "AI"
| "AQ"
| "AG"
| "AR"
| "AM"
| "AW"
| "AU"
| "AT"
| "AZ"
| "BS"
| "BH"
| "BD"
| "BB"
| "BY"
| "BE"
| "BZ"
| "BJ"
| "BM"
| "BT"
| "BO"
| "BA"
| "BW"
| "BV"
| "BR"
| "IO"
| "BN"
| "BG"
| "BF"
| "BI"
| "KH"
| "CM"
| "CA"
| "CV"
| "KY"
| "CF"
| "TD"
| "CL"
| "CN"
| "CX"
| "CC"
| "CO"
| "KM"
| "CG"
| "CD"
| "CK"
| "CR"
| "CI"
| "HR"
| "CU"
| "CY"
| "CZ"
| "DK"
| "DJ"
| "DM"
| "DO"
| "EC"
| "EG"
| "SV"
| "GQ"
| "ER"
| "EE"
| "ET"
| "FK"
| "FO"
| "FJ"
| "FI"
| "FR"
| "GF"
| "PF"
| "TF"
| "GA"
| "GM"
| "GE"
| "DE"
| "GH"
| "GI"
| "GR"
| "GL"
| "GD"
| "GP"
| "GU"
| "GT"
| "GG"
| "GN"
| "GW"
| "GY"
| "HT"
| "HM"
| "VA"
| "HN"
| "HK"
| "HU"
| "IS"
| "IN"
| "ID"
| "IR"
| "IQ"
| "IE"
| "IM"
| "IL"
| "IT"
| "JM"
| "JP"
| "JE"
| "JO"
| "KZ"
| "KE"
| "KI"
| "KP"
| "KR"
| "KW"
| "KG"
| "LA"
| "LV"
| "LB"
| "LS"
| "LR"
| "LY"
| "LI"
| "LT"
| "LU"
| "MO"
| "MK"
| "MG"
| "MW"
| "MY"
| "MV"
| "ML"
| "MT"
| "MH"
| "MQ"
| "MR"
| "MU"
| "YT"
| "MX"
| "FM"
| "MD"
| "MC"
| "MN"
| "ME"
| "MS"
| "MA"
| "MZ"
| "MM"
| "NA"
| "NR"
| "NP"
| "NL"
| "AN"
| "NC"
| "NZ"
| "NI"
| "NE"
| "NG"
| "NU"
| "NF"
| "MP"
| "NO"
| "OM"
| "PK"
| "PW"
| "PS"
| "PA"
| "PG"
| "PY"
| "PE"
| "PH"
| "PN"
| "PL"
| "PT"
| "PR"
| "QA"
| "RE"
| "RO"
| "RU"
| "RW"
| "BL"
| "SH"
| "KN"
| "LC"
| "MF"
| "PM"
| "VC"
| "WS"
| "SM"
| "ST"
| "SN"
| "RS"
| "SC"
| "SL"
| "SG"
| "SK"
| "SI"
| "SB"
| "SO"
| "ZA"
| "GS"
| "ES"
| "LK"
| "SD"
| "SR"
| "SJ"
| "SZ"
| "SE"
| "CH"
| "SY"
| "TW"
| "TJ"
| "TZ"
| "TH"
| "TL"
| "TG"
| "TK"
| "TO"
| "TT"
| "TN"
| "TR"
| "TM"
| "TC"
| "TV"
| "UG"
| "UA"
| "AE"
| "GB"
| "US"
| "UM"
| "UY"
| "UZ"
| "VU"
| "VE"
| "VN"
| "VG"
| "VI"
| "WF"
| "EH"
| "YE"
| "ZM"
| "ZW"
| "BQ"
| "CW"
| "SX"
| "SS";
IsSTP2Qualified?: false | true;
LeaveBalances?: {
LeaveName?: string;
LeaveTypeID?: string;
NumberOfUnits?: number;
TypeOfUnits?: string;
}[];
LeaveLines?: {
LeaveTypeID?: string;
CalculationType?:
| "NOCALCULATIONREQUIRED"
| "FIXEDAMOUNTEACHPERIOD"
| "ENTERRATEINPAYTEMPLATE"
| "BASEDONORDINARYEARNINGS";
EntitlementFinalPayPayoutType?: "NOTPAIDOUT" | "PAIDOUT";
EmploymentTerminationPaymentType?: "R" | "O";
IncludeSuperannuationGuaranteeContribution?: false | true;
NumberOfUnits?: number;
AnnualNumberOfUnits?: number;
FullTimeNumberOfUnitsPerPeriod?: number;
}[];
SuperMemberships?: {
SuperMembershipID?: string;
SuperFundID: string;
EmployeeNumber: string;
}[];
Status?: "ACTIVE" | "TERMINATED";
UpdatedDateUTC?: string;
ValidationErrors?: { Message?: string }[];
}[],
) {
const url = new URL(`https://api.xero.com/payroll.xro/1.0/Employees`);
const response = await fetch(url, {
method: "POST",
headers: {
Accept: 'application/json',
"Xero-Tenant-Id": Xero_Tenant_Id,
"Idempotency-Key": Idempotency_Key,
"Content-Type": "application/json",
Authorization: "Bearer " + auth.token,
},
body: JSON.stringify(body),
});
if (!response.ok) {
const text = await response.text();
throw new Error(`${response.status} ${text}`);
}
return await response.json();
}
Submitted by hugo697 515 days ago