jaz-cli 2.6.0 → 2.8.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.
- package/assets/skills/api/SKILL.md +12 -2
- package/assets/skills/api/references/dependencies.md +3 -2
- package/assets/skills/api/references/endpoints.md +78 -0
- package/assets/skills/api/references/feature-glossary.md +4 -4
- package/assets/skills/api/references/field-map.md +17 -0
- package/assets/skills/api/references/full-api-surface.md +1 -1
- package/assets/skills/conversion/SKILL.md +1 -1
- package/assets/skills/jobs/SKILL.md +104 -0
- package/assets/skills/jobs/references/audit-prep.md +319 -0
- package/assets/skills/jobs/references/bank-recon.md +234 -0
- package/assets/skills/jobs/references/building-blocks.md +135 -0
- package/assets/skills/jobs/references/credit-control.md +273 -0
- package/assets/skills/jobs/references/fa-review.md +267 -0
- package/assets/skills/jobs/references/gst-vat-filing.md +250 -0
- package/assets/skills/jobs/references/month-end-close.md +308 -0
- package/assets/skills/jobs/references/payment-run.md +246 -0
- package/assets/skills/jobs/references/quarter-end-close.md +268 -0
- package/assets/skills/jobs/references/supplier-recon.md +330 -0
- package/assets/skills/jobs/references/year-end-close.md +341 -0
- package/assets/skills/transaction-recipes/SKILL.md +1 -1
- package/dist/__tests__/amortization.test.js +101 -0
- package/dist/__tests__/asset-disposal.test.js +249 -0
- package/dist/__tests__/blueprint.test.js +72 -0
- package/dist/__tests__/depreciation.test.js +125 -0
- package/dist/__tests__/ecl.test.js +134 -0
- package/dist/__tests__/fixed-deposit.test.js +214 -0
- package/dist/__tests__/fx-reval.test.js +115 -0
- package/dist/__tests__/jobs-audit-prep.test.js +125 -0
- package/dist/__tests__/jobs-bank-recon.test.js +108 -0
- package/dist/__tests__/jobs-credit-control.test.js +98 -0
- package/dist/__tests__/jobs-fa-review.test.js +104 -0
- package/dist/__tests__/jobs-gst-vat.test.js +113 -0
- package/dist/__tests__/jobs-month-end.test.js +162 -0
- package/dist/__tests__/jobs-payment-run.test.js +106 -0
- package/dist/__tests__/jobs-quarter-end.test.js +155 -0
- package/dist/__tests__/jobs-supplier-recon.test.js +115 -0
- package/dist/__tests__/jobs-validate.test.js +181 -0
- package/dist/__tests__/jobs-year-end.test.js +149 -0
- package/dist/__tests__/lease.test.js +96 -0
- package/dist/__tests__/loan.test.js +80 -0
- package/dist/__tests__/provision.test.js +141 -0
- package/dist/__tests__/validate.test.js +81 -0
- package/dist/calc/asset-disposal.js +17 -13
- package/dist/calc/fixed-deposit.js +26 -17
- package/dist/calc/lease.js +7 -3
- package/dist/commands/jobs.js +184 -0
- package/dist/index.js +2 -0
- package/dist/jobs/audit-prep.js +211 -0
- package/dist/jobs/bank-recon.js +163 -0
- package/dist/jobs/credit-control.js +126 -0
- package/dist/jobs/fa-review.js +121 -0
- package/dist/jobs/format.js +102 -0
- package/dist/jobs/gst-vat.js +187 -0
- package/dist/jobs/month-end.js +232 -0
- package/dist/jobs/payment-run.js +199 -0
- package/dist/jobs/quarter-end.js +135 -0
- package/dist/jobs/supplier-recon.js +132 -0
- package/dist/jobs/types.js +36 -0
- package/dist/jobs/validate.js +115 -0
- package/dist/jobs/year-end.js +153 -0
- package/dist/types/index.js +2 -1
- package/package.json +5 -2
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
# Fixed Asset Review
|
|
2
|
+
|
|
3
|
+
Review the fixed asset register for accuracy, identify assets requiring disposal or write-off, process disposals, and reconcile the register to the trial balance. This is a housekeeping job — ensuring the FA register reflects reality.
|
|
4
|
+
|
|
5
|
+
**CLI:** `jaz jobs fa-review [--json]`
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## When to Do This
|
|
10
|
+
|
|
11
|
+
- **Annually (minimum):** As part of year-end close or audit preparation
|
|
12
|
+
- **Quarterly:** For growing businesses that acquire assets frequently
|
|
13
|
+
- **Ad-hoc:** After a major event (office move, equipment upgrade, insurance claim)
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Phase 1: Take Stock
|
|
18
|
+
|
|
19
|
+
### Step 1: List all fixed assets
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
POST /api/v1/fixed-assets/search
|
|
23
|
+
{
|
|
24
|
+
"filter": { "status": { "eq": "ACTIVE" } },
|
|
25
|
+
"sort": { "sortBy": ["purchaseDate"], "order": "ASC" },
|
|
26
|
+
"limit": 1000
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**What you get:** Every active fixed asset with `name`, `purchaseDate`, `purchaseAmount`, `bookValueAmount`, `depreciationMethod`, `typeName`, and `status`.
|
|
31
|
+
|
|
32
|
+
### Step 2: List fixed asset types
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
POST /api/v1/fixed-assets-types/search
|
|
36
|
+
{
|
|
37
|
+
"filter": {},
|
|
38
|
+
"sort": { "sortBy": ["typeName"], "order": "ASC" },
|
|
39
|
+
"limit": 100
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Asset types define the default depreciation method and useful life. Common types for SMBs:
|
|
44
|
+
|
|
45
|
+
| Type | Typical Useful Life | Depreciation | Examples |
|
|
46
|
+
|------|-------------------|--------------|----------|
|
|
47
|
+
| **Office Equipment** | 5-7 years | Straight-line | Desks, chairs, shelving |
|
|
48
|
+
| **Computer Equipment** | 3-5 years | Straight-line or DDB | Laptops, servers, monitors |
|
|
49
|
+
| **Motor Vehicles** | 5-8 years | Straight-line | Delivery vans, company cars |
|
|
50
|
+
| **Furniture & Fittings** | 7-10 years | Straight-line | Reception area, meeting rooms |
|
|
51
|
+
| **Leasehold Improvements** | Lease term | Straight-line | Renovation, fit-out |
|
|
52
|
+
| **Plant & Machinery** | 5-15 years | Straight-line or DDB | Production equipment |
|
|
53
|
+
| **Software** | 3-5 years | Straight-line | Licensed software, ERP |
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Phase 2: Review
|
|
58
|
+
|
|
59
|
+
Work through the asset list and classify each asset.
|
|
60
|
+
|
|
61
|
+
### Step 3: Identify fully depreciated assets still in use
|
|
62
|
+
|
|
63
|
+
Search for assets where book value equals zero (or equals salvage value):
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
POST /api/v1/fixed-assets/search
|
|
67
|
+
{
|
|
68
|
+
"filter": {
|
|
69
|
+
"status": { "eq": "ACTIVE" },
|
|
70
|
+
"bookValueAmount": { "eq": 0 }
|
|
71
|
+
},
|
|
72
|
+
"sort": { "sortBy": ["purchaseDate"], "order": "ASC" },
|
|
73
|
+
"limit": 1000
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**What to do:**
|
|
78
|
+
- If the asset is still in use → no action required. It stays on the register at zero NBV. No further depreciation is posted.
|
|
79
|
+
- If the asset is no longer in use → dispose (Phase 3)
|
|
80
|
+
|
|
81
|
+
**Note:** Fully depreciated assets still in use should be reviewed for impairment reversal under IAS 36 if their recoverable amount is significantly higher than carrying amount (zero). In practice, most SMBs don't reverse — the asset just sits at zero until disposal.
|
|
82
|
+
|
|
83
|
+
### Step 4: Identify assets no longer in use
|
|
84
|
+
|
|
85
|
+
This is a physical verification step — walk through the office/warehouse and compare the register to reality. Common findings:
|
|
86
|
+
|
|
87
|
+
- **Thrown away but not written off:** Old laptops, broken equipment disposed of without updating the register
|
|
88
|
+
- **Lost or stolen:** Equipment that can't be located
|
|
89
|
+
- **Returned under warranty:** Asset was replaced but the old entry wasn't removed
|
|
90
|
+
- **Sold informally:** Asset was sold (e.g., to an employee) but the sale wasn't recorded
|
|
91
|
+
|
|
92
|
+
**Flag these for disposal in Phase 3.**
|
|
93
|
+
|
|
94
|
+
### Step 5: Review depreciation methods
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
POST /api/v1/fixed-assets/search
|
|
98
|
+
{
|
|
99
|
+
"filter": { "status": { "eq": "ACTIVE" } },
|
|
100
|
+
"sort": { "sortBy": ["typeName"], "order": "ASC" },
|
|
101
|
+
"limit": 1000
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Group by asset type and verify:
|
|
106
|
+
- All assets of the same type use the same depreciation method (consistency principle)
|
|
107
|
+
- Useful lives are reasonable for the asset type
|
|
108
|
+
- No assets have an obviously wrong method (e.g., a building on 3-year straight-line)
|
|
109
|
+
|
|
110
|
+
**Conditional:** Only act on this if you find inconsistencies. Changing depreciation method mid-life is a change in accounting estimate (IAS 8) — apply prospectively, not retrospectively.
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Phase 3: Disposals
|
|
115
|
+
|
|
116
|
+
### Step 6: Sale disposals
|
|
117
|
+
|
|
118
|
+
When an asset is sold, record the disposal. The calculator computes accumulated depreciation to disposal date, net book value, and gain/loss.
|
|
119
|
+
|
|
120
|
+
**Calculator:** `jaz calc asset-disposal`
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
jaz calc asset-disposal --cost 50000 --salvage 5000 --life 5 --acquired 2022-01-01 --disposed 2025-06-15 --proceeds 12000
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**Recipe:** `asset-disposal` — see `transaction-recipes/references/asset-disposal.md` for the full journal pattern.
|
|
127
|
+
|
|
128
|
+
Record the disposal journal:
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
POST /api/v1/journals
|
|
132
|
+
{
|
|
133
|
+
"saveAsDraft": false,
|
|
134
|
+
"reference": "FA-DISP-001",
|
|
135
|
+
"valueDate": "2025-06-15",
|
|
136
|
+
"journalEntries": [
|
|
137
|
+
{ "accountResourceId": "<bank-account-uuid>", "amount": 12000.00, "type": "DEBIT", "name": "Proceeds from sale of Delivery Van VH-1234" },
|
|
138
|
+
{ "accountResourceId": "<accumulated-depreciation-uuid>", "amount": 31500.00, "type": "DEBIT", "name": "Clear accumulated depreciation — Delivery Van VH-1234" },
|
|
139
|
+
{ "accountResourceId": "<loss-on-disposal-uuid>", "amount": 6500.00, "type": "DEBIT", "name": "Loss on disposal — Delivery Van VH-1234" },
|
|
140
|
+
{ "accountResourceId": "<fixed-asset-cost-uuid>", "amount": 50000.00, "type": "CREDIT", "name": "Remove cost — Delivery Van VH-1234" }
|
|
141
|
+
]
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Then mark the asset as sold in the FA register:
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
POST /api/v1/mark-as-sold/fixed-assets
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Step 7: Scrap / write-off disposals
|
|
152
|
+
|
|
153
|
+
When an asset is scrapped (no sale proceeds), the full NBV becomes a loss.
|
|
154
|
+
|
|
155
|
+
**Calculator:**
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
jaz calc asset-disposal --cost 50000 --salvage 5000 --life 5 --acquired 2022-01-01 --disposed 2025-06-15 --proceeds 0
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Record the write-off journal:
|
|
162
|
+
|
|
163
|
+
```
|
|
164
|
+
POST /api/v1/journals
|
|
165
|
+
{
|
|
166
|
+
"saveAsDraft": false,
|
|
167
|
+
"reference": "FA-WRITEOFF-001",
|
|
168
|
+
"valueDate": "2025-06-15",
|
|
169
|
+
"journalEntries": [
|
|
170
|
+
{ "accountResourceId": "<accumulated-depreciation-uuid>", "amount": 31500.00, "type": "DEBIT", "name": "Clear accumulated depreciation — Old Server Rack" },
|
|
171
|
+
{ "accountResourceId": "<loss-on-disposal-uuid>", "amount": 18500.00, "type": "DEBIT", "name": "Write-off loss — Old Server Rack" },
|
|
172
|
+
{ "accountResourceId": "<fixed-asset-cost-uuid>", "amount": 50000.00, "type": "CREDIT", "name": "Remove cost — Old Server Rack" }
|
|
173
|
+
]
|
|
174
|
+
}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
Then mark the asset as discarded:
|
|
178
|
+
|
|
179
|
+
```
|
|
180
|
+
POST /api/v1/discard-fixed-assets/{assetResourceId}
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## Phase 4: Verification
|
|
186
|
+
|
|
187
|
+
### Step 8: FA register reconciliation
|
|
188
|
+
|
|
189
|
+
```
|
|
190
|
+
POST /api/v1/generate-reports/fixed-assets-summary
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
```
|
|
194
|
+
POST /api/v1/generate-reports/fixed-assets-recon-summary
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
The reconciliation report shows:
|
|
198
|
+
|
|
199
|
+
```
|
|
200
|
+
Opening NBV (start of period)
|
|
201
|
+
+ Additions (new assets acquired)
|
|
202
|
+
- Disposals (sold or scrapped)
|
|
203
|
+
- Depreciation (period charge)
|
|
204
|
+
= Closing NBV (end of period)
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### Step 9: Reconcile to trial balance
|
|
208
|
+
|
|
209
|
+
```
|
|
210
|
+
POST /api/v1/generate-reports/trial-balance
|
|
211
|
+
{ "startDate": "2025-01-01", "endDate": "2025-12-31" }
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
**What must tie:**
|
|
215
|
+
|
|
216
|
+
| FA Register | Trial Balance Account |
|
|
217
|
+
|------------|----------------------|
|
|
218
|
+
| Total cost (all active assets) | Fixed Assets (at cost) — total of all FA cost accounts |
|
|
219
|
+
| Total accumulated depreciation | Accumulated Depreciation — total of all accum. dep. accounts |
|
|
220
|
+
| Closing NBV | Cost minus Accumulated Depreciation = Net Book Value |
|
|
221
|
+
| Period depreciation charge | Depreciation Expense on P&L |
|
|
222
|
+
| Gain/Loss on disposal | Other Income / Other Expense on P&L |
|
|
223
|
+
|
|
224
|
+
If the register and trial balance don't tie, investigate:
|
|
225
|
+
- Manual journal entries to FA accounts that bypassed the register
|
|
226
|
+
- FA register entries that didn't generate journals (system issue)
|
|
227
|
+
- Disposed assets not yet removed from the register
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## FA Review Checklist (Quick Reference)
|
|
232
|
+
|
|
233
|
+
| # | Step | Phase | What |
|
|
234
|
+
|---|------|-------|------|
|
|
235
|
+
| 1 | List all fixed assets | Take stock | Search active assets |
|
|
236
|
+
| 2 | List asset types | Take stock | Review type definitions |
|
|
237
|
+
| 3 | Fully depreciated assets | Review | Identify NBV = 0 assets |
|
|
238
|
+
| 4 | Assets no longer in use | Review | Physical verification |
|
|
239
|
+
| 5 | Depreciation methods | Review | Consistency check |
|
|
240
|
+
| 6 | Sale disposals | Dispose | Calculator + journal + mark as sold |
|
|
241
|
+
| 7 | Scrap / write-off | Dispose | Calculator + journal + discard |
|
|
242
|
+
| 8 | FA register report | Verify | Reconciliation summary |
|
|
243
|
+
| 9 | Reconcile to trial balance | Verify | FA register = TB accounts |
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## Tips for SMBs
|
|
248
|
+
|
|
249
|
+
**Keep a low-value asset threshold.** Items under $1,000 (or your chosen threshold) should be expensed immediately, not capitalized as fixed assets. This reduces register clutter and depreciation complexity. Common SG practice is $1,000-$5,000 depending on company size.
|
|
250
|
+
|
|
251
|
+
**Tag your assets.** Use physical asset tags (numbered stickers) and record the tag number as the asset reference in Jaz. This makes physical verification much faster.
|
|
252
|
+
|
|
253
|
+
**Review useful lives annually.** If your "3-year laptop" is still going strong at year 5, the useful life estimate was wrong. Adjust prospectively (IAS 8) — extend the remaining life and recalculate monthly depreciation.
|
|
254
|
+
|
|
255
|
+
**Depreciation for tax (SG-specific):**
|
|
256
|
+
- IRAS allows 1-year write-off for assets costing <= S$5,000 (Section 19A(10A))
|
|
257
|
+
- IRAS allows 3-year accelerated write-off for all other assets (Section 19A)
|
|
258
|
+
- Book depreciation (straight-line over useful life) and tax depreciation (accelerated) can differ — track the deferred tax difference
|
|
259
|
+
|
|
260
|
+
**Insurance coverage check.** While reviewing assets, verify that your business insurance covers the replacement cost of active assets. Fully depreciated assets may still have significant replacement value — a 5-year-old server at $0 NBV still costs $15,000 to replace.
|
|
261
|
+
|
|
262
|
+
**Common FA accounts in Jaz:**
|
|
263
|
+
- Fixed Assets (at cost) — typically one sub-account per asset type
|
|
264
|
+
- Accumulated Depreciation — mirror sub-accounts for each asset type
|
|
265
|
+
- Depreciation Expense — on P&L, may be split by asset type for reporting
|
|
266
|
+
- Gain on Disposal — Other Income
|
|
267
|
+
- Loss on Disposal — Other Expense
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
# GST/VAT Filing Preparation
|
|
2
|
+
|
|
3
|
+
Prepare your GST/VAT return by generating the tax ledger, reviewing output and input tax, identifying errors, and producing the filing summary. This job does NOT file the return for you — it produces the numbers and supporting detail you need to file accurately via IRAS myTax Portal (SG) or the equivalent authority.
|
|
4
|
+
|
|
5
|
+
**CLI:** `jaz jobs gst-vat --period 2025-Q1 [--json]`
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Background: SG GST Basics
|
|
10
|
+
|
|
11
|
+
| Item | Detail |
|
|
12
|
+
|------|--------|
|
|
13
|
+
| **Current rate** | 9% (effective Jan 1, 2024) |
|
|
14
|
+
| **Filing frequency** | Quarterly (most SMBs) or monthly (if approved) |
|
|
15
|
+
| **Due date** | 1 month after the end of the quarter (e.g., Q1 Jan-Mar due Apr 30) |
|
|
16
|
+
| **Return form** | GST F5 (standard) or GST F7 (group registration) |
|
|
17
|
+
| **Penalty** | 5% surcharge on unpaid tax + $200/month late filing penalty |
|
|
18
|
+
|
|
19
|
+
**Tax codes in Jaz (SG defaults):**
|
|
20
|
+
|
|
21
|
+
| Code | Description | Rate |
|
|
22
|
+
|------|-------------|------|
|
|
23
|
+
| SR | Standard-Rated Supplies (output tax) | 9% |
|
|
24
|
+
| TX | Taxable Purchases (input tax) | 9% |
|
|
25
|
+
| ZR | Zero-Rated Supplies | 0% |
|
|
26
|
+
| ES | Exempt Supplies | 0% |
|
|
27
|
+
| OS | Out-of-Scope Supplies | 0% |
|
|
28
|
+
| EP | Exempt Purchases | 0% |
|
|
29
|
+
| IM | Import of Goods (subject to GST) | 9% |
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Phase 1: Generate the Tax Ledger
|
|
34
|
+
|
|
35
|
+
The tax ledger is your primary working paper. It lists every transaction that has a tax component.
|
|
36
|
+
|
|
37
|
+
### Step 1: Generate tax ledger for the quarter
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
POST /api/v1/generate-reports/vat-ledger
|
|
41
|
+
{ "startDate": "2025-01-01", "endDate": "2025-03-31" }
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**What you get:** Every invoice, bill, credit note, and journal with a tax profile attached — grouped by tax code, showing gross amount, tax amount, and net amount.
|
|
45
|
+
|
|
46
|
+
### Step 2: Export for offline review (optional)
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
POST /api/v1/data-exports/vat-ledger
|
|
50
|
+
{ "startDate": "2025-01-01", "endDate": "2025-03-31" }
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
This gives you the Excel/CSV version for spreadsheet review.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Phase 2: Review Output Tax (Sales GST Collected)
|
|
58
|
+
|
|
59
|
+
Output tax is the GST you charged customers on your sales. This is what you owe IRAS.
|
|
60
|
+
|
|
61
|
+
### Step 3: Cross-reference invoices to tax ledger
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
POST /api/v1/invoices/search
|
|
65
|
+
{
|
|
66
|
+
"filter": {
|
|
67
|
+
"status": { "eq": "POSTED" },
|
|
68
|
+
"valueDate": { "between": ["2025-01-01", "2025-03-31"] }
|
|
69
|
+
},
|
|
70
|
+
"sort": { "sortBy": ["valueDate"], "order": "ASC" },
|
|
71
|
+
"limit": 1000
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**What to check:**
|
|
76
|
+
- Total standard-rated sales (SR) on the tax ledger matches total invoiced amount at 9%
|
|
77
|
+
- Zero-rated sales (ZR) have proper documentation (export evidence, international service proof)
|
|
78
|
+
- Exempt sales (ES) are correctly classified (financial services, residential property, etc.)
|
|
79
|
+
- Customer credit notes are deducted from output tax (they reduce your GST liability)
|
|
80
|
+
|
|
81
|
+
### Step 4: Check for missing tax profiles
|
|
82
|
+
|
|
83
|
+
Look for invoices with no tax profile — these won't appear on the tax ledger and could mean under-declared output tax.
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
POST /api/v1/cashflow-transactions/search
|
|
87
|
+
{
|
|
88
|
+
"filter": {
|
|
89
|
+
"businessTransactionType": { "eq": "SALE" },
|
|
90
|
+
"valueDate": { "between": ["2025-01-01", "2025-03-31"] }
|
|
91
|
+
},
|
|
92
|
+
"sort": { "sortBy": ["valueDate"], "order": "ASC" },
|
|
93
|
+
"limit": 1000
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Compare the count and total to the invoices search above. Discrepancies may indicate missing tax codes.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Phase 3: Review Input Tax (Purchases GST Paid)
|
|
102
|
+
|
|
103
|
+
Input tax is the GST you paid on business purchases. This is what you can claim back from IRAS.
|
|
104
|
+
|
|
105
|
+
### Step 5: Cross-reference bills to tax ledger
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
POST /api/v1/bills/search
|
|
109
|
+
{
|
|
110
|
+
"filter": {
|
|
111
|
+
"status": { "eq": "POSTED" },
|
|
112
|
+
"valueDate": { "between": ["2025-01-01", "2025-03-31"] }
|
|
113
|
+
},
|
|
114
|
+
"sort": { "sortBy": ["valueDate"], "order": "ASC" },
|
|
115
|
+
"limit": 1000
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**What to check:**
|
|
120
|
+
- Total taxable purchases (TX) on the tax ledger matches total bills with 9% GST
|
|
121
|
+
- Supplier credit notes are deducted from input tax claims
|
|
122
|
+
- No claims on exempt purchases (EP) — these should not have claimable GST
|
|
123
|
+
|
|
124
|
+
### Step 6: Identify blocked input tax (SG-specific)
|
|
125
|
+
|
|
126
|
+
Certain purchases have GST that CANNOT be claimed even though the supplier charged it. These are "blocked" under the GST Act:
|
|
127
|
+
|
|
128
|
+
| Blocked Category | Examples |
|
|
129
|
+
|-----------------|----------|
|
|
130
|
+
| **Club subscription fees** | Country clubs, social clubs |
|
|
131
|
+
| **Medical/accident insurance** | Employee medical insurance (unless contractual) |
|
|
132
|
+
| **Medical expenses** | GP visits, dental, specialist |
|
|
133
|
+
| **Family benefits** | Housing, school fees, holiday passage |
|
|
134
|
+
| **Motor vehicle expenses** | Purchase, maintenance, fuel for non-commercial vehicles |
|
|
135
|
+
| **Entertainment** | Client entertainment, staff entertainment (> $50/person) |
|
|
136
|
+
|
|
137
|
+
**Conditional:** Only relevant if your business has expenses in these categories. Most SMBs will have at least motor vehicle and entertainment expenses to review.
|
|
138
|
+
|
|
139
|
+
**Action:** Ensure blocked input tax items are coded to a non-claimable tax code (EP or no tax profile), NOT TX. If they're coded as TX, they'll inflate your input tax claim and trigger IRAS scrutiny.
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## Phase 4: Error Checks
|
|
144
|
+
|
|
145
|
+
### Step 7: Check for common GST errors
|
|
146
|
+
|
|
147
|
+
Run these checks against your tax ledger data:
|
|
148
|
+
|
|
149
|
+
**1. Zero-rated sales without documentation:**
|
|
150
|
+
- Every ZR sale needs export evidence (bill of lading, airway bill) or proof of international service
|
|
151
|
+
- IRAS can reclassify ZR to SR (9%) on audit if documentation is missing
|
|
152
|
+
|
|
153
|
+
**2. Exempt supplies miscoded as standard-rated:**
|
|
154
|
+
- Financial services, residential rental, sale of residential property are exempt (ES)
|
|
155
|
+
- If coded as SR, you've over-declared output tax and customers were overcharged
|
|
156
|
+
|
|
157
|
+
**3. Input tax claimed on non-business purchases:**
|
|
158
|
+
- Personal purchases through the business account with GST claimed
|
|
159
|
+
- Capital items used partly for non-business purposes (apportion the claim)
|
|
160
|
+
|
|
161
|
+
**4. Timing errors:**
|
|
162
|
+
- Invoice dated in Q1 but goods/services delivered in Q2 (tax point = earlier of invoice date or payment date)
|
|
163
|
+
- Supplier bill received in Q2 but dated Q1 — claim in the quarter of the tax invoice date
|
|
164
|
+
|
|
165
|
+
**5. FX transactions:**
|
|
166
|
+
- GST on FX transactions is calculated on the SGD equivalent at the transaction date rate
|
|
167
|
+
- Verify FX invoices/bills show the correct SGT amount for GST purposes
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## Phase 5: GST Return Summary
|
|
172
|
+
|
|
173
|
+
### Step 8: Compile the GST F5 box mapping
|
|
174
|
+
|
|
175
|
+
Map your tax ledger totals to the IRAS GST F5 return boxes:
|
|
176
|
+
|
|
177
|
+
| Box | Description | Source |
|
|
178
|
+
|-----|-------------|--------|
|
|
179
|
+
| **Box 1** | Total value of standard-rated supplies | SR gross amount from tax ledger |
|
|
180
|
+
| **Box 2** | Total value of zero-rated supplies | ZR gross amount from tax ledger |
|
|
181
|
+
| **Box 3** | Total value of exempt supplies | ES gross amount from tax ledger |
|
|
182
|
+
| **Box 4** | Total value of supplies (Box 1 + 2 + 3) | Sum |
|
|
183
|
+
| **Box 5** | Total value of taxable purchases | TX + IM gross amount from tax ledger |
|
|
184
|
+
| **Box 6** | Output tax due (Box 1 x 9%) | SR tax amount from tax ledger |
|
|
185
|
+
| **Box 7** | Input tax and refunds claimed | TX + IM tax amount from tax ledger (minus blocked items) |
|
|
186
|
+
| **Box 8** | Net GST to pay/claim (Box 6 - Box 7) | If positive = pay IRAS. If negative = refund claim. |
|
|
187
|
+
|
|
188
|
+
### Step 9: Generate supporting reports
|
|
189
|
+
|
|
190
|
+
```
|
|
191
|
+
POST /api/v1/generate-reports/profit-and-loss
|
|
192
|
+
{ "primarySnapshotDate": "2025-03-31", "secondarySnapshotDate": "2025-01-01" }
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
```
|
|
196
|
+
POST /api/v1/generate-reports/trial-balance
|
|
197
|
+
{ "startDate": "2025-01-01", "endDate": "2025-03-31" }
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
**What to check:**
|
|
201
|
+
- GST Receivable (input tax) and GST Payable (output tax) accounts on the trial balance should reconcile to your Box 6 and Box 7 amounts
|
|
202
|
+
- Revenue on P&L should be consistent with Box 1 + Box 2 + Box 3 (total supplies)
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## Phase 6: Export and File
|
|
207
|
+
|
|
208
|
+
### Step 10: Export the tax ledger for records
|
|
209
|
+
|
|
210
|
+
```
|
|
211
|
+
POST /api/v1/data-exports/vat-ledger
|
|
212
|
+
{ "startDate": "2025-01-01", "endDate": "2025-03-31" }
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
Keep this export as your supporting workpaper. IRAS can request transaction-level detail on audit.
|
|
216
|
+
|
|
217
|
+
**Filing:** Log into IRAS myTax Portal > GST > File GST Return (F5). Enter the box amounts from Step 8. Submit before the due date.
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## GST Filing Checklist (Quick Reference)
|
|
222
|
+
|
|
223
|
+
| # | Step | Phase | Conditional |
|
|
224
|
+
|---|------|-------|-------------|
|
|
225
|
+
| 1 | Generate tax ledger | Generate | Always |
|
|
226
|
+
| 2 | Export for offline review | Generate | Optional |
|
|
227
|
+
| 3 | Cross-reference invoices | Output tax | Always |
|
|
228
|
+
| 4 | Check missing tax profiles | Output tax | Always |
|
|
229
|
+
| 5 | Cross-reference bills | Input tax | Always |
|
|
230
|
+
| 6 | Identify blocked input tax | Input tax | If blocked categories exist |
|
|
231
|
+
| 7 | Run error checks | Errors | Always |
|
|
232
|
+
| 8 | Compile F5 box mapping | Summary | Always |
|
|
233
|
+
| 9 | Generate supporting reports | Summary | Always |
|
|
234
|
+
| 10 | Export and file | File | Always |
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## Common SMB GST Mistakes
|
|
239
|
+
|
|
240
|
+
1. **Claiming input tax on blocked items** — Motor vehicle fuel and entertainment are the most common. IRAS audits specifically look for these.
|
|
241
|
+
|
|
242
|
+
2. **Late registration** — If your taxable turnover exceeds $1M in any 12-month period (or you expect it to in the next 12 months), you must register within 30 days. Penalties apply retroactively.
|
|
243
|
+
|
|
244
|
+
3. **Wrong tax point** — GST is due on the earlier of: invoice date, payment date, or delivery date. Backdating invoices to shift GST to a later quarter is a compliance risk.
|
|
245
|
+
|
|
246
|
+
4. **Not claiming input tax on imports** — If you import goods and pay GST at customs, you CAN claim this as input tax. Many SMBs forget to include import GST in their returns.
|
|
247
|
+
|
|
248
|
+
5. **Mixing exempt and taxable supplies** — If you make both exempt and taxable supplies, you must apportion input tax. Only the portion attributable to taxable supplies is claimable. Use the standard method (revenue ratio) unless IRAS has approved a special method.
|
|
249
|
+
|
|
250
|
+
6. **Filing after the deadline** — Even if you owe nothing, late filing triggers a $200/month penalty. Set a calendar reminder for the 15th of the month after quarter-end to give yourself buffer time.
|