jaz-cli 2.8.0 → 2.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/assets/skills/api/SKILL.md +1 -1
  2. package/assets/skills/conversion/SKILL.md +1 -1
  3. package/assets/skills/jobs/SKILL.md +58 -1
  4. package/assets/skills/jobs/references/sg-tax/add-backs-guide.md +354 -0
  5. package/assets/skills/jobs/references/sg-tax/capital-allowances-guide.md +343 -0
  6. package/assets/skills/jobs/references/sg-tax/data-extraction.md +408 -0
  7. package/assets/skills/jobs/references/sg-tax/enhanced-deductions.md +248 -0
  8. package/assets/skills/jobs/references/sg-tax/exemptions-and-rebates.md +197 -0
  9. package/assets/skills/jobs/references/sg-tax/form-cs-fields.md +191 -0
  10. package/assets/skills/jobs/references/sg-tax/ifrs16-tax-adjustment.md +194 -0
  11. package/assets/skills/jobs/references/sg-tax/losses-and-carry-forwards.md +269 -0
  12. package/assets/skills/jobs/references/sg-tax/overview.md +207 -0
  13. package/assets/skills/jobs/references/sg-tax/wizard-workflow.md +391 -0
  14. package/assets/skills/transaction-recipes/SKILL.md +1 -1
  15. package/dist/__tests__/jobs-audit-prep.test.js +3 -3
  16. package/dist/__tests__/jobs-bank-recon.test.js +5 -5
  17. package/dist/__tests__/jobs-credit-control.test.js +1 -1
  18. package/dist/__tests__/jobs-fa-review.test.js +1 -1
  19. package/dist/__tests__/jobs-payment-run.test.js +3 -3
  20. package/dist/__tests__/jobs-supplier-recon.test.js +6 -6
  21. package/dist/__tests__/tax-sg-capital-allowances.test.js +389 -0
  22. package/dist/__tests__/tax-sg-exemptions.test.js +232 -0
  23. package/dist/__tests__/tax-sg-form-cs.test.js +687 -0
  24. package/dist/__tests__/tax-validate.test.js +208 -0
  25. package/dist/commands/init.js +7 -2
  26. package/dist/commands/jobs.js +1 -1
  27. package/dist/commands/tax.js +195 -0
  28. package/dist/index.js +2 -0
  29. package/dist/jobs/audit-prep.js +4 -4
  30. package/dist/jobs/bank-recon.js +4 -4
  31. package/dist/jobs/credit-control.js +5 -5
  32. package/dist/jobs/fa-review.js +4 -4
  33. package/dist/jobs/gst-vat.js +3 -3
  34. package/dist/jobs/payment-run.js +4 -4
  35. package/dist/jobs/supplier-recon.js +3 -3
  36. package/dist/tax/format.js +18 -0
  37. package/dist/tax/sg/capital-allowances.js +160 -0
  38. package/dist/tax/sg/constants.js +63 -0
  39. package/dist/tax/sg/exemptions.js +76 -0
  40. package/dist/tax/sg/form-cs.js +349 -0
  41. package/dist/tax/sg/format-sg.js +134 -0
  42. package/dist/tax/types.js +9 -0
  43. package/dist/tax/validate.js +124 -0
  44. package/dist/utils/template.js +1 -1
  45. package/package.json +1 -1
