jaz-cli 2.7.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 (68) 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 +161 -0
  4. package/assets/skills/jobs/references/audit-prep.md +319 -0
  5. package/assets/skills/jobs/references/bank-recon.md +234 -0
  6. package/assets/skills/jobs/references/building-blocks.md +135 -0
  7. package/assets/skills/jobs/references/credit-control.md +273 -0
  8. package/assets/skills/jobs/references/fa-review.md +267 -0
  9. package/assets/skills/jobs/references/gst-vat-filing.md +250 -0
  10. package/assets/skills/jobs/references/month-end-close.md +308 -0
  11. package/assets/skills/jobs/references/payment-run.md +246 -0
  12. package/assets/skills/jobs/references/quarter-end-close.md +268 -0
  13. package/assets/skills/jobs/references/sg-tax/add-backs-guide.md +354 -0
  14. package/assets/skills/jobs/references/sg-tax/capital-allowances-guide.md +343 -0
  15. package/assets/skills/jobs/references/sg-tax/data-extraction.md +408 -0
  16. package/assets/skills/jobs/references/sg-tax/enhanced-deductions.md +248 -0
  17. package/assets/skills/jobs/references/sg-tax/exemptions-and-rebates.md +197 -0
  18. package/assets/skills/jobs/references/sg-tax/form-cs-fields.md +191 -0
  19. package/assets/skills/jobs/references/sg-tax/ifrs16-tax-adjustment.md +194 -0
  20. package/assets/skills/jobs/references/sg-tax/losses-and-carry-forwards.md +269 -0
  21. package/assets/skills/jobs/references/sg-tax/overview.md +207 -0
  22. package/assets/skills/jobs/references/sg-tax/wizard-workflow.md +391 -0
  23. package/assets/skills/jobs/references/supplier-recon.md +330 -0
  24. package/assets/skills/jobs/references/year-end-close.md +341 -0
  25. package/assets/skills/transaction-recipes/SKILL.md +1 -1
  26. package/dist/__tests__/jobs-audit-prep.test.js +125 -0
  27. package/dist/__tests__/jobs-bank-recon.test.js +108 -0
  28. package/dist/__tests__/jobs-credit-control.test.js +98 -0
  29. package/dist/__tests__/jobs-fa-review.test.js +104 -0
  30. package/dist/__tests__/jobs-gst-vat.test.js +113 -0
  31. package/dist/__tests__/jobs-month-end.test.js +162 -0
  32. package/dist/__tests__/jobs-payment-run.test.js +106 -0
  33. package/dist/__tests__/jobs-quarter-end.test.js +155 -0
  34. package/dist/__tests__/jobs-supplier-recon.test.js +115 -0
  35. package/dist/__tests__/jobs-validate.test.js +181 -0
  36. package/dist/__tests__/jobs-year-end.test.js +149 -0
  37. package/dist/__tests__/tax-sg-capital-allowances.test.js +389 -0
  38. package/dist/__tests__/tax-sg-exemptions.test.js +232 -0
  39. package/dist/__tests__/tax-sg-form-cs.test.js +687 -0
  40. package/dist/__tests__/tax-validate.test.js +208 -0
  41. package/dist/commands/init.js +7 -2
  42. package/dist/commands/jobs.js +184 -0
  43. package/dist/commands/tax.js +195 -0
  44. package/dist/index.js +4 -0
  45. package/dist/jobs/audit-prep.js +211 -0
  46. package/dist/jobs/bank-recon.js +163 -0
  47. package/dist/jobs/credit-control.js +126 -0
  48. package/dist/jobs/fa-review.js +121 -0
  49. package/dist/jobs/format.js +102 -0
  50. package/dist/jobs/gst-vat.js +187 -0
  51. package/dist/jobs/month-end.js +232 -0
  52. package/dist/jobs/payment-run.js +199 -0
  53. package/dist/jobs/quarter-end.js +135 -0
  54. package/dist/jobs/supplier-recon.js +132 -0
  55. package/dist/jobs/types.js +36 -0
  56. package/dist/jobs/validate.js +115 -0
  57. package/dist/jobs/year-end.js +153 -0
  58. package/dist/tax/format.js +18 -0
  59. package/dist/tax/sg/capital-allowances.js +160 -0
  60. package/dist/tax/sg/constants.js +63 -0
  61. package/dist/tax/sg/exemptions.js +76 -0
  62. package/dist/tax/sg/form-cs.js +349 -0
  63. package/dist/tax/sg/format-sg.js +134 -0
  64. package/dist/tax/types.js +9 -0
  65. package/dist/tax/validate.js +124 -0
  66. package/dist/types/index.js +2 -1
  67. package/dist/utils/template.js +1 -1
  68. package/package.json +1 -1
