jaz-clio 6.1.0 → 7.0.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/README.md +3 -3
- package/assets/skills/api/SKILL.md +1 -1
- package/assets/skills/api/references/claims.md +1 -1
- package/assets/skills/cli/SKILL.md +3 -3
- package/assets/skills/cli/references/command-catalog.md +2 -2
- package/assets/skills/cli/references/common-workflows.md +3 -3
- package/assets/skills/conversion/SKILL.md +1 -1
- package/assets/skills/jaz-kit/SKILL.md +1 -1
- package/assets/skills/jaz-pseudo-sql/SKILL.md +1 -1
- package/assets/skills/jobs/SKILL.md +2 -2
- package/assets/skills/jobs/references/audit-prep.md +10 -10
- package/assets/skills/jobs/references/bank-recon.md +6 -6
- package/assets/skills/jobs/references/building-blocks.md +5 -5
- package/assets/skills/jobs/references/credit-control.md +2 -2
- package/assets/skills/jobs/references/document-collection.md +2 -2
- package/assets/skills/jobs/references/fa-review.md +4 -4
- package/assets/skills/jobs/references/month-end-close.md +10 -10
- package/assets/skills/jobs/references/payment-run.md +5 -5
- package/assets/skills/jobs/references/quarter-end-close.md +2 -2
- package/assets/skills/jobs/references/supplier-recon.md +5 -5
- package/assets/skills/jobs/references/year-end-close.md +7 -7
- package/assets/skills/transaction-recipes/SKILL.md +1 -1
- package/assets/skills/transaction-recipes/references/asset-disposal.md +2 -2
- package/assets/skills/transaction-recipes/references/bad-debt-provision.md +4 -4
- package/assets/skills/transaction-recipes/references/hire-purchase.md +1 -1
- package/assets/skills/transaction-recipes/references/ifrs16-lease.md +1 -1
- package/assets/templates/platform-rules/jaz-agent-rules.md +2 -2
- package/cli.mjs +372 -372
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
<p align="center">
|
|
4
4
|
<a href="https://www.npmjs.com/package/jaz-clio"><img src="https://img.shields.io/npm/v/jaz-clio?style=for-the-badge&logo=npm" alt="npm"></a>
|
|
5
5
|
<a href="https://www.npmjs.com/package/jaz-clio"><img src="https://img.shields.io/npm/dm/jaz-clio?style=for-the-badge&label=downloads" alt="npm downloads"></a>
|
|
6
|
-
<img src="https://img.shields.io/badge/tools-
|
|
6
|
+
<img src="https://img.shields.io/badge/tools-382-blue?style=for-the-badge" alt="382 tools">
|
|
7
7
|
<a href="https://github.com/teamtinvio/jaz-ai/blob/main/LICENSE"><img src="https://img.shields.io/github/license/teamtinvio/jaz-ai?style=for-the-badge&color=green" alt="License"></a>
|
|
8
8
|
</p>
|
|
9
9
|
|
|
10
10
|
<p align="center"><b>Fastest ledger for agents.</b><br>Jaz accounting on the command line, and inside any AI agent.</p>
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
382 tools · 74 command groups · 7 skills · 13 calculators · 12 job playbooks · 148 field-tested API rules.
|
|
13
13
|
|
|
14
14
|
```bash
|
|
15
15
|
npm install -g jaz-clio
|
|
@@ -109,7 +109,7 @@ that ends up in a journal.
|
|
|
109
109
|
|
|
110
110
|
## MCP server
|
|
111
111
|
|
|
112
|
-
|
|
112
|
+
382 tools for any AI agent that speaks MCP. Runs locally: no cloud, no ports.
|
|
113
113
|
|
|
114
114
|
> **No install at all?** Claude.ai, ChatGPT, Cowork, and Microsoft Copilot Studio can use Jaz through the hosted connector. Add `https://mcp.jaz.ai/mcp` as a custom connector and sign in with OAuth, no key. The local setup below is for terminal use, scripting, and editors that run MCP servers as local processes.
|
|
115
115
|
|
|
@@ -9,7 +9,7 @@ separate surface.
|
|
|
9
9
|
|
|
10
10
|
A receipt is a BILL (a vendor's invoice) or a CLAIM (an employee's reimbursed expense):
|
|
11
11
|
different tools. Decide by intent, else by capability: call `get_my_context` and read
|
|
12
|
-
`moduleRoles`: PURCHASES ≠ NO_ACCESS → bill (`
|
|
12
|
+
`moduleRoles`: PURCHASES ≠ NO_ACCESS → bill (`create_transaction_from_document`); else
|
|
13
13
|
EMPLOYEE_CLAIMS ≠ NO_ACCESS → claim (`create_claim_from_attachment`). The always-on
|
|
14
14
|
`claims-routing` policy carries the full rule.
|
|
15
15
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: jaz-cli
|
|
3
|
-
version:
|
|
3
|
+
version: 7.0.0
|
|
4
4
|
description: >-
|
|
5
5
|
Use this skill when running Clio CLI commands, building shell scripts with
|
|
6
6
|
Clio, debugging auth issues, understanding --json output, paginating results,
|
|
@@ -8,7 +8,7 @@ description: >-
|
|
|
8
8
|
precedence, output formats, entity resolution, and common workflow patterns.
|
|
9
9
|
Also use when the user asks how to use clio, what commands are available, or
|
|
10
10
|
how to automate accounting tasks from the command line. Covers all
|
|
11
|
-
74 command groups and
|
|
11
|
+
74 command groups and 382 tools, including employee-expense claims.
|
|
12
12
|
license: MIT
|
|
13
13
|
compatibility: Requires Node.js >= 18.0.0. Install via npm install -g jaz-clio.
|
|
14
14
|
---
|
|
@@ -17,7 +17,7 @@ compatibility: Requires Node.js >= 18.0.0. Install via npm install -g jaz-clio.
|
|
|
17
17
|
|
|
18
18
|
> **Audience note:** for power users and CI/automation. Load this skill only when you're scripting from a terminal, building shell pipelines, or debugging from `clio --json` output. For day-to-day accounting inside Claude Desktop / Cowork, the MCP tools cover the common flows without dropping to the CLI.
|
|
19
19
|
|
|
20
|
-
You are working with **Clio** (`jaz-clio`), the CLI for the Jaz accounting platform. 74 command groups, 13 calculators, 12 job playbooks (jaz-jobs skill),
|
|
20
|
+
You are working with **Clio** (`jaz-clio`), the CLI for the Jaz accounting platform. 74 command groups, 13 calculators, 12 job playbooks (jaz-jobs skill), 382 tools. Also fully compatible with Juan Accounting (same API, same endpoints).
|
|
21
21
|
|
|
22
22
|
## When to Use This Skill
|
|
23
23
|
|
|
@@ -529,7 +529,7 @@ Dynamic strings in schedulers: `{{Day}}`, `{{Date}}`, `{{Date+X}}`, `{{DateRange
|
|
|
529
529
|
clio reports generate <type> [flags]
|
|
530
530
|
```
|
|
531
531
|
|
|
532
|
-
Types: `trial-balance`, `balance-sheet`, `profit-loss`, `cashflow`, `aged-
|
|
532
|
+
Types: `trial-balance`, `balance-sheet`, `profit-loss`, `cashflow`, `aged-receivables`, `aged-payables`, `cash-balance`, `general-ledger`, `vat-ledger`, `equity-movement`, `bank-balance-summary`, `bank-reconciliation-summary`, `bank-reconciliation-details`, `fixed-assets-summary`, `fixed-assets-reconciliation-summary`, `aged-receivables-summary`, `aged-payables-summary`, `ledger-highlights`
|
|
533
533
|
|
|
534
534
|
| Flag | Purpose |
|
|
535
535
|
|------|---------|
|
|
@@ -727,7 +727,7 @@ Valid entity types: INVOICE, BILL, CUSTOMER_CREDIT_NOTE, SUPPLIER_CREDIT_NOTE, S
|
|
|
727
727
|
Universal async tracker: any operation returning a jobId (contacts bulk-upsert, items bulk-upsert, bank import, magic processing) can be polled here.
|
|
728
728
|
|
|
729
729
|
### `clio mcp`: MCP stdio server
|
|
730
|
-
Starts an MCP server for Claude Code / AI tool integration. Exposes all
|
|
730
|
+
Starts an MCP server for Claude Code / AI tool integration. Exposes all 382 operations.
|
|
731
731
|
|
|
732
732
|
### `clio init`: Skill installer
|
|
733
733
|
Installs AI agent skills into your project.
|
|
@@ -70,7 +70,7 @@ Follow the month-end playbook in the jaz-jobs skill (`references/month-end-close
|
|
|
70
70
|
clio reports generate trial-balance --to 2026-03-31 --json > tb-mar.json
|
|
71
71
|
clio reports generate profit-loss --from 2026-03-01 --to 2026-03-31 --json > pl-mar.json
|
|
72
72
|
clio reports generate balance-sheet --to 2026-03-31 --json > bs-mar.json
|
|
73
|
-
clio reports generate bank-
|
|
73
|
+
clio reports generate bank-reconciliation-summary --to 2026-03-31 --json > recon-mar.json
|
|
74
74
|
|
|
75
75
|
# Create adjusting journal if needed
|
|
76
76
|
clio journals create \
|
|
@@ -83,8 +83,8 @@ clio journals create \
|
|
|
83
83
|
--finalize
|
|
84
84
|
|
|
85
85
|
# Generate aged AR/AP reports
|
|
86
|
-
clio reports generate aged-
|
|
87
|
-
clio reports generate aged-
|
|
86
|
+
clio reports generate aged-receivables --to 2026-03-31 --json > aged-receivables-mar.json
|
|
87
|
+
clio reports generate aged-payables --to 2026-03-31 --json > aged-payables-mar.json
|
|
88
88
|
```
|
|
89
89
|
|
|
90
90
|
## 4. FX Transaction: Add Currency, Set Rate, Create Invoice
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: jaz-jobs
|
|
3
|
-
version:
|
|
3
|
+
version: 7.0.0
|
|
4
4
|
description: >-
|
|
5
5
|
Use this skill for recurring accounting workflows: month/quarter/year-end
|
|
6
6
|
close, bank reconciliation, GST/VAT filing, payment runs, credit control,
|
|
@@ -24,7 +24,7 @@ You are helping an **SMB accountant or bookkeeper** complete recurring accountin
|
|
|
24
24
|
|
|
25
25
|
You orchestrate the **real platform tools directly**, following the phase sequence in the per-job reference:
|
|
26
26
|
|
|
27
|
-
- **The per-job reference is your checklist.** Walk its phases in order and call the named platform tools: `calculate`, `search_invoices` / `search_bills` / `search_bank_records`, the `generate-reports/*` report tools (`generate_trial_balance`, `
|
|
27
|
+
- **The per-job reference is your checklist.** Walk its phases in order and call the named platform tools: `calculate`, `search_invoices` / `search_bills` / `search_bank_records`, the `generate-reports/*` report tools (`generate_trial_balance`, `generate_aged_receivables`, `generate_vat_ledger`, …), `reconcile_*`, `create_capsule`, `create_journal`, `bulk_finalize_drafts`, `update_account` lockDate, and so on. There is no "blueprint tool" or checklist command to call; the reference IS the plan.
|
|
28
28
|
- **Local CLI helpers:** five `clio jobs` sub-tools do real work for specific steps (see "CLI helpers" below).
|
|
29
29
|
|
|
30
30
|
### Scheduled and calculated entries
|
|
@@ -13,10 +13,10 @@
|
|
|
13
13
|
- **`generate_general_ledger(startDate, endDate, groupBy: 'ACCOUNT')`** (step 5): the auditor's primary working document.
|
|
14
14
|
|
|
15
15
|
### Platform tools: supporting schedules
|
|
16
|
-
- **`
|
|
17
|
-
- **`
|
|
16
|
+
- **`generate_aged_receivables(endDate)` / `generate_aged_payables(endDate)`**: step 6.
|
|
17
|
+
- **`generate_bank_reconciliation_summary(bankAccountResourceId, primarySnapshotStartDate, primarySnapshotEndDate)` / `generate_bank_reconciliation_details(bankAccountResourceId, primarySnapshotStartDate, primarySnapshotEndDate, filter)` per bank account**: step 7. NON-NEGOTIABLE deliverable.
|
|
18
18
|
- **`generate_bank_balance_summary(primarySnapshotDate)`**: step 7. Cross-reference to bank confirmation letters.
|
|
19
|
-
- **`
|
|
19
|
+
- **`generate_fixed_assets_summary(primarySnapshotStartDate, primarySnapshotEndDate, groupBy)` / `generate_fixed_assets_reconciliation_summary(primarySnapshotStartDate, primarySnapshotEndDate)`**: step 8.
|
|
20
20
|
- **`generate_vat_ledger(startDate, endDate)`**: step 9. Annual total ties to sum of quarterly F5 returns.
|
|
21
21
|
|
|
22
22
|
### Platform tools: XLSX deliverables
|
|
@@ -101,8 +101,8 @@ The tool returns 50 rows per call by default. Page it at `limit` 50-100: a GL ro
|
|
|
101
101
|
## Step 6: AR / AP aging
|
|
102
102
|
|
|
103
103
|
```
|
|
104
|
-
|
|
105
|
-
|
|
104
|
+
generate_aged_receivables(endDate: '2025-12-31')
|
|
105
|
+
generate_aged_payables(endDate: '2025-12-31')
|
|
106
106
|
```
|
|
107
107
|
|
|
108
108
|
Use `endDate` not `startDate` (rule 36, point-in-time snapshot). Assert:
|
|
@@ -118,8 +118,8 @@ And post any top-up provision yourself: `create_capsule` (type `ECL Provision`),
|
|
|
118
118
|
## Step 7: Bank reconciliation (NON-NEGOTIABLE)
|
|
119
119
|
|
|
120
120
|
```
|
|
121
|
-
|
|
122
|
-
|
|
121
|
+
generate_bank_reconciliation_summary(bankAccountResourceId: <each bank account>, primarySnapshotStartDate: '2025-01-01', primarySnapshotEndDate: '2025-12-31')
|
|
122
|
+
generate_bank_reconciliation_details(bankAccountResourceId: <each bank account>, primarySnapshotStartDate: '2025-01-01', primarySnapshotEndDate: '2025-12-31', filter: {valueDate: {range: ['2025-01-01', '2025-12-31']}})
|
|
123
123
|
generate_bank_balance_summary(primarySnapshotDate: '2025-12-31')
|
|
124
124
|
```
|
|
125
125
|
|
|
@@ -130,8 +130,8 @@ If `unreconciledCount > 0`: halt audit-prep and route back to `bank-recon.md` jo
|
|
|
130
130
|
## Step 8: Fixed assets + supporting schedules
|
|
131
131
|
|
|
132
132
|
```
|
|
133
|
-
|
|
134
|
-
|
|
133
|
+
generate_fixed_assets_summary(primarySnapshotStartDate: '2025-01-01', primarySnapshotEndDate: '2025-12-31', groupBy: 'CATEGORY')
|
|
134
|
+
generate_fixed_assets_reconciliation_summary(primarySnapshotStartDate: '2025-01-01', primarySnapshotEndDate: '2025-12-31')
|
|
135
135
|
```
|
|
136
136
|
|
|
137
137
|
Assert: `fa_recon.openingNbv + additions - disposals - depreciation == fa_recon.closingNbv == TB['Fixed Assets'].balance`.
|
|
@@ -220,7 +220,7 @@ The SG Form C-S wizard walks the user field-by-field through the C-S form, prefi
|
|
|
220
220
|
| Source | Error | Recovery |
|
|
221
221
|
|--------|-------|----------|
|
|
222
222
|
| `generate_*` | 422 `period_not_closed` | Year-end close incomplete. Route to `year-end-close.md` first. |
|
|
223
|
-
| `
|
|
223
|
+
| `generate_bank_reconciliation_summary` / `generate_bank_reconciliation_details` | `unreconciledCount > 0` | Route to `bank-recon.md`; do NOT hand pack with this open. |
|
|
224
224
|
| `download_export` | 422 `period_too_long` | GL XLSX rejected for >12 months. Split into per-quarter exports. |
|
|
225
225
|
| `download_export` | 504 timeout | Large org. Re-run with smaller `endDate` range or contact infrastructure team. |
|
|
226
226
|
| `update_account` | 422 `lock_date_in_future` | The CoA `lockDate` must be ≤ the period end date. Use today if unsure. |
|
|
@@ -29,13 +29,13 @@
|
|
|
29
29
|
- **`reconcile_cash_transfer(...)`**: inter-account transfer.
|
|
30
30
|
|
|
31
31
|
### Platform tools: create missing transactions
|
|
32
|
-
- **`
|
|
32
|
+
- **`create_transaction_from_document(...)`** (step 6 path B): OCR + autofill bill or invoice from receipt PDF/JPG. Local CLI: `clio magic create --file <pdf> --type bill`.
|
|
33
33
|
- **`create_cash_in(...)` / `create_cash_out(...)`** (step 6 path C): bank fees, interest, FX charges that have no source document.
|
|
34
34
|
- **`create_bank_rule(...)`** (preventive): build a rule for any recurring pattern you handled this run (subscription, rent, utility) so it auto-applies next time.
|
|
35
35
|
|
|
36
36
|
### Platform tools: verification
|
|
37
|
-
- **`
|
|
38
|
-
- **`
|
|
37
|
+
- **`generate_bank_reconciliation_summary(bankAccountResourceId, primarySnapshotStartDate, primarySnapshotEndDate)`** (step 7): per-account formal recon statement.
|
|
38
|
+
- **`generate_bank_reconciliation_details(bankAccountResourceId, primarySnapshotStartDate, primarySnapshotEndDate, filter: {valueDate: {range: [from, to]}})`** (step 7): line-level recon detail for audit pack.
|
|
39
39
|
- **`generate_bank_balance_summary(primarySnapshotDate)`** (step 8): book balance vs bank statement balance per account.
|
|
40
40
|
|
|
41
41
|
### CLI tools: bulk auto-match cascade (offline)
|
|
@@ -158,7 +158,7 @@ For unreconciled rows that have no book-side counterpart yet:
|
|
|
158
158
|
```
|
|
159
159
|
clio magic create --file <invoice-or-receipt-path> --type bill # or --type invoice
|
|
160
160
|
# OR equivalent MCP call:
|
|
161
|
-
|
|
161
|
+
create_transaction_from_document(
|
|
162
162
|
businessTransactionType: 'BILL' | 'INVOICE',
|
|
163
163
|
sourceUrl: <file URL> // omit when the host attaches the file to the call
|
|
164
164
|
)
|
|
@@ -220,8 +220,8 @@ search_bank_records(accountResourceId: B.resourceId, status: 'UNRECONCILED', lim
|
|
|
220
220
|
Target: zero rows OR all remaining are documented timing differences (outstanding cheques, deposits in transit clearing next period; practitioner annotates). Record the judgment: `jot(kind: SCOPE)` naming each residual accepted as a timing difference and why it clears next period.
|
|
221
221
|
|
|
222
222
|
```
|
|
223
|
-
|
|
224
|
-
|
|
223
|
+
generate_bank_reconciliation_summary(bankAccountResourceId: B.resourceId, primarySnapshotStartDate: '2025-01-01', primarySnapshotEndDate: '2025-01-31')
|
|
224
|
+
generate_bank_reconciliation_details(bankAccountResourceId: B.resourceId, primarySnapshotStartDate: '2025-01-01', primarySnapshotEndDate: '2025-01-31', filter: {valueDate: {range: ['2025-01-01', '2025-01-31']}})
|
|
225
225
|
```
|
|
226
226
|
|
|
227
227
|
Keep both the summary and the line-level detail per account; audit-prep step 7 will require them.
|
|
@@ -44,8 +44,8 @@ generate_balance_sheet(snapshotDate: <period-end>)
|
|
|
44
44
|
Standard assertions:
|
|
45
45
|
- TB: `Debits == Credits` (always; if not, system bug).
|
|
46
46
|
- BS: `Total Assets == Total Liabilities + Total Equity`.
|
|
47
|
-
- TB AR == `
|
|
48
|
-
- TB AP == `
|
|
47
|
+
- TB AR == `generate_aged_receivables(endDate)` total.
|
|
48
|
+
- TB AP == `generate_aged_payables(endDate)` total.
|
|
49
49
|
- TB Cash == `generate_bank_balance_summary(primarySnapshotDate)` per-bank total (via `bank-recon.md`).
|
|
50
50
|
|
|
51
51
|
## Calculated schedules: calculate, capsule, post
|
|
@@ -115,11 +115,11 @@ get_capsule(resourceId) # returns totalTransactions (a COUNT), not the transac
|
|
|
115
115
|
| `generate_trial_balance` | Verification, every job |
|
|
116
116
|
| `generate_balance_sheet` | Verification |
|
|
117
117
|
| `generate_profit_and_loss` | Verification + period analysis |
|
|
118
|
-
| `
|
|
119
|
-
| `
|
|
118
|
+
| `generate_aged_receivables` / `generate_aged_payables` | Aging-aware jobs (credit-control, payment-run, audit-prep) |
|
|
119
|
+
| `generate_bank_reconciliation_summary` / `generate_bank_reconciliation_details` | Bank-recon, audit-prep |
|
|
120
120
|
| `generate_vat_ledger` | GST/VAT, quarter-end Q1 |
|
|
121
121
|
| `generate_general_ledger` | Investigation + audit-prep |
|
|
122
|
-
| `
|
|
122
|
+
| `generate_fixed_assets_summary` / `generate_fixed_assets_reconciliation_summary` | FA review, year-end |
|
|
123
123
|
| `search_journals` / `search_invoices` / `search_bills` | Discovery + filter, every job |
|
|
124
124
|
| `calculate` | Schedules + journal lines for every calculated step (posts nothing) |
|
|
125
125
|
| `search_capsules` | Capsule lifecycle discovery |
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
## Tools and calculators this job uses
|
|
6
6
|
|
|
7
7
|
### Platform tools
|
|
8
|
-
- **`
|
|
8
|
+
- **`generate_aged_receivables(endDate: <date>)`**: step 1: AR aging report with bucket breakdown.
|
|
9
9
|
- **`search_invoices(filter: {status: {eq: 'UNPAID'}, dueDate: {lt: <date>}, contactResourceId: <customer>}, sortBy: 'dueDate', sortOrder: 'ASC', limit: 200)`**: step 2: per-customer overdue detail. Paginate.
|
|
10
10
|
- **`get_contact(resourceId: <customer id>)`**: step 2: pull contact info (email, phone, primary contact).
|
|
11
11
|
- **`get_contact_signals(resourceId: <id>, btType: 'SALE')`**: step 3: pull cadence + outlier signals + outstanding balance for the customer. Mid-7 endpoint.
|
|
@@ -28,7 +28,7 @@ Walk steps 1-8 below.
|
|
|
28
28
|
## Step 1: AR aging snapshot
|
|
29
29
|
|
|
30
30
|
```
|
|
31
|
-
|
|
31
|
+
generate_aged_receivables(endDate: '2025-01-31')
|
|
32
32
|
```
|
|
33
33
|
|
|
34
34
|
Save the AR aging snapshot. Returns aging buckets (current, 30d, 60d, 90d, 120d+) per customer. Total per bucket informs collection priority.
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
## Tools and calculators this job uses
|
|
6
6
|
|
|
7
7
|
### Platform tools
|
|
8
|
-
- **`
|
|
8
|
+
- **`create_transaction_from_document(businessTransactionType: 'BILL'|'INVOICE'|'CUSTOMER_CREDIT_NOTE'|'SUPPLIER_CREDIT_NOTE', sourceUrl)`**: step 4: OCR + line-item extraction + contact + CoA suggestion. Creates DRAFT transaction. Local CLI: `clio magic create --file <pdf> --type bill`.
|
|
9
9
|
- **`finalize_bill(...)` / `finalize_invoice(...)` / `finalize_customer_credit_note(...)`**: step 5: finalize practitioner-reviewed Magic-extracted DRAFTs.
|
|
10
10
|
- **`import_bank_statement(accountResourceId, sourceUrl | attached file)`**: step 6: bank statements (CSV / OFX / PDF); creates bank records pending reconciliation per `bank-recon.md`.
|
|
11
11
|
- **`search_background_jobs(filter: {resourceId: {eq: <jobId>}})`**: step 7: poll Magic / bank-import async jobs to terminal status.
|
|
@@ -88,7 +88,7 @@ For each file with `suggestedAction: 'magic-create-bill' | 'magic-create-invoice
|
|
|
88
88
|
```
|
|
89
89
|
clio magic create --file <decrypted path> --type bill
|
|
90
90
|
# OR equivalent MCP call:
|
|
91
|
-
|
|
91
|
+
create_transaction_from_document(
|
|
92
92
|
businessTransactionType: 'BILL',
|
|
93
93
|
sourceUrl: <file URL> // omit when the host attaches the file to the call
|
|
94
94
|
)
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
### Platform tools
|
|
8
8
|
- **`search_fixed_assets(filter: {status: {in: ['ACTIVE', 'DISPOSED', 'DISCARDED']}}, limit: 200)`**, step 1: enumerate FAs. Paginate.
|
|
9
9
|
- **`get_fixed_asset(resourceId: <id>)`**, step 2: per-asset detail (purchaseAmount, purchaseDate, depreciationStartDate, effectiveLife in months, depreciationMethod, depreciableValueResidualAmount, NBV).
|
|
10
|
-
- **`
|
|
11
|
-
- **`
|
|
10
|
+
- **`generate_fixed_assets_summary(primarySnapshotStartDate: <period-start>, primarySnapshotEndDate: <period-end>, groupBy: 'CATEGORY')`**, step 3: aggregate FA register at period end.
|
|
11
|
+
- **`generate_fixed_assets_reconciliation_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
14
|
- **`calculate(type: 'asset-disposal', ...)`**, then `create_capsule` + `create_journal` with `capsuleResourceId`, step 5: per disposal identified during review (see the `asset-disposal` recipe).
|
|
@@ -50,8 +50,8 @@ For each ACTIVE asset, flag for practitioner attention:
|
|
|
50
50
|
## Step 3: FA register reconciliation
|
|
51
51
|
|
|
52
52
|
```
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
generate_fixed_assets_summary(primarySnapshotStartDate: '2025-01-01', primarySnapshotEndDate: '2025-12-31', groupBy: 'CATEGORY')
|
|
54
|
+
generate_fixed_assets_reconciliation_summary(primarySnapshotStartDate: '2025-01-01', primarySnapshotEndDate: '2025-12-31')
|
|
55
55
|
```
|
|
56
56
|
|
|
57
57
|
Keep both the FA summary and the recon summary. Assert per FA category:
|
|
@@ -8,7 +8,7 @@
|
|
|
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`.
|
|
9
9
|
- **`search_bills(filter: {valueDate: {between: [<period-start>, <period-end>]}}, ...)`**: step 2: confirm purchase bills entered.
|
|
10
10
|
- **`search_bank_records(accountResourceId: <id>, status: 'UNRECONCILED', startDate: <from>, endDate: <to>)`**: step 3: pull unreconciled bank statement entries per account.
|
|
11
|
-
- **`
|
|
11
|
+
- **`generate_aged_receivables(endDate: <date>)` / `generate_aged_payables(endDate: <date>)`**: steps 4-5: aging reports tied to TB AR / AP balances.
|
|
12
12
|
|
|
13
13
|
### Platform tools: accruals + valuations
|
|
14
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`.
|
|
@@ -19,7 +19,7 @@ Every calculated step below is the three-step flow in `building-blocks.md` § Ca
|
|
|
19
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
20
|
- **`calculate(type: 'leave-accrual', ...)`**: step 10: monthly leave accrual; the same amount repeats, so one `create_scheduled_journal` covers the year.
|
|
21
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 `
|
|
22
|
+
- **`calculate(type: 'ecl', ...)`**: step 13: top-up bad-debt provision based on `generate_aged_receivables` buckets.
|
|
23
23
|
|
|
24
24
|
### Platform tools: reconciliation execution
|
|
25
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`).
|
|
@@ -69,7 +69,7 @@ Compare count + sum against POS / sales register. Missing invoices = understated
|
|
|
69
69
|
search_bills(filter: {valueDate: {between: ['2025-01-01', '2025-01-31']}}, sortBy: 'valueDate', sortOrder: 'ASC', limit: 200)
|
|
70
70
|
```
|
|
71
71
|
|
|
72
|
-
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_transaction_from_document` with the file and `businessTransactionType: 'BILL'` (Jaz Magic OCR + autofill; local CLI: `clio magic create --file <pdf> --type bill`) to generate the bill draft.
|
|
73
73
|
|
|
74
74
|
### Step 3: Bank reconciliation
|
|
75
75
|
|
|
@@ -79,15 +79,15 @@ For each bank account:
|
|
|
79
79
|
2. `search_bank_records(accountResourceId: <bank account resourceId>, status: 'UNRECONCILED', startDate: '2025-01-01', endDate: '2025-01-31', limit: 200, sortBy: 'valueDate', sortOrder: 'ASC')`.
|
|
80
80
|
3. If results: drive the 5-phase cascade matcher (Step 4 in `bank-recon.md`; local CLI: `clio jobs bank-recon match --input <records> --tolerance 0.01 --date-window 14 --json`). For each match, invoke the matching `reconcile_*` tool.
|
|
81
81
|
4. `view_auto_reconciliation(bankStatementEntryResourceIds: [<id>, ...], recommendationType: 'MAGIC_MATCH')`: READ-ONLY suggestions for residuals (per-entry; get ids from `search_bank_records`, status `UNRECONCILED`); commit via `quick_reconcile` / `apply_bank_rule` / per-entry `reconcile_*`.
|
|
82
|
-
5. `
|
|
82
|
+
5. `generate_bank_reconciliation_summary(bankAccountResourceId: <id>, primarySnapshotStartDate: '2025-01-01', primarySnapshotEndDate: '2025-01-31')`. Confirm `unreconciledCount == 0` OR document the residuals for the period and surface to the user.
|
|
83
83
|
|
|
84
84
|
Full detail in `bank-recon.md`. NOT idempotent; see error table.
|
|
85
85
|
|
|
86
86
|
### Steps 4-5: AR / AP aging
|
|
87
87
|
|
|
88
88
|
```
|
|
89
|
-
|
|
90
|
-
|
|
89
|
+
generate_aged_receivables(endDate: '2025-01-31')
|
|
90
|
+
generate_aged_payables(endDate: '2025-01-31')
|
|
91
91
|
```
|
|
92
92
|
|
|
93
93
|
Use `endDate` (rule 36: point-in-time, not period-range). Assert: aging totals match `generate_trial_balance` AR/AP lines within the org's materiality threshold. Flag > 60d for credit-control / payment-priority. Disputed bills exit the active aging; annotate for the user.
|
|
@@ -127,7 +127,7 @@ Mirror of step 7. Existing `Deferred Revenue` capsules: find this period's DRAFT
|
|
|
127
127
|
search_fixed_assets(filter: {status: {eq: 'ACTIVE'}, depreciationMethod: {eq: 'NO_DEPRECIATION'}})
|
|
128
128
|
```
|
|
129
129
|
|
|
130
|
-
For Jaz-native SL assets: depreciation auto-posts; verify via `
|
|
130
|
+
For Jaz-native SL assets: depreciation auto-posts; verify via `generate_fixed_assets_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.
|
|
131
131
|
|
|
132
132
|
### Step 10: Employee benefit accruals
|
|
133
133
|
|
|
@@ -182,7 +182,7 @@ Bank FX is revaluation, not realized: bank/cash FX uses `FX Bank Revaluation` (n
|
|
|
182
182
|
Mental check on AR aging > 90d bucket changes. If material change vs prior month: run the ECL calculator.
|
|
183
183
|
|
|
184
184
|
```
|
|
185
|
-
calculate(type: 'ecl', buckets: <
|
|
185
|
+
calculate(type: 'ecl', buckets: <generate_aged_receivables buckets, each {name, balance, rate} with rate from the org ECL loss-rate matrix>, existingProvision, startDate)
|
|
186
186
|
```
|
|
187
187
|
|
|
188
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.
|
|
@@ -200,8 +200,8 @@ generate_trial_balance(endDate: '2025-01-31')
|
|
|
200
200
|
Save the close trial balance for the period (you'll diff next month against it). Assert:
|
|
201
201
|
- Debits == Credits (exact).
|
|
202
202
|
- Cash / bank balances match step 3 bank reconciliation summaries.
|
|
203
|
-
- AR balance == `
|
|
204
|
-
- AP balance == `
|
|
203
|
+
- AR balance == `generate_aged_receivables.totalOutstanding` from step 4.
|
|
204
|
+
- AP balance == `generate_aged_payables.totalOutstanding` from step 5.
|
|
205
205
|
- No unexpected balances (negative cash, credit balances on expense accounts).
|
|
206
206
|
|
|
207
207
|
### Steps 15-16: P&L + Balance Sheet
|
|
@@ -6,7 +6,7 @@
|
|
|
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`).
|
|
9
|
-
- **`
|
|
9
|
+
- **`generate_aged_payables(endDate: <cutoff>)`**, used in step 3: total-AP cross-check; flag bills in 60d+ aging buckets.
|
|
10
10
|
- **`generate_bank_balance_summary(primarySnapshotDate: <cutoff>)`**, used in step 5: confirm cash availability before approving the batch.
|
|
11
11
|
- **`get_contact(resourceId: <contactResourceId>)`**, used in step 4 (per supplier): pull payment terms / preferred payment method / bank details (especially `taxId`, `bankAccountNumber`, `bicSwift` for GIRO file generation).
|
|
12
12
|
- **`pay_bill(resourceId: <id>, paymentAmount, transactionAmount, accountResourceId, valueDate, ...)`**, used in step 6: post the payment per bill. NO BATCH PAYMENT ENDPOINT yet; one POST per bill.
|
|
@@ -60,10 +60,10 @@ For each bill, also collect: `contactResourceId`, `currency`, `originalAmount`,
|
|
|
60
60
|
## Step 3: AP aging cross-check
|
|
61
61
|
|
|
62
62
|
```
|
|
63
|
-
|
|
63
|
+
generate_aged_payables(endDate: '2025-02-28')
|
|
64
64
|
```
|
|
65
65
|
|
|
66
|
-
Verify: `sum(derived outstanding) ≈
|
|
66
|
+
Verify: `sum(derived outstanding) ≈ generate_aged_payables.totalOutstanding` (within the materiality threshold). Mismatch indicates pending bills in non-`UNPAID` status (e.g., `PARTIALLY_PAID`) that need separate handling; surface to the user.
|
|
67
67
|
|
|
68
68
|
Flag any bill in the 60d+ bucket; these need priority OR dispute resolution. Exclude bills the user has flagged as disputed.
|
|
69
69
|
|
|
@@ -116,7 +116,7 @@ pay_bill(
|
|
|
116
116
|
After all `pay_bill` calls succeed:
|
|
117
117
|
|
|
118
118
|
```
|
|
119
|
-
|
|
119
|
+
generate_aged_payables(endDate: '2025-02-28')
|
|
120
120
|
search_payments(filter: {businessTransactionReference: {startWith: 'PAYRUN-2025-02-28-'}, valueDate: {eq: '2025-02-28'}})
|
|
121
121
|
```
|
|
122
122
|
|
|
@@ -142,7 +142,7 @@ Assert: per-account balance reduced by `sum(paymentAmount per accountResourceId)
|
|
|
142
142
|
| `pay_bill` | 422 `bill_already_paid` | Bill went `PAID` since step 2. Re-run `search_bills` for fresh state; remove from batch. |
|
|
143
143
|
| `pay_bill` | 422 `lock_date_violated` | `valueDate` is in a locked period. Either lift the lock via `update_account` lock_date OR adjust `valueDate` to the next open period. |
|
|
144
144
|
| `pay_bill` | 500 mid-run | Some payments succeeded; others didn't. NOT idempotent; re-running the loop creates duplicates. Use `search_payments` with the run prefix to identify what succeeded; resume from the next unprocessed bill. Record the judgment: `jot(kind: RECOVERY)` naming the resume point and the bills already paid. |
|
|
145
|
-
| `
|
|
145
|
+
| `generate_aged_payables` | Total mismatch with `search_bills` | Likely `PARTIALLY_PAID` bills excluded from `search_bills` filter. Add `status: {in: ['UNPAID', 'PARTIALLY_PAID']}` and retry. |
|
|
146
146
|
|
|
147
147
|
---
|
|
148
148
|
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
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_receivables(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).
|
|
@@ -68,7 +68,7 @@ Full step-by-step in `gst-vat-filing.md`.
|
|
|
68
68
|
### Q2: ECL formal review
|
|
69
69
|
|
|
70
70
|
```
|
|
71
|
-
|
|
71
|
+
generate_aged_receivables(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
|
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
> The amount filter differs by endpoint: `totalAmount` is accepted on bills and on
|
|
24
24
|
> cashflow-transactions but **rejected on supplier credit notes**, and no `paymentAmount` filter
|
|
25
25
|
> exists anywhere; it is a response field on a payment, not a filter key.
|
|
26
|
-
- **`
|
|
26
|
+
- **`generate_aged_payables(endDate: <date>)`** (step 5): per-supplier outstanding balance.
|
|
27
27
|
- **`create_bill(...)`** / **`apply_credits_to_bill(...)`** / **`create_supplier_credit_note(...)`** (step 6): post any missing items identified during recon.
|
|
28
28
|
|
|
29
29
|
### Cross-references
|
|
@@ -62,7 +62,7 @@ search_bills(
|
|
|
62
62
|
|
|
63
63
|
Per bill: `{resourceId, reference, valueDate, currency, originalAmount, paymentRecords, status, dueDate}`. `balanceAmount` is a FILTER key only; the API accepts it in a filter but never returns it on a bill or invoice. Reading it back yields undefined. Derive outstanding instead: `totalAmount - sum(paymentRecords[].transactionAmount) - sum(creditsApplied[].amountApplied)`, and fetch with `view: 'full'` because a lean row omits `paymentRecords` entirely. Keep the Jaz-side bill list for the recon pack.
|
|
64
64
|
|
|
65
|
-
For an opening-balance recon: also pull the supplier's pre-period balance via `
|
|
65
|
+
For an opening-balance recon: also pull the supplier's pre-period balance via `generate_aged_payables(endDate: <period-start - 1 day>)` and filter to this supplier.
|
|
66
66
|
|
|
67
67
|
## Step 3: Pull payments
|
|
68
68
|
|
|
@@ -83,7 +83,7 @@ Save. Each credit note may have been applied to one or more bills; the applicati
|
|
|
83
83
|
## Step 5: Compute Jaz-side closing balance
|
|
84
84
|
|
|
85
85
|
```
|
|
86
|
-
|
|
86
|
+
generate_aged_payables(endDate: '2025-01-31')
|
|
87
87
|
```
|
|
88
88
|
|
|
89
89
|
Filter to this supplier. Compute: opening balance + new bills (step 2) - payments (step 3) - applied credit notes (step 4) = closing balance per Jaz.
|
|
@@ -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_transaction_from_document` (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. |
|
|
@@ -108,7 +108,7 @@ For each missing bill / credit note: post via `create_bill` / `create_supplier_c
|
|
|
108
108
|
|
|
109
109
|
After corrections:
|
|
110
110
|
```
|
|
111
|
-
|
|
111
|
+
generate_aged_payables(endDate: '2025-01-31')
|
|
112
112
|
```
|
|
113
113
|
|
|
114
114
|
Filter to supplier. New closing balance should match the supplier statement closing balance within tolerance (typically zero; pricing rounding on long-running accounts can leave cents).
|
|
@@ -8,14 +8,14 @@
|
|
|
8
8
|
- **`quarter-end-close.md`**: invoked four times in standalone mode (Q1, Q2, Q3, Q4) before annual extras run.
|
|
9
9
|
|
|
10
10
|
### Platform tools: annual extras
|
|
11
|
-
- **`
|
|
12
|
-
- **`
|
|
11
|
+
- **`generate_fixed_assets_summary(primarySnapshotStartDate: <FY-start>, primarySnapshotEndDate: <FY-end>, groupBy: 'CATEGORY')`**: Y1 FA reconciliation: full-year depreciation movement per asset.
|
|
12
|
+
- **`generate_fixed_assets_reconciliation_summary(primarySnapshotStartDate: <FY-start>, primarySnapshotEndDate: <FY-end>)`**: Y1 verification: opening NBV + additions − disposals − depreciation = closing NBV.
|
|
13
13
|
- **`search_fixed_assets(filter: {status: {in: ['ACTIVE', 'DISPOSED']}})`**: Y1 enumeration of FAs.
|
|
14
14
|
- **`mark_fixed_asset_sold(...)` for a sale or `discard_fixed_asset(...)` for a write-off (both are operations, not status mutations)**: Y1 fallback if any FA has incorrect status at FY-end.
|
|
15
15
|
- **`search_journals(filter: {tags: {eq: 'leave-accrual'}, valueDate: {between: [<FY-start>, <FY-end>]}})` / `search_journals(filter: {tags: {eq: 'bonus-accrual'}, ...})`**: Y2 true-up: pull all FY accrual journals to compare against actuals.
|
|
16
16
|
- **`create_journal(...)`**: Y2 true-up adjustment journals (manual one-off, no calculator).
|
|
17
17
|
- **`calculate(type: 'dividend', ...)`**, then `create_capsule` + `create_journal` (declaration) + `create_cash_out` (payment), each with `capsuleResourceId`: Y3 dividend declaration + payment.
|
|
18
|
-
- **`calculate(type: 'ecl', ...)`**, then `create_capsule` + `create_journal` with `capsuleResourceId`: Y4 IFRS 9 ECL year-end true-up against `
|
|
18
|
+
- **`calculate(type: 'ecl', ...)`**, then `create_capsule` + `create_journal` with `capsuleResourceId`: Y4 IFRS 9 ECL year-end true-up against `generate_aged_receivables`.
|
|
19
19
|
- **`update_account(resourceId: <CoA root>, lockDate: <FY-end>)`**: Y8 final lock.
|
|
20
20
|
|
|
21
21
|
### Platform tools: current/non-current reclassification (manual annual journals)
|
|
@@ -60,15 +60,15 @@ For each quarter Q1-Q4: invoke `quarter-end-close.md` job. Each builds on its ow
|
|
|
60
60
|
### Y1: Final FA reconciliation
|
|
61
61
|
|
|
62
62
|
```
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
generate_fixed_assets_summary(primarySnapshotStartDate: '2025-01-01', primarySnapshotEndDate: '2025-12-31', groupBy: 'CATEGORY')
|
|
64
|
+
generate_fixed_assets_reconciliation_summary(primarySnapshotStartDate: '2025-01-01', primarySnapshotEndDate: '2025-12-31')
|
|
65
65
|
```
|
|
66
66
|
|
|
67
67
|
For Jaz native straight-line depreciation: should be automatic and correct. Verify the 12-month aggregate against `generate_general_ledger(accountResourceIds: [<Depreciation Expense>], startDate, endDate)`.
|
|
68
68
|
|
|
69
69
|
For non-SL assets (DDB, 150DB) depreciated from a `calculate(type: 'depreciation', method: 'ddb' | '150db')` schedule: the year's journals were posted into the asset's capsule (up front as future-dated DRAFTs, or one per monthly close). Confirm all are FINALIZED via `search_journals(filter: {status: {eq: 'DRAFT'}, valueDate: {between: [<FY-start>, <FY-end>]}})` (should be empty). If non-empty: route back to `month-end-close.md` step 9.
|
|
70
70
|
|
|
71
|
-
Reconcile `
|
|
71
|
+
Reconcile `generate_fixed_assets_reconciliation_summary` formula: `openingNbv + additions − disposals − depreciation == closingNbv == TB[Fixed Assets].balance`. Mismatch beyond the materiality threshold → investigate via `search_fixed_assets(filter: {status: {eq: 'ACTIVE'}})` cross-referenced against the depreciation capsule's journals (`search_journals(filter: {valueDate: {between: [<FY-start>, <FY-end>]}})`); typical cause is a disposal posted without `mark_fixed_asset_sold` / `discard_fixed_asset`.
|
|
72
72
|
|
|
73
73
|
### Y2: Annual true-ups (manual journals)
|
|
74
74
|
|
|
@@ -130,7 +130,7 @@ For interim dividends declared during the year: those should already be posted i
|
|
|
130
130
|
### Y4: IFRS 9 ECL year-end true-up
|
|
131
131
|
|
|
132
132
|
```
|
|
133
|
-
|
|
133
|
+
generate_aged_receivables(endDate: '2025-12-31')
|
|
134
134
|
```
|
|
135
135
|
|
|
136
136
|
Bucket AR by aging band per the org's ECL loss-rate matrix (current 0.5%, 30d 2%, 60d 5%, 90d 10%, 120d+ 50%; tune per the org's historical loss data).
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
### Lookup and verification tools
|
|
17
17
|
- **`get_fixed_asset(resourceId: <id>)`** (step 1): the asset's registered cost, purchase date and net book value. Use the live FA-register values; the auditor wants those, not a cached estimate.
|
|
18
|
-
- **`
|
|
18
|
+
- **`generate_fixed_assets_summary(primarySnapshotStartDate: <FY-start>, primarySnapshotEndDate: <disposalDate>, groupBy: 'CATEGORY')`** (step 1 alt): NBV from Jaz's running FA register. If this matches your independent calculation, use it as the authoritative NBV. If they diverge: investigate (likely a missing depreciation journal).
|
|
19
19
|
- **`search_capsules(filter: {title: {eq: <capsule title>}})`**: step 0 idempotency check. Each disposal is unique; duplicate disposal journals would corrupt the FA register reconciliation.
|
|
20
20
|
- **`search_accounts(filter: {name: {in: ['Vehicles', 'Accumulated Depreciation (Vehicles)', 'Gain on Disposal', 'Loss on Disposal']}})`**: step 2.
|
|
21
21
|
- **`generate_trial_balance(endDate: <disposalDate>)`** (step 6): verify cost + accumulated depreciation cleared; gain/loss in P&L.
|
|
@@ -195,7 +195,7 @@ get_fixed_asset(resourceId: <FA UUID>)
|
|
|
195
195
|
Should now show `status: 'DISPOSED'`, and no further depreciation auto-posting.
|
|
196
196
|
|
|
197
197
|
```
|
|
198
|
-
|
|
198
|
+
generate_fixed_assets_reconciliation_summary(primarySnapshotStartDate: <FY-start>, primarySnapshotEndDate: <FY-end>)
|
|
199
199
|
```
|
|
200
200
|
Should reflect the disposal in the year's movement: `openingNbv − depreciation − disposals == closingNbv`.
|
|
201
201
|
|