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,330 @@
|
|
|
1
|
+
# Supplier Statement Reconciliation
|
|
2
|
+
|
|
3
|
+
Compare your accounts payable balance for a supplier against the supplier's own statement. Identify missing bills, duplicate payments, pricing discrepancies, and timing differences. This is how you catch errors before they become disputes.
|
|
4
|
+
|
|
5
|
+
**CLI:** `jaz jobs supplier-recon [--supplier "Acme Corp"] [--period 2025-01] [--json]`
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Phase 1: Get Supplier Details
|
|
10
|
+
|
|
11
|
+
### Step 1: Find the supplier contact
|
|
12
|
+
|
|
13
|
+
If `--supplier` is specified, search by name:
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
POST /api/v1/contacts/search
|
|
17
|
+
{
|
|
18
|
+
"filter": {
|
|
19
|
+
"supplier": { "eq": true },
|
|
20
|
+
"name": { "contains": "Acme Corp" }
|
|
21
|
+
},
|
|
22
|
+
"sort": { "sortBy": ["name"], "order": "ASC" },
|
|
23
|
+
"limit": 10
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
If no supplier is specified, list all suppliers:
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
POST /api/v1/contacts/search
|
|
31
|
+
{
|
|
32
|
+
"filter": { "supplier": { "eq": true } },
|
|
33
|
+
"sort": { "sortBy": ["name"], "order": "ASC" },
|
|
34
|
+
"limit": 100
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**What you need:** The supplier's `resourceId` and `name` for all subsequent queries.
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Phase 2: Pull Your Records
|
|
43
|
+
|
|
44
|
+
### Step 2: List all bills for the supplier in the period
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
POST /api/v1/bills/search
|
|
48
|
+
{
|
|
49
|
+
"filter": {
|
|
50
|
+
"contactResourceId": { "eq": "<supplier-uuid>" },
|
|
51
|
+
"status": { "in": ["POSTED", "VOIDED"] },
|
|
52
|
+
"valueDate": { "between": ["2025-01-01", "2025-01-31"] }
|
|
53
|
+
},
|
|
54
|
+
"sort": { "sortBy": ["valueDate"], "order": "ASC" },
|
|
55
|
+
"limit": 1000
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**Include VOIDED status** — you need to see voided bills to explain differences (e.g., "we voided your invoice #123 because it was a duplicate").
|
|
60
|
+
|
|
61
|
+
**Record for each bill:**
|
|
62
|
+
- Reference number
|
|
63
|
+
- Date
|
|
64
|
+
- Total amount
|
|
65
|
+
- Balance amount (how much is still unpaid)
|
|
66
|
+
- Status
|
|
67
|
+
|
|
68
|
+
### Step 3: List all payments to the supplier in the period
|
|
69
|
+
|
|
70
|
+
Search for payment transactions against the supplier's bills. First, get all bills (from Step 2), then check each bill's payment records:
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
GET /api/v1/bills/{billResourceId}/payments
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Alternatively, search cashflow transactions for supplier payments:
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
POST /api/v1/cashflow-transactions/search
|
|
80
|
+
{
|
|
81
|
+
"filter": {
|
|
82
|
+
"contact": { "name": { "eq": "Acme Corp" } },
|
|
83
|
+
"businessTransactionType": { "in": ["PURCHASE"] },
|
|
84
|
+
"direction": { "eq": "PAYOUT" },
|
|
85
|
+
"valueDate": { "between": ["2025-01-01", "2025-01-31"] }
|
|
86
|
+
},
|
|
87
|
+
"sort": { "sortBy": ["valueDate"], "order": "ASC" },
|
|
88
|
+
"limit": 1000
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Step 4: List any supplier credit notes
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
POST /api/v1/supplier-credit-notes/search
|
|
96
|
+
{
|
|
97
|
+
"filter": {
|
|
98
|
+
"contactResourceId": { "eq": "<supplier-uuid>" },
|
|
99
|
+
"status": { "eq": "POSTED" },
|
|
100
|
+
"valueDate": { "between": ["2025-01-01", "2025-01-31"] }
|
|
101
|
+
},
|
|
102
|
+
"sort": { "sortBy": ["valueDate"], "order": "ASC" },
|
|
103
|
+
"limit": 100
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Phase 3: Get the Supplier Statement Balance
|
|
110
|
+
|
|
111
|
+
### Step 5: Determine the AP balance per your books
|
|
112
|
+
|
|
113
|
+
Get the AP balance for this specific supplier from the AP aging report:
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
POST /api/v1/generate-reports/ap-report
|
|
117
|
+
{ "endDate": "2025-01-31" }
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Look for the supplier in the report output and note their total balance.
|
|
121
|
+
|
|
122
|
+
Alternatively, for a quick per-supplier calculation:
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
POST /api/v1/bills/search
|
|
126
|
+
{
|
|
127
|
+
"filter": {
|
|
128
|
+
"contactResourceId": { "eq": "<supplier-uuid>" },
|
|
129
|
+
"status": { "eq": "POSTED" },
|
|
130
|
+
"balanceAmount": { "gt": 0 }
|
|
131
|
+
},
|
|
132
|
+
"sort": { "sortBy": ["dueDate"], "order": "ASC" },
|
|
133
|
+
"limit": 1000
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Sum the `balanceAmount` from all results = your AP balance for this supplier.
|
|
138
|
+
|
|
139
|
+
### Step 6: Compare to supplier's statement
|
|
140
|
+
|
|
141
|
+
The supplier's statement is an external document — you'll have it as a PDF, email, or portal download. The key figure is their **closing balance** for the period.
|
|
142
|
+
|
|
143
|
+
**The reconciliation equation:**
|
|
144
|
+
|
|
145
|
+
```
|
|
146
|
+
Your AP balance (from Step 5)
|
|
147
|
+
SHOULD EQUAL
|
|
148
|
+
Supplier's statement closing balance
|
|
149
|
+
|
|
150
|
+
If they don't match, the difference is explained by reconciling items (Phase 4).
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## Phase 4: Identify Differences
|
|
156
|
+
|
|
157
|
+
Work through each discrepancy type systematically.
|
|
158
|
+
|
|
159
|
+
### Difference Type 1: Missing bills (in supplier statement, not in your books)
|
|
160
|
+
|
|
161
|
+
The supplier has invoiced you, but the bill isn't entered in Jaz.
|
|
162
|
+
|
|
163
|
+
**Common causes:**
|
|
164
|
+
- Bill arrived late (still in someone's inbox or physical mailbox)
|
|
165
|
+
- Bill was emailed to the wrong person
|
|
166
|
+
- Bill was received but not yet entered by the bookkeeper
|
|
167
|
+
|
|
168
|
+
**Resolution:** Obtain the bill from the supplier and enter it:
|
|
169
|
+
|
|
170
|
+
```
|
|
171
|
+
POST /api/v1/bills
|
|
172
|
+
{
|
|
173
|
+
"contactResourceId": "<supplier-uuid>",
|
|
174
|
+
"saveAsDraft": false,
|
|
175
|
+
"reference": "BILL-MISSING-001",
|
|
176
|
+
"valueDate": "2025-01-15",
|
|
177
|
+
"dueDate": "2025-02-14",
|
|
178
|
+
"lineItems": [{
|
|
179
|
+
"name": "Office supplies — Jan 2025",
|
|
180
|
+
"unitPrice": 850.00,
|
|
181
|
+
"quantity": 1,
|
|
182
|
+
"accountResourceId": "<expense-account-uuid>",
|
|
183
|
+
"taxProfileResourceId": "<tax-profile-uuid>"
|
|
184
|
+
}]
|
|
185
|
+
}
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Or use Jaz Magic if you have the document:
|
|
189
|
+
|
|
190
|
+
```
|
|
191
|
+
POST /api/v1/magic/createBusinessTransactionFromAttachment
|
|
192
|
+
Content-Type: multipart/form-data
|
|
193
|
+
|
|
194
|
+
Fields:
|
|
195
|
+
- sourceFile: <PDF of the missing bill>
|
|
196
|
+
- businessTransactionType: "BILL"
|
|
197
|
+
- sourceType: "FILE"
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Difference Type 2: Duplicate payments
|
|
201
|
+
|
|
202
|
+
You paid the same bill twice, or the supplier hasn't credited a payment you made.
|
|
203
|
+
|
|
204
|
+
**How to check:** Look for two payments with the same amount and similar dates against different bills from the same supplier.
|
|
205
|
+
|
|
206
|
+
**Resolution:**
|
|
207
|
+
- If genuinely paid twice → request a refund or credit note from the supplier
|
|
208
|
+
- If the supplier hasn't recorded your payment → send them the bank transfer reference/proof
|
|
209
|
+
|
|
210
|
+
### Difference Type 3: Timing differences
|
|
211
|
+
|
|
212
|
+
The most common and least worrying type. Your payment was made on Jan 30 but the supplier didn't record it until Feb 3.
|
|
213
|
+
|
|
214
|
+
**Resolution:** No action needed — these resolve themselves in the next period. Note them as reconciling items.
|
|
215
|
+
|
|
216
|
+
### Difference Type 4: Pricing discrepancies
|
|
217
|
+
|
|
218
|
+
The supplier's invoice amount differs from what you expected (wrong unit price, quantity, or missing discount).
|
|
219
|
+
|
|
220
|
+
**Resolution:**
|
|
221
|
+
- Contact the supplier to clarify
|
|
222
|
+
- If they agree to the correction → request a supplier credit note
|
|
223
|
+
- Enter the credit note when received:
|
|
224
|
+
|
|
225
|
+
```
|
|
226
|
+
POST /api/v1/supplier-credit-notes
|
|
227
|
+
{
|
|
228
|
+
"contactResourceId": "<supplier-uuid>",
|
|
229
|
+
"saveAsDraft": false,
|
|
230
|
+
"reference": "SCN-DISPUTE-001",
|
|
231
|
+
"valueDate": "2025-01-31",
|
|
232
|
+
"lineItems": [{
|
|
233
|
+
"name": "Price correction — Invoice #12345",
|
|
234
|
+
"unitPrice": 150.00,
|
|
235
|
+
"quantity": 1,
|
|
236
|
+
"accountResourceId": "<expense-account-uuid>",
|
|
237
|
+
"taxProfileResourceId": "<tax-profile-uuid>"
|
|
238
|
+
}]
|
|
239
|
+
}
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### Difference Type 5: Bills in your books, not in supplier statement
|
|
243
|
+
|
|
244
|
+
You have a bill entered, but the supplier doesn't show it.
|
|
245
|
+
|
|
246
|
+
**Common causes:**
|
|
247
|
+
- You entered a bill from a pro-forma/estimate instead of the actual invoice
|
|
248
|
+
- The bill was entered under the wrong supplier contact
|
|
249
|
+
- The supplier issued a credit note you haven't processed
|
|
250
|
+
|
|
251
|
+
**Resolution:** Investigate and either void the incorrect bill or request clarification from the supplier.
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## Phase 5: Verification
|
|
256
|
+
|
|
257
|
+
### Step 7: Re-check after adjustments
|
|
258
|
+
|
|
259
|
+
After entering missing bills, credit notes, and resolving discrepancies:
|
|
260
|
+
|
|
261
|
+
```
|
|
262
|
+
POST /api/v1/bills/search
|
|
263
|
+
{
|
|
264
|
+
"filter": {
|
|
265
|
+
"contactResourceId": { "eq": "<supplier-uuid>" },
|
|
266
|
+
"status": { "eq": "POSTED" },
|
|
267
|
+
"balanceAmount": { "gt": 0 }
|
|
268
|
+
},
|
|
269
|
+
"sort": { "sortBy": ["dueDate"], "order": "ASC" },
|
|
270
|
+
"limit": 1000
|
|
271
|
+
}
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
Sum `balanceAmount` again. The difference between this and the supplier's statement should now be explainable entirely by timing differences.
|
|
275
|
+
|
|
276
|
+
### Step 8: Verify AP aging
|
|
277
|
+
|
|
278
|
+
```
|
|
279
|
+
POST /api/v1/generate-reports/ap-report
|
|
280
|
+
{ "endDate": "2025-01-31" }
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
**What to check:**
|
|
284
|
+
- Supplier's balance reflects all adjustments
|
|
285
|
+
- Total AP still ties to the Accounts Payable control account on the trial balance
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
## Supplier Recon Checklist (Quick Reference)
|
|
290
|
+
|
|
291
|
+
| # | Step | Phase | What |
|
|
292
|
+
|---|------|-------|------|
|
|
293
|
+
| 1 | Find supplier contact | Setup | Search contacts with supplier=true |
|
|
294
|
+
| 2 | List bills for period | Your records | Bills by contact + date range |
|
|
295
|
+
| 3 | List payments for period | Your records | Payment records per bill |
|
|
296
|
+
| 4 | List credit notes | Your records | Supplier credit notes in period |
|
|
297
|
+
| 5 | Get your AP balance | Compare | Sum of unpaid bill balances |
|
|
298
|
+
| 6 | Compare to supplier statement | Compare | External document comparison |
|
|
299
|
+
| — | Missing bills | Resolve | Enter missing, use Jaz Magic |
|
|
300
|
+
| — | Duplicate payments | Resolve | Request refund/credit |
|
|
301
|
+
| — | Timing differences | Resolve | Note only, resolves next period |
|
|
302
|
+
| — | Pricing discrepancies | Resolve | Request supplier credit note |
|
|
303
|
+
| — | Phantom bills | Resolve | Investigate and void if needed |
|
|
304
|
+
| 7 | Re-check balance | Verify | Should match or explain difference |
|
|
305
|
+
| 8 | Verify AP aging | Verify | Total AP ties to trial balance |
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
## Common Discrepancy Types (Summary)
|
|
310
|
+
|
|
311
|
+
| Type | Direction | Action |
|
|
312
|
+
|------|-----------|--------|
|
|
313
|
+
| Missing bill | You owe more than your books show | Enter the bill |
|
|
314
|
+
| Duplicate payment | You've overpaid | Request refund or credit |
|
|
315
|
+
| Timing difference | Payment in transit | No action, resolves next period |
|
|
316
|
+
| Price discrepancy | Amount disagrees | Request credit note or re-invoice |
|
|
317
|
+
| Phantom bill | Your books show more than supplier | Investigate, void if error |
|
|
318
|
+
| Unapplied credit | Credit note not yet applied | Apply to outstanding bill |
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
## Tips for SMBs
|
|
323
|
+
|
|
324
|
+
**Do this quarterly at minimum, monthly for high-volume suppliers.** Most supplier disputes become much harder to resolve after 90 days because people forget the details and documents get lost.
|
|
325
|
+
|
|
326
|
+
**Request statements proactively.** Don't wait for the supplier to send one — email their accounts department at the start of each quarter requesting a statement for the prior period. Many suppliers have online portals where you can download statements on demand.
|
|
327
|
+
|
|
328
|
+
**The most common issue is missing bills.** In our experience, 80% of supplier recon differences are bills you haven't entered yet. The fix is process, not technology — create a shared inbox or folder for bills and check it daily.
|
|
329
|
+
|
|
330
|
+
**GST implications of discrepancies.** If you discover missing bills during reconciliation, the input tax claim on those bills belongs to the quarter the bill is dated, not when you entered it. If you've already filed the GST return for that quarter, you may need to adjust in the next return or file a voluntary disclosure.
|
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
# Year-End Close
|
|
2
|
+
|
|
3
|
+
The annual close builds on the quarterly close. It is quarter-end close repeated four times, plus a set of year-end-specific adjustments — true-ups, dividends, retained earnings rollover, final GST reconciliation, and audit preparation. For most SMBs, the annual extras add 2-5 days of work depending on complexity and whether an external audit is required.
|
|
4
|
+
|
|
5
|
+
**CLI:** `jaz jobs year-end --period 2025 [--currency SGD] [--json]`
|
|
6
|
+
|
|
7
|
+
**Standalone vs Incremental:**
|
|
8
|
+
- **Standalone (default):** Generates the full plan — all quarterly close steps for each of the four quarters, followed by the annual extras. Use this when quarters haven't been closed yet.
|
|
9
|
+
- **Incremental (`--incremental`):** Generates only the annual extras below. Use this when all four quarters are already closed and locked.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Phase 1–7: Quarterly Close (x4)
|
|
14
|
+
|
|
15
|
+
Complete the full quarter-end close for each quarter in the year. Each quarter follows the monthly close (x3) plus quarterly extras pattern.
|
|
16
|
+
|
|
17
|
+
**Reference:** `references/quarter-end-close.md`
|
|
18
|
+
|
|
19
|
+
| FY | Q1 | Q2 | Q3 | Q4 |
|
|
20
|
+
|----|----|----|----|----|
|
|
21
|
+
| Calendar year | Jan–Mar | Apr–Jun | Jul–Sep | Oct–Dec |
|
|
22
|
+
|
|
23
|
+
**Important:** Close quarters in order. Q1 must be locked before starting Q2, and so on. The annual extras run after Q4 is closed. By the time you reach this phase, all 12 months are individually closed, all four quarterly GST returns are filed, and all quarterly provisions are up to date.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Phase 8: Annual Extras
|
|
28
|
+
|
|
29
|
+
These steps run once per year, after all four quarters are closed. They address items that are inherently annual — full-year depreciation reconciliation, true-ups against actuals, dividends, retained earnings rollover, and audit preparation.
|
|
30
|
+
|
|
31
|
+
### Step Y1: Final depreciation run
|
|
32
|
+
|
|
33
|
+
Verify the full year's depreciation is correctly recorded and reconciles to the fixed asset register.
|
|
34
|
+
|
|
35
|
+
**Recipe:** `declining-balance` | **Calculator:** `jaz calc depreciation`
|
|
36
|
+
|
|
37
|
+
**Step-by-step:**
|
|
38
|
+
|
|
39
|
+
1. Pull the fixed asset register as at year-end:
|
|
40
|
+
```
|
|
41
|
+
POST /generate-reports/fixed-assets-summary
|
|
42
|
+
{}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
2. For each asset class, verify that 12 months of depreciation have been recorded. If using Jaz native FA depreciation (straight-line), this should be automatic. If using manual journals for non-standard methods (DDB, 150DB), verify all 12 monthly entries exist.
|
|
46
|
+
|
|
47
|
+
3. Run the calculator for each non-standard asset to confirm the full-year charge:
|
|
48
|
+
```bash
|
|
49
|
+
jaz calc depreciation --cost 50000 --salvage 5000 --life 5 --method ddb --frequency monthly --json
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
4. Reconcile accumulated depreciation per the FA register to accumulated depreciation per the trial balance:
|
|
53
|
+
```
|
|
54
|
+
POST /generate-reports/trial-balance
|
|
55
|
+
{ "startDate": "2025-01-01", "endDate": "2025-12-31" }
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**What to check:**
|
|
59
|
+
- Depreciation expense on P&L = sum of all 12 monthly depreciation charges
|
|
60
|
+
- Accumulated depreciation on balance sheet = prior year balance + current year depreciation - accumulated depreciation on disposed assets
|
|
61
|
+
- FA register NBV (net book value) per asset ties to the balance sheet total
|
|
62
|
+
- No asset has been depreciated below its salvage value
|
|
63
|
+
|
|
64
|
+
**Conditional:** Always, if fixed assets exist. Even if depreciation runs automatically, verify it at year-end. Auditors will test this.
|
|
65
|
+
|
|
66
|
+
### Step Y2: Year-end true-ups
|
|
67
|
+
|
|
68
|
+
Reconcile accruals to actuals and post adjustments. Three components:
|
|
69
|
+
|
|
70
|
+
#### a) Leave balance true-up
|
|
71
|
+
|
|
72
|
+
Monthly closes accrued a fixed amount for leave liability. At year-end, reconcile to actual leave balances.
|
|
73
|
+
|
|
74
|
+
**Recipe:** `employee-accruals`
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
POST /journals
|
|
78
|
+
{
|
|
79
|
+
"valueDate": "2025-12-31",
|
|
80
|
+
"reference": "YE-LEAVE-TRUEUP-FY25",
|
|
81
|
+
"journalEntries": [
|
|
82
|
+
{ "accountResourceId": "<leave-expense>", "amount": 3200.00, "type": "DEBIT", "name": "Leave accrual true-up — FY2025 (actual vs accrued)" },
|
|
83
|
+
{ "accountResourceId": "<leave-liability>", "amount": 3200.00, "type": "CREDIT", "name": "Leave accrual true-up — FY2025 (actual vs accrued)" }
|
|
84
|
+
]
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**What to check:** Leave liability on balance sheet should equal (unused leave days x daily rate) for each employee. If accrual > actual, reverse the excess (DR Leave Liability, CR Leave Expense).
|
|
89
|
+
|
|
90
|
+
**Conditional:** Only if you track leave balances in the books. Most SMBs with 5+ employees should.
|
|
91
|
+
|
|
92
|
+
#### b) Bonus true-up
|
|
93
|
+
|
|
94
|
+
Quarterly closes maintained the bonus accrual estimate. At year-end, true up to actual bonus amounts declared.
|
|
95
|
+
|
|
96
|
+
**Recipe:** `employee-accruals` (bonus component)
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
POST /journals
|
|
100
|
+
{
|
|
101
|
+
"valueDate": "2025-12-31",
|
|
102
|
+
"reference": "YE-BONUS-TRUEUP-FY25",
|
|
103
|
+
"journalEntries": [
|
|
104
|
+
{ "accountResourceId": "<bonus-expense>", "amount": 5000.00, "type": "DEBIT", "name": "Bonus true-up — FY2025 (actual declared vs accrued)" },
|
|
105
|
+
{ "accountResourceId": "<bonus-liability>", "amount": 5000.00, "type": "CREDIT", "name": "Bonus true-up — FY2025 (actual declared vs accrued)" }
|
|
106
|
+
]
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
**What to check:** Bonus liability on balance sheet = actual bonuses declared but not yet paid. If over-accrued, reverse the excess.
|
|
111
|
+
|
|
112
|
+
**Conditional:** Only if the business has bonus schemes.
|
|
113
|
+
|
|
114
|
+
#### c) Provision reassessment (IAS 37)
|
|
115
|
+
|
|
116
|
+
At year-end, reassess all provisions — not just unwind the discount, but review whether the provision amount itself is still the best estimate.
|
|
117
|
+
|
|
118
|
+
**Recipe:** `provisions`
|
|
119
|
+
|
|
120
|
+
**What to check for each provision:**
|
|
121
|
+
- Is the obligating event still valid? (If resolved, release the provision.)
|
|
122
|
+
- Has the best estimate changed? (Adjust up or down.)
|
|
123
|
+
- Has the discount rate changed? (Re-measure at current rate, post the difference.)
|
|
124
|
+
- Has the expected settlement date changed? (Adjust the unwinding schedule.)
|
|
125
|
+
|
|
126
|
+
Post adjustment journals for any changes. Document the reasoning — auditors will review provision assessments.
|
|
127
|
+
|
|
128
|
+
**Conditional:** Only if IAS 37 provisions exist. Most simple SMBs can skip this.
|
|
129
|
+
|
|
130
|
+
### Step Y3: Dividend declaration and payment
|
|
131
|
+
|
|
132
|
+
If the business is declaring dividends for the fiscal year, post two journals — one for declaration and one for payment. These are distinct accounting events.
|
|
133
|
+
|
|
134
|
+
**Recipe:** `dividend`
|
|
135
|
+
|
|
136
|
+
#### Declaration (board resolution date):
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
POST /journals
|
|
140
|
+
{
|
|
141
|
+
"valueDate": "2025-12-31",
|
|
142
|
+
"reference": "YE-DIV-DECLARE-FY25",
|
|
143
|
+
"journalEntries": [
|
|
144
|
+
{ "accountResourceId": "<retained-earnings>", "amount": 50000.00, "type": "DEBIT", "name": "Dividend declared — FY2025" },
|
|
145
|
+
{ "accountResourceId": "<dividends-payable>", "amount": 50000.00, "type": "CREDIT", "name": "Dividend declared — FY2025" }
|
|
146
|
+
]
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
#### Payment (actual payment date):
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
POST /journals
|
|
154
|
+
{
|
|
155
|
+
"valueDate": "2026-01-15",
|
|
156
|
+
"reference": "YE-DIV-PAY-FY25",
|
|
157
|
+
"journalEntries": [
|
|
158
|
+
{ "accountResourceId": "<dividends-payable>", "amount": 50000.00, "type": "DEBIT", "name": "Dividend paid — FY2025" },
|
|
159
|
+
{ "accountResourceId": "<bank-account>", "amount": 50000.00, "type": "CREDIT", "name": "Dividend paid — FY2025" }
|
|
160
|
+
]
|
|
161
|
+
}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
**Note:** Declaration often falls in the current FY (e.g., Dec 31), but payment may fall in the next FY (e.g., Jan 15). The declaration journal reduces retained earnings in the current year. The payment journal just clears the liability — no P&L impact.
|
|
165
|
+
|
|
166
|
+
**For Singapore:** Dividends are tax-exempt in the hands of the shareholder (one-tier system). No withholding tax. No additional tax journal needed.
|
|
167
|
+
|
|
168
|
+
**For Philippines:** Dividends to resident individuals are subject to 10% final withholding tax. Post the withholding tax separately (DR Dividends Payable, CR Withholding Tax Payable) and remit to BIR.
|
|
169
|
+
|
|
170
|
+
**Conditional:** Only if the business is declaring dividends. Many SMBs retain all earnings. Skip if no dividend resolution.
|
|
171
|
+
|
|
172
|
+
### Step Y4: Retained earnings rollover (Current Year Earnings)
|
|
173
|
+
|
|
174
|
+
Jaz auto-manages the annual rollover of Current Year Earnings (CYE) into Retained Earnings at the start of each new fiscal year. The net P&L for the year is accumulated in CYE during the year, then rolled forward.
|
|
175
|
+
|
|
176
|
+
**What to verify:**
|
|
177
|
+
|
|
178
|
+
1. Pull the equity movement report:
|
|
179
|
+
```
|
|
180
|
+
POST /generate-reports/equity-movement
|
|
181
|
+
{ "primarySnapshotStartDate": "2025-01-01", "primarySnapshotEndDate": "2025-12-31" }
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
2. Confirm:
|
|
185
|
+
- CYE balance at year-end = Net profit (or loss) for the year per P&L
|
|
186
|
+
- Retained Earnings opening balance = prior year closing Retained Earnings
|
|
187
|
+
- After rollover (in the new year): CYE resets to zero, Retained Earnings increases by last year's net profit (less any dividends declared)
|
|
188
|
+
|
|
189
|
+
**Tip:** If CYE doesn't match the P&L bottom line, there's a posting error somewhere — most likely a journal posted directly to an equity account that shouldn't have been.
|
|
190
|
+
|
|
191
|
+
**No journal needed** — this is a platform-managed rollover. Your job is to verify it happened correctly.
|
|
192
|
+
|
|
193
|
+
### Step Y5: Final GST/VAT reconciliation
|
|
194
|
+
|
|
195
|
+
Reconcile the full year's GST/VAT against all four quarterly returns (or twelve monthly returns for PH).
|
|
196
|
+
|
|
197
|
+
```
|
|
198
|
+
POST /generate-reports/vat-ledger
|
|
199
|
+
{ "startDate": "2025-01-01", "endDate": "2025-12-31" }
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
**What to check:**
|
|
203
|
+
|
|
204
|
+
1. Annual output tax per tax ledger = sum of output tax across all four quarterly returns
|
|
205
|
+
2. Annual input tax per tax ledger = sum of input tax across all four quarterly returns
|
|
206
|
+
3. Net GST paid/refunded during the year = sum of all quarterly GST payments/refunds
|
|
207
|
+
4. GST control account on trial balance = net GST payable/receivable for Q4 (if Q1–Q3 already settled)
|
|
208
|
+
5. No orphan transactions — every taxable invoice and bill is accounted for in the tax ledger
|
|
209
|
+
|
|
210
|
+
**For Singapore:** IRAS may request the Annual GST Return (GST F8) for certain businesses. The annual reconciliation feeds directly into this.
|
|
211
|
+
|
|
212
|
+
**For Philippines:** Cross-check annual totals against the Summary List of Sales (SLS) and Summary List of Purchases (SLP) required by BIR.
|
|
213
|
+
|
|
214
|
+
**Tip:** If the annual tax ledger total doesn't match the sum of quarterly returns, the most common causes are: (a) transactions entered after the quarterly filing with a backdated date, (b) credit notes or amendments posted in a later quarter, (c) reclassification of tax codes mid-year.
|
|
215
|
+
|
|
216
|
+
### Step Y6: Audit preparation
|
|
217
|
+
|
|
218
|
+
Compile all reports, reconciliation schedules, and supporting documentation for the external auditor or tax preparer.
|
|
219
|
+
|
|
220
|
+
**Reference:** `references/audit-prep.md` for the full audit preparation job.
|
|
221
|
+
|
|
222
|
+
At minimum, generate and export:
|
|
223
|
+
|
|
224
|
+
| Report | API Call |
|
|
225
|
+
|--------|----------|
|
|
226
|
+
| Trial Balance (full year) | `POST /generate-reports/trial-balance { "startDate": "2025-01-01", "endDate": "2025-12-31" }` |
|
|
227
|
+
| Balance Sheet (year-end) | `POST /generate-reports/balance-sheet { "primarySnapshotDate": "2025-12-31" }` |
|
|
228
|
+
| P&L (full year) | `POST /generate-reports/profit-and-loss { "primarySnapshotDate": "2025-12-31", "secondarySnapshotDate": "2025-01-01" }` |
|
|
229
|
+
| General Ledger (full year) | `POST /generate-reports/general-ledger { "startDate": "2025-01-01", "endDate": "2025-12-31", "groupBy": "ACCOUNT" }` |
|
|
230
|
+
| Cashflow Statement | `POST /generate-reports/cashflow { "primaryStartDate": "2025-01-01", "primaryEndDate": "2025-12-31" }` |
|
|
231
|
+
| AR Aging (year-end) | `POST /generate-reports/ar-report { "endDate": "2025-12-31" }` |
|
|
232
|
+
| AP Aging (year-end) | `POST /generate-reports/ap-report { "endDate": "2025-12-31" }` |
|
|
233
|
+
| FA Register | `POST /generate-reports/fixed-assets-summary {}` |
|
|
234
|
+
| Tax Ledger (full year) | `POST /generate-reports/vat-ledger { "startDate": "2025-01-01", "endDate": "2025-12-31" }` |
|
|
235
|
+
| Equity Movement | `POST /generate-reports/equity-movement { "primarySnapshotStartDate": "2025-01-01", "primarySnapshotEndDate": "2025-12-31" }` |
|
|
236
|
+
|
|
237
|
+
**Supporting schedules to prepare:**
|
|
238
|
+
- Bank reconciliation statements for each bank account at year-end
|
|
239
|
+
- ECL provision calculation workpaper (from Q4 Step Q2)
|
|
240
|
+
- Fixed asset movement schedule (additions, disposals, depreciation, NBV)
|
|
241
|
+
- Intercompany balance confirmation letters (if multi-entity)
|
|
242
|
+
- Loan amortization schedules with principal/interest split
|
|
243
|
+
- Provision schedules with movement analysis
|
|
244
|
+
|
|
245
|
+
**Conditional:** Always for audited entities. For non-audited SMBs, at minimum prepare TB + BS + P&L for tax filing purposes.
|
|
246
|
+
|
|
247
|
+
### Step Y7: Final lock date
|
|
248
|
+
|
|
249
|
+
Lock the entire fiscal year. This prevents any accidental or unauthorized entries into the closed year.
|
|
250
|
+
|
|
251
|
+
**Best practice:** Set the org lock date to the last day of the fiscal year (e.g., `2025-12-31`).
|
|
252
|
+
|
|
253
|
+
**Important considerations:**
|
|
254
|
+
- Confirm with the auditor that they have no remaining adjustments before locking. Many auditors request a "soft close" first, with the hard lock applied after audit adjustments are posted.
|
|
255
|
+
- If using an audit adjustments period (e.g., January 1–15 of the new year for audit entries), set the lock date after those entries are complete.
|
|
256
|
+
- Once locked, reopening requires admin action and should be documented.
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## Phase 9: Annual Verification
|
|
261
|
+
|
|
262
|
+
Run the standard period verification (see `references/building-blocks.md` — Period Verification Pattern) for the full year, plus these annual-specific checks.
|
|
263
|
+
|
|
264
|
+
### Standard verification (full year)
|
|
265
|
+
|
|
266
|
+
```
|
|
267
|
+
POST /generate-reports/trial-balance
|
|
268
|
+
{ "startDate": "2025-01-01", "endDate": "2025-12-31" }
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
```
|
|
272
|
+
POST /generate-reports/profit-and-loss
|
|
273
|
+
{ "primarySnapshotDate": "2025-12-31", "secondarySnapshotDate": "2025-01-01" }
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
```
|
|
277
|
+
POST /generate-reports/balance-sheet
|
|
278
|
+
{ "primarySnapshotDate": "2025-12-31" }
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
### Annual-specific checks
|
|
282
|
+
|
|
283
|
+
**CYE rollover check:**
|
|
284
|
+
- Current Year Earnings at year-end = Net profit per the annual P&L
|
|
285
|
+
- After the new FY opens: CYE resets to zero, Retained Earnings increases by the prior year's net profit (less dividends)
|
|
286
|
+
- Total equity movement = Net profit - Dividends declared + Other equity movements (capital injection, etc.)
|
|
287
|
+
|
|
288
|
+
**Annual P&L vs monthly P&Ls sum:**
|
|
289
|
+
- Generate P&L for each of the 12 months individually
|
|
290
|
+
- Sum all 12 monthly net profit figures
|
|
291
|
+
- This sum MUST equal the annual P&L net profit
|
|
292
|
+
- If it doesn't, there's a timing/posting error — most commonly a journal posted to a month that was supposed to be locked
|
|
293
|
+
|
|
294
|
+
**FA register reconciliation:**
|
|
295
|
+
- NBV per FA register = Cost less accumulated depreciation per balance sheet
|
|
296
|
+
- Depreciation expense per FA register = Depreciation expense per P&L
|
|
297
|
+
- Asset count per FA register = physical count (if performed)
|
|
298
|
+
- Any fully depreciated assets still in use should be noted but not removed from register
|
|
299
|
+
|
|
300
|
+
**Provision balances:**
|
|
301
|
+
- Each provision on the balance sheet has documented support (IAS 37 criteria met)
|
|
302
|
+
- Provision movement = Opening + New provisions + Unwinding - Utilizations - Releases
|
|
303
|
+
- Unwinding total for the year = sum of four quarterly unwinding entries
|
|
304
|
+
|
|
305
|
+
**Intercompany elimination (if consolidating):**
|
|
306
|
+
- All intercompany balances net to zero across the group
|
|
307
|
+
- Intercompany revenue/expense eliminated on consolidation
|
|
308
|
+
- No intercompany profit in inventory or fixed assets (if applicable)
|
|
309
|
+
|
|
310
|
+
---
|
|
311
|
+
|
|
312
|
+
## Year-End Close Checklist (Quick Reference)
|
|
313
|
+
|
|
314
|
+
| # | Step | Phase | Conditional | Recipe/Calc |
|
|
315
|
+
|---|------|-------|-------------|-------------|
|
|
316
|
+
| 1–18 | Q1 Month 1 close | Monthly | Always | See month-end-close.md |
|
|
317
|
+
| 1–18 | Q1 Month 2 close | Monthly | Always | See month-end-close.md |
|
|
318
|
+
| 1–18 | Q1 Month 3 close | Monthly | Always | See month-end-close.md |
|
|
319
|
+
| Q1–Q5 | Q1 quarterly extras | Quarterly | See quarter-end-close.md | See quarter-end-close.md |
|
|
320
|
+
| 1–18 | Q2 Month 1 close | Monthly | Always | See month-end-close.md |
|
|
321
|
+
| 1–18 | Q2 Month 2 close | Monthly | Always | See month-end-close.md |
|
|
322
|
+
| 1–18 | Q2 Month 3 close | Monthly | Always | See month-end-close.md |
|
|
323
|
+
| Q1–Q5 | Q2 quarterly extras | Quarterly | See quarter-end-close.md | See quarter-end-close.md |
|
|
324
|
+
| 1–18 | Q3 Month 1 close | Monthly | Always | See month-end-close.md |
|
|
325
|
+
| 1–18 | Q3 Month 2 close | Monthly | Always | See month-end-close.md |
|
|
326
|
+
| 1–18 | Q3 Month 3 close | Monthly | Always | See month-end-close.md |
|
|
327
|
+
| Q1–Q5 | Q3 quarterly extras | Quarterly | See quarter-end-close.md | See quarter-end-close.md |
|
|
328
|
+
| 1–18 | Q4 Month 1 close | Monthly | Always | See month-end-close.md |
|
|
329
|
+
| 1–18 | Q4 Month 2 close | Monthly | Always | See month-end-close.md |
|
|
330
|
+
| 1–18 | Q4 Month 3 close | Monthly | Always | See month-end-close.md |
|
|
331
|
+
| Q1–Q5 | Q4 quarterly extras | Quarterly | See quarter-end-close.md | See quarter-end-close.md |
|
|
332
|
+
| Y1 | Final depreciation run | Annual | If fixed assets exist | declining-balance / `jaz calc depreciation` |
|
|
333
|
+
| Y2a | Leave balance true-up | Annual | If tracking leave | employee-accruals |
|
|
334
|
+
| Y2b | Bonus true-up | Annual | If bonus schemes exist | employee-accruals |
|
|
335
|
+
| Y2c | Provision reassessment | Annual | If IAS 37 provisions exist | provisions |
|
|
336
|
+
| Y3 | Dividend declaration & payment | Annual | If declaring dividends | dividend |
|
|
337
|
+
| Y4 | Retained earnings rollover (CYE) | Annual | Always (verify only) | — |
|
|
338
|
+
| Y5 | Final GST/VAT reconciliation | Annual | Always (if GST-registered) | gst-vat-filing job |
|
|
339
|
+
| Y6 | Audit preparation | Annual | Always (scope varies) | audit-prep job |
|
|
340
|
+
| Y7 | Final lock date | Annual | Always | — |
|
|
341
|
+
| V | Annual verification | Verification | Always | — |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: transaction-recipes
|
|
3
|
-
version: 2.
|
|
3
|
+
version: 2.8.0
|
|
4
4
|
description: 16 IFRS-compliant recipes for complex multi-step accounting in Jaz — prepaid amortization, deferred revenue, loan schedules, IFRS 16 leases, hire purchase, fixed deposits, asset disposal, FX revaluation, ECL provisioning, IAS 37 provisions, dividends, intercompany, and capital WIP. Each recipe includes journal entries, capsule structure, and verification steps. Paired with 10 financial calculators that produce execution-ready blueprints with workings.
|
|
5
5
|
license: MIT
|
|
6
6
|
compatibility: Works with Claude Code, Claude Cowork, Claude.ai, and any agent that reads markdown. For API payloads, load the jaz-api skill alongside this one.
|