jaz-cli 2.7.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 +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__/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/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 +1 -1
|
@@ -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.
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
# Month-End Close
|
|
2
|
+
|
|
3
|
+
The monthly close is the foundation of accurate books. For an SMB, this typically takes 1-3 days depending on transaction volume and complexity. Every quarter-end and year-end builds on this.
|
|
4
|
+
|
|
5
|
+
**CLI:** `jaz jobs month-end --period 2025-01 [--currency SGD] [--json]`
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Phase 1: Pre-Close Preparation
|
|
10
|
+
|
|
11
|
+
Before adjusting anything, ensure the raw data is complete. These are verification steps — you're checking, not creating.
|
|
12
|
+
|
|
13
|
+
### Step 1: Verify all sales invoices are entered
|
|
14
|
+
|
|
15
|
+
Confirm every invoice issued during the period is in Jaz.
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
POST /invoices/search
|
|
19
|
+
{
|
|
20
|
+
"filter": { "valueDate": { "between": ["2025-01-01", "2025-01-31"] } },
|
|
21
|
+
"sort": { "sortBy": ["valueDate"], "order": "ASC" },
|
|
22
|
+
"limit": 1000
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**What to check:** Compare the count and total against your sales records or POS system. Missing invoices = understated revenue.
|
|
27
|
+
|
|
28
|
+
### Step 2: Verify all purchase bills are entered
|
|
29
|
+
|
|
30
|
+
Confirm every bill received during the period is in Jaz. For SMBs, this is the most common gap — bills arrive late or sit in someone's inbox.
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
POST /bills/search
|
|
34
|
+
{
|
|
35
|
+
"filter": { "valueDate": { "between": ["2025-01-01", "2025-01-31"] } },
|
|
36
|
+
"sort": { "sortBy": ["valueDate"], "order": "ASC" },
|
|
37
|
+
"limit": 1000
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**What to check:** Cross-reference against email, supplier portals, and physical mail. Late bills → missed expenses → overstated profit.
|
|
42
|
+
|
|
43
|
+
**Tip:** If you have the bill document but haven't entered it yet, use **Jaz Magic** (`POST /magic/createBusinessTransactionFromAttachment`) — upload the PDF/JPG and let extraction & autofill handle it.
|
|
44
|
+
|
|
45
|
+
### Step 3: Complete bank reconciliation
|
|
46
|
+
|
|
47
|
+
This is the single most important pre-close step. Every bank account must be reconciled to its statement closing balance.
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
POST /bank-records/{accountResourceId}/search
|
|
51
|
+
{
|
|
52
|
+
"filter": { "status": { "eq": "UNRECONCILED" } },
|
|
53
|
+
"sort": { "sortBy": ["valueDate"], "order": "ASC" },
|
|
54
|
+
"limit": 1000
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**What to check:**
|
|
59
|
+
- All unreconciled items are genuine timing differences (outstanding cheques, deposits in transit)
|
|
60
|
+
- No items older than 30 days (investigate and resolve)
|
|
61
|
+
- Book balance per Jaz matches bank statement closing balance
|
|
62
|
+
|
|
63
|
+
**See also:** `references/bank-recon.md` for the full bank reconciliation catch-up job.
|
|
64
|
+
|
|
65
|
+
### Step 4: Review AR aging
|
|
66
|
+
|
|
67
|
+
Identify overdue customer invoices. This feeds into credit control and bad debt assessment.
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
POST /generate-reports/ar-report
|
|
71
|
+
{ "endDate": "2025-01-31" }
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**What to check:**
|
|
75
|
+
- Total AR ties to Accounts Receivable on trial balance
|
|
76
|
+
- Flag invoices overdue > 30/60/90 days
|
|
77
|
+
- Consider bad debt provision if material (→ Phase 3)
|
|
78
|
+
|
|
79
|
+
### Step 5: Review AP aging
|
|
80
|
+
|
|
81
|
+
Identify upcoming and overdue supplier payments. This feeds into payment planning.
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
POST /generate-reports/ap-report
|
|
85
|
+
{ "endDate": "2025-01-31" }
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**What to check:**
|
|
89
|
+
- Total AP ties to Accounts Payable on trial balance
|
|
90
|
+
- Identify bills due in the next 7-14 days for the payment run
|
|
91
|
+
- Flag any disputed or held bills
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Phase 2: Accruals & Adjustments
|
|
96
|
+
|
|
97
|
+
Record transactions that belong to this period but aren't yet in the books. This is where recipes come in.
|
|
98
|
+
|
|
99
|
+
### Step 6: Record accrued expenses
|
|
100
|
+
|
|
101
|
+
Expenses incurred but not yet billed (utilities, professional services, cleaning, etc.). The most common month-end adjustment for SMBs.
|
|
102
|
+
|
|
103
|
+
**Recipe:** `accrued-expenses`
|
|
104
|
+
**Pattern:** DR Expense, CR Accrued Liabilities → reverse on Day 1 of next month
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
POST /journals
|
|
108
|
+
{
|
|
109
|
+
"valueDate": "2025-01-31",
|
|
110
|
+
"reference": "ME-ACCR-JAN25",
|
|
111
|
+
"journalEntries": [
|
|
112
|
+
{ "accountResourceId": "<expense-account>", "amount": 500.00, "type": "DEBIT", "name": "Electricity accrual — Jan 2025" },
|
|
113
|
+
{ "accountResourceId": "<accrued-liabilities>", "amount": 500.00, "type": "CREDIT", "name": "Electricity accrual — Jan 2025" }
|
|
114
|
+
]
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
**Conditional:** Only if there are expenses not yet billed for the period. Common examples: utilities, internet, cleaning, accounting fees.
|
|
119
|
+
|
|
120
|
+
### Step 7: Amortize prepaid expenses
|
|
121
|
+
|
|
122
|
+
If you've set up prepaid expense capsules with schedulers, verify the scheduler fired for this month. If not, post the amortization journal manually.
|
|
123
|
+
|
|
124
|
+
**Recipe:** `prepaid-amortization` | **Calculator:** `jaz calc prepaid-expense`
|
|
125
|
+
**Pattern:** DR Expense, CR Prepaid Asset
|
|
126
|
+
|
|
127
|
+
**Verification:** Search for journals in the prepaid capsule for this period:
|
|
128
|
+
```
|
|
129
|
+
POST /journals/search
|
|
130
|
+
{
|
|
131
|
+
"filter": {
|
|
132
|
+
"valueDate": { "between": ["2025-01-01", "2025-01-31"] }
|
|
133
|
+
},
|
|
134
|
+
"sort": { "sortBy": ["valueDate"], "order": "DESC" },
|
|
135
|
+
"limit": 100
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Filter results by capsule name (e.g., "FY2025 Office Insurance") to confirm the entry exists.
|
|
140
|
+
|
|
141
|
+
### Step 8: Recognize deferred revenue
|
|
142
|
+
|
|
143
|
+
If you've received upfront payments that should be recognized over time, verify the scheduler fired or post manually.
|
|
144
|
+
|
|
145
|
+
**Recipe:** `deferred-revenue` | **Calculator:** `jaz calc deferred-revenue`
|
|
146
|
+
**Pattern:** DR Deferred Revenue (liability), CR Revenue
|
|
147
|
+
|
|
148
|
+
**Conditional:** Only if your business has subscription or prepaid revenue models.
|
|
149
|
+
|
|
150
|
+
### Step 9: Record depreciation
|
|
151
|
+
|
|
152
|
+
For fixed assets, record the monthly depreciation charge. Jaz supports straight-line natively via fixed assets. For declining balance or 150DB methods, use the calculator and post manual journals.
|
|
153
|
+
|
|
154
|
+
**Recipe:** `declining-balance` | **Calculator:** `jaz calc depreciation`
|
|
155
|
+
**Pattern:** DR Depreciation Expense, CR Accumulated Depreciation
|
|
156
|
+
|
|
157
|
+
**If using native Jaz FA depreciation:** Verify auto-calculated depreciation is running correctly via the FA register.
|
|
158
|
+
**If using non-standard methods:** Post manual journal from calculator output.
|
|
159
|
+
|
|
160
|
+
### Step 10: Accrue employee benefits
|
|
161
|
+
|
|
162
|
+
Record monthly leave accrual. If using a scheduler, verify it fired.
|
|
163
|
+
|
|
164
|
+
**Recipe:** `employee-accruals`
|
|
165
|
+
**Pattern:** DR Leave Expense, CR Leave Liability (monthly fixed amount from scheduler)
|
|
166
|
+
|
|
167
|
+
**Conditional:** Only if you track leave balances. Most SMBs with 5+ employees should.
|
|
168
|
+
|
|
169
|
+
### Step 11: Accrue loan interest
|
|
170
|
+
|
|
171
|
+
If you have bank loans, verify the interest portion of this month's payment is correctly recorded. If payments are embedded in bill/cash-out entries, this may already be handled.
|
|
172
|
+
|
|
173
|
+
**Recipe:** `bank-loan` | **Calculator:** `jaz calc loan`
|
|
174
|
+
**Pattern:** Interest splits from principal in each payment — verify the amortization table matches.
|
|
175
|
+
|
|
176
|
+
**Conditional:** Only if you have active loans. Skip if loan payments are already correctly coded.
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## Phase 3: Period-End Valuations
|
|
181
|
+
|
|
182
|
+
Adjustments that depend on period-end rates or balances. These are less common for simple SMBs but critical for accuracy.
|
|
183
|
+
|
|
184
|
+
### Step 12: FX revaluation
|
|
185
|
+
|
|
186
|
+
If your org has foreign currency monetary items (bank accounts, receivables, payables in non-base currency), revalue them at period-end exchange rates.
|
|
187
|
+
|
|
188
|
+
**Recipe:** `fx-revaluation` | **Calculator:** `jaz calc fx-reval`
|
|
189
|
+
**Pattern:** DR/CR FX Unrealized Gain/Loss for the difference between book rate and closing rate. Post a Day 1 reversal.
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
jaz calc fx-reval --amount 50000 --book-rate 1.35 --closing-rate 1.38 --currency USD --base-currency SGD
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
**Conditional:** Only if multi-currency org with material foreign currency balances. Many SGD-only SMBs can skip this.
|
|
196
|
+
|
|
197
|
+
**Note:** Jaz auto-handles FX on AR/AP (invoices/bills in foreign currency). This step is for non-AR/AP items only (foreign currency bank accounts, deposits, intercompany balances).
|
|
198
|
+
|
|
199
|
+
### Step 13: Review bad debt provision (ECL)
|
|
200
|
+
|
|
201
|
+
Assess whether the bad debt provision needs adjusting based on the AR aging report from Step 4.
|
|
202
|
+
|
|
203
|
+
**Recipe:** `bad-debt-provision` | **Calculator:** `jaz calc ecl`
|
|
204
|
+
**Pattern:** DR Bad Debt Expense, CR Allowance for Doubtful Debts
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
jaz calc ecl --current 100000 --30d 50000 --60d 20000 --90d 10000 --120d 5000 --rates 0.5,2,5,10,50
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
**Conditional:** Review monthly, but typically adjust quarterly unless there's a significant change (e.g., major customer default). For most SMBs, a quick mental check is sufficient monthly — formal ECL review in quarter-end.
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## Phase 4: Verification
|
|
215
|
+
|
|
216
|
+
Run the numbers. Everything should tie.
|
|
217
|
+
|
|
218
|
+
### Step 14: Review trial balance
|
|
219
|
+
|
|
220
|
+
The master check. Total debits must equal total credits.
|
|
221
|
+
|
|
222
|
+
```
|
|
223
|
+
POST /generate-reports/trial-balance
|
|
224
|
+
{ "startDate": "2025-01-01", "endDate": "2025-01-31" }
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
**What to check:**
|
|
228
|
+
- Debits = Credits (always — if not, something is seriously wrong)
|
|
229
|
+
- Cash/bank accounts match bank statements
|
|
230
|
+
- AR balance matches AR aging total from Step 4
|
|
231
|
+
- AP balance matches AP aging total from Step 5
|
|
232
|
+
- No unexpected balances (negative cash, credit balances in expense accounts)
|
|
233
|
+
|
|
234
|
+
### Step 15: Generate P&L
|
|
235
|
+
|
|
236
|
+
```
|
|
237
|
+
POST /generate-reports/profit-and-loss
|
|
238
|
+
{ "primarySnapshotDate": "2025-01-31", "secondarySnapshotDate": "2025-01-01" }
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
**What to check:**
|
|
242
|
+
- Revenue is in line with expectations
|
|
243
|
+
- Expenses make sense for the month
|
|
244
|
+
- Gross margin is reasonable
|
|
245
|
+
- Any large one-off items should be explainable (accruals, adjustments from Phase 2)
|
|
246
|
+
|
|
247
|
+
### Step 16: Generate balance sheet
|
|
248
|
+
|
|
249
|
+
```
|
|
250
|
+
POST /generate-reports/balance-sheet
|
|
251
|
+
{ "primarySnapshotDate": "2025-01-31" }
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
**What to check:**
|
|
255
|
+
- Assets = Liabilities + Equity (by definition — if not, the API has a bug)
|
|
256
|
+
- Cash position is reasonable
|
|
257
|
+
- Prepaid balances reduced by one month's amortization
|
|
258
|
+
- Accrued liabilities reflect the accruals from Phase 2
|
|
259
|
+
|
|
260
|
+
### Step 17: Compare to prior month
|
|
261
|
+
|
|
262
|
+
Run the same P&L for the prior month and compare. Significant variances should be explainable.
|
|
263
|
+
|
|
264
|
+
```
|
|
265
|
+
POST /generate-reports/profit-and-loss
|
|
266
|
+
{ "primarySnapshotDate": "2024-12-31", "secondarySnapshotDate": "2024-12-01" }
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
**Flag:** Revenue or expense lines that moved > 20% month-over-month without a clear reason.
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## Phase 5: Close & Lock
|
|
274
|
+
|
|
275
|
+
Once everything checks out, lock the period to prevent accidental backdated entries.
|
|
276
|
+
|
|
277
|
+
### Step 18: Set lock date
|
|
278
|
+
|
|
279
|
+
Move the org lock date forward to the last day of the closed month.
|
|
280
|
+
|
|
281
|
+
**Best practice:** Lock date = last day of the closed period (e.g., `2025-01-31` after January close).
|
|
282
|
+
|
|
283
|
+
**Important:** Only move the lock date forward. Moving it backward reopens prior periods — do this only if you need to post corrections (and re-close afterward).
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## Month-End Close Checklist (Quick Reference)
|
|
288
|
+
|
|
289
|
+
| # | Step | Phase | Conditional | Recipe/Calc |
|
|
290
|
+
|---|------|-------|-------------|-------------|
|
|
291
|
+
| 1 | Verify invoices entered | Pre-close | Always | — |
|
|
292
|
+
| 2 | Verify bills entered | Pre-close | Always | — |
|
|
293
|
+
| 3 | Complete bank reconciliation | Pre-close | Always | bank-recon job |
|
|
294
|
+
| 4 | Review AR aging | Pre-close | Always | — |
|
|
295
|
+
| 5 | Review AP aging | Pre-close | Always | — |
|
|
296
|
+
| 6 | Record accrued expenses | Accruals | If unbilled expenses exist | accrued-expenses |
|
|
297
|
+
| 7 | Amortize prepaid expenses | Accruals | If prepaid capsules exist | prepaid-amortization / `jaz calc prepaid-expense` |
|
|
298
|
+
| 8 | Recognize deferred revenue | Accruals | If deferred revenue exists | deferred-revenue / `jaz calc deferred-revenue` |
|
|
299
|
+
| 9 | Record depreciation | Accruals | If fixed assets exist | declining-balance / `jaz calc depreciation` |
|
|
300
|
+
| 10 | Accrue employee benefits | Accruals | If tracking leave | employee-accruals |
|
|
301
|
+
| 11 | Accrue loan interest | Accruals | If active loans | bank-loan / `jaz calc loan` |
|
|
302
|
+
| 12 | FX revaluation | Valuations | If multi-currency | fx-revaluation / `jaz calc fx-reval` |
|
|
303
|
+
| 13 | Review bad debt provision | Valuations | If material AR change | bad-debt-provision / `jaz calc ecl` |
|
|
304
|
+
| 14 | Review trial balance | Verification | Always | — |
|
|
305
|
+
| 15 | Generate P&L | Verification | Always | — |
|
|
306
|
+
| 16 | Generate balance sheet | Verification | Always | — |
|
|
307
|
+
| 17 | Compare to prior month | Verification | Always | — |
|
|
308
|
+
| 18 | Set lock date | Close | Always | — |
|