Updates tax rates

Script xero Verified

by hugo697 ยท 12/20/2024

The script

Submitted by hugo697 Bun
Verified 515 days ago
1
//native
2
type Xero = {
3
	token: string
4
}
5
/**
6
 * Updates tax rates
7
 *
8
 */
9
export async function main(
10
	auth: Xero,
11
	xero_tenant_id: string,
12
	Idempotency_Key: string,
13
	body: {
14
		TaxRates?: {
15
			Name?: string
16
			TaxType?: string
17
			TaxComponents?: {
18
				Name?: string
19
				Rate?: number
20
				IsCompound?: false | true
21
				IsNonRecoverable?: false | true
22
			}[]
23
			Status?: 'ACTIVE' | 'DELETED' | 'ARCHIVED' | 'PENDING'
24
			ReportTaxType?:
25
				| 'AVALARA'
26
				| 'BASEXCLUDED'
27
				| 'CAPITALSALESOUTPUT'
28
				| 'CAPITALEXPENSESINPUT'
29
				| 'ECOUTPUT'
30
				| 'ECOUTPUTSERVICES'
31
				| 'ECINPUT'
32
				| 'ECACQUISITIONS'
33
				| 'EXEMPTEXPENSES'
34
				| 'EXEMPTINPUT'
35
				| 'EXEMPTOUTPUT'
36
				| 'GSTONIMPORTS'
37
				| 'INPUT'
38
				| 'INPUTTAXED'
39
				| 'MOSSSALES'
40
				| 'NONE'
41
				| 'NONEOUTPUT'
42
				| 'OUTPUT'
43
				| 'PURCHASESINPUT'
44
				| 'SALESOUTPUT'
45
				| 'EXEMPTCAPITAL'
46
				| 'EXEMPTEXPORT'
47
				| 'CAPITALEXINPUT'
48
				| 'GSTONCAPIMPORTS'
49
				| 'GSTONCAPITALIMPORTS'
50
				| 'REVERSECHARGES'
51
				| 'PAYMENTS'
52
				| 'INVOICE'
53
				| 'CASH'
54
				| 'ACCRUAL'
55
				| 'FLATRATECASH'
56
				| 'FLATRATEACCRUAL'
57
				| 'ACCRUALS'
58
				| 'TXCA'
59
				| 'SRCAS'
60
				| 'DSOUTPUT'
61
				| 'BLINPUT2'
62
				| 'EPINPUT'
63
				| 'IMINPUT2'
64
				| 'MEINPUT'
65
				| 'IGDSINPUT2'
66
				| 'ESN33OUTPUT'
67
				| 'OPINPUT'
68
				| 'OSOUTPUT'
69
				| 'TXN33INPUT'
70
				| 'TXESSINPUT'
71
				| 'TXREINPUT'
72
				| 'TXPETINPUT'
73
				| 'NRINPUT'
74
				| 'ES33OUTPUT'
75
				| 'ZERORATEDINPUT'
76
				| 'ZERORATEDOUTPUT'
77
				| 'DRCHARGESUPPLY'
78
				| 'DRCHARGE'
79
				| 'CAPINPUT'
80
				| 'CAPIMPORTS'
81
				| 'IMINPUT'
82
				| 'INPUT2'
83
				| 'CIUINPUT'
84
				| 'SRINPUT'
85
				| 'OUTPUT2'
86
				| 'SROUTPUT'
87
				| 'CAPOUTPUT'
88
				| 'SROUTPUT2'
89
				| 'CIUOUTPUT'
90
				| 'ZROUTPUT'
91
				| 'ZREXPORT'
92
				| 'ACC28PLUS'
93
				| 'ACCUPTO28'
94
				| 'OTHEROUTPUT'
95
				| 'SHOUTPUT'
96
				| 'ZRINPUT'
97
				| 'BADDEBT'
98
				| 'OTHERINPUT'
99
				| 'BADDEBTRELIEF'
100
				| 'IGDSINPUT3'
101
				| 'SROVR'
102
				| 'TOURISTREFUND'
103
				| 'TXRCN33'
104
				| 'TXRCRE'
105
				| 'TXRCESS'
106
				| 'TXRCTS'
107
				| 'CAPEXINPUT'
108
				| 'UNDEFINED'
109
				| 'CAPEXOUTPUT'
110
				| 'ZEROEXPOUTPUT'
111
				| 'GOODSIMPORT'
112
				| 'NONEINPUT'
113
				| 'NOTREPORTED'
114
				| 'SROVRRS'
115
				| 'SROVRLVG'
116
				| 'SRLVG'
117
				| 'IM'
118
				| 'IMESS'
119
				| 'IMN33'
120
				| 'IMRE'
121
				| 'BADDEBTRECOVERY'
122
				| 'USSALESTAX'
123
				| 'BLINPUT3'
124
			CanApplyToAssets?: false | true
125
			CanApplyToEquity?: false | true
126
			CanApplyToExpenses?: false | true
127
			CanApplyToLiabilities?: false | true
128
			CanApplyToRevenue?: false | true
129
			DisplayTaxRate?: number
130
			EffectiveRate?: number
131
		}[]
132
	}
133
) {
134
	const url = new URL(`https://api.xero.com/api.xro/2.0/TaxRates`)
135

136
	const response = await fetch(url, {
137
		method: 'POST',
138
		headers: {
139
			Accept: 'application/json',
140
			'xero-tenant-id': xero_tenant_id,
141
			'Idempotency-Key': Idempotency_Key,
142
			'Content-Type': 'application/json',
143
			Authorization: 'Bearer ' + auth.token
144
		},
145
		body: JSON.stringify(body)
146
	})
147
	if (!response.ok) {
148
		const text = await response.text()
149
		throw new Error(`${response.status} ${text}`)
150
	}
151
	return await response.json()
152
}
153