//native
type Xero = {
token: string
}
/**
* Updates an employee's detail
* Update properties on a single employee
*/
export async function main(
auth: Xero,
EmployeeID: string,
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/${EmployeeID}`)
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