jaz-clio 5.74.2 → 6.0.1
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/README.md +8 -8
- package/assets/skills/api/SKILL.md +3 -36
- package/assets/skills/cli/SKILL.md +18 -28
- package/assets/skills/cli/references/agent-gotchas.md +2 -2
- package/assets/skills/cli/references/command-catalog.md +15 -31
- package/assets/skills/cli/references/common-workflows.md +19 -28
- package/assets/skills/conversion/SKILL.md +1 -1
- package/assets/skills/jaz-kit/SKILL.md +1 -1
- package/assets/skills/jaz-kit/references/flows.md +2 -2
- package/assets/skills/jaz-pseudo-sql/SKILL.md +1 -1
- package/assets/skills/jobs/SKILL.md +42 -42
- package/assets/skills/jobs/references/audit-prep.md +8 -8
- package/assets/skills/jobs/references/bank-match.md +1 -1
- package/assets/skills/jobs/references/bank-recon.md +6 -6
- package/assets/skills/jobs/references/building-blocks.md +49 -30
- package/assets/skills/jobs/references/credit-control.md +13 -12
- package/assets/skills/jobs/references/document-collection.md +6 -6
- package/assets/skills/jobs/references/fa-review.md +28 -29
- package/assets/skills/jobs/references/gst-vat-filing.md +3 -3
- package/assets/skills/jobs/references/month-end-close.md +37 -33
- package/assets/skills/jobs/references/payment-run.md +3 -4
- package/assets/skills/jobs/references/quarter-end-close.md +20 -18
- package/assets/skills/jobs/references/supplier-recon.md +5 -5
- package/assets/skills/jobs/references/year-end-close.md +31 -21
- package/assets/skills/transaction-recipes/SKILL.md +54 -117
- package/assets/skills/transaction-recipes/references/accrued-expenses.md +86 -61
- package/assets/skills/transaction-recipes/references/asset-disposal.md +135 -93
- package/assets/skills/transaction-recipes/references/bad-debt-provision.md +87 -65
- package/assets/skills/transaction-recipes/references/bank-loan.md +104 -70
- package/assets/skills/transaction-recipes/references/building-blocks.md +168 -72
- package/assets/skills/transaction-recipes/references/capital-wip.md +9 -8
- package/assets/skills/transaction-recipes/references/declining-balance.md +91 -64
- package/assets/skills/transaction-recipes/references/deferred-revenue.md +105 -68
- package/assets/skills/transaction-recipes/references/dividend.md +100 -64
- package/assets/skills/transaction-recipes/references/employee-accruals.md +111 -73
- package/assets/skills/transaction-recipes/references/fixed-deposit.md +116 -63
- package/assets/skills/transaction-recipes/references/fx-revaluation.md +28 -19
- package/assets/skills/transaction-recipes/references/hire-purchase.md +45 -44
- package/assets/skills/transaction-recipes/references/ifrs16-lease.md +108 -73
- package/assets/skills/transaction-recipes/references/intercompany.md +8 -6
- package/assets/skills/transaction-recipes/references/prepaid-amortization.md +104 -65
- package/assets/skills/transaction-recipes/references/provisions.md +116 -64
- package/assets/templates/platform-rules/jaz-agent-rules.md +10 -9
- package/cli.mjs +528 -606
- package/package.json +1 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Fixed Asset Review
|
|
2
2
|
|
|
3
|
-
> Annual housekeeping of the FA register. Identify assets requiring disposal/write-off, reconcile register to TB, verify Jaz auto-depreciation matches schedules. Walk the steps below in order, calling the named platform tools directly.
|
|
3
|
+
> Annual housekeeping of the FA register. Identify assets requiring disposal/write-off, reconcile register to TB, verify Jaz auto-depreciation matches schedules. Walk the steps below in order, calling the named platform tools directly.
|
|
4
4
|
|
|
5
|
-
## Tools
|
|
5
|
+
## Tools and calculators this job uses
|
|
6
6
|
|
|
7
7
|
### Platform tools
|
|
8
8
|
- **`search_fixed_assets(filter: {status: {in: ['ACTIVE', 'DISPOSED', 'DISCARDED']}}, limit: 200)`**, step 1: enumerate FAs. Paginate.
|
|
@@ -11,24 +11,24 @@
|
|
|
11
11
|
- **`generate_fa_recon_summary(primarySnapshotStartDate: <year-start>, primarySnapshotEndDate: <year-end>)`**, step 3: reconcile movement (opening + additions − disposals − depreciation = closing).
|
|
12
12
|
- **`generate_general_ledger(accountResourceIds: [<FA category GL>], startDate, endDate)`**, step 4: per-FA-category GL movement vs FA register.
|
|
13
13
|
- **`mark_fixed_asset_sold(resourceId: <id>, depreciationEndDate, assetDisposalGainLossAccountResourceId, saleBusinessTransactionType, saleItemResourceId)` / `discard_fixed_asset(resourceId: <id>, disposalDate, depreciationEndDate)`**, step 5: status updates for disposals. Mirror endpoints `POST /api/v1/mark-as-sold/fixed-assets` (sale) / `POST /api/v1/discard-fixed-assets/{id}` (scrap).
|
|
14
|
-
- **`
|
|
15
|
-
- **`bulk_update_journals(items: [{resourceId: <id>, saveAsDraft: false}, ...])`**, step 5 / 6: finalize disposal journals + any pending DDB / 150DB depreciation DRAFTs from
|
|
14
|
+
- **`calculate(type: 'asset-disposal', ...)`**, then `create_capsule` + `create_journal` with `capsuleResourceId`, step 5: per disposal identified during review (see the `asset-disposal` recipe).
|
|
15
|
+
- **`bulk_update_journals(items: [{resourceId: <id>, saveAsDraft: false}, ...])`**, step 5 / 6: finalize disposal journals + any pending DDB / 150DB depreciation DRAFTs posted from a `depreciation` schedule.
|
|
16
16
|
|
|
17
17
|
### Calculators (cross-check, no API key needed)
|
|
18
18
|
- **`clio calc depreciation --cost --salvage --life --method --frequency annual --json`**: step 4 per-asset cross-check.
|
|
19
|
-
- **`clio calc asset-disposal`**: step 5 per-disposal
|
|
19
|
+
- **`clio calc asset-disposal`**: step 5 per-disposal gain/loss (the CLI form of `calculate(type: 'asset-disposal', ...)`).
|
|
20
20
|
|
|
21
21
|
### Cross-references
|
|
22
22
|
- Run as part of year-end; the FA review feeds audit-prep + Form C-S capital allowances.
|
|
23
23
|
- Sibling jobs: `audit-prep.md` step 8 (auditor reviews FA register + recon summary), `month-end-close.md` step 9 (monthly depreciation; this job is the periodic comprehensive review).
|
|
24
|
-
-
|
|
24
|
+
- Calculator types used: `asset-disposal`, `depreciation` (DDB / 150DB). See the transaction-recipes skill for the pattern.
|
|
25
25
|
- API rules: `jaz-api/SKILL.md` rules 91-92c (fixed-asset endpoints).
|
|
26
26
|
|
|
27
27
|
---
|
|
28
28
|
|
|
29
29
|
## Steps
|
|
30
30
|
|
|
31
|
-
Walk steps 1-8 below.
|
|
31
|
+
Walk steps 1-8 below.
|
|
32
32
|
|
|
33
33
|
## Step 1: Enumerate FAs
|
|
34
34
|
|
|
@@ -45,7 +45,7 @@ For each ACTIVE asset, flag for practitioner attention:
|
|
|
45
45
|
- **Recently acquired without `effectiveLife`**: depreciation can't run; halt and surface.
|
|
46
46
|
- **Pre-flagged by the user as a disposal candidate**: act on it.
|
|
47
47
|
- **Damaged / no longer in use** (per practitioner inspection): write off.
|
|
48
|
-
- **Mid-life disposals** (sold or traded in during the period): per
|
|
48
|
+
- **Mid-life disposals** (sold or traded in during the period): per step 5.
|
|
49
49
|
|
|
50
50
|
## Step 3: FA register reconciliation
|
|
51
51
|
|
|
@@ -58,7 +58,7 @@ Keep both the FA summary and the recon summary. Assert per FA category:
|
|
|
58
58
|
- `closingNbv == openingNbv + additions - disposals - depreciation` (the recon formula).
|
|
59
59
|
- Sum of per-asset NBV in the register equals TB `<FA cost> - <Accumulated Depreciation>` line for that category.
|
|
60
60
|
|
|
61
|
-
If mismatch beyond the materiality threshold: investigate via `generate_general_ledger(accountResourceIds: [<FA category cost GL>], startDate, endDate)`. Common: a disposal
|
|
61
|
+
If mismatch beyond the materiality threshold: investigate via `generate_general_ledger(accountResourceIds: [<FA category cost GL>], startDate, endDate)`. Common: a disposal journal was posted but the step 5 `mark_fixed_asset_sold` / `discard_fixed_asset` was missed; Jaz continues auto-depreciating.
|
|
62
62
|
|
|
63
63
|
## Step 4: Depreciation cross-check
|
|
64
64
|
|
|
@@ -67,8 +67,8 @@ For each ACTIVE SL asset (Jaz auto-depreciates):
|
|
|
67
67
|
- Compare to actual `generate_general_ledger(accountResourceIds: [<Depreciation Expense for this category>], startDate: <year-start>, endDate: <year-end>)` movement.
|
|
68
68
|
- Should match within rounding ($0.12 tolerance for full-year SL).
|
|
69
69
|
|
|
70
|
-
For each ACTIVE DDB / 150DB asset (
|
|
71
|
-
- Per capsule: the 12 monthly DRAFT depreciation journals should already be FINALIZED via the monthly close. This cannot be verified with a filter: journals
|
|
70
|
+
For each ACTIVE DDB / 150DB asset (depreciated by journals you post from a `depreciation` schedule, see the `depreciation` recipe):
|
|
71
|
+
- Per capsule: the 12 monthly DRAFT depreciation journals should already be FINALIZED via the monthly close. This cannot be verified with a filter: journals cannot be searched by capsule or fixed asset (measured 2026-09-07; `get_journal` on one journal does return its `capsule`), so report the capsule and its `totalTransactions` count for the practitioner to check, rather than searching by date.
|
|
72
72
|
- If the practitioner identifies remaining DRAFTs, finalize those specific resourceIds with `bulk_update_journals(items: [{resourceId: <id>, saveAsDraft: false}, ...])`, never a set collected by an unscoped search.
|
|
73
73
|
|
|
74
74
|
Cross-check via `clio calc depreciation --frequency annual --json` per asset; auditor will sample-test.
|
|
@@ -78,31 +78,30 @@ Cross-check via `clio calc depreciation --frequency annual --json` per asset; au
|
|
|
78
78
|
For each disposal identified in step 2:
|
|
79
79
|
|
|
80
80
|
```
|
|
81
|
-
|
|
82
|
-
// Accounts, capsule and counterparty are not plan_recipe params: execute_recipe resolves accounts from the CoA and takes bankAccountName / contactName.
|
|
83
|
-
recipe: 'asset-disposal',
|
|
84
|
-
cost, salvageValue, usefulLifeYears, acquisitionDate, disposalDate, proceeds, method,
|
|
85
|
-
...
|
|
86
|
-
)
|
|
87
|
-
execute_recipe(...)
|
|
88
|
-
update_journal(resourceId: <disposal journal id>, saveAsDraft: false)
|
|
81
|
+
calculate(type: 'asset-disposal', cost, salvageValue, usefulLifeYears, acquisitionDate, disposalDate, proceeds, method)
|
|
89
82
|
```
|
|
90
83
|
|
|
91
|
-
|
|
84
|
+
The calculator returns the accumulated depreciation, net book value and gain or loss; it posts nothing. These assets are in the register, and the register books a disposal itself, so do NOT also post the calculator's full disposal journal (that books the disposal twice). Use its figures as the cross-check.
|
|
85
|
+
|
|
92
86
|
```
|
|
93
|
-
|
|
94
|
-
|
|
87
|
+
// Sale: post the proceeds as the sale entry (the credit line must be on the asset's fixed-asset account), then mark sold against that line
|
|
88
|
+
create_capsule(capsuleTypeResourceId: <Asset Disposal type id, from list_capsule_types>, title: <blueprint.capsuleName>)
|
|
89
|
+
create_journal(valueDate: <disposalDate>, autoReference: true, journalEntries: [Dr <bank> proceeds, Cr <asset account> proceeds], saveAsDraft: false, capsuleResourceId: <capsule id>)
|
|
90
|
+
mark_fixed_asset_sold(resourceId: <asset id>, depreciationEndDate, assetDisposalGainLossAccountResourceId, saleBusinessTransactionType: 'JOURNAL_MANUAL', saleItemResourceId: <the journal's credit line id>)
|
|
91
|
+
// Write-off with no sale: no journal
|
|
95
92
|
discard_fixed_asset(resourceId: <asset id>, disposalDate, depreciationEndDate)
|
|
96
93
|
```
|
|
97
94
|
|
|
95
|
+
Full walk-through, including an asset that is not in the register: the `asset-disposal` recipe.
|
|
96
|
+
|
|
98
97
|
For scrap / write-off (no proceeds): `discard_fixed_asset(...)`; its own description is "Discard (write off) a fixed asset". There is no `WRITTEN_OFF` status; the declared set is ACTIVE, ONGOING, COMPLETED, DRAFT, DISPOSED, SOLD, DISCARDED, CLOSED_OUT.
|
|
99
98
|
|
|
100
99
|
## Step 6: Write-off of fully depreciated unused assets
|
|
101
100
|
|
|
102
101
|
For assets at salvage value AND no longer in use:
|
|
103
102
|
- If salvage value > 0 and asset is to be retained at salvage: leave ACTIVE; no further depreciation.
|
|
104
|
-
- If salvage value > 0 and asset is to be scrapped:
|
|
105
|
-
- If salvage value = 0 and asset is to be scrapped: minimal P&L impact; the
|
|
103
|
+
- If salvage value > 0 and asset is to be scrapped: run step 5 with `proceeds: 0` → loss = salvage value.
|
|
104
|
+
- If salvage value = 0 and asset is to be scrapped: minimal P&L impact; the step 5 disposal journal is still required to clear the cost + accumulated depreciation balances against each other.
|
|
106
105
|
|
|
107
106
|
## Step 7: Per-category GL reconciliation
|
|
108
107
|
|
|
@@ -130,11 +129,11 @@ These feed `audit-prep.md` step 8 supporting schedules.
|
|
|
130
129
|
| Source | Error | Recovery |
|
|
131
130
|
|--------|-------|----------|
|
|
132
131
|
| Step 1 | `search_fixed_assets` returns more than the page limit | Paginate via `offset`. Most SMBs have <100 FAs. |
|
|
133
|
-
| Step 3 | Recon doesn't tie | Disposed asset still ACTIVE in register (the
|
|
132
|
+
| Step 3 | Recon doesn't tie | Disposed asset still ACTIVE in register (posting the disposal journal does not update the FA register; that is a separate call). Audit each disposal's status. |
|
|
134
133
|
| Step 4 | DDB / 150DB DRAFTs unfinalized | Likely a missed monthly close. Finalize the current ones and surface to the user; the auditor will otherwise see 12 months' depreciation in one period. |
|
|
135
134
|
| Step 4 | SL depreciation off by > $0.12 | A monthly depreciation period was skipped (asset created mid-month with mis-aligned `depreciationStartDate`). Reconcile per asset. |
|
|
136
|
-
| Step 5
|
|
137
|
-
| Step 6 | Trying to dispose an FA at NBV = 0 with no proceeds |
|
|
135
|
+
| Step 5 (`mark_fixed_asset_sold` / `discard_fixed_asset`) | 422 `pending_depreciation_journals` | DRAFT depreciation journals exist for periods after disposal date. **Do not select these with a filter**: journals cannot be narrowed to one fixed asset (`JournalFilter` has no `fixedAssetResourceId`, and a journal row carries no asset link), so a date+status search returns every DRAFT in the org and `delete_journal` over it would destroy unrelated work. Surface the asset and the blocking periods to the practitioner and let them identify the journals, then retry. |
|
|
136
|
+
| Step 6 | Trying to dispose an FA at NBV = 0 with no proceeds | The calculator still works but the journal only clears cost against accumulated depreciation, with no P&L effect. May be skippable; surface to practitioner. |
|
|
138
137
|
|
|
139
138
|
---
|
|
140
139
|
|
|
@@ -143,5 +142,5 @@ These feed `audit-prep.md` step 8 supporting schedules.
|
|
|
143
142
|
- `year-end-close.md`: runs this job for the year-end FA review; ask the user for any pre-flagged disposal candidates.
|
|
144
143
|
- `audit-prep.md` step 8: consumes the snapshot files for the audit pack.
|
|
145
144
|
- SG Form C-S statutory filing (see the SG Form C-S section in `SKILL.md`): capital allowances computation reads from the FA register; this job's reconciliation must be clean before the tax computation.
|
|
146
|
-
- `month-end-close.md` step 9: monthly depreciation (Jaz auto-SL +
|
|
147
|
-
-
|
|
145
|
+
- `month-end-close.md` step 9: monthly depreciation (Jaz auto-SL + DDB journals from the `depreciation` calculator); this job is the periodic comprehensive register review (typically annual).
|
|
146
|
+
- Calculator types: `asset-disposal` (per-disposal), `depreciation` (per-DDB-asset).
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# GST/VAT Filing
|
|
2
2
|
|
|
3
|
-
> Produce the filing-ready summary + supporting detail for IRAS F5 (SG) or BIR Form 2550Q (PH). Does NOT file; produces the numbers + supporting detail. Walk the steps below in order, calling the named platform tools directly.
|
|
3
|
+
> Produce the filing-ready summary + supporting detail for IRAS F5 (SG) or BIR Form 2550Q (PH). Does NOT file; produces the numbers + supporting detail. Walk the steps below in order, calling the named platform tools directly.
|
|
4
4
|
|
|
5
|
-
## Tools
|
|
5
|
+
## Tools and calculators this job uses
|
|
6
6
|
|
|
7
7
|
### Platform tools
|
|
8
8
|
- **`generate_vat_ledger(startDate: <period-start>, endDate: <period-end>)`**, step 1: the canonical tax ledger. Returns input + output tax totals + per-tax-profile breakdown.
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
|
|
24
24
|
## Steps
|
|
25
25
|
|
|
26
|
-
Walk steps 1-8 below.
|
|
26
|
+
Walk steps 1-8 below.
|
|
27
27
|
|
|
28
28
|
## Step 1: Pull the tax ledger
|
|
29
29
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Month-End Close
|
|
2
2
|
|
|
3
|
-
> The foundational close cadence: every quarter-end and year-end builds on it. For an SMB, 1-3 days depending on transaction volume. Walk the phases below in order, calling the named platform tools directly.
|
|
3
|
+
> The foundational close cadence: every quarter-end and year-end builds on it. For an SMB, 1-3 days depending on transaction volume. Walk the phases below in order, calling the named platform tools directly.
|
|
4
4
|
|
|
5
|
-
## Tools
|
|
5
|
+
## Tools and calculators this job uses
|
|
6
6
|
|
|
7
7
|
### Platform tools: pre-close gates
|
|
8
8
|
- **`search_invoices(filter: {valueDate: {between: [<period-start>, <period-end>]}}, sortBy: 'valueDate', sortOrder: 'ASC', limit: 200)`**: step 1: confirm sales invoices entered. Paginate via `offset`.
|
|
@@ -11,13 +11,15 @@
|
|
|
11
11
|
- **`generate_aged_ar(endDate: <date>)` / `generate_aged_ap(endDate: <date>)`**: steps 4-5: aging reports tied to TB AR / AP balances.
|
|
12
12
|
|
|
13
13
|
### Platform tools: accruals + valuations
|
|
14
|
-
-
|
|
15
|
-
|
|
16
|
-
- **`
|
|
17
|
-
- **`
|
|
18
|
-
- **`
|
|
19
|
-
-
|
|
20
|
-
- **`
|
|
14
|
+
Every calculated step below is the three-step flow in `building-blocks.md` § Calculated schedules: `calculate` (schedule + journal lines, posts nothing), then `list_capsule_types` + `create_capsule`, then one `create_journal` / `create_bill` / `create_invoice` / `create_cash_in` / `create_cash_out` per step with `capsuleResourceId`.
|
|
15
|
+
|
|
16
|
+
- **`calculate(type: 'accrued-expense', ...)`**: step 6: per recurring accrual whose last posting predates the period end.
|
|
17
|
+
- **`calculate(type: 'prepaid-expense', ...)`**: step 7: only for new prepaid setup; ongoing recognition finalizes the journals posted at setup.
|
|
18
|
+
- **`calculate(type: 'deferred-revenue', ...)`**: step 8: same setup-vs-recognition note as prepaid.
|
|
19
|
+
- **`calculate(type: 'depreciation', ...)`**: step 9: only when an asset uses non-SL method (DDB, 150DB). Jaz native FA handles SL automatically. Verify FA register first.
|
|
20
|
+
- **`calculate(type: 'leave-accrual', ...)`**: step 10: monthly leave accrual; the same amount repeats, so one `create_scheduled_journal` covers the year.
|
|
21
|
+
- **FX revaluation**: step 12: **Jaz auto-handles**. `calculate(type: 'fx-reval', ...)` is verification only; do NOT post its result (would double-post).
|
|
22
|
+
- **`calculate(type: 'ecl', ...)`**: step 13: top-up bad-debt provision based on `generate_aged_ar` buckets.
|
|
21
23
|
|
|
22
24
|
### Platform tools: reconciliation execution
|
|
23
25
|
- **`view_auto_reconciliation(bankStatementEntryResourceIds: [<id>, ...])`**: step 3: READ-ONLY suggestions (does NOT write). Per-entry only; source ids from `search_bank_records` (status `UNRECONCILED`).
|
|
@@ -32,7 +34,7 @@
|
|
|
32
34
|
- **`bulk_update_journals(items: [{resourceId: <id>, saveAsDraft: false}, ...])`**: step 17: clear residual drafts before lock.
|
|
33
35
|
- **`update_account(resourceId: <CoA root>, lockDate: <period-end>)`**: step 18: lock the period.
|
|
34
36
|
|
|
35
|
-
### Calculators (
|
|
37
|
+
### Calculators on the local CLI (same engine as `calculate`, no API key needed)
|
|
36
38
|
- **`clio calc accrued-expense`**: step 6: independently compute accrual amount.
|
|
37
39
|
- **`clio calc prepaid-expense`** / **`clio calc deferred-revenue`**: steps 7-8: setup events only.
|
|
38
40
|
- **`clio calc depreciation`**: step 9: FA register cross-check.
|
|
@@ -42,14 +44,14 @@
|
|
|
42
44
|
### Cross-references
|
|
43
45
|
- Org inputs this job needs (confirm with the user when not already on file): the list of recurring accruals, the bank accounts, the materiality threshold, the CoA mapping, the base currency, and whether the org is multi-currency.
|
|
44
46
|
- Sibling jobs: `bank-recon.md` (step 3 detail), `payment-run.md` (typically run separately mid-month), `quarter-end-close.md` / `year-end-close.md` (additive on top of this base).
|
|
45
|
-
-
|
|
47
|
+
- Calculator types used: `accrued-expense`, `prepaid-expense`, `deferred-revenue`, `depreciation`, `leave-accrual` + `accrued-expense` (employee accruals / bonus), `loan`, `fx-reval` (verification only), `ecl`. See the transaction-recipes skill for the accounting pattern behind each.
|
|
46
48
|
- API rules: `jaz-api/SKILL.md` rules 2 (valueDate not issueDate), 14 (saveAsDraft default), 18 (bank-accounts envelope), 31 (currency object shape), 36 (endDate for AR/AP point-in-time), 125 (recon NOT idempotent).
|
|
47
49
|
|
|
48
50
|
---
|
|
49
51
|
|
|
50
52
|
## Phase sequence
|
|
51
53
|
|
|
52
|
-
This playbook runs 5 phases for the period: pre-close gates → accruals & adjustments → valuations → verification → lock. Walk them in order, calling the platform tools named in each step.
|
|
54
|
+
This playbook runs 5 phases for the period: pre-close gates → accruals & adjustments → valuations → verification → lock. Walk them in order, calling the platform tools named in each step.
|
|
53
55
|
|
|
54
56
|
## Phase 1: Pre-close gates
|
|
55
57
|
|
|
@@ -67,7 +69,7 @@ Compare count + sum against POS / sales register. Missing invoices = understated
|
|
|
67
69
|
search_bills(filter: {valueDate: {between: ['2025-01-01', '2025-01-31']}}, sortBy: 'valueDate', sortOrder: 'ASC', limit: 200)
|
|
68
70
|
```
|
|
69
71
|
|
|
70
|
-
Cross-reference against email + supplier portals + physical mail. Late bills = missed expenses = overstated profit. For PDFs in hand:
|
|
72
|
+
Cross-reference against email + supplier portals + physical mail. Late bills = missed expenses = overstated profit. For PDFs in hand: `create_bt_from_attachment` with the file and `businessTransactionType: 'BILL'` (Jaz Magic OCR + autofill; local CLI: `clio magic create --file <pdf> --type bill`) to generate the bill draft.
|
|
71
73
|
|
|
72
74
|
### Step 3: Bank reconciliation
|
|
73
75
|
|
|
@@ -98,61 +100,61 @@ For each recurring accrual the org runs whose last posting predates `2025-01-31`
|
|
|
98
100
|
|
|
99
101
|
1. Compute amount per the accrual's estimation method (`prior_month` via `search_journals`, `trailing_3m_avg`, `budget`, `fixed_amount`).
|
|
100
102
|
2. Cross-check: `clio calc accrued-expense --amount <computed> --periods 1 --json`.
|
|
101
|
-
3. `
|
|
102
|
-
4. Resolve
|
|
103
|
-
5. `
|
|
103
|
+
3. `calculate(type: 'accrued-expense', amount: <computed>, periods: 1, startDate: '2025-01-31')` returns the accrual step and its dated reversal step, each with journal lines.
|
|
104
|
+
4. Resolve each line's account to the org's own (`search_accounts`; create if missing and the user agrees).
|
|
105
|
+
5. `list_capsule_types` + `create_capsule` (type `Accrued Expenses`), then one `create_journal(valueDate: <step date>, autoReference: true, journalEntries: [<step lines>], capsuleResourceId: <capsule id>)` per step: the accrual and its reversal.
|
|
104
106
|
6. `validate_journal_draft(resourceId: <id>)` for each draft journal.
|
|
105
107
|
7. After all accruals processed: `bulk_update_journals(items: [{resourceId: <id>, saveAsDraft: false}, ...])`.
|
|
106
108
|
|
|
107
109
|
Cross-check: `generate_trial_balance(endDate: '2025-01-31')`. Sum credit movements against accrual liability accounts. Verify `|sum - expected| ≤ materiality threshold`.
|
|
108
110
|
|
|
109
|
-
### Step 7: Prepaid expense recognition (finalize this period's
|
|
111
|
+
### Step 7: Prepaid expense recognition (finalize this period's draft journal)
|
|
110
112
|
|
|
111
113
|
For each existing `Prepaid Expenses` capsule (via `search_capsules(filter: {status: {eq: 'ACTIVE'}})` (capsule type is not filterable; see `building-blocks.md` § Filter limits)):
|
|
112
114
|
|
|
113
115
|
1. **STOP: do not select these with a filter.** Journals cannot be narrowed to one capsule by a filter: `JournalFilter` declares no `capsuleResourceId`, and `GET /capsules/{id}` returns only `totalTransactions`, a count (measured 2026-09-07). A date+status search returns EVERY matching DRAFT in the org, including drafts a practitioner deliberately parked, so passing it to `bulk_update_journals(items: [{resourceId, saveAsDraft: false}])` finalizes unrelated work. `get_journal` (`GET /journals/{id}`) does return the link as `capsule: {resourceId, type, title}` (measured 2026-09-23), so check each candidate journal's `capsule.resourceId` against this capsule, keep only the matches, and confirm the count with the practitioner before finalizing.
|
|
114
|
-
2. If empty: either the
|
|
116
|
+
2. If empty: either the schedule was set up wrong (no journal for this period; investigate via `search_journals` without status filter to see if it's already ACTIVE, then skip), OR the practitioner posted it another way. Surface to practitioner.
|
|
115
117
|
3. If found: collect resourceIds, then `bulk_update_journals(items: [{resourceId: <id>, saveAsDraft: false}, ...])`.
|
|
116
|
-
4. New prepaid setups during this period (a new prepaid started this month):
|
|
118
|
+
4. New prepaid setups during this period (a new prepaid started this month): `calculate(type: 'prepaid-expense', amount, periods, startDate)` (see the `prepaid-expense` recipe in the transaction-recipes skill), `create_capsule` (type `Prepaid Expenses`), then post the blueprint's steps with `capsuleResourceId`: the bill via `create_bill` and the N recognition journals via `create_journal` as future-dated DRAFTs; the current period's journal joins the `bulk_update_journals` set above (`bulk_finalize_drafts` takes invoices, bills and credit notes only, never journals).
|
|
117
119
|
|
|
118
120
|
### Step 8: Deferred revenue recognition
|
|
119
121
|
|
|
120
|
-
Mirror of step 7. Existing `Deferred Revenue` capsules: find this period's DRAFT journal in each, then `bulk_update_journals(items: [{resourceId, saveAsDraft: false}])`. New deferred setups: `
|
|
122
|
+
Mirror of step 7. Existing `Deferred Revenue` capsules: find this period's DRAFT journal in each, then `bulk_update_journals(items: [{resourceId, saveAsDraft: false}])`. New deferred setups: `calculate(type: 'deferred-revenue', amount, periods, startDate)`, `create_capsule` (type `Deferred Revenue`), post the invoice (`create_invoice`) and the recognition journals (`create_journal`) with `capsuleResourceId`, then finalize the current period's journal in the same `bulk_update_journals` call.
|
|
121
123
|
|
|
122
124
|
### Step 9: Depreciation
|
|
123
125
|
|
|
124
126
|
```
|
|
125
|
-
search_fixed_assets(filter: {status: {eq: 'ACTIVE'}, depreciationMethod: {
|
|
127
|
+
search_fixed_assets(filter: {status: {eq: 'ACTIVE'}, depreciationMethod: {eq: 'NO_DEPRECIATION'}})
|
|
126
128
|
```
|
|
127
129
|
|
|
128
|
-
For Jaz-native SL assets: depreciation auto-posts; verify via `generate_fa_summary(primarySnapshotStartDate: '2025-01-01', primarySnapshotEndDate: '2025-01-31', groupBy: 'CATEGORY')` showing month's depreciation movement.
|
|
130
|
+
For Jaz-native SL assets: depreciation auto-posts; verify via `generate_fa_summary(primarySnapshotStartDate: '2025-01-01', primarySnapshotEndDate: '2025-01-31', groupBy: 'CATEGORY')` showing month's depreciation movement. The search above returns the assets registered with `NO_DEPRECIATION`: the register's only methods are `STRAIGHT_LINE` and `NO_DEPRECIATION`, so these are the assets depreciated by manual journal (declining balance). Confirm each one's method with the practitioner, then `calculate(type: 'depreciation', method: 'ddb' | '150db', cost, salvageValue, usefulLifeYears, frequency: 'monthly')` per asset. With `frequency: 'monthly'` the calculator's `blueprint.steps` are still ANNUAL and the monthly figures are in `schedule[]`: read this period's charge from `schedule[]`, not `blueprint.steps`. Post it with `create_journal` (Dr Depreciation Expense / Cr Accumulated Depreciation) into the asset's `Depreciation` capsule. The depreciation calculator takes no start date, so its rows are undated: ask the practitioner for the posting date and set each journal's `valueDate` yourself.
|
|
129
131
|
|
|
130
132
|
### Step 10: Employee benefit accruals
|
|
131
133
|
|
|
132
134
|
If the org has headcount and tracks leave balances:
|
|
133
135
|
|
|
134
136
|
```
|
|
135
|
-
|
|
137
|
+
calculate(type: 'leave-accrual', employees: <headcount>, daysPerYear: <leave days per year>, dailyRate: <avg-daily-rate>, startDate: '2025-01-01', periods: 12)
|
|
136
138
|
```
|
|
137
139
|
|
|
138
|
-
On first month of FY only:
|
|
140
|
+
On first month of FY only: `create_capsule` (type `Employee Benefits`), then either post the 12 monthly journals with `capsuleResourceId`, or, since the amount is the same every month, one `create_scheduled_journal(startDate, endDate, repeat: 'MONTHLY', valueDate, schedulerEntries, capsuleResourceId)`. A schedule only fits when every period's amount is identical, and leave accrual's final period can differ from the others by a few cents (it absorbs the rounding): when it does, end the schedule one period early and post the last period as a single `create_journal` with `capsuleResourceId`. Subsequent months: the scheduler emits automatically (or finalize that month's draft). Local CLI cross-check: `clio calc leave-accrual`.
|
|
139
141
|
|
|
140
|
-
### Step 11: Loan interest (finalize this period's
|
|
142
|
+
### Step 11: Loan interest (finalize this period's draft journal)
|
|
141
143
|
|
|
142
144
|
For each active loan capsule (via `search_capsules(filter: {status: {eq: 'ACTIVE'}})` (capsule type is not filterable; see `building-blocks.md` § Filter limits)):
|
|
143
145
|
|
|
144
146
|
1. **STOP: do not select these with a filter.** Journals cannot be narrowed to one capsule by a filter: `JournalFilter` declares no `capsuleResourceId`, and `GET /capsules/{id}` returns only `totalTransactions`, a count (measured 2026-09-07). A date+status search returns EVERY matching DRAFT in the org, including drafts a practitioner deliberately parked, so passing it to `bulk_update_journals(items: [{resourceId, saveAsDraft: false}])` finalizes unrelated work. `get_journal` (`GET /journals/{id}`) does return the link as `capsule: {resourceId, type, title}` (measured 2026-09-23), so check each candidate journal's `capsule.resourceId` against this capsule, keep only the matches, and confirm the count with the practitioner before finalizing.
|
|
145
147
|
2. Should return exactly one DRAFT journal per active loan. Each is a 3-line entry (debit Loan Payable, debit Interest Expense, credit Cash) with the correct amortization split for the period.
|
|
146
148
|
3. Collect resourceIds, then `bulk_update_journals(items: [{resourceId: <id>, saveAsDraft: false}, ...])`.
|
|
147
|
-
4. Do NOT post manual loan-interest
|
|
149
|
+
4. Do NOT post a second, manual loan-interest accrual when the period's journal already exists from setup; its split follows the `calculate(type: 'loan', ...)` schedule.
|
|
148
150
|
|
|
149
|
-
If a loan was newly disbursed this period:
|
|
151
|
+
If a loan was newly disbursed this period: `calculate(type: 'loan', principal, annualRate, termMonths, startDate)`, `create_capsule` (type `Loan Repayment`), then post the blueprint's steps with `capsuleResourceId`; the disbursement (cash-in) and every repayment journal, including this period's, are in the blueprint.
|
|
150
152
|
|
|
151
153
|
## Phase 3: Valuations
|
|
152
154
|
|
|
153
155
|
### Step 12: FX revaluation (verification only; Jaz auto-handles)
|
|
154
156
|
|
|
155
|
-
**Jaz auto-handles FX revaluation for ALL foreign-currency monetary balances** (AR, AP, cash, bank, intercompany journals, term deposits, FX provisions). Period-end translation per IAS 21.23 happens inside the platform automatically. **DO NOT
|
|
157
|
+
**Jaz auto-handles FX revaluation for ALL foreign-currency monetary balances** (AR, AP, cash, bank, intercompany journals, term deposits, FX provisions). Period-end translation per IAS 21.23 happens inside the platform automatically. **DO NOT post the `fx-reval` calculator's result (would double-post).**
|
|
156
158
|
|
|
157
159
|
This step is a verification cross-check. If the org is multi-currency:
|
|
158
160
|
|
|
@@ -173,16 +175,18 @@ clio calc fx-reval --amount <foreign> --book-rate <historical> --closing-rate <r
|
|
|
173
175
|
|
|
174
176
|
4. Keep the verification output for audit-prep step 8 supporting schedules.
|
|
175
177
|
|
|
176
|
-
|
|
178
|
+
Bank FX is revaluation, not realized: bank/cash FX uses `FX Bank Revaluation` (not Realized). AR/AP FX uses both Realized (settlement) and Unrealized (period-end translation).
|
|
177
179
|
|
|
178
180
|
### Step 13: ECL review (typically quarterly, monthly check)
|
|
179
181
|
|
|
180
|
-
Mental check on AR aging > 90d bucket changes. If material change vs prior month:
|
|
182
|
+
Mental check on AR aging > 90d bucket changes. If material change vs prior month: run the ECL calculator.
|
|
181
183
|
|
|
182
184
|
```
|
|
183
|
-
|
|
185
|
+
calculate(type: 'ecl', buckets: <generate_aged_ar buckets, each {name, balance, rate} with rate from the org ECL loss-rate matrix>, existingProvision, startDate)
|
|
184
186
|
```
|
|
185
187
|
|
|
188
|
+
If `adjustmentRequired` is non-zero, post it with one `create_journal` (Dr Bad Debt Expense / Cr Allowance for Doubtful Debts for an increase) into an `ECL Provision` capsule.
|
|
189
|
+
|
|
186
190
|
For most SMBs, formal ECL adjustment runs in `quarter-end-close.md`. Skip in routine monthly close unless a major customer default / dispute occurred.
|
|
187
191
|
|
|
188
192
|
## Phase 4: Verification
|
|
@@ -243,8 +247,8 @@ If residuals were documented at steps 3 or 17, record the judgment after the loc
|
|
|
243
247
|
| `quick_reconcile` | 422 `amount_mismatch` | Cascade tolerance too loose. Surface to the user; accept manually OR reject. |
|
|
244
248
|
| `reconcile_invoice_receipt` | 422 `invoice_status_invalid` | Matched invoice still DRAFT. `finalize_invoice(resourceId: <id>)` first. |
|
|
245
249
|
| `reconcile_*` | (any), NOT idempotent | Per `jaz-api/SKILL.md` rule 125. On 500 / network error, do NOT retry. Confirm reconciled state via `view_auto_reconciliation` or `search_bank_records(status: 'RECONCILED')` first. |
|
|
246
|
-
| `
|
|
247
|
-
| `bulk_update_journals` | 422 `journal_unbalanced` |
|
|
250
|
+
| `create_journal` (calculated step) | 422 on an account or contact id | A blueprint account name was not resolved to a real account. `search_accounts` / `search_contacts`; create if missing. Halt and surface to the user. |
|
|
251
|
+
| `bulk_update_journals` | 422 `journal_unbalanced` | A draft's debits and credits differ. Halt; do not retry without manual review. |
|
|
248
252
|
| `update_account` lockDate | 422 `lock_date_violated` | Open drafts in the period. Re-run step 17 gates. |
|
|
249
253
|
| `update_account` lockDate | 422 `period_already_locked` | Period already closed. Confirm with the user before re-opening. |
|
|
250
254
|
| FA `depreciation` posting | 0 movement when expected | Asset not `status: ACTIVE` in FA register. `update_fixed_asset(resourceId: <id>, isDraftToActive: true)` first. |
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Payment Run
|
|
2
2
|
|
|
3
|
-
> Process outstanding supplier bills in a structured weekly or fortnightly batch through the Jaz platform tools. Walk the steps below in order, calling the named platform tools directly.
|
|
3
|
+
> Process outstanding supplier bills in a structured weekly or fortnightly batch through the Jaz platform tools. Walk the steps below in order, calling the named platform tools directly.
|
|
4
4
|
|
|
5
|
-
## Tools
|
|
5
|
+
## Tools and calculators this job uses
|
|
6
6
|
|
|
7
7
|
### Platform tools (jaz-api)
|
|
8
8
|
- **`search_bills(filter: {status: {eq: 'UNPAID'}, balanceAmount: {gt: 0}, dueDate: {lte: <cutoff>}}, sortBy: 'dueDate', sortOrder: 'ASC', limit: 200)`**, used in step 2: pull due bills (paginate via `offset` if `>200`).
|
|
@@ -16,7 +16,6 @@
|
|
|
16
16
|
- **`finalize_bill(resourceId: <id>)`**, used in step 0 fallback: bills must be `status: APPROVED` (not `DRAFT`) before they accept payments.
|
|
17
17
|
|
|
18
18
|
### CLI tools (jaz-cli)
|
|
19
|
-
- **`clio jobs payment-run --due-before <YYYY-MM-DD> --json`**: emit blueprint as JSON for downstream agent consumption.
|
|
20
19
|
- **`clio jobs payment-run outstanding --due-before <YYYY-MM-DD> --currency SGD --json`**: fetch outstanding bills grouped by supplier (uses API key; equivalent to step 2 + step 4 grouping in one call).
|
|
21
20
|
|
|
22
21
|
### Cross-references
|
|
@@ -38,7 +37,7 @@ If results: surface "A payment run with prefix `PAYRUN-2025-02-28-*` already exe
|
|
|
38
37
|
|
|
39
38
|
## Step 1: Set the run window
|
|
40
39
|
|
|
41
|
-
Pick the cutoff date for the run (the bills you'll clear are those due on or before it).
|
|
40
|
+
Pick the cutoff date for the run (the bills you'll clear are those due on or before it).
|
|
42
41
|
|
|
43
42
|
## Step 2: Identify bills
|
|
44
43
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Quarter-End Close
|
|
2
2
|
|
|
3
|
-
> Monthly close × 3 + quarterly extras (GST/VAT filing, formal ECL review, bonus true-up, intercompany recon, provision unwinding finalize). Walk the phases below in order, calling the named platform tools directly.
|
|
3
|
+
> Monthly close × 3 + quarterly extras (GST/VAT filing, formal ECL review, bonus true-up, intercompany recon, provision unwinding finalize). Walk the phases below in order, calling the named platform tools directly.
|
|
4
4
|
|
|
5
|
-
## Tools
|
|
5
|
+
## Tools and calculators this job uses
|
|
6
6
|
|
|
7
7
|
### Orchestration
|
|
8
8
|
- **`month-end-close.md`**: invoked 3× in standalone mode (months 1, 2, 3 of the quarter) before quarterly extras.
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
### Platform tools: quarterly extras
|
|
11
11
|
- **`generate_vat_ledger(startDate: <Q-start>, endDate: <Q-end>)`**, Q1 GST/VAT filing prep: full quarterly tax ledger.
|
|
12
12
|
- **`generate_aged_ar(endDate: <Q-end>)`**: Q2 ECL formal review input.
|
|
13
|
-
- **`
|
|
13
|
+
- **`calculate(type: 'ecl', ...)`**, then `create_capsule` + `create_journal` with `capsuleResourceId`: Q2 ECL top-up if material (the three-step flow in `building-blocks.md` § Calculated schedules).
|
|
14
14
|
- **`search_journals(filter: {tags: {eq: 'bonus-accrual'}, valueDate: {between: [<Q-start>, <Q-end>]}})`**: Q3 bonus YTD pull.
|
|
15
15
|
- **`create_journal(...)`**: Q3 bonus true-up adjustment (manual one-off).
|
|
16
16
|
- **`search_capsules(filter: {status: {eq: 'ACTIVE'}})` (capsule type is not filterable; see `building-blocks.md` § Filter limits)**: Q4 IC reconciliation per pair of entities (multi-org coordination; see the `intercompany` recipe).
|
|
@@ -25,20 +25,20 @@
|
|
|
25
25
|
### Cross-references
|
|
26
26
|
- Org inputs this job needs (confirm with the user when not already on file): the GST scheme (`quarterly` | `monthly` | `not-registered`), the materiality threshold, any intercompany arrangements, the bonus policy, and the ECL loss-rate matrix.
|
|
27
27
|
- Sibling jobs: `month-end-close.md` (Phase 1-5 invokes 3×), `gst-vat-filing.md` (Q1 detail), `year-end-close.md` (annual, builds on this).
|
|
28
|
-
-
|
|
28
|
+
- Calculator types used: `ecl` (bad-debt / collective provision), `accrued-expense` (bonus true-up), `provision` (IAS 37), plus the manual `intercompany` pattern. See the transaction-recipes skill for the accounting pattern behind each.
|
|
29
29
|
|
|
30
30
|
---
|
|
31
31
|
|
|
32
32
|
## Standalone vs Incremental
|
|
33
33
|
|
|
34
|
-
- **Standalone
|
|
35
|
-
- **Incremental
|
|
34
|
+
- **Standalone:** all month-end steps for months 1-3, then quarterly extras. Use when months haven't been closed yet.
|
|
35
|
+
- **Incremental:** quarterly extras only. Use when all 3 months are already closed and locked.
|
|
36
36
|
|
|
37
37
|
Months MUST be closed in order. Month 1 locked → Month 2 close → Month 2 locked → Month 3 close. Quarterly extras assume the 3 monthly closes are complete and current.
|
|
38
38
|
|
|
39
39
|
## Phase sequence
|
|
40
40
|
|
|
41
|
-
Standalone: run all month-end steps for months 1-3 (Phase 1-5), then the quarterly extras (Phase 6), then quarterly verification + lock (Phase 7-8). Incremental
|
|
41
|
+
Standalone: run all month-end steps for months 1-3 (Phase 1-5), then the quarterly extras (Phase 6), then quarterly verification + lock (Phase 7-8). Incremental: quarterly extras only.
|
|
42
42
|
|
|
43
43
|
## Phase 1-5: Monthly closes (×3), IF standalone
|
|
44
44
|
|
|
@@ -72,11 +72,13 @@ generate_aged_ar(endDate: '2025-03-31')
|
|
|
72
72
|
clio calc ecl --current 100000 --30d 50000 --60d 20000 --90d 10000 --120d 5000 --rates 0.5,2,5,10,50 --existing-provision <TB Allowance balance> --currency <base currency> --json
|
|
73
73
|
```
|
|
74
74
|
|
|
75
|
-
If `
|
|
75
|
+
If `adjustmentRequired > materiality threshold`:
|
|
76
76
|
|
|
77
77
|
```
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
calculate(type: 'ecl', buckets: <[{name, balance, rate}], rate from the org ECL loss-rate matrix>, existingProvision: <TB Allowance balance>, startDate: '2025-03-31')
|
|
79
|
+
list_capsule_types()
|
|
80
|
+
create_capsule(capsuleTypeResourceId: <ECL Provision type id>, title: <blueprint.capsuleName>)
|
|
81
|
+
create_journal(valueDate: '2025-03-31', autoReference: true, journalEntries: [<the calculator's journal lines, accounts resolved via search_accounts>], capsuleResourceId: <capsule id>)
|
|
80
82
|
update_journal(resourceId: <ecl journal>, saveAsDraft: false)
|
|
81
83
|
```
|
|
82
84
|
|
|
@@ -112,18 +114,18 @@ For each active IAS 37 provision capsule:
|
|
|
112
114
|
search_capsules(filter: {status: {eq: 'ACTIVE'}})
|
|
113
115
|
```
|
|
114
116
|
|
|
115
|
-
Per capsule: this period's quarter-end unwinding DRAFT journals (3 monthly DRAFTs
|
|
117
|
+
Per capsule: this period's quarter-end unwinding DRAFT journals (3 monthly DRAFTs posted at provision setup) should already be in the capsule. Verify and finalize:
|
|
116
118
|
|
|
117
119
|
> **STOP: this step cannot be scoped, and must not be automated.** Narrowing journals to one
|
|
118
|
-
> capsule is not possible: `JournalFilter` declares no `capsuleResourceId`, a journal row carries no
|
|
119
|
-
> capsule link even at `view: 'full'
|
|
120
|
-
> only `totalTransactions`, a count (
|
|
120
|
+
> capsule is not possible: `JournalFilter` declares no `capsuleResourceId`, a journal search row carries no
|
|
121
|
+
> capsule link even at `view: 'full'`, and `GET /capsules/{id}` returns
|
|
122
|
+
> only `totalTransactions`, a count (measured 2026-09-07). `get_journal` on one journal does return its `capsule` (`{resourceId, type, title}`, verified 2026-10-02), so a candidate can be confirmed one at a time. A search by date and status alone
|
|
121
123
|
> returns **every** matching DRAFT in the org, including drafts a practitioner deliberately parked,
|
|
122
124
|
> so feeding it to `bulk_update_journals(items: [{resourceId, saveAsDraft: false}])` or `delete_journal` would finalize or
|
|
123
125
|
> destroy unrelated work. Surface the capsule and its expected journal count to the practitioner and
|
|
124
126
|
> let them identify the journals; do not select them with a filter.
|
|
125
127
|
|
|
126
|
-
If the user determines remeasurement is needed (cash-flow estimate changed, discount rate moved): recompute, post the adjustment,
|
|
128
|
+
If the user determines remeasurement is needed (cash-flow estimate changed, discount rate moved): recompute, post the adjustment, delete the remaining DRAFT unwinding journals, then run `calculate(type: 'provision', amount, annualRate, termMonths, startDate)` with the new inputs and post the new unwinding journals into the capsule.
|
|
127
129
|
|
|
128
130
|
## Phase 7: Quarterly verification
|
|
129
131
|
|
|
@@ -156,10 +158,10 @@ update_account(resourceId: <CoA root>, lockDate: '2025-03-31')
|
|
|
156
158
|
|--------|-------|----------|
|
|
157
159
|
| Phase 1-5 (standalone) | Months not all closed | Months incomplete. Route to missing `month-end-close.md`. Run quarterly extras only once all 3 months are locked. |
|
|
158
160
|
| Q1 verification | Tax ledger ≠ sum of GST per invoice/bill | Likely tax-profile assignment errors. Audit each invoice / bill for correct tax profile. Quick Fix: `quick_fix_line_items(entity: 'invoices' \| 'bills', ...)` on the affected lines, since the tax profile sits on each line. |
|
|
159
|
-
| Q2 ECL
|
|
160
|
-
| Q3 | YTD accrual mismatches monthly
|
|
161
|
+
| Q2 ECL journal | 422 on the allowance account id | `Allowance for Doubtful Debts` missing. Create via `create_account(name: 'Allowance for Doubtful Debts', code: <unused account code>, accountType: 'Current Asset')`. |
|
|
162
|
+
| Q3 | YTD accrual mismatches the monthly schedule | Likely a manual journal posted directly to Bonus Liability (outside the schedule). Audit `generate_general_ledger(accountResourceIds: [<Bonus Liability>], startDate: <FY-start>, endDate: <today>)`. |
|
|
161
163
|
| Q4 IC recon | Entity A IC Receivable ≠ Entity B IC Payable (sign-flipped) | See the `intercompany` recipe error table. Common causes: timing, FX confusion, posting skipped in one entity. |
|
|
162
|
-
| Q5 | Provision DRAFTs missing for the quarter |
|
|
164
|
+
| Q5 | Provision DRAFTs missing for the quarter | The unwinding schedule was not posted at provision setup. Run `calculate(type: 'provision', ...)` with current inputs and post the unwinding journals for the remaining periods into the capsule. |
|
|
163
165
|
|
|
164
166
|
---
|
|
165
167
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Supplier Statement Reconciliation
|
|
2
2
|
|
|
3
|
-
> Compare AP balance per Jaz vs supplier's statement. Identify missing bills, duplicate payments, pricing discrepancies, timing differences. Walk the steps below in order, calling the named platform tools directly.
|
|
3
|
+
> Compare AP balance per Jaz vs supplier's statement. Identify missing bills, duplicate payments, pricing discrepancies, timing differences. Walk the steps below in order, calling the named platform tools directly.
|
|
4
4
|
|
|
5
|
-
## Tools
|
|
5
|
+
## Tools and calculators this job uses
|
|
6
6
|
|
|
7
7
|
### Platform tools
|
|
8
8
|
- **`search_contacts(filter: {supplier: true, name: {eq: <supplier>}})`** (step 1): resolve the supplier resourceId. Use fuzzy match if exact fails.
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
|
|
35
35
|
## Steps
|
|
36
36
|
|
|
37
|
-
Walk steps 1-8 below.
|
|
37
|
+
Walk steps 1-8 below.
|
|
38
38
|
|
|
39
39
|
## Step 1: Resolve supplier
|
|
40
40
|
|
|
@@ -94,7 +94,7 @@ Practitioner provides the supplier's statement (PDF, email, paper). Per-line-ite
|
|
|
94
94
|
|
|
95
95
|
| Discrepancy | Likely cause | Fix |
|
|
96
96
|
|-------------|--------------|-----|
|
|
97
|
-
| Bill on supplier statement, not in Jaz | Missed bill (most common) | `
|
|
97
|
+
| Bill on supplier statement, not in Jaz | Missed bill (most common) | `create_bt_from_attachment` (local CLI: `clio magic create --file <bill-pdf> --type bill`) extracts the missing bill from its PDF, OR manual `create_bill(...)`; pay if owed. |
|
|
98
98
|
| Bill in Jaz, not on supplier statement | Supplier hasn't issued / lost the invoice | Verify with supplier; if confirmed bogus, `delete_bill` (DRAFT) OR `create_supplier_credit_note` (if ACTIVE). |
|
|
99
99
|
| Different amounts on same reference | Pricing dispute | Practitioner contacts supplier for clarification. Possible adjustment journal post-resolution. |
|
|
100
100
|
| Bill paid per Jaz, supplier says unpaid | Bank reconciliation gap | Pull bank statement for the payment date; verify the wire/cheque cleared. If cleared, send remittance proof to supplier. |
|
|
@@ -139,7 +139,7 @@ Keep, per supplier:
|
|
|
139
139
|
|
|
140
140
|
- **Run for major suppliers only.** Top 10 suppliers by total spend cover 80% of AP risk. Mid + tail suppliers: skip or batch annually.
|
|
141
141
|
- **Quarterly cadence** for major suppliers; **annual** for tier-2.
|
|
142
|
-
- **Statement format varies wildly.** PDF / Excel / paper. `
|
|
142
|
+
- **Statement format varies wildly.** PDF / Excel / paper. `clio magic create` works on most PDFs but not all; fallback to manual.
|
|
143
143
|
- **Pre-payment-run check.** Run supplier-recon BEFORE `payment-run.md` to capture any disputed bills (don't pay) and missing bills (post + pay this run).
|
|
144
144
|
|
|
145
145
|
---
|