@@ -0,0 +1,197 @@
1
+ # Tax Exemptions and Rebates for SG Corporate Tax
2
+
3
+ Singapore applies a flat 17% corporate income tax rate, but two exemption schemes reduce the effective rate for most SMBs. After the exemption, a CIT rebate may further reduce the tax payable depending on the Year of Assessment.
4
+
5
+ ---
6
+
7
+ ## 1. Start-Up Tax Exemption (SUTE)
8
+
9
+ For newly incorporated companies in their first 3 Years of Assessment.
10
+
11
+ | Item | Detail |
12
+ |------|--------|
13
+ | **Eligibility** | First 3 YAs of a newly incorporated SG company |
14
+ | **Conditions** | <= 20 shareholders AND >= 1 individual shareholder holding >= 10% of shares |
15
+ | **Band 1** | 75% exemption on first $100,000 of chargeable income |
16
+ | **Band 2** | 50% exemption on next $100,000 of chargeable income |
17
+ | **Maximum exemption** | $75,000 + $50,000 = **$125,000** per YA |
18
+
19
+ ### How the bands work
20
+
21
+ Bands fill in order — Band 1 must be fully consumed before Band 2 applies.
22
+
23
+ | Chargeable income | Band 1 exempt (75% of first $100K) | Band 2 exempt (50% of next $100K) | Total exempt | Taxable | Tax at 17% | Effective rate |
24
+ |-------------------|------------------------------------|------------------------------------|-------------|---------|------------|---------------|
25
+ | $50,000 | $37,500 | $0 | $37,500 | $12,500 | $2,125 | 4.25% |
26
+ | $100,000 | $75,000 | $0 | $75,000 | $25,000 | $4,250 | 4.25% |
27
+ | $150,000 | $75,000 | $25,000 | $100,000 | $50,000 | $8,500 | 5.67% |
28
+ | $200,000 | $75,000 | $50,000 | $125,000 | $75,000 | $12,750 | **6.375%** |
29
+ | $300,000 | $75,000 | $50,000 | $125,000 | $175,000 | $29,750 | 9.92% |
30
+ | $500,000 | $75,000 | $50,000 | $125,000 | $375,000 | $63,750 | 12.75% |
31
+
32
+ **Benchmark:** A company with $200,000 chargeable income under SUTE pays an effective rate of **6.375%** — less than half the headline 17%.
33
+
34
+ ### Input mapping
35
+
36
+ ```
37
+ exemptionType: 'sute'
38
+ ```
39
+
40
+ ### SUTE conditions in detail
41
+
42
+ Both conditions must be met throughout the basis period:
43
+
44
+ 1. **<= 20 shareholders** — all shareholders are individuals, OR a mix of individuals and corporate shareholders with at least one individual holding >= 10%
45
+ 2. **>= 1 individual holding >= 10%** — at least one natural person holds 10% or more of the issued ordinary shares
46
+
47
+ Companies that are **investment holding companies** or **property development companies** are specifically excluded from SUTE, regardless of their incorporation date or shareholder structure.
48
+
49
+ ---
50
+
51
+ ## 2. Partial Tax Exemption (PTE)
52
+
53
+ For all companies not on SUTE — the default exemption from Year 4 onwards.
54
+
55
+ | Item | Detail |
56
+ |------|--------|
57
+ | **Eligibility** | All Singapore tax-resident companies not claiming SUTE |
58
+ | **Conditions** | None — automatic |
59
+ | **Band 1** | 75% exemption on first $10,000 of chargeable income |
60
+ | **Band 2** | 50% exemption on next $190,000 of chargeable income |
61
+ | **Maximum exemption** | $7,500 + $95,000 = **$102,500** per YA |
62
+
63
+ ### How the bands work
64
+
65
+ | Chargeable income | Band 1 exempt (75% of first $10K) | Band 2 exempt (50% of next $190K) | Total exempt | Taxable | Tax at 17% | Effective rate |
66
+ |-------------------|-----------------------------------|------------------------------------|-------------|---------|------------|---------------|
67
+ | $10,000 | $7,500 | $0 | $7,500 | $2,500 | $425 | 4.25% |
68
+ | $50,000 | $7,500 | $20,000 | $27,500 | $22,500 | $3,825 | 7.65% |
69
+ | $100,000 | $7,500 | $45,000 | $52,500 | $47,500 | $8,075 | 8.08% |
70
+ | $200,000 | $7,500 | $95,000 | $102,500 | $97,500 | $16,575 | **8.29%** |
71
+ | $500,000 | $7,500 | $95,000 | $102,500 | $397,500 | $67,575 | 13.52% |
72
+ | $1,000,000 | $7,500 | $95,000 | $102,500 | $897,500 | $152,575 | 15.26% |
73
+
74
+ **Benchmark:** A company with $200,000 chargeable income under PTE pays an effective rate of **8.29%** — roughly half the headline rate.
75
+
76
+ ### Input mapping
77
+
78
+ ```
79
+ exemptionType: 'pte'
80
+ ```
81
+
82
+ ---
83
+
84
+ ## 3. No Exemption
85
+
86
+ In rare cases, a company may elect (or be required) to forgo exemptions.
87
+
88
+ | Item | Detail |
89
+ |------|--------|
90
+ | **When** | Company elects out, or exemption conditions are not met (e.g., SUTE disqualification) |
91
+ | **Rate** | Full 17% on entire chargeable income |
92
+
93
+ ### Input mapping
94
+
95
+ ```
96
+ exemptionType: 'none'
97
+ ```
98
+
99
+ ---
100
+
101
+ ## 4. CIT Rebate (by Year of Assessment)
102
+
103
+ After applying the exemption and computing gross tax at 17%, a CIT rebate may further reduce the tax payable. Rebates are announced in the annual Singapore Budget and vary by YA.
104
+
105
+ **Formula:** `CIT rebate = min(gross tax x rebate rate, rebate cap)`
106
+
107
+ | YA | Rebate Rate | Cap | Notes |
108
+ |----|-------------|-----|-------|
109
+ | 2020 | 25% | $15,000 | Budget 2020 |
110
+ | 2021 | 0% | $0 | No CIT rebate (separate COVID relief measures) |
111
+ | 2022 | 0% | $0 | No CIT rebate |
112
+ | 2023 | 0% | $0 | No CIT rebate |
113
+ | 2024 | 50% | $40,000 | Budget 2024 — Enterprise Support Package |
114
+ | 2025 | 50% | $40,000 | Budget 2024 — extended |
115
+ | 2026 | 40% | $40,000 | Budget 2025 |
116
+
117
+ ### How the rebate works
118
+
119
+ The rebate is applied AFTER computing gross tax (chargeable income minus exemption, times 17%).
120
+
121
+ **Example — YA 2026, PTE, $200,000 chargeable income:**
122
+
123
+ ```
124
+ Chargeable income: $200,000
125
+ Less: PTE exemption: ($102,500)
126
+ Taxable income: $97,500
127
+ Gross tax (17%): $16,575
128
+ Less: CIT rebate: ($6,630) ← min($16,575 x 40%, $40,000) = min($6,630, $40,000)
129
+ ──────────
130
+ Net tax payable: $9,945
131
+ ```
132
+
133
+ Effective rate: $9,945 / $200,000 = **4.97%**
134
+
135
+ ### For YAs not in the schedule
136
+
137
+ If the YA is not listed in the rebate schedule (e.g., YA 2027 and beyond), the rebate is $0. Check the latest Singapore Budget announcements for updates.
138
+
139
+ ---
140
+
141
+ ## Decision Tree for the Wizard
142
+
143
+ Use this sequence during Phase 1 (Step 3) of the wizard workflow to determine the correct exemption type:
144
+
145
+ ```
146
+ 1. "When was the company incorporated?"
147
+ |
148
+ +-- YA <= incorporation year + 2?
149
+ |
150
+ +-- YES → SUTE-eligible (potentially)
151
+ | |
152
+ | +-- "Does the company have <= 20 shareholders,
153
+ | | with at least 1 individual holding >= 10%?"
154
+ | |
155
+ | +-- YES → exemptionType: 'sute'
156
+ | +-- NO → exemptionType: 'pte'
157
+ |
158
+ +-- NO → exemptionType: 'pte'
159
+ ```
160
+
161
+ ### Worked example: incorporation year determination
162
+
163
+ | Incorporated | FY ending | YA | Year since incorporation | SUTE eligible? |
164
+ |-------------|-----------|------|------------------------|----------------|
165
+ | 2024 | 31 Dec 2024 | 2025 | Year 1 | Yes |
166
+ | 2024 | 31 Dec 2025 | 2026 | Year 2 | Yes |
167
+ | 2024 | 31 Dec 2026 | 2027 | Year 3 | Yes |
168
+ | 2024 | 31 Dec 2027 | 2028 | Year 4 | No -> PTE |
169
+
170
+ **Edge case — mid-year incorporation:** If a company was incorporated on 1 Jul 2024 with a Dec year-end, its first YA (2025) covers only 6 months (Jul-Dec 2024). The SUTE still applies for 3 YAs: 2025, 2026, 2027.
171
+
172
+ ---
173
+
174
+ ## SUTE vs PTE Comparison
175
+
176
+ | Chargeable income | SUTE tax | SUTE eff. rate | PTE tax | PTE eff. rate | SUTE saves |
177
+ |-------------------|----------|---------------|---------|---------------|------------|
178
+ | $100,000 | $4,250 | 4.25% | $8,075 | 8.08% | $3,825 |
179
+ | $200,000 | $12,750 | 6.38% | $16,575 | 8.29% | $3,825 |
180
+ | $300,000 | $29,750 | 9.92% | $33,575 | 11.19% | $3,825 |
181
+ | $500,000 | $63,750 | 12.75% | $67,575 | 13.52% | $3,825 |
182
+
183
+ The absolute tax saving of SUTE over PTE is always **$3,825** regardless of income level (because the difference in exemption is $125,000 - $102,500 = $22,500, and $22,500 x 17% = $3,825). SUTE is worth claiming whenever eligible.
184
+
185
+ ---
186
+
187
+ ## Common Mistakes
188
+
189
+ 1. **Using PTE when SUTE applies.** SUTE saves $3,825 per year for 3 years = $11,475. Always check incorporation year.
190
+
191
+ 2. **Counting YAs wrong.** The YA is the year after the FY end, not the FY year itself. A company incorporated in 2024 with FY ending Dec 2024 has its first YA in 2025.
192
+
193
+ 3. **Forgetting SUTE shareholder conditions.** SUTE is not automatic for new companies — the shareholding conditions must be met. A startup with a single corporate shareholder (e.g., a wholly-owned subsidiary of a holding company with no individual shareholder) does not qualify.
194
+
195
+ 4. **Ignoring the CIT rebate.** For YA 2024-2026, the rebate is significant (40-50%, capped at $40K). On $200K chargeable income with PTE, the YA 2026 rebate saves $6,630 additional tax.
196
+
197
+ 5. **Applying the exemption to gross revenue instead of chargeable income.** The exemption applies to **chargeable income** (after all adjustments, CA, losses, and donations). A company with $5M revenue may still have chargeable income under $200K.
@@ -0,0 +1,191 @@
1
+ # Form C-S / C-S Lite — Field Mapping
2
+
3
+ Complete mapping of every field on the IRAS Form C-S and Form C-S Lite returns to the `jaz tax sg-cs` CLI output. Use this reference when populating the IRAS myTax Portal or verifying the computation output.
4
+
5
+ **CLI:** `jaz tax sg-cs --input tax-data.json --json`
6
+
7
+ ---
8
+
9
+ ## Form C-S (18 Fields)
10
+
11
+ The standard simplified corporate income tax return for companies with revenue of $5 million or below.
12
+
13
+ ### Section A: Revenue and Adjusted Profit
14
+
15
+ | Box | IRAS Label | Data Type | CLI Output Field | Source / Formula |
16
+ |-----|-----------|-----------|------------------|------------------|
17
+ | **1** | Adjusted Profit / Loss | Dollar amount | `adjustedProfit` | `accountingProfit + totalAddBacks - totalDeductions` |
18
+ | **2** | Total Revenue | Dollar amount | (from input) `revenue` | Total revenue line from P&L |
19
+
20
+ **Box 1 detail:** The adjusted profit is the accounting profit AFTER tax adjustments (add-backs and further deductions) but BEFORE capital allowances, enhanced deductions, and loss relief. This is the key working number.
21
+
22
+ **Box 2 detail:** Total revenue as reported in the financial statements. This determines C-S vs C-S Lite eligibility. It must match the top line of the P&L.
23
+
24
+ ### Section B: Capital Allowances
25
+
26
+ | Box | IRAS Label | Data Type | CLI Output Field | Source / Formula |
27
+ |-----|-----------|-----------|------------------|------------------|
28
+ | **3** | Capital Allowances Claimed | Dollar amount | `capitalAllowanceClaim` | From CA schedule (current year claim) |
29
+ | **4** | Balances of Unabsorbed Capital Allowances b/f | Dollar amount | (from input) `capitalAllowances.balanceBroughtForward` | Prior YA carry-forward |
30
+ | **5** | Balances of Unabsorbed Capital Allowances c/f | Dollar amount | `unabsorbedCapitalAllowances` | `b/f + current year available - amount utilized` |
31
+
32
+ ### Section C: Losses
33
+
34
+ | Box | IRAS Label | Data Type | CLI Output Field | Source / Formula |
35
+ |-----|-----------|-----------|------------------|------------------|
36
+ | **6** | Current Year Unabsorbed Losses | Dollar amount | Computed from adjusted loss | Only if Box 1 is a loss |
37
+ | **7** | Balances of Unabsorbed Losses b/f | Dollar amount | (from input) `losses.broughtForward` | Prior YA carry-forward |
38
+ | **8** | Balances of Unabsorbed Losses c/f | Dollar amount | `unabsorbedLosses` | `b/f + current year loss - amount utilized` |
39
+
40
+ ### Section D: Donations
41
+
42
+ | Box | IRAS Label | Data Type | CLI Output Field | Source / Formula |
43
+ |-----|-----------|-----------|------------------|------------------|
44
+ | **9** | Donations — Qualifying Amount (250%) | Dollar amount | `donationRelief` | `addBacks.donations x 2.50` (IPC donations at 250%) |
45
+ | **10** | Balances of Unabsorbed Donations b/f | Dollar amount | (from input) `donationsCarryForward.broughtForward` | Prior YA carry-forward (max 5 years) |
46
+ | **11** | Balances of Unabsorbed Donations c/f | Dollar amount | `unabsorbedDonations` | `b/f + current year qualifying - amount utilized` |
47
+
48
+ ### Section E: Chargeable Income and Tax
49
+
50
+ | Box | IRAS Label | Data Type | CLI Output Field | Source / Formula |
51
+ |-----|-----------|-----------|------------------|------------------|
52
+ | **12** | Chargeable Income | Dollar amount | `chargeableIncome` | `adjustedProfit - CA - enhanced deductions - loss relief - donation relief` (floored at 0) |
53
+ | **13** | Exempt Amount | Dollar amount | `exemptAmount` | SUTE or PTE exemption applied to chargeable income |
54
+ | **14** | Taxable Income (after exemption) | Dollar amount | `taxableIncome` | `chargeableIncome - exemptAmount` |
55
+ | **15** | Gross Tax | Dollar amount | `grossTax` | `taxableIncome x 17%` |
56
+ | **16** | CIT Rebate | Dollar amount | `citRebate` | `min(grossTax x rebateRate, rebateCap)` per YA schedule |
57
+ | **17** | Net Tax Payable | Dollar amount | `netTaxPayable` | `grossTax - citRebate` (floored at 0) |
58
+ | **18** | Is the company claiming Start-Up Tax Exemption? | Yes / No | `exemptionType` | `'sute'` = Yes, `'pte'` or `'none'` = No |
59
+
60
+ ---
61
+
62
+ ## Form C-S Lite (6 Fields)
63
+
64
+ The ultra-simplified return for companies with revenue of $200,000 or below. Only 6 fields — no breakdown of CA, losses, or donations.
65
+
66
+ | Box | IRAS Label | Data Type | CLI Output Field | Source / Formula |
67
+ |-----|-----------|-----------|------------------|------------------|
68
+ | **1** | Total Revenue | Dollar amount | (from input) `revenue` | Must be $200,000 or below |
69
+ | **2** | Adjusted Profit / Loss | Dollar amount | `adjustedProfit` | Same as Form C-S Box 1 |
70
+ | **3** | Chargeable Income | Dollar amount | `chargeableIncome` | After all deductions and relief |
71
+ | **4** | Exempt Amount | Dollar amount | `exemptAmount` | SUTE or PTE |
72
+ | **5** | Tax Payable | Dollar amount | `grossTax` | `(chargeableIncome - exemptAmount) x 17%` |
73
+ | **6** | Net Tax Payable (after rebate) | Dollar amount | `netTaxPayable` | `grossTax - citRebate` |
74
+
75
+ **C-S Lite simplification:** The taxpayer still performs the full computation (add-backs, CA, losses, donations) to arrive at chargeable income. They just don't need to report the intermediate steps on the form itself. The `jaz tax sg-cs` engine computes everything regardless — the `formType` field in the output indicates which form applies.
76
+
77
+ ---
78
+
79
+ ## CLI Output to IRAS Form — Quick Reference
80
+
81
+ ### Form C-S Mapping Table
82
+
83
+ | CLI `formFields[].box` | CLI `formFields[].label` | IRAS Box |
84
+ |------------------------|--------------------------|----------|
85
+ | 1 | Adjusted Profit / Loss | Box 1 |
86
+ | 2 | Total Revenue | Box 2 |
87
+ | 3 | Capital Allowances Claimed | Box 3 |
88
+ | 4 | Unabsorbed CA b/f | Box 4 |
89
+ | 5 | Unabsorbed CA c/f | Box 5 |
90
+ | 6 | Current Year Unabsorbed Losses | Box 6 |
91
+ | 7 | Unabsorbed Losses b/f | Box 7 |
92
+ | 8 | Unabsorbed Losses c/f | Box 8 |
93
+ | 9 | Qualifying Donations (250%) | Box 9 |
94
+ | 10 | Unabsorbed Donations b/f | Box 10 |
95
+ | 11 | Unabsorbed Donations c/f | Box 11 |
96
+ | 12 | Chargeable Income | Box 12 |
97
+ | 13 | Exempt Amount | Box 13 |
98
+ | 14 | Taxable Income | Box 14 |
99
+ | 15 | Gross Tax | Box 15 |
100
+ | 16 | CIT Rebate | Box 16 |
101
+ | 17 | Net Tax Payable | Box 17 |
102
+ | 18 | Claiming SUTE? | Box 18 |
103
+
104
+ ### Using the CLI Output
105
+
106
+ The `--json` flag produces structured output with a `formFields` array. Each entry contains:
107
+
108
+ ```json
109
+ {
110
+ "box": 1,
111
+ "label": "Adjusted Profit / Loss",
112
+ "value": 150000.00,
113
+ "source": "accountingProfit (200,000) + addBacks (80,000) - deductions (130,000)"
114
+ }
115
+ ```
116
+
117
+ The `source` field provides a human-readable explanation of how the value was derived. This is your audit trail.
118
+
119
+ ### Additional Output Fields (Not on the Form)
120
+
121
+ The CLI output includes fields that are not directly on the IRAS form but are essential for the tax computation workpaper:
122
+
123
+ | CLI Output Field | Purpose |
124
+ |-----------------|---------|
125
+ | `schedule` | Line-by-line tax computation schedule (the working paper) |
126
+ | `totalAddBacks` | Sum of all add-back items |
127
+ | `totalDeductions` | Sum of all further deductions |
128
+ | `capitalAllowanceClaim` | CA utilized this YA |
129
+ | `enhancedDeductionTotal` | Total enhanced deductions (R&D, IP, S14Q) |
130
+ | `chargeableIncomeBeforeLosses` | Chargeable income before loss/donation relief |
131
+ | `lossRelief` | Losses utilized this YA |
132
+ | `donationRelief` | Donations relief utilized this YA (at 250%) |
133
+ | `workings` | Human-readable narrative of the entire computation |
134
+
135
+ ---
136
+
137
+ ## Auto-Computed vs User-Provided
138
+
139
+ Understanding which values the engine computes vs which the agent must supply:
140
+
141
+ ### User-Provided (via `SgFormCsInput`)
142
+
143
+ | Field | What the Agent Must Supply |
144
+ |-------|---------------------------|
145
+ | `ya` | Year of Assessment |
146
+ | `basisPeriodStart` / `basisPeriodEnd` | FY start and end dates |
147
+ | `revenue` | Total revenue from P&L |
148
+ | `accountingProfit` | Net profit/loss from P&L |
149
+ | `addBacks.*` | Each add-back amount (13 categories) |
150
+ | `deductions.*` | Each further deduction amount (4 categories) |
151
+ | `capitalAllowances.currentYearClaim` | Total CA for this YA |
152
+ | `capitalAllowances.balanceBroughtForward` | Unabsorbed CA from prior YAs |
153
+ | `enhancedDeductions.*` | R&D, IP, donations base, S14Q |
154
+ | `losses.broughtForward` | Unabsorbed losses from prior YAs |
155
+ | `donationsCarryForward.broughtForward` | Unabsorbed donations from prior YAs |
156
+ | `exemptionType` | `'sute'`, `'pte'`, or `'none'` |
157
+
158
+ ### Engine-Computed (in `SgFormCsResult`)
159
+
160
+ | Field | How It Is Computed |
161
+ |-------|-------------------|
162
+ | `formType` | `'C-S Lite'` if revenue <= $200K, else `'C-S'` |
163
+ | `eligible` | `true` if revenue <= $5M |
164
+ | `adjustedProfit` | `accountingProfit + totalAddBacks - totalDeductions` |
165
+ | `chargeableIncomeBeforeLosses` | `adjustedProfit - CA - enhancedDeductions` |
166
+ | `chargeableIncome` | After loss and donation relief, floored at 0 |
167
+ | `exemptAmount` | SUTE/PTE band calculation |
168
+ | `taxableIncome` | `chargeableIncome - exemptAmount` |
169
+ | `grossTax` | `taxableIncome x 17%` |
170
+ | `citRebate` | Per YA schedule |
171
+ | `netTaxPayable` | `grossTax - citRebate` |
172
+ | `unabsorbedLosses` | Remaining losses carried forward |
173
+ | `unabsorbedCapitalAllowances` | Remaining CA carried forward |
174
+ | `unabsorbedDonations` | Remaining donations carried forward |
175
+ | `schedule` | Full line-by-line computation |
176
+ | `formFields` | Array of 18 (C-S) or 6 (C-S Lite) form field mappings |
177
+ | `workings` | Narrative explanation |
178
+
179
+ ---
180
+
181
+ ## Practitioner Tips
182
+
183
+ **Always verify `formType` before advising.** The engine sets `formType` based on revenue. If the output says `'C-S Lite'`, the user only needs to enter 6 fields on myTax Portal. If `'C-S'`, they need all 18.
184
+
185
+ **Check `eligible` first.** If `eligible` is `false`, the company must file Form C (full) and should engage a tax agent. The computation is still valid as a working paper, but the simplified form cannot be used.
186
+
187
+ **Box 1 is NOT accounting profit.** A common mistake is entering the P&L net profit directly into Box 1. Box 1 is the *adjusted* profit — after add-backs and deductions. The CLI computes this correctly; verify with the `workings` output.
188
+
189
+ **Carry-forward balances are the agent's responsibility.** The engine is stateless. It does not know prior-year balances. Always ask the user: "Do you have any unabsorbed losses, capital allowances, or donations carried forward from previous years?"
190
+
191
+ **Round to the nearest dollar for IRAS.** IRAS accepts whole-dollar amounts (no cents). The CLI rounds to 2 decimal places for precision; for the actual form filing, round each box to the nearest dollar.
@@ -0,0 +1,194 @@
1
+ # IFRS 16 Lease Reversal for SG Tax
2
+
3
+ One of the most misunderstood adjustments in Singapore corporate tax. Under IFRS 16 (effective 1 Jan 2019), lessees no longer distinguish between operating and finance leases on the balance sheet. All leases (except short-term and low-value) are recognized as a right-of-use (ROU) asset and a lease liability. This changes what appears on the P&L — and the tax treatment must reverse it.
4
+
5
+ ---
6
+
7
+ ## The Problem
8
+
9
+ Under IFRS 16, the P&L shows two expenses for what used to be a single "rental expense":
10
+
11
+ | IFRS 16 P&L line | Nature |
12
+ |-------------------|--------|
13
+ | **ROU asset depreciation** | Straight-line over the lease term (or useful life if shorter) |
14
+ | **Interest on lease liability** | Front-loaded — higher in early years, declining over the lease term |
15
+
16
+ **Neither of these is tax-deductible in Singapore.** IRAS does not follow IFRS 16 for tax purposes. Instead, the **actual operating lease payments** remain the deductible expense — exactly as they were before IFRS 16 existed.
17
+
18
+ This means for every operating lease accounted under IFRS 16, you need three tax adjustments:
19
+
20
+ 1. **Add back** the ROU depreciation (not deductible)
21
+ 2. **Add back** the lease interest (not deductible)
22
+ 3. **Deduct** the actual lease payments (the real deductible expense)
23
+
24
+ ---
25
+
26
+ ## The Fix (3 Steps)
27
+
28
+ ### Step 1: Add back ROU depreciation
29
+
30
+ Find the total ROU asset depreciation charged to the P&L during the basis period.
31
+
32
+ **How to find it:**
33
+ - Scan the trial balance for accounts containing "Right-of-Use", "ROU", or "Lease Asset"
34
+ - The depreciation charge will be in an expense account, often under "Depreciation — ROU Assets" or similar
35
+ - Cross-reference to the fixed asset summary if ROU assets are tracked there
36
+
37
+ **Maps to:** `addBacks.rouDepreciation`
38
+
39
+ ### Step 2: Add back lease interest
40
+
41
+ Find the total interest expense on lease liabilities charged to the P&L.
42
+
43
+ **How to find it:**
44
+ - Scan for accounts containing "Lease Interest", "Lease Liability Interest", or "IFRS 16 Interest"
45
+ - This is separate from bank loan interest (which IS deductible)
46
+ - May be grouped under "Finance Costs" on the P&L — drill into the GL to isolate lease interest from other interest
47
+
48
+ **Maps to:** `addBacks.leaseInterest`
49
+
50
+ ### Step 3: Deduct actual lease payments
51
+
52
+ Find the total cash payments made to lessors during the basis period.
53
+
54
+ **How to find it:**
55
+ - Scan bank/cash transactions for payments to the lessor
56
+ - Or look at the lease liability account movement — the cash payment portion reduces the liability
57
+ - Under IFRS 16 accounting, the payment is split: part reduces the lease liability (principal), part is interest expense. For tax, you deduct the **total payment** (principal + interest combined)
58
+
59
+ ```
60
+ POST /api/v1/cashflow-transactions/search
61
+ {
62
+ "filter": {
63
+ "chartOfAccountResourceId": { "eq": "<lease-liability-account-id>" },
64
+ "valueDate": { "between": ["2025-01-01", "2025-12-31"] }
65
+ },
66
+ "sort": { "sortBy": ["valueDate"], "order": "ASC" },
67
+ "limit": 1000
68
+ }
69
+ ```
70
+
71
+ Alternatively, if the company maintains a lease schedule, the total annual payment is simply: monthly payment x 12 (or per the lease agreement).
72
+
73
+ **Maps to:** `deductions.actualLeasePayments`
74
+
75
+ ---
76
+
77
+ ## Net Effect
78
+
79
+ The net tax adjustment for IFRS 16 is:
80
+
81
+ ```
82
+ Net adjustment = (ROU depreciation + Lease interest) - Actual lease payments
83
+ ```
84
+
85
+ - **Early years:** Interest is front-loaded under IFRS 16. The sum of ROU depreciation + interest **exceeds** the actual lease payment. Net effect: a positive add-back (increases taxable income slightly).
86
+ - **Later years:** Interest declines. The sum of ROU depreciation + interest **is less than** the actual lease payment. Net effect: a net deduction (decreases taxable income slightly).
87
+ - **Over the full lease term:** The total ROU depreciation + total interest = total lease payments. The cumulative net adjustment is zero. It is purely a timing difference.
88
+
89
+ ---
90
+
91
+ ## Worked Example
92
+
93
+ **Scenario:** Office lease — $5,000/month, 36 months, 5% incremental borrowing rate (IBR).
94
+
95
+ ### IFRS 16 initial measurement
96
+
97
+ ```
98
+ Monthly payment: $5,000
99
+ Lease term: 36 months
100
+ IBR: 5% per annum (0.4167% per month)
101
+ PV of lease payments: $167,234.69 (this becomes both the ROU asset and lease liability)
102
+ ```
103
+
104
+ **Calculator:** `jaz calc lease --payment 5000 --term 36 --rate 5 --json`
105
+
106
+ ### Year 1 (months 1-12)
107
+
108
+ | Component | Amount |
109
+ |-----------|--------|
110
+ | ROU depreciation (straight-line over 36 months) | $55,744.90 ($167,234.69 / 3) |
111
+ | Lease interest (front-loaded, per amortization schedule) | $7,306.74 |
112
+ | **Total IFRS 16 P&L charge** | **$63,051.64** |
113
+ | Actual lease payments (12 x $5,000) | $60,000.00 |
114
+ | **Net tax adjustment (add-back)** | **$3,051.64** |
115
+
116
+ ### Tax adjustment entries for Year 1
117
+
118
+ | Adjustment | Amount | Input field |
119
+ |------------|--------|-------------|
120
+ | Add back: ROU depreciation | $55,744.90 | `addBacks.rouDepreciation` |
121
+ | Add back: Lease interest | $7,306.74 | `addBacks.leaseInterest` |
122
+ | Deduct: Actual payments | $60,000.00 | `deductions.actualLeasePayments` |
123
+ | **Net effect on taxable income** | **+$3,051.64** | (increases CI in early years) |
124
+
125
+ ### Year 2 (months 13-24)
126
+
127
+ | Component | Amount |
128
+ |-----------|--------|
129
+ | ROU depreciation | $55,744.90 |
130
+ | Lease interest (lower than Y1) | $4,620.03 |
131
+ | **Total IFRS 16 P&L charge** | **$60,364.93** |
132
+ | Actual lease payments | $60,000.00 |
133
+ | **Net tax adjustment** | **$364.93** |
134
+
135
+ ### Year 3 (months 25-36)
136
+
137
+ | Component | Amount |
138
+ |-----------|--------|
139
+ | ROU depreciation | $55,744.89 |
140
+ | Lease interest (lowest year) | $1,820.76 |
141
+ | **Total IFRS 16 P&L charge** | **$57,565.65** |
142
+ | Actual lease payments | $60,000.00 |
143
+ | **Net tax adjustment (deduction)** | **($2,434.35)** |
144
+
145
+ ### Cumulative check
146
+
147
+ | | Year 1 | Year 2 | Year 3 | Total |
148
+ |---|--------|--------|--------|-------|
149
+ | ROU depreciation | 55,744.90 | 55,744.90 | 55,744.89 | 167,234.69 |
150
+ | Lease interest | 7,306.74 | 4,620.03 | 1,820.76 | 13,747.53 |
151
+ | IFRS 16 total | 63,051.64 | 60,364.93 | 57,565.65 | 180,982.22 |
152
+ | Actual payments | 60,000.00 | 60,000.00 | 60,000.00 | 180,000.00 |
153
+ | Net adjustment | +3,051.64 | +364.93 | -2,434.35 | +982.22 |
154
+
155
+ The small residual ($982.22) is the interest cost difference — total lease payments of $180,000 vs PV of $167,234.69 means $12,765.31 total interest, which nets against $13,747.53 calculated interest (rounding across 36 periods). Over the full term the economic effect is equivalent.
156
+
157
+ ---
158
+
159
+ ## Questions for the Wizard
160
+
161
+ Ask these in sequence during Phase 3 (Step 10-11 of the wizard workflow):
162
+
163
+ 1. **"Does the company have operating leases accounted under IFRS 16?"** If no, skip all three adjustments.
164
+
165
+ 2. **"What is the total ROU asset depreciation for the year?"** Record as `addBacks.rouDepreciation`.
166
+
167
+ 3. **"What is the total lease liability interest for the year?"** Record as `addBacks.leaseInterest`.
168
+
169
+ 4. **"What are the total actual lease payments made during the year?"** Record as `deductions.actualLeasePayments`. Verify with: `jaz calc lease --payment [monthly] --term [total months] --rate [IBR] --json` and check the Year N amortization.
170
+
171
+ ---
172
+
173
+ ## Short-Term and Low-Value Lease Exemptions
174
+
175
+ IFRS 16 provides two optional exemptions where lessees can continue to recognize lease payments as expenses on a straight-line basis (i.e., the old treatment):
176
+
177
+ | Exemption | Threshold | Tax effect |
178
+ |-----------|-----------|------------|
179
+ | **Short-term leases** | Lease term <= 12 months (no purchase option) | No IFRS 16 adjustment needed — the P&L expense IS the actual payment |
180
+ | **Low-value leases** | Underlying asset value <= ~US$5,000 when new | Same — no adjustment needed |
181
+
182
+ If the company has elected these exemptions for any leases, those leases do NOT need the three-step reversal. Only leases recognized under IFRS 16 (ROU asset + lease liability on balance sheet) need the adjustment.
183
+
184
+ ---
185
+
186
+ ## Common Mistakes
187
+
188
+ 1. **Adding back ROU depreciation but forgetting to deduct actual payments.** This overstates taxable income by the full lease payment amount. The three adjustments work as a set — never apply only one or two.
189
+
190
+ 2. **Including IFRS 16 lease interest in the general "depreciation" add-back.** Lease interest is a separate line item. It goes in `addBacks.leaseInterest`, not `addBacks.depreciation`.
191
+
192
+ 3. **Double-deducting lease payments.** If the company accounts for short-term/low-value leases as P&L expenses (not IFRS 16), those payments are already deducted in accounting profit. Do NOT add them to `deductions.actualLeasePayments` — that field is ONLY for IFRS 16 leases where the actual payment is not on the P&L.
193
+
194
+ 4. **Confusing ROU depreciation with regular fixed asset depreciation.** ROU assets are depreciated separately. Regular FA depreciation goes in `addBacks.depreciation`; ROU depreciation goes in `addBacks.rouDepreciation`. They are claimed differently — FA depreciation is replaced by capital allowances; ROU depreciation is replaced by actual lease payments.