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,268 @@
|
|
|
1
|
+
# Quarter-End Close
|
|
2
|
+
|
|
3
|
+
The quarterly close builds on the monthly close. It is month-end close repeated three times, plus a set of quarterly-specific adjustments that only make sense at three-month intervals. For most SMBs, this adds half a day to a day of extra work on top of the regular month-end.
|
|
4
|
+
|
|
5
|
+
**CLI:** `jaz jobs quarter-end --period 2025-Q1 [--currency SGD] [--json]`
|
|
6
|
+
|
|
7
|
+
**Standalone vs Incremental:**
|
|
8
|
+
- **Standalone (default):** Generates the full plan — all monthly close steps for each of the three months in the quarter, followed by the quarterly extras. Use this when months haven't been closed yet.
|
|
9
|
+
- **Incremental (`--incremental`):** Generates only the quarterly extras below. Use this when all three months are already closed and locked.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Phase 1–5: Monthly Close (x3)
|
|
14
|
+
|
|
15
|
+
Complete the full month-end close for each month in the quarter. Each month follows the same 5-phase, 18-step process.
|
|
16
|
+
|
|
17
|
+
**Reference:** `references/month-end-close.md`
|
|
18
|
+
|
|
19
|
+
| Quarter | Month 1 | Month 2 | Month 3 |
|
|
20
|
+
|---------|---------|---------|---------|
|
|
21
|
+
| Q1 (Jan–Mar) | January close | February close | March close |
|
|
22
|
+
| Q2 (Apr–Jun) | April close | May close | June close |
|
|
23
|
+
| Q3 (Jul–Sep) | July close | August close | September close |
|
|
24
|
+
| Q4 (Oct–Dec) | October close | November close | December close |
|
|
25
|
+
|
|
26
|
+
**Important:** Close months in order. Month 1 must be locked before starting Month 2, and Month 2 before Month 3. The quarterly extras run after Month 3 is closed.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Phase 6: Quarterly Extras
|
|
31
|
+
|
|
32
|
+
These steps run once per quarter, after all three months are closed. They address items that are reviewed less frequently or that accumulate over the quarter.
|
|
33
|
+
|
|
34
|
+
### Step Q1: GST/VAT filing preparation
|
|
35
|
+
|
|
36
|
+
Generate the tax ledger for the full quarter and reconcile input/output tax for filing.
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
POST /generate-reports/vat-ledger
|
|
40
|
+
{ "startDate": "2025-01-01", "endDate": "2025-03-31" }
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**What to do:**
|
|
44
|
+
1. Pull the quarterly tax ledger report
|
|
45
|
+
2. Review output tax (GST on sales) — verify every taxable invoice is included and the correct tax code was applied
|
|
46
|
+
3. Review input tax (GST on purchases) — verify every claimable bill is included, no blocked input tax claimed
|
|
47
|
+
4. Identify discrepancies — missing invoices/bills, wrong tax codes, exempt items coded as taxable
|
|
48
|
+
5. Cross-reference totals to the GST return form
|
|
49
|
+
|
|
50
|
+
**For Singapore (IRAS):**
|
|
51
|
+
- Quarterly filing (standard GST-registered businesses)
|
|
52
|
+
- File via myTax Portal within one month after quarter end
|
|
53
|
+
- Box 1 (Total Sales): total revenue incl. zero-rated and exempt
|
|
54
|
+
- Box 6 (Output Tax): from tax ledger output tax total
|
|
55
|
+
- Box 7 (Input Tax): from tax ledger input tax total (net of blocked items)
|
|
56
|
+
|
|
57
|
+
**For Philippines (BIR):**
|
|
58
|
+
- Monthly VAT return (BIR Form 2550M) for each month in the quarter
|
|
59
|
+
- Quarterly VAT return (BIR Form 2550Q) for the full quarter
|
|
60
|
+
- Input VAT carried forward if excess over output VAT
|
|
61
|
+
- File within 25 days after the close of the taxable quarter
|
|
62
|
+
|
|
63
|
+
**Verification:** Output tax per tax ledger should equal sum of GST on all sales invoices for the quarter. Input tax per tax ledger should equal sum of GST on all purchase bills (excluding blocked items). Any difference = data entry error to investigate.
|
|
64
|
+
|
|
65
|
+
**See also:** `references/gst-vat-filing.md` for the full GST/VAT filing job.
|
|
66
|
+
|
|
67
|
+
### Step Q2: ECL / bad debt provision — formal review
|
|
68
|
+
|
|
69
|
+
The monthly close includes a quick bad debt check (Step 13). The quarterly review is the formal one — full aged receivables analysis with loss rates applied.
|
|
70
|
+
|
|
71
|
+
**Recipe:** `bad-debt-provision` | **Calculator:** `jaz calc ecl`
|
|
72
|
+
|
|
73
|
+
**Step-by-step:**
|
|
74
|
+
|
|
75
|
+
1. Pull the AR aging report as at quarter-end:
|
|
76
|
+
```
|
|
77
|
+
POST /generate-reports/ar-report
|
|
78
|
+
{ "endDate": "2025-03-31" }
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
2. Categorize receivables into aging buckets (current, 30d, 60d, 90d, 120d+)
|
|
82
|
+
|
|
83
|
+
3. Apply historical loss rates to each bucket:
|
|
84
|
+
```bash
|
|
85
|
+
jaz calc ecl --current 100000 --30d 50000 --60d 20000 --90d 10000 --120d 5000 --rates 0.5,2,5,10,50
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
4. Compare the calculated provision to the existing Allowance for Doubtful Debts balance on the trial balance
|
|
89
|
+
|
|
90
|
+
5. Post an adjustment journal for the difference:
|
|
91
|
+
```
|
|
92
|
+
POST /journals
|
|
93
|
+
{
|
|
94
|
+
"valueDate": "2025-03-31",
|
|
95
|
+
"reference": "QE-ECL-Q1-25",
|
|
96
|
+
"journalEntries": [
|
|
97
|
+
{ "accountResourceId": "<bad-debt-expense>", "amount": 1250.00, "type": "DEBIT", "name": "ECL provision adjustment — Q1 2025" },
|
|
98
|
+
{ "accountResourceId": "<allowance-doubtful-debts>", "amount": 1250.00, "type": "CREDIT", "name": "ECL provision adjustment — Q1 2025" }
|
|
99
|
+
]
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**Note:** If the required provision has decreased, reverse the direction (DR Allowance, CR Bad Debt Expense). Some firms use a separate recovery account for write-backs.
|
|
104
|
+
|
|
105
|
+
**Conditional:** Always perform the formal review at quarter-end, even if the monthly quick checks showed no change. Document the analysis — auditors will ask for it.
|
|
106
|
+
|
|
107
|
+
### Step Q3: Bonus accrual true-up
|
|
108
|
+
|
|
109
|
+
Review quarterly bonus obligations and adjust the accrual if estimates have changed.
|
|
110
|
+
|
|
111
|
+
**Recipe:** `employee-accruals` (bonus component)
|
|
112
|
+
|
|
113
|
+
During monthly closes, you accrue a fixed monthly estimate (1/12 of expected annual bonus). At quarter-end, re-assess whether the estimate is still accurate based on actual performance.
|
|
114
|
+
|
|
115
|
+
**Step-by-step:**
|
|
116
|
+
|
|
117
|
+
1. Verify three months of bonus accruals exist. Search for journals in the Employee Benefits capsule:
|
|
118
|
+
```
|
|
119
|
+
POST /journals/search
|
|
120
|
+
{
|
|
121
|
+
"filter": {
|
|
122
|
+
"valueDate": { "between": ["2025-01-01", "2025-03-31"] }
|
|
123
|
+
},
|
|
124
|
+
"sort": { "sortBy": ["valueDate"], "order": "ASC" },
|
|
125
|
+
"limit": 100
|
|
126
|
+
}
|
|
127
|
+
```
|
|
128
|
+
Filter results by capsule or reference prefix (e.g., "BONUS-ACCR") to isolate bonus entries.
|
|
129
|
+
|
|
130
|
+
2. Sum the year-to-date accrual and compare to the revised full-year estimate
|
|
131
|
+
|
|
132
|
+
3. If the estimate has changed, post a true-up journal:
|
|
133
|
+
```
|
|
134
|
+
POST /journals
|
|
135
|
+
{
|
|
136
|
+
"valueDate": "2025-03-31",
|
|
137
|
+
"reference": "QE-BONUS-Q1-25",
|
|
138
|
+
"journalEntries": [
|
|
139
|
+
{ "accountResourceId": "<bonus-expense>", "amount": 2000.00, "type": "DEBIT", "name": "Bonus accrual true-up — Q1 2025" },
|
|
140
|
+
{ "accountResourceId": "<bonus-liability>", "amount": 2000.00, "type": "CREDIT", "name": "Bonus accrual true-up — Q1 2025" }
|
|
141
|
+
]
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**Conditional:** Only if the business has bonus schemes. Most SMBs with 5+ employees and a performance bonus structure should review quarterly. If no change to estimate, document the review but skip the journal.
|
|
146
|
+
|
|
147
|
+
### Step Q4: Intercompany reconciliation
|
|
148
|
+
|
|
149
|
+
If the business operates multiple entities (e.g., SG parent + PH subsidiary), reconcile intercompany balances and post settlement journals.
|
|
150
|
+
|
|
151
|
+
**Recipe:** `intercompany`
|
|
152
|
+
|
|
153
|
+
**Step-by-step:**
|
|
154
|
+
|
|
155
|
+
1. Pull the trial balance for each entity and isolate intercompany receivable/payable accounts:
|
|
156
|
+
```
|
|
157
|
+
POST /generate-reports/trial-balance
|
|
158
|
+
{ "startDate": "2025-01-01", "endDate": "2025-03-31" }
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
2. Verify that Entity A's intercompany receivable = Entity B's intercompany payable (and vice versa). Differences indicate:
|
|
162
|
+
- Transactions recorded in one entity but not the other
|
|
163
|
+
- Timing differences (one entity booked end-of-quarter, the other booked beginning of next)
|
|
164
|
+
- FX differences if the entities operate in different currencies
|
|
165
|
+
|
|
166
|
+
3. Post matching journals in both entities to clear discrepancies
|
|
167
|
+
|
|
168
|
+
4. If settling (netting off balances), post settlement journals:
|
|
169
|
+
```
|
|
170
|
+
POST /journals
|
|
171
|
+
{
|
|
172
|
+
"valueDate": "2025-03-31",
|
|
173
|
+
"reference": "QE-IC-SETTLE-Q1-25",
|
|
174
|
+
"journalEntries": [
|
|
175
|
+
{ "accountResourceId": "<intercompany-payable>", "amount": 15000.00, "type": "DEBIT", "name": "IC settlement — Entity A, Q1 2025" },
|
|
176
|
+
{ "accountResourceId": "<bank-account>", "amount": 15000.00, "type": "CREDIT", "name": "IC settlement — Entity A, Q1 2025" }
|
|
177
|
+
]
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
**Conditional:** Only if multi-entity. Single-entity SMBs skip this entirely.
|
|
182
|
+
|
|
183
|
+
### Step Q5: Provision unwinding
|
|
184
|
+
|
|
185
|
+
If IAS 37 provisions exist (e.g., restoration obligations, warranty provisions, legal claims), post the quarterly discount unwinding journal.
|
|
186
|
+
|
|
187
|
+
**Recipe:** `provisions` | **Calculator:** `jaz calc provision`
|
|
188
|
+
|
|
189
|
+
Provisions measured at present value must have the discount unwound each period, recognizing the time value of money as a finance cost.
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
jaz calc provision --amount 500000 --rate 4 --term 60 --start-date 2025-01-01 --json
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
The calculator generates the unwinding schedule. Post the quarterly entry:
|
|
196
|
+
|
|
197
|
+
```
|
|
198
|
+
POST /journals
|
|
199
|
+
{
|
|
200
|
+
"valueDate": "2025-03-31",
|
|
201
|
+
"reference": "QE-PROV-UNWIND-Q1-25",
|
|
202
|
+
"journalEntries": [
|
|
203
|
+
{ "accountResourceId": "<finance-cost>", "amount": 4975.00, "type": "DEBIT", "name": "Provision discount unwinding — Q1 2025" },
|
|
204
|
+
{ "accountResourceId": "<provision-liability>", "amount": 4975.00, "type": "CREDIT", "name": "Provision discount unwinding — Q1 2025" }
|
|
205
|
+
]
|
|
206
|
+
}
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
**Conditional:** Only if IAS 37 provisions exist with a discounting component. Most simple SMBs won't have these. Common in businesses with lease restoration obligations or long-term warranty commitments.
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## Phase 7: Quarterly Verification
|
|
214
|
+
|
|
215
|
+
Run the standard period verification (see `references/building-blocks.md` — Period Verification Pattern) for the full quarter, plus these quarterly-specific checks.
|
|
216
|
+
|
|
217
|
+
### Standard verification (full quarter)
|
|
218
|
+
|
|
219
|
+
```
|
|
220
|
+
POST /generate-reports/trial-balance
|
|
221
|
+
{ "startDate": "2025-01-01", "endDate": "2025-03-31" }
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
```
|
|
225
|
+
POST /generate-reports/profit-and-loss
|
|
226
|
+
{ "primarySnapshotDate": "2025-03-31", "secondarySnapshotDate": "2025-01-01" }
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
```
|
|
230
|
+
POST /generate-reports/balance-sheet
|
|
231
|
+
{ "primarySnapshotDate": "2025-03-31" }
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
### Quarterly-specific checks
|
|
235
|
+
|
|
236
|
+
**GST reconciliation:**
|
|
237
|
+
- Tax ledger output tax total = sum of GST on all sales invoices for Q1
|
|
238
|
+
- Tax ledger input tax total = sum of GST on all purchase bills (less blocked items) for Q1
|
|
239
|
+
- Net GST payable/refundable per tax ledger matches the amount on the GST return form
|
|
240
|
+
- If you already filed monthly VAT returns (PH), quarterly total should equal sum of the three monthly returns
|
|
241
|
+
|
|
242
|
+
**ECL provision balance:**
|
|
243
|
+
- Allowance for Doubtful Debts on the balance sheet matches the calculated ECL from Step Q2
|
|
244
|
+
- Bad Debt Expense on the P&L is reasonable relative to revenue
|
|
245
|
+
|
|
246
|
+
**Intercompany balance check (if multi-entity):**
|
|
247
|
+
- Entity A's intercompany receivable = Entity B's intercompany payable
|
|
248
|
+
- Net intercompany position across all entities = zero (eliminates on consolidation)
|
|
249
|
+
|
|
250
|
+
**Bonus accrual reasonableness:**
|
|
251
|
+
- Bonus Liability on the balance sheet = (monthly accrual x months elapsed) + any true-ups
|
|
252
|
+
- Bonus Expense on the P&L is proportional to the period (e.g., Q1 = ~25% of full-year estimate)
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## Quarter-End Close Checklist (Quick Reference)
|
|
257
|
+
|
|
258
|
+
| # | Step | Phase | Conditional | Recipe/Calc |
|
|
259
|
+
|---|------|-------|-------------|-------------|
|
|
260
|
+
| 1–18 | Month 1 close (all steps) | Monthly | Always | See month-end-close.md |
|
|
261
|
+
| 1–18 | Month 2 close (all steps) | Monthly | Always | See month-end-close.md |
|
|
262
|
+
| 1–18 | Month 3 close (all steps) | Monthly | Always | See month-end-close.md |
|
|
263
|
+
| Q1 | GST/VAT filing preparation | Quarterly | Always (if GST-registered) | gst-vat-filing job |
|
|
264
|
+
| Q2 | ECL / bad debt provision review | Quarterly | Always | bad-debt-provision / `jaz calc ecl` |
|
|
265
|
+
| Q3 | Bonus accrual true-up | Quarterly | If bonus schemes exist | employee-accruals |
|
|
266
|
+
| Q4 | Intercompany reconciliation | Quarterly | If multi-entity | intercompany |
|
|
267
|
+
| Q5 | Provision unwinding | Quarterly | If IAS 37 provisions exist | provisions / `jaz calc provision` |
|
|
268
|
+
| V | Quarterly verification | Verification | Always | — |
|
|
@@ -0,0 +1,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.
|