@@ -0,0 +1,343 @@
1
+ # Capital Allowances Classification Guide
2
+
3
+ How to classify fixed assets for Singapore capital allowance claims. Capital allowances (CA) are the tax equivalent of accounting depreciation — they allow the cost of qualifying capital assets to be deducted over time for tax purposes. Accounting depreciation is always added back; CA is claimed separately.
4
+
5
+ **CLI:** `jaz tax sg-ca --input assets.json --json` (per-asset CA schedule)
6
+ **CLI:** `jaz tax sg-cs --input tax-data.json --json` (full tax computation with CA)
7
+
8
+ ---
9
+
10
+ ## The Core Concept
11
+
12
+ ```
13
+ Accounting depreciation =/= Capital allowances
14
+
15
+ Accounting: Cost spread over useful life per accounting standards (IAS 16)
16
+ Tax: Cost spread over statutory periods per Income Tax Act
17
+
18
+ Step 1: Add back accounting depreciation (always, in full)
19
+ Step 2: Claim capital allowances (per IRAS rules, by asset category)
20
+ ```
21
+
22
+ The difference between depreciation added back and CA claimed creates a permanent or temporary tax adjustment. For most SMBs, CA is more generous than accounting depreciation (especially for computers and low-value assets), resulting in lower tax in early years.
23
+
24
+ ---
25
+
26
+ ## Capital Allowance Categories
27
+
28
+ Six categories, each with a different write-off rate and statutory basis. These map directly to the `AssetCategory` type in the CLI.
29
+
30
+ ### Computer Equipment — Section 19A(1)
31
+
32
+ | Detail | Value |
33
+ |--------|-------|
34
+ | **Category code** | `computer` |
35
+ | **ITA section** | S19A(1) |
36
+ | **Write-off rate** | 100% in year 1 |
37
+ | **Claim period** | 1 year (immediate) |
38
+
39
+ **What qualifies:**
40
+ - Desktop computers, laptops, notebooks, tablets used for business
41
+ - Servers, network equipment (routers, switches, access points)
42
+ - Monitors, printers, scanners directly connected to computing equipment
43
+ - Computer peripherals (keyboard, mouse, external drives)
44
+ - Bundled software purchased with hardware (e.g., pre-installed OS)
45
+
46
+ **What does NOT qualify:**
47
+ - Standalone software licenses (use `ip` category under S19B)
48
+ - Mobile phones (use `general` category unless primarily used as a computing device)
49
+ - TV screens, projectors (use `general` unless used as computer monitors)
50
+
51
+ **Decision tree:**
52
+ 1. Is this item primarily a computing device or peripheral? --> If yes, classify as `computer`.
53
+ 2. Was software purchased bundled with the hardware? --> If yes, include the full cost under `computer`.
54
+ 3. Was software purchased separately as a license? --> Classify under `ip` (S19B).
55
+
56
+ ### Automation Equipment — Section 19A(1)
57
+
58
+ | Detail | Value |
59
+ |--------|-------|
60
+ | **Category code** | `automation` |
61
+ | **ITA section** | S19A(1) |
62
+ | **Write-off rate** | 100% in year 1 |
63
+ | **Claim period** | 1 year (immediate) |
64
+
65
+ **What qualifies:**
66
+ - Prescribed automation equipment under the IRAS list
67
+ - Robots and robotic arms for manufacturing/warehouse
68
+ - IoT sensors and devices for business process automation
69
+ - Automated guided vehicles (AGVs)
70
+ - CNC machines, 3D printers used in production
71
+ - Automated packaging and sorting systems
72
+
73
+ **What does NOT qualify:**
74
+ - General machinery that is not "prescribed" by IRAS
75
+ - Equipment that does not meet the automation criteria published by IRAS
76
+
77
+ **Decision tree:**
78
+ 1. Is this equipment on the IRAS prescribed automation equipment list? --> If yes, classify as `automation`.
79
+ 2. If unsure, does it automate a process that was previously manual? --> Check the IRAS list or classify conservatively as `general`.
80
+
81
+ **Tip:** The automation category is less commonly used by SMBs. If in doubt, classify as `general` (S19, 3-year write-off). The only downside is spreading the claim over 3 years instead of 1.
82
+
83
+ ### Low-Value Assets — Section 19A(2)
84
+
85
+ | Detail | Value |
86
+ |--------|-------|
87
+ | **Category code** | `low-value` |
88
+ | **ITA section** | S19A(2) |
89
+ | **Write-off rate** | 100% in year 1 |
90
+ | **Per-item limit** | $5,000 or less |
91
+ | **Per-YA cap** | $30,000 total |
92
+ | **Claim period** | 1 year (immediate, subject to cap) |
93
+
94
+ **What qualifies:**
95
+ - Any capital asset costing $5,000 or less per item that does not already qualify under another 100% category (computer, automation)
96
+ - Office furniture (desks, chairs, shelves) costing $5,000 or less each
97
+ - Small equipment (coffee machine, microwave, standing desk converter)
98
+ - Tools and instruments under $5,000
99
+ - Small appliances for business use
100
+
101
+ **What does NOT qualify:**
102
+ - Items costing more than $5,000 each (use `general` or another category)
103
+ - Items that qualify under `computer` or `automation` (use those categories instead for unlimited 100% write-off — they are not subject to the $30K cap)
104
+
105
+ **Cap mechanics:**
106
+ - The $30,000 cap is per YA, across ALL low-value assets combined
107
+ - If total low-value asset cost exceeds $30,000, the excess must be classified as `general` (3-year write-off)
108
+ - The CLI automatically enforces the cap and flags when it is breached (`lowValueCapped: true` in output)
109
+
110
+ **Decision tree:**
111
+ 1. Does the asset cost $5,000 or less? --> Potential low-value asset.
112
+ 2. Does it qualify as `computer` or `automation`? --> If yes, use those categories instead (no cap applies).
113
+ 3. Will total low-value assets for this YA exceed $30,000? --> If yes, prioritize the most expensive items for `low-value` and reclassify the rest as `general`.
114
+
115
+ **Questions to ask:** "What is the total cost of all assets purchased this year that cost $5,000 or less each? Is the total under $30,000?"
116
+
117
+ ### General Plant & Machinery — Section 19
118
+
119
+ | Detail | Value |
120
+ |--------|-------|
121
+ | **Category code** | `general` |
122
+ | **ITA section** | S19 |
123
+ | **Write-off rate** | 33.33% per year |
124
+ | **Claim period** | 3 years (equal installments) |
125
+
126
+ **What qualifies:**
127
+ - Office fit-out and furniture costing more than $5,000 per item
128
+ - Q-plated (commercial) motor vehicles
129
+ - Machinery and production equipment
130
+ - Signage and display fixtures
131
+ - Air-conditioning and ventilation systems
132
+ - Security systems (CCTV, access control)
133
+ - Any qualifying capital asset not covered by another specific category
134
+
135
+ **What does NOT qualify:**
136
+ - S-plated (private) motor vehicles — no CA at all
137
+ - Land and buildings (non-industrial) — no CA
138
+ - Non-qualifying assets (paintings, antiques, artwork held for decoration)
139
+
140
+ **Decision tree:**
141
+ 1. Is this a capital asset used in the business? --> If yes, potential CA claim.
142
+ 2. Is it a computer, automation equipment, or low-value asset? --> Use those categories.
143
+ 3. Is it an IP right? --> Use `ip` category (S19B).
144
+ 4. Is it renovation/refurbishment? --> Use `renovation` category (S14Q).
145
+ 5. Is it a private (S-plated) motor vehicle? --> NO CA. Not claimable.
146
+ 6. Everything else? --> `general` at 33.33% x 3 years.
147
+
148
+ ### Intellectual Property — Section 19B
149
+
150
+ | Detail | Value |
151
+ |--------|-------|
152
+ | **Category code** | `ip` |
153
+ | **ITA section** | S19B |
154
+ | **Write-off rate** | 20% per year (default 5-year) |
155
+ | **Claim period** | 5, 10, or 15 years (taxpayer's election) |
156
+
157
+ **What qualifies:**
158
+ - Patents (purchased or self-developed, if capitalized)
159
+ - Trademarks and trade names
160
+ - Copyrights
161
+ - Registered designs
162
+ - Software licenses (purchased separately from hardware)
163
+ - Know-how (trade secrets, proprietary processes, if capitalized)
164
+
165
+ **What does NOT qualify:**
166
+ - Goodwill (not an IP right under S19B)
167
+ - Customer lists, supplier contracts (not qualifying IP)
168
+ - Domain names (debatable — generally not qualifying unless tied to a registered trademark)
169
+
170
+ **Write-off period election:**
171
+ - The taxpayer elects the write-off period: 5, 10, or 15 years
172
+ - Once elected, the period is irrevocable for that asset
173
+ - Default in the CLI is 5 years. To use 10 or 15, set `ipWriteOffYears` on the asset.
174
+
175
+ **Decision tree:**
176
+ 1. Is this a qualifying IP right (patent, trademark, copyright, registered design, software license)? --> If yes, classify as `ip`.
177
+ 2. What write-off period does the user prefer? --> Set `ipWriteOffYears` to 5, 10, or 15.
178
+ 3. Is the software bundled with hardware? --> Classify the whole purchase under `computer` instead.
179
+
180
+ **Questions to ask:** "Is this a standalone software license or IP right? Over how many years would you like to write it off for tax purposes (5, 10, or 15)?"
181
+
182
+ ### Renovation & Refurbishment — Section 14Q
183
+
184
+ | Detail | Value |
185
+ |--------|-------|
186
+ | **Category code** | `renovation` |
187
+ | **ITA section** | S14Q |
188
+ | **Write-off rate** | 33.33% per year |
189
+ | **Claim period** | 3 years (equal installments) |
190
+ | **Cap** | $300,000 per 3-year block |
191
+
192
+ **What qualifies:**
193
+ - Office renovation (wall construction/removal, flooring, ceiling)
194
+ - Retail fit-out (shop front, display areas, customer-facing areas)
195
+ - General electrical wiring and lighting installation
196
+ - Plumbing and sanitary installations
197
+ - Painting and finishing works
198
+ - Fixed partitions and built-in cabinetry
199
+ - Reception area construction and design
200
+ - Kitchen and pantry fit-out (for business premises)
201
+
202
+ **What does NOT qualify:**
203
+ - Antiques, paintings, sculptures used for decoration
204
+ - Any renovation or refurbishment of residential property
205
+ - Renovation costs exceeding the $300,000 cap (excess is non-deductible)
206
+
207
+ **Cap mechanics:**
208
+ - $300,000 is a per-3-year-block cap, not per-year
209
+ - The 3-year block follows the first renovation claim in the series
210
+ - If renovation costs exceed $300,000 in a 3-year block, the excess cannot be claimed
211
+ - A new $300,000 block starts after the first 3-year block is exhausted
212
+
213
+ **Decision tree:**
214
+ 1. Is this a renovation or refurbishment of business premises? --> If yes, classify as `renovation`.
215
+ 2. Is the total renovation cost in the current 3-year block under $300,000? --> If yes, full claim. If no, cap applies.
216
+ 3. Are there prior-year renovation claims in the same 3-year block? --> Subtract from the $300,000 cap.
217
+
218
+ **Questions to ask:** "Is this an office or shop renovation? What is the total renovation cost? Have you claimed any renovation deductions in the past 2 years (same 3-year block)?"
219
+
220
+ ---
221
+
222
+ ## Complete CA Rate Table
223
+
224
+ | Category | Section | Annual Rate | Years | Per-Item Limit | Per-YA Cap | Notes |
225
+ |----------|---------|-------------|-------|---------------|-----------|-------|
226
+ | Computer | S19A(1) | 100% | 1 | None | None | Immediate write-off |
227
+ | Automation | S19A(1) | 100% | 1 | None | None | Must be prescribed equipment |
228
+ | Low-value | S19A(2) | 100% | 1 | $5,000/item | $30,000/YA | Excess reclassified to general |
229
+ | General | S19 | 33.33% | 3 | None | None | Default for most P&M |
230
+ | IP | S19B | 20% (default) | 5/10/15 | None | None | Taxpayer elects period |
231
+ | Renovation | S14Q | 33.33% | 3 | None | $300,000/3-yr block | Qualifying expenditure only |
232
+
233
+ ---
234
+
235
+ ## Extracting Assets from Jaz
236
+
237
+ ### Step 1: Pull the FA register
238
+
239
+ ```
240
+ POST /api/v1/fixed-assets/search
241
+ {
242
+ "filter": { "status": { "eq": "ACTIVE" } },
243
+ "sort": { "sortBy": ["purchaseDate"], "order": "ASC" },
244
+ "limit": 1000
245
+ }
246
+ ```
247
+
248
+ ### Step 2: Map each asset to a CA category
249
+
250
+ For each asset in the response, classify based on the `typeName` and `name` fields:
251
+
252
+ | Jaz Asset Type / Name Pattern | Likely CA Category | Verify |
253
+ |------------------------------|-------------------|--------|
254
+ | "Computer Equipment", "Laptop", "Server" | `computer` | Is it a computing device? |
255
+ | "Office Equipment" costing <= $5,000 | `low-value` | Under $5K and $30K cap? |
256
+ | "Office Equipment" costing > $5,000 | `general` | Above low-value threshold |
257
+ | "Furniture & Fittings" costing <= $5,000 | `low-value` | Under $5K and $30K cap? |
258
+ | "Furniture & Fittings" costing > $5,000 | `general` | 3-year write-off |
259
+ | "Motor Vehicles" (Q-plate) | `general` | Confirm Q-plate, not S-plate |
260
+ | "Motor Vehicles" (S-plate) | **NO CA** | Non-qualifying. Exclude entirely. |
261
+ | "Leasehold Improvements" | `renovation` | Under $300K block cap? |
262
+ | "Software" (standalone license) | `ip` | Not bundled with hardware? |
263
+ | "Plant & Machinery" | `general` | Unless prescribed automation |
264
+
265
+ ### Step 3: Build the CaAsset array
266
+
267
+ For each qualifying asset:
268
+
269
+ ```json
270
+ {
271
+ "description": "MacBook Pro M3 (from Jaz FA register)",
272
+ "cost": 4500.00,
273
+ "acquisitionDate": "2025-03-15",
274
+ "category": "computer",
275
+ "priorYearsClaimed": 0
276
+ }
277
+ ```
278
+
279
+ **`priorYearsClaimed`:** This field tracks how much CA has already been claimed in prior YAs for this asset. The Jaz API does not store tax-specific CA data — you must ask the user or refer to prior-year tax computations.
280
+
281
+ - For assets acquired in the current basis period: `priorYearsClaimed = 0`
282
+ - For 100% categories (computer, automation, low-value): if acquired in a prior year, `priorYearsClaimed` should equal `cost` (fully claimed in year 1)
283
+ - For 3-year assets (general, renovation): `priorYearsClaimed = cost x (1/3) x years already claimed`
284
+ - For IP assets: `priorYearsClaimed = cost x (1/N) x years already claimed` where N = elected write-off period
285
+
286
+ ### Step 4: Run the CA schedule
287
+
288
+ ```bash
289
+ jaz tax sg-ca --input assets.json --json
290
+ ```
291
+
292
+ The output provides a per-asset schedule with:
293
+ - Current year claim per asset
294
+ - Total claimed to date per asset
295
+ - Remaining unabsorbed per asset
296
+ - Low-value cap enforcement (total and whether capped)
297
+ - Total current year claim (feed into `capitalAllowances.currentYearClaim`)
298
+ - Combined total available (current year + brought forward)
299
+
300
+ ---
301
+
302
+ ## Handling Unabsorbed Capital Allowances
303
+
304
+ If the company has unabsorbed (unclaimed) CA from prior YAs, these are carried forward and can be utilized against current-year income.
305
+
306
+ **Input field:** `capitalAllowances.balanceBroughtForward`
307
+
308
+ **When CA becomes unabsorbed:**
309
+ - The company had a tax loss in a prior year (adjusted loss after all deductions)
310
+ - CA was available but there was no chargeable income to absorb it
311
+ - The excess CA carries forward indefinitely (no time limit for unabsorbed CA)
312
+
313
+ **Questions to ask:** "Do you have any unabsorbed capital allowances from previous years? This would be shown on your prior-year Form C-S (Box 5: Unabsorbed CA c/f)."
314
+
315
+ ---
316
+
317
+ ## Common Mistakes
318
+
319
+ **1. Claiming CA on S-plated motor vehicles.** No CA is available for private motor vehicles (S-plated). The entire cost of the vehicle, plus all running expenses, is non-deductible for tax. Do not include S-plated vehicles in the CA schedule.
320
+
321
+ **2. Claiming CA on leasehold land.** The cost of land (including leasehold interest) does not qualify for CA. Only the building or improvements on the land qualify — and only if used for industrial purposes (for S19) or if it constitutes qualifying renovation (S14Q).
322
+
323
+ **3. Exceeding the low-value cap.** The $30,000/YA cap catches many first-time preparers. If a company buys 8 items at $5,000 each ($40,000 total), only $30,000 qualifies for immediate write-off. The remaining $10,000 must be reclassified to `general` (3-year write-off). The CLI handles this automatically.
324
+
325
+ **4. Forgetting prior-year claims on multi-year assets.** For `general` (3-year) and `ip` (5/10/15-year) assets, the current-year CA depends on how much was claimed in prior years. Failing to set `priorYearsClaimed` correctly results in double-claiming or under-claiming.
326
+
327
+ **5. Classifying renovation as general P&M.** Renovation qualifies for S14Q (same 3-year rate as S19, but with a $300K cap). If renovation costs are below the cap, there is no practical difference. But if costs exceed $300K, the S14Q cap applies and the excess is non-deductible — unlike general P&M where the full cost qualifies.
328
+
329
+ **6. Bundled software classified as IP.** Software purchased pre-installed on hardware (e.g., Windows license with a laptop) should be classified under `computer`, not `ip`. Only standalone software licenses (e.g., Adobe Creative Cloud annual license, purchased separately) go under `ip`.
330
+
331
+ ---
332
+
333
+ ## Practitioner Tips
334
+
335
+ **Classify assets at acquisition.** The CA category should be determined when the asset is purchased, not at year-end. This ensures the correct claim period starts from the right YA.
336
+
337
+ **Use `computer` over `low-value` when possible.** Both give 100% year-1 write-off, but `computer` has no per-YA cap. A $4,500 laptop classified as `computer` does not count toward the $30,000 low-value cap. Always check if an asset qualifies for a more specific 100% category before falling back to `low-value`.
338
+
339
+ **Ask about S-plates early.** If the company has motor vehicles, the S-plate vs Q-plate question is the first thing to resolve. It affects both the CA schedule (no CA for S-plate) and the add-backs (`addBacks.privateCar` for all S-plate expenses).
340
+
341
+ **The CLI is your calculation engine.** Do not manually compute CA schedules. Feed the asset list into `jaz tax sg-ca` and use the output. It handles: multi-year spreading, low-value cap enforcement, IP write-off period election, and prior-year claim tracking.
342
+
343
+ **For first-time filers:** All assets acquired since incorporation are potentially claimable. Go through the entire FA register and build the complete CA schedule. For subsequent years, only new acquisitions and continuing multi-year claims are needed.