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,268 @@
1
+ # Quarter-End Close
2
+
3
+ The quarterly close builds on the monthly close. It is month-end close repeated three times, plus a set of quarterly-specific adjustments that only make sense at three-month intervals. For most SMBs, this adds half a day to a day of extra work on top of the regular month-end.
4
+
5
+ **CLI:** `jaz jobs quarter-end --period 2025-Q1 [--currency SGD] [--json]`
6
+
7
+ **Standalone vs Incremental:**
8
+ - **Standalone (default):** Generates the full plan — all monthly close steps for each of the three months in the quarter, followed by the quarterly extras. Use this when months haven't been closed yet.
9
+ - **Incremental (`--incremental`):** Generates only the quarterly extras below. Use this when all three months are already closed and locked.
10
+
11
+ ---
12
+
13
+ ## Phase 1–5: Monthly Close (x3)
14
+
15
+ Complete the full month-end close for each month in the quarter. Each month follows the same 5-phase, 18-step process.
16
+
17
+ **Reference:** `references/month-end-close.md`
18
+
19
+ | Quarter | Month 1 | Month 2 | Month 3 |
20
+ |---------|---------|---------|---------|
21
+ | Q1 (Jan–Mar) | January close | February close | March close |
22
+ | Q2 (Apr–Jun) | April close | May close | June close |
23
+ | Q3 (Jul–Sep) | July close | August close | September close |
24
+ | Q4 (Oct–Dec) | October close | November close | December close |
25
+
26
+ **Important:** Close months in order. Month 1 must be locked before starting Month 2, and Month 2 before Month 3. The quarterly extras run after Month 3 is closed.
27
+
28
+ ---
29
+
30
+ ## Phase 6: Quarterly Extras
31
+
32
+ These steps run once per quarter, after all three months are closed. They address items that are reviewed less frequently or that accumulate over the quarter.
33
+
34
+ ### Step Q1: GST/VAT filing preparation
35
+
36
+ Generate the tax ledger for the full quarter and reconcile input/output tax for filing.
37
+
38
+ ```
39
+ POST /generate-reports/vat-ledger
40
+ { "startDate": "2025-01-01", "endDate": "2025-03-31" }
41
+ ```
42
+
43
+ **What to do:**
44
+ 1. Pull the quarterly tax ledger report
45
+ 2. Review output tax (GST on sales) — verify every taxable invoice is included and the correct tax code was applied
46
+ 3. Review input tax (GST on purchases) — verify every claimable bill is included, no blocked input tax claimed
47
+ 4. Identify discrepancies — missing invoices/bills, wrong tax codes, exempt items coded as taxable
48
+ 5. Cross-reference totals to the GST return form
49
+
50
+ **For Singapore (IRAS):**
51
+ - Quarterly filing (standard GST-registered businesses)
52
+ - File via myTax Portal within one month after quarter end
53
+ - Box 1 (Total Sales): total revenue incl. zero-rated and exempt
54
+ - Box 6 (Output Tax): from tax ledger output tax total
55
+ - Box 7 (Input Tax): from tax ledger input tax total (net of blocked items)
56
+
57
+ **For Philippines (BIR):**
58
+ - Monthly VAT return (BIR Form 2550M) for each month in the quarter
59
+ - Quarterly VAT return (BIR Form 2550Q) for the full quarter
60
+ - Input VAT carried forward if excess over output VAT
61
+ - File within 25 days after the close of the taxable quarter
62
+
63
+ **Verification:** Output tax per tax ledger should equal sum of GST on all sales invoices for the quarter. Input tax per tax ledger should equal sum of GST on all purchase bills (excluding blocked items). Any difference = data entry error to investigate.
64
+
65
+ **See also:** `references/gst-vat-filing.md` for the full GST/VAT filing job.
66
+
67
+ ### Step Q2: ECL / bad debt provision — formal review
68
+
69
+ The monthly close includes a quick bad debt check (Step 13). The quarterly review is the formal one — full aged receivables analysis with loss rates applied.
70
+
71
+ **Recipe:** `bad-debt-provision` | **Calculator:** `jaz calc ecl`
72
+
73
+ **Step-by-step:**
74
+
75
+ 1. Pull the AR aging report as at quarter-end:
76
+ ```
77
+ POST /generate-reports/ar-report
78
+ { "endDate": "2025-03-31" }
79
+ ```
80
+
81
+ 2. Categorize receivables into aging buckets (current, 30d, 60d, 90d, 120d+)
82
+
83
+ 3. Apply historical loss rates to each bucket:
84
+ ```bash
85
+ jaz calc ecl --current 100000 --30d 50000 --60d 20000 --90d 10000 --120d 5000 --rates 0.5,2,5,10,50
86
+ ```
87
+
88
+ 4. Compare the calculated provision to the existing Allowance for Doubtful Debts balance on the trial balance
89
+
90
+ 5. Post an adjustment journal for the difference:
91
+ ```
92
+ POST /journals
93
+ {
94
+ "valueDate": "2025-03-31",
95
+ "reference": "QE-ECL-Q1-25",
96
+ "journalEntries": [
97
+ { "accountResourceId": "<bad-debt-expense>", "amount": 1250.00, "type": "DEBIT", "name": "ECL provision adjustment — Q1 2025" },
98
+ { "accountResourceId": "<allowance-doubtful-debts>", "amount": 1250.00, "type": "CREDIT", "name": "ECL provision adjustment — Q1 2025" }
99
+ ]
100
+ }
101
+ ```
102
+
103
+ **Note:** If the required provision has decreased, reverse the direction (DR Allowance, CR Bad Debt Expense). Some firms use a separate recovery account for write-backs.
104
+
105
+ **Conditional:** Always perform the formal review at quarter-end, even if the monthly quick checks showed no change. Document the analysis — auditors will ask for it.
106
+
107
+ ### Step Q3: Bonus accrual true-up
108
+
109
+ Review quarterly bonus obligations and adjust the accrual if estimates have changed.
110
+
111
+ **Recipe:** `employee-accruals` (bonus component)
112
+
113
+ During monthly closes, you accrue a fixed monthly estimate (1/12 of expected annual bonus). At quarter-end, re-assess whether the estimate is still accurate based on actual performance.
114
+
115
+ **Step-by-step:**
116
+
117
+ 1. Verify three months of bonus accruals exist. Search for journals in the Employee Benefits capsule:
118
+ ```
119
+ POST /journals/search
120
+ {
121
+ "filter": {
122
+ "valueDate": { "between": ["2025-01-01", "2025-03-31"] }
123
+ },
124
+ "sort": { "sortBy": ["valueDate"], "order": "ASC" },
125
+ "limit": 100
126
+ }
127
+ ```
128
+ Filter results by capsule or reference prefix (e.g., "BONUS-ACCR") to isolate bonus entries.
129
+
130
+ 2. Sum the year-to-date accrual and compare to the revised full-year estimate
131
+
132
+ 3. If the estimate has changed, post a true-up journal:
133
+ ```
134
+ POST /journals
135
+ {
136
+ "valueDate": "2025-03-31",
137
+ "reference": "QE-BONUS-Q1-25",
138
+ "journalEntries": [
139
+ { "accountResourceId": "<bonus-expense>", "amount": 2000.00, "type": "DEBIT", "name": "Bonus accrual true-up — Q1 2025" },
140
+ { "accountResourceId": "<bonus-liability>", "amount": 2000.00, "type": "CREDIT", "name": "Bonus accrual true-up — Q1 2025" }
141
+ ]
142
+ }
143
+ ```
144
+
145
+ **Conditional:** Only if the business has bonus schemes. Most SMBs with 5+ employees and a performance bonus structure should review quarterly. If no change to estimate, document the review but skip the journal.
146
+
147
+ ### Step Q4: Intercompany reconciliation
148
+
149
+ If the business operates multiple entities (e.g., SG parent + PH subsidiary), reconcile intercompany balances and post settlement journals.
150
+
151
+ **Recipe:** `intercompany`
152
+
153
+ **Step-by-step:**
154
+
155
+ 1. Pull the trial balance for each entity and isolate intercompany receivable/payable accounts:
156
+ ```
157
+ POST /generate-reports/trial-balance
158
+ { "startDate": "2025-01-01", "endDate": "2025-03-31" }
159
+ ```
160
+
161
+ 2. Verify that Entity A's intercompany receivable = Entity B's intercompany payable (and vice versa). Differences indicate:
162
+ - Transactions recorded in one entity but not the other
163
+ - Timing differences (one entity booked end-of-quarter, the other booked beginning of next)
164
+ - FX differences if the entities operate in different currencies
165
+
166
+ 3. Post matching journals in both entities to clear discrepancies
167
+
168
+ 4. If settling (netting off balances), post settlement journals:
169
+ ```
170
+ POST /journals
171
+ {
172
+ "valueDate": "2025-03-31",
173
+ "reference": "QE-IC-SETTLE-Q1-25",
174
+ "journalEntries": [
175
+ { "accountResourceId": "<intercompany-payable>", "amount": 15000.00, "type": "DEBIT", "name": "IC settlement — Entity A, Q1 2025" },
176
+ { "accountResourceId": "<bank-account>", "amount": 15000.00, "type": "CREDIT", "name": "IC settlement — Entity A, Q1 2025" }
177
+ ]
178
+ }
179
+ ```
180
+
181
+ **Conditional:** Only if multi-entity. Single-entity SMBs skip this entirely.
182
+
183
+ ### Step Q5: Provision unwinding
184
+
185
+ If IAS 37 provisions exist (e.g., restoration obligations, warranty provisions, legal claims), post the quarterly discount unwinding journal.
186
+
187
+ **Recipe:** `provisions` | **Calculator:** `jaz calc provision`
188
+
189
+ Provisions measured at present value must have the discount unwound each period, recognizing the time value of money as a finance cost.
190
+
191
+ ```bash
192
+ jaz calc provision --amount 500000 --rate 4 --term 60 --start-date 2025-01-01 --json
193
+ ```
194
+
195
+ The calculator generates the unwinding schedule. Post the quarterly entry:
196
+
197
+ ```
198
+ POST /journals
199
+ {
200
+ "valueDate": "2025-03-31",
201
+ "reference": "QE-PROV-UNWIND-Q1-25",
202
+ "journalEntries": [
203
+ { "accountResourceId": "<finance-cost>", "amount": 4975.00, "type": "DEBIT", "name": "Provision discount unwinding — Q1 2025" },
204
+ { "accountResourceId": "<provision-liability>", "amount": 4975.00, "type": "CREDIT", "name": "Provision discount unwinding — Q1 2025" }
205
+ ]
206
+ }
207
+ ```
208
+
209
+ **Conditional:** Only if IAS 37 provisions exist with a discounting component. Most simple SMBs won't have these. Common in businesses with lease restoration obligations or long-term warranty commitments.
210
+
211
+ ---
212
+
213
+ ## Phase 7: Quarterly Verification
214
+
215
+ Run the standard period verification (see `references/building-blocks.md` — Period Verification Pattern) for the full quarter, plus these quarterly-specific checks.
216
+
217
+ ### Standard verification (full quarter)
218
+
219
+ ```
220
+ POST /generate-reports/trial-balance
221
+ { "startDate": "2025-01-01", "endDate": "2025-03-31" }
222
+ ```
223
+
224
+ ```
225
+ POST /generate-reports/profit-and-loss
226
+ { "primarySnapshotDate": "2025-03-31", "secondarySnapshotDate": "2025-01-01" }
227
+ ```
228
+
229
+ ```
230
+ POST /generate-reports/balance-sheet
231
+ { "primarySnapshotDate": "2025-03-31" }
232
+ ```
233
+
234
+ ### Quarterly-specific checks
235
+
236
+ **GST reconciliation:**
237
+ - Tax ledger output tax total = sum of GST on all sales invoices for Q1
238
+ - Tax ledger input tax total = sum of GST on all purchase bills (less blocked items) for Q1
239
+ - Net GST payable/refundable per tax ledger matches the amount on the GST return form
240
+ - If you already filed monthly VAT returns (PH), quarterly total should equal sum of the three monthly returns
241
+
242
+ **ECL provision balance:**
243
+ - Allowance for Doubtful Debts on the balance sheet matches the calculated ECL from Step Q2
244
+ - Bad Debt Expense on the P&L is reasonable relative to revenue
245
+
246
+ **Intercompany balance check (if multi-entity):**
247
+ - Entity A's intercompany receivable = Entity B's intercompany payable
248
+ - Net intercompany position across all entities = zero (eliminates on consolidation)
249
+
250
+ **Bonus accrual reasonableness:**
251
+ - Bonus Liability on the balance sheet = (monthly accrual x months elapsed) + any true-ups
252
+ - Bonus Expense on the P&L is proportional to the period (e.g., Q1 = ~25% of full-year estimate)
253
+
254
+ ---
255
+
256
+ ## Quarter-End Close Checklist (Quick Reference)
257
+
258
+ | # | Step | Phase | Conditional | Recipe/Calc |
259
+ |---|------|-------|-------------|-------------|
260
+ | 1–18 | Month 1 close (all steps) | Monthly | Always | See month-end-close.md |
261
+ | 1–18 | Month 2 close (all steps) | Monthly | Always | See month-end-close.md |
262
+ | 1–18 | Month 3 close (all steps) | Monthly | Always | See month-end-close.md |
263
+ | Q1 | GST/VAT filing preparation | Quarterly | Always (if GST-registered) | gst-vat-filing job |
264
+ | Q2 | ECL / bad debt provision review | Quarterly | Always | bad-debt-provision / `jaz calc ecl` |
265
+ | Q3 | Bonus accrual true-up | Quarterly | If bonus schemes exist | employee-accruals |
266
+ | Q4 | Intercompany reconciliation | Quarterly | If multi-entity | intercompany |
267
+ | Q5 | Provision unwinding | Quarterly | If IAS 37 provisions exist | provisions / `jaz calc provision` |
268
+ | V | Quarterly verification | Verification | Always | — |
@@ -0,0 +1,354 @@
1
+ # Add-Backs Classification Guide
2
+
3
+ How to identify, classify, and quantify non-deductible expenses for the Singapore CIT computation. Each category maps to a field in `SgFormCsInput.addBacks`. For each item: what it is, why it is non-deductible, where to find it in Jaz, and what questions to ask the user.
4
+
5
+ **CLI:** `jaz tax sg-cs --input tax-data.json --json`
6
+
7
+ ---
8
+
9
+ ## What Are Add-Backs?
10
+
11
+ Add-backs are expenses recorded in the P&L that are **not deductible for tax purposes**. They are added back to accounting profit to arrive at the adjusted profit (Form C-S Box 1).
12
+
13
+ **The rule:** An expense is deductible only if it is (a) wholly and exclusively incurred in the production of income, (b) not capital in nature, and (c) not specifically prohibited by the Income Tax Act.
14
+
15
+ **Important:** Add-backs increase the adjusted profit and therefore increase the tax payable. Getting them right matters — over-adding inflates the tax bill, under-adding risks IRAS penalties.
16
+
17
+ ---
18
+
19
+ ## Category 1: Depreciation
20
+
21
+ **Input field:** `addBacks.depreciation`
22
+
23
+ **What it is:** Accounting depreciation charged on fixed assets (straight-line, reducing balance, etc.) as recorded in the P&L.
24
+
25
+ **Why non-deductible:** Accounting depreciation is not recognized for Singapore tax purposes. Instead, the taxpayer claims **capital allowances** (tax depreciation) under Sections 19, 19A, 19B, or 14Q of the Income Tax Act. Depreciation is added back; CA is claimed separately.
26
+
27
+ **Where to find it in Jaz:**
28
+
29
+ | Source | API Endpoint |
30
+ |--------|-------------|
31
+ | P&L depreciation expense line | `POST /api/v1/generate-reports/profit-and-loss` |
32
+ | FA summary total depreciation | `POST /api/v1/generate-reports/fixed-assets-summary` |
33
+ | FA reconciliation depreciation | `POST /api/v1/generate-reports/fixed-assets-recon-summary` |
34
+
35
+ **GL keywords:** "Depreciation", "Depreciation Expense", "Dep'n"
36
+
37
+ **Decision tree:**
38
+ 1. Is there a depreciation expense on the P&L? --> If yes, add back the full amount.
39
+ 2. Does the FA summary depreciation match the P&L? --> If no, investigate. Manual depreciation journals may exist.
40
+ 3. Is there any depreciation that was NOT posted through the FA register? --> Check for manual journal entries to depreciation accounts.
41
+
42
+ **Questions to ask:** None required. Depreciation is ALWAYS added back in full. No exceptions.
43
+
44
+ ---
45
+
46
+ ## Category 2: Amortization
47
+
48
+ **Input field:** `addBacks.amortization`
49
+
50
+ **What it is:** Amortization of intangible assets (goodwill, software, patents, trademarks) charged through the P&L.
51
+
52
+ **Why non-deductible:** Like depreciation, accounting amortization is not a tax deduction. Intangible assets may qualify for capital allowances under Section 19B (IP) if they meet the criteria. The amortization is added back; any qualifying CA is claimed separately.
53
+
54
+ **GL keywords:** "Amortization", "Amortisation", "Intangible", "Goodwill Impairment"
55
+
56
+ **Decision tree:**
57
+ 1. Is there an amortization expense on the P&L? --> If yes, add back the full amount.
58
+ 2. Does the intangible asset qualify for S19B CA? --> If yes, claim CA separately in the capital allowances section.
59
+ 3. Is this goodwill amortization from a business acquisition? --> Goodwill does NOT qualify for S19B. Add back with no CA offset.
60
+
61
+ **Questions to ask:** "Is this amortization for a qualifying intellectual property right (patent, trademark, copyright, registered design, software license)? Or is it goodwill?"
62
+
63
+ ---
64
+
65
+ ## Category 3: ROU Depreciation (IFRS 16)
66
+
67
+ **Input field:** `addBacks.rouDepreciation`
68
+
69
+ **What it is:** Depreciation of right-of-use assets recognized under IFRS 16 for operating leases (office leases, equipment leases, vehicle leases).
70
+
71
+ **Why non-deductible:** IFRS 16 changed lease accounting — operating leases are now capitalized on the balance sheet as ROU assets and depreciated. For tax purposes, IRAS still follows the pre-IFRS 16 treatment: the actual lease payments are the deductible expense, not the ROU depreciation. The ROU depreciation is added back, and the actual lease payments are deducted.
72
+
73
+ **GL keywords:** "Right-of-Use", "ROU", "Lease Depreciation", "Operating Lease Depreciation"
74
+
75
+ **Decision tree:**
76
+ 1. Does the P&L show ROU depreciation? --> If yes, add back the full amount.
77
+ 2. What are the actual lease payments for the period? --> Deduct via `deductions.actualLeasePayments`.
78
+ 3. Is there also lease interest? --> Add back via `addBacks.leaseInterest` (Category 4).
79
+
80
+ **Questions to ask:** "Do you account for operating leases under IFRS 16? If so, what are the actual cash lease payments for the year?"
81
+
82
+ **Tip:** The net tax effect of IFRS 16 reversal is usually small (add back ROU dep + lease interest, deduct actual payments). But you must do the reversal — simply ignoring it is technically non-compliant.
83
+
84
+ ---
85
+
86
+ ## Category 4: Lease Interest (IFRS 16)
87
+
88
+ **Input field:** `addBacks.leaseInterest`
89
+
90
+ **What it is:** Interest expense on the lease liability recognized under IFRS 16. This is the "unwinding" of the discount on the lease liability — a finance cost in the P&L that represents the time value of money component of the lease.
91
+
92
+ **Why non-deductible:** Same as Category 3 — IRAS does not recognize IFRS 16 lease accounting for tax. The finance cost is added back; the actual lease payments are the deductible amount.
93
+
94
+ **GL keywords:** "Lease Interest", "Lease Liability Interest", "Finance Cost - Leases", "Interest on Lease Liabilities"
95
+
96
+ **Decision tree:**
97
+ 1. Does the P&L show interest on lease liabilities? --> If yes, add back the full amount.
98
+ 2. Is this already included in a broader "Finance Costs" line? --> Separate the lease interest from other interest (bank loans, etc.). Only lease interest is added back.
99
+
100
+ **Questions to ask:** "Can you confirm the interest expense breakdown? I need to separate IFRS 16 lease interest from bank loan interest and other finance costs."
101
+
102
+ ---
103
+
104
+ ## Category 5: General Provisions
105
+
106
+ **Input field:** `addBacks.generalProvisions`
107
+
108
+ **What it is:** Provisions based on general estimates rather than specific identified events. These include expected credit losses (ECL) under IFRS 9, general warranty provisions, restructuring provisions where costs are not yet incurred, and any "just in case" reserves.
109
+
110
+ **Why non-deductible:** A general provision is an estimate of a future cost that has not yet been incurred. IRAS requires that the expense be "actually incurred" to be deductible. A specific bad debt write-off (where you can name the debtor and the amount is confirmed uncollectible) IS deductible. A general ECL provision (percentage-based estimate across the whole receivable book) is NOT.
111
+
112
+ **GL keywords:** "Provision", "ECL", "Expected Credit Loss", "Allowance for Doubtful", "Bad Debt Provision", "Warranty Provision", "Restructuring Provision"
113
+
114
+ **Decision tree:**
115
+ 1. Is this a specific write-off of a named receivable? --> Deductible. Do NOT add back.
116
+ 2. Is this a general/statistical provision (ECL model, percentage-based)? --> Non-deductible. Add back.
117
+ 3. Is this a reversal of a prior general provision? --> Was it added back in the prior year? If yes, the reversal should be deducted. Consult prior-year tax computation.
118
+ 4. Is this a warranty provision? --> If general (estimated % of sales), add back. If specific (known warranty claim settled), deductible.
119
+ 5. Is this a restructuring provision? --> If costs are not yet incurred, add back. If settlement amounts are confirmed and paid, deductible.
120
+
121
+ **Questions to ask:** "For each provision on the P&L, is this a general estimate or a specific identified amount? For bad debts specifically — are these actual write-offs of named receivables, or ECL model adjustments?"
122
+
123
+ **Common mistake:** Adding back ALL bad debt expense. Only general provisions are added back. Specific write-offs of identified uncollectible amounts are deductible.
124
+
125
+ ---
126
+
127
+ ## Category 6: Donations
128
+
129
+ **Input field:** `addBacks.donations`
130
+
131
+ **What it is:** Donations to approved Institutions of a Public Character (IPCs). These are added back from the P&L and then claimed at 250% as an enhanced deduction.
132
+
133
+ **Why added back (not why non-deductible):** Donations ARE deductible, but at an enhanced rate of 250% (not 100%). The P&L records the actual donation amount. For the tax computation: add back 100%, then claim 250% via the enhanced deductions section. The net effect is a 150% additional deduction.
134
+
135
+ **GL keywords:** "Donation", "Charitable Contribution", "Community Chest"
136
+
137
+ **Decision tree:**
138
+ 1. Was the donation made to an approved IPC? --> If yes, add back the full amount AND set `enhancedDeductions.donations250Base` to the same amount.
139
+ 2. Was it a non-IPC donation (e.g., to an overseas charity)? --> Non-deductible and no 250% claim. Add back under `otherNonDeductible` instead.
140
+ 3. Was it a donation in kind (goods, not cash)? --> IPC donations in kind are valued at market value. Confirm the amount with the user.
141
+
142
+ **Questions to ask:** "Were these donations made to approved IPCs (Institutions of a Public Character)? Do you have the IPC tax deduction receipts?"
143
+
144
+ **Tip:** The IRAS website maintains a list of approved IPCs. If the user is unsure, they can check the receipt — IPC receipts state the tax deduction amount and the IPC registration number.
145
+
146
+ ---
147
+
148
+ ## Category 7: Entertainment
149
+
150
+ **Input field:** `addBacks.entertainment`
151
+
152
+ **What it is:** The non-deductible portion of entertainment expenses. Business entertainment (client meals, gifts, event hosting) is partially or fully non-deductible depending on the nature.
153
+
154
+ **Why non-deductible:** Entertainment expenses are deductible only if they are wholly and exclusively incurred in the production of income. IRAS takes a strict view: entertainment of business contacts is generally deductible, but the burden of proof is on the taxpayer. Many companies take a conservative position and add back a portion.
155
+
156
+ **GL keywords:** "Entertainment", "Meals", "Hospitality", "Client Entertainment", "Staff Entertainment", "Gifts"
157
+
158
+ **Classification detail:**
159
+
160
+ | Entertainment Type | Deductible? | Action |
161
+ |-------------------|------------|--------|
162
+ | Client entertainment (business meal with client) | Yes, if documented | Deductible — do not add back |
163
+ | Staff entertainment (team dinner, D&D) | Generally yes | Deductible — do not add back |
164
+ | Personal entertainment disguised as business | No | Add back |
165
+ | Gifts to clients (> $50/item) | Partial — case by case | Ask the user |
166
+ | Club membership fees | No | Add back |
167
+
168
+ **Decision tree:**
169
+ 1. What is the total entertainment expense on the P&L? --> Get the full amount.
170
+ 2. What portion is for genuine business entertainment with documentation? --> This portion is deductible.
171
+ 3. What portion is questionable or lacks documentation? --> Add back the non-deductible portion.
172
+ 4. Is there a company policy on entertainment deductibility? --> Many companies apply a blanket non-deductible percentage (e.g., 50%). Ask.
173
+
174
+ **Questions to ask:** "What percentage of entertainment expenses relates to business purposes with proper documentation? Does your company have a standard policy for the non-deductible portion (e.g., 25%, 50%)?"
175
+
176
+ ---
177
+
178
+ ## Category 8: Penalties and Fines
179
+
180
+ **Input field:** `addBacks.penalties`
181
+
182
+ **What it is:** Penalties, fines, and surcharges imposed by government or regulatory bodies.
183
+
184
+ **Why non-deductible:** Penalties and fines are not incurred in the production of income. They are personal to the company as a consequence of non-compliance. This includes: IRAS tax penalties, ACRA late filing penalties, NEA environmental fines, MOM safety fines, traffic fines, customs penalties.
185
+
186
+ **GL keywords:** "Penalty", "Fine", "Surcharge", "Late Fee", "Composition Fine", "Court Fine"
187
+
188
+ **Decision tree:**
189
+ 1. Is this a government or regulatory penalty/fine? --> Always non-deductible. Add back.
190
+ 2. Is this a commercial penalty (e.g., late payment interest to a supplier)? --> Usually deductible as it is incurred in the ordinary course of business.
191
+ 3. Is this a contractual liquidated damages payment? --> Deductible if it is a genuine business expense.
192
+
193
+ **Questions to ask:** "Are these penalties from government authorities (IRAS, ACRA, MOM, etc.) or commercial penalties (supplier late fees, contract penalties)?"
194
+
195
+ **Tip:** Government penalties are always non-deductible regardless of size. Even a $50 ACRA late filing fee should be added back if you want a clean computation.
196
+
197
+ ---
198
+
199
+ ## Category 9: Private Car Expenses
200
+
201
+ **Input field:** `addBacks.privateCar`
202
+
203
+ **What it is:** Expenses related to S-plated (private) motor vehicles — lease payments, fuel, insurance, repairs, parking, ERP charges.
204
+
205
+ **Why non-deductible:** Under Section 15(1)(o) of the Income Tax Act, no deduction is allowed for expenses relating to a private passenger car (one that is not a Q-plated, goods vehicle, or excursion bus). This is a blanket prohibition — even if the car is used 100% for business.
206
+
207
+ **GL keywords:** "Motor Vehicle", "Car", "Vehicle Expense", "Fuel", "Petrol", "Parking", "ERP", "Road Tax", "Vehicle Insurance", "Car Lease"
208
+
209
+ **Decision tree:**
210
+ 1. Does the company own or lease motor vehicles? --> If yes, determine the plate type.
211
+ 2. Is the vehicle S-plated (private registration)? --> ALL expenses are non-deductible. Add back everything.
212
+ 3. Is the vehicle Q-plated (commercial) or a goods vehicle? --> Expenses are deductible. Do NOT add back.
213
+ 4. Is the vehicle an employee-benefit car (not company-owned)? --> Different treatment — may be a taxable benefit. Consult a tax agent.
214
+
215
+ **Questions to ask:** "Does the company have any motor vehicles? If so, are they S-plated (private) or Q-plated (commercial)? Please list all vehicle-related expenses."
216
+
217
+ **Tip:** Some companies split vehicle expenses between S-plated and Q-plated vehicles in the GL. If they do not, you need to ask the user to provide the breakdown.
218
+
219
+ ---
220
+
221
+ ## Category 10: Capital Expenditure on P&L
222
+
223
+ **Input field:** `addBacks.capitalExpOnPnl`
224
+
225
+ **What it is:** Capital items that were expensed on the P&L instead of being capitalized as fixed assets. These are one-off purchases of lasting benefit that should have been recorded as assets.
226
+
227
+ **Why non-deductible:** Capital expenditure is not deductible as a revenue expense. It should be claimed through capital allowances instead. If a $15,000 air-conditioning unit was expensed under "Repairs & Maintenance", it needs to be added back and then claimed as a CA.
228
+
229
+ **GL keywords:** Review "Repairs", "Maintenance", "Miscellaneous", "Office Expenses", "General Expenses" for large one-off items.
230
+
231
+ **Decision tree:**
232
+ 1. Are there any single expense items exceeding $5,000 in repair/maintenance/miscellaneous accounts? --> Review each.
233
+ 2. Is the expense for a new asset or an improvement that extends useful life? --> Capital in nature. Add back.
234
+ 3. Is the expense for routine maintenance or repair to restore original condition? --> Revenue in nature. Deductible. Do not add back.
235
+ 4. Does the item meet a capital allowance category? --> If yes, add back AND include in CA schedule.
236
+
237
+ **Questions to ask:** "I see a $X expense in [account name]. Is this a new purchase (capital) or a repair/maintenance of an existing item (revenue)?"
238
+
239
+ **Tip:** The $5,000 threshold is a practical guideline, not a legal rule. A $500 printer is capital in nature but immaterial. Most SMBs and tax agents apply a materiality threshold of $1,000-$5,000 for this review.
240
+
241
+ ---
242
+
243
+ ## Category 11: Unrealized FX Loss
244
+
245
+ **Input field:** `addBacks.unrealizedFxLoss`
246
+
247
+ **What it is:** Foreign exchange losses on the revaluation of foreign currency assets and liabilities at the balance sheet date that have not been settled (crystallized) in cash.
248
+
249
+ **Why non-deductible:** An unrealized FX loss is a paper loss — the underlying transaction has not been settled, so the loss has not been "incurred" in the IRAS sense. Only realized FX losses (from actual settlement of foreign currency transactions) are deductible.
250
+
251
+ **GL keywords:** "Unrealized", "Unrealised", "FX Loss", "Foreign Exchange Loss", "Exchange Difference", "Currency Revaluation"
252
+
253
+ **Decision tree:**
254
+ 1. Does the P&L show a foreign exchange loss? --> Investigate whether it is realized or unrealized.
255
+ 2. Was the loss created by a year-end revaluation of balances? --> Unrealized. Add back.
256
+ 3. Was the loss created by settling a foreign currency invoice at a different rate? --> Realized. Deductible. Do not add back.
257
+ 4. Is the FX loss account a single combined line (realized + unrealized)? --> Ask the user to separate them, or use Jaz FX revaluation journals to isolate the unrealized portion.
258
+
259
+ **Questions to ask:** "Does your FX loss account combine realized and unrealized amounts? Can you confirm the split? If you ran FX revaluation at year-end, the revaluation journal amount is the unrealized portion."
260
+
261
+ **Corresponding deduction:** Unrealized FX gains (`deductions.unrealizedFxGain`) are deducted for the same reason — not yet crystallized, not taxable.
262
+
263
+ ---
264
+
265
+ ## Category 12: Exempt Dividends
266
+
267
+ **Input field:** `addBacks.exemptDividends`
268
+
269
+ **What it is:** Dividend income received from Singapore-resident companies under the one-tier corporate tax system.
270
+
271
+ **Why non-taxable:** Under Section 13(26) of the Income Tax Act, one-tier dividends are exempt from tax in the hands of the recipient. The paying company has already been taxed on the underlying income. Adding back exempt dividends removes them from the adjusted profit so they are not taxed again.
272
+
273
+ **GL keywords:** "Dividend Income", "Dividend Received", "Investment Income"
274
+
275
+ **Decision tree:**
276
+ 1. Does the P&L show dividend income? --> If yes, determine the source.
277
+ 2. Is the dividend from a Singapore-incorporated company? --> One-tier exempt. Add back the full amount.
278
+ 3. Is the dividend from a foreign company? --> May or may not be exempt. Foreign-sourced dividends are exempt under Section 13(8) if certain conditions are met (headline tax rate >= 15% in the source country, income was subject to tax). If exempt, add back. If not exempt, do not add back. This may disqualify the company from Form C-S.
279
+ 4. Is the dividend from a REIT or unit trust? --> Different treatment. Consult a tax agent.
280
+
281
+ **Questions to ask:** "Are the dividends received from Singapore-resident companies (one-tier)? Or are they from foreign companies? If foreign, which country and were they subject to tax there?"
282
+
283
+ ---
284
+
285
+ ## Category 13: Other Non-Deductible
286
+
287
+ **Input field:** `addBacks.otherNonDeductible` (with `addBacks.otherDescription`)
288
+
289
+ **What it is:** A catch-all for non-deductible items that do not fit the 12 specific categories above.
290
+
291
+ **Common items in this category:**
292
+ - Pre-incorporation expenses (incurred before the company was incorporated)
293
+ - Political contributions
294
+ - Non-IPC donations (charitable donations to non-approved organizations)
295
+ - Gifts to directors/shareholders that are not employment-related
296
+ - Legal costs for capital transactions (e.g., share issuance, acquisition legal fees)
297
+ - Impairment losses on investments
298
+
299
+ **Decision tree:**
300
+ 1. Have you reviewed all 12 categories above? --> If yes and items remain, classify here.
301
+ 2. Is the expense "wholly and exclusively" for producing income? --> If no, add back.
302
+ 3. Is the expense capital in nature? --> If yes and not covered by CA, add back.
303
+ 4. Is the expense specifically prohibited by the ITA? --> If yes, add back.
304
+
305
+ **Questions to ask:** "Are there any other expenses you believe should not be tax-deductible? For example, pre-incorporation costs, political donations, or legal fees for capital transactions?"
306
+
307
+ **Always provide a description** in `addBacks.otherDescription` so the workpaper is auditable.
308
+
309
+ ---
310
+
311
+ ## Add-Back Summary Table
312
+
313
+ | # | Category | Input Field | Always? | Typical SMB Amount |
314
+ |---|----------|------------|---------|-------------------|
315
+ | 1 | Depreciation | `depreciation` | Always | $10K-$100K |
316
+ | 2 | Amortization | `amortization` | If intangibles exist | $0-$50K |
317
+ | 3 | ROU Depreciation | `rouDepreciation` | If IFRS 16 leases | $0-$50K |
318
+ | 4 | Lease Interest | `leaseInterest` | If IFRS 16 leases | $0-$10K |
319
+ | 5 | General Provisions | `generalProvisions` | If provisions charged | $0-$50K |
320
+ | 6 | Donations | `donations` | If IPC donations made | $0-$10K |
321
+ | 7 | Entertainment | `entertainment` | If entertainment costs | $0-$20K |
322
+ | 8 | Penalties & Fines | `penalties` | If penalties incurred | $0-$5K |
323
+ | 9 | Private Car | `privateCar` | If S-plated vehicles | $0-$30K |
324
+ | 10 | Capital Exp on P&L | `capitalExpOnPnl` | If found during review | $0-$20K |
325
+ | 11 | Unrealized FX Loss | `unrealizedFxLoss` | If FX reval performed | $0-$50K |
326
+ | 12 | Exempt Dividends | `exemptDividends` | If SG dividends received | $0-varies |
327
+ | 13 | Other | `otherNonDeductible` | Catch-all | $0-varies |
328
+
329
+ ---
330
+
331
+ ## Corresponding Deductions (Further Deductions)
332
+
333
+ When certain items are added back, a corresponding deduction may apply. The deductions are entered in `SgFormCsInput.deductions`:
334
+
335
+ | Add-Back | Corresponding Deduction | Field |
336
+ |----------|------------------------|-------|
337
+ | ROU Depreciation + Lease Interest | Actual lease payments | `deductions.actualLeasePayments` |
338
+ | Unrealized FX Loss | Unrealized FX Gain (if any) | `deductions.unrealizedFxGain` |
339
+ | Exempt Dividends | Already excluded via add-back | (no additional deduction needed) |
340
+ | Donations | 250% enhanced claim | `enhancedDeductions.donations250Base` |
341
+
342
+ ---
343
+
344
+ ## Practitioner Tips
345
+
346
+ **Work through every category, even if zero.** Set unused add-back fields to `0.00` explicitly. This makes the workpaper complete and auditable — it shows the preparer considered each category and determined it was not applicable.
347
+
348
+ **Depreciation is non-negotiable.** It is always the first and usually the largest add-back. If the P&L shows zero depreciation, verify — the company may not have any fixed assets, or depreciation may not have been posted (which is a bookkeeping error to flag).
349
+
350
+ **General provisions vs specific write-offs is the most common judgment call.** When in doubt, ask the user to describe the nature of the provision. If they say "we estimated X% of receivables might go bad" — that is a general provision (add back). If they say "ABC Pte Ltd went into liquidation and owes us $15,000" — that is a specific write-off (deductible).
351
+
352
+ **S-plated car expenses are a frequent IRAS audit target.** IRAS regularly checks that companies are not claiming tax deductions on private car expenses. Ensure the full amount is added back — including fuel, parking, ERP, insurance, and maintenance.
353
+
354
+ **Keep workpaper notes.** For each add-back category, record a one-line note explaining the source and reasoning. The `addBacks.otherDescription` field covers the "other" category, but you should also document the rationale in the computation narrative. The CLI `workings` output helps with this.