Creates one or more 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
 * Creates one or more 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: "PUT",
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