jaz-cli 2.3.0 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/skills/api/SKILL.md +35 -34
- package/assets/skills/api/references/errors.md +15 -7
- package/assets/skills/api/references/feature-glossary.md +2 -0
- package/assets/skills/api/references/field-map.md +3 -3
- package/assets/skills/conversion/SKILL.md +1 -1
- package/assets/skills/transaction-recipes/SKILL.md +158 -14
- package/assets/skills/transaction-recipes/references/asset-disposal.md +174 -0
- package/assets/skills/transaction-recipes/references/bad-debt-provision.md +145 -0
- package/assets/skills/transaction-recipes/references/building-blocks.md +25 -2
- package/assets/skills/transaction-recipes/references/capital-wip.md +167 -0
- package/assets/skills/transaction-recipes/references/dividend.md +111 -0
- package/assets/skills/transaction-recipes/references/employee-accruals.md +154 -0
- package/assets/skills/transaction-recipes/references/fixed-deposit.md +164 -0
- package/assets/skills/transaction-recipes/references/fx-revaluation.md +135 -0
- package/assets/skills/transaction-recipes/references/hire-purchase.md +190 -0
- package/assets/skills/transaction-recipes/references/intercompany.md +150 -0
- package/assets/skills/transaction-recipes/references/provisions.md +142 -0
- package/dist/calc/amortization.js +122 -0
- package/dist/calc/asset-disposal.js +151 -0
- package/dist/calc/blueprint.js +46 -0
- package/dist/calc/depreciation.js +200 -0
- package/dist/calc/ecl.js +101 -0
- package/dist/calc/fixed-deposit.js +169 -0
- package/dist/calc/format.js +494 -0
- package/dist/calc/fx-reval.js +93 -0
- package/dist/calc/lease.js +146 -0
- package/dist/calc/loan.js +107 -0
- package/dist/calc/provision.js +128 -0
- package/dist/calc/types.js +21 -0
- package/dist/calc/validate.js +48 -0
- package/dist/commands/calc.js +252 -0
- package/dist/index.js +2 -0
- package/package.json +3 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: api
|
|
3
|
-
version: 2.
|
|
3
|
+
version: 2.6.0
|
|
4
4
|
description: Complete reference for the Jaz/Juan REST API — the accounting platform backend. Use this skill whenever building, modifying, debugging, or extending any code that calls the API — including API clients, integrations, data seeding, test data, or new endpoint work. Contains every field name, response shape, error, gotcha, and edge case discovered through live production testing.
|
|
5
5
|
license: MIT
|
|
6
6
|
compatibility: Requires Jaz/Juan API key (x-jk-api-key header). Works with Claude Code, Claude Cowork, Claude.ai, and any agent that reads markdown.
|
|
@@ -61,32 +61,33 @@ You are working with the **Jaz/Juan REST API** — the backend for Jaz (Singapor
|
|
|
61
61
|
|
|
62
62
|
### Journals & Cash
|
|
63
63
|
23. **Journals use `journalEntries`** with `amount` + `type: "DEBIT"|"CREDIT"` — NOT `debit`/`credit` number fields.
|
|
64
|
-
24. **Journals
|
|
65
|
-
25. **
|
|
64
|
+
24. **Journals support multi-currency via `currency` object** — same format as invoices/bills: `"currency": { "sourceCurrency": "USD" }` (auto-fetch platform rate) or `"currency": { "sourceCurrency": "USD", "exchangeRate": 1.35 }` (custom rate). Must be enabled for the org. Omit for base currency. Three restrictions apply to foreign currency journals: (a) **no controlled accounts** — accounts with `controlFlag` (AR, AP) are off-limits (use invoices/bills instead), (b) **no FX accounts** — FX Unrealized Gain/Loss/Rounding are system-managed, (c) **bank accounts must match** — can only post to bank accounts in the same currency as the journal (e.g., USD journal → USD bank account only, not SGD bank account). All other non-controlled accounts (expenses, revenue, assets, liabilities) are available.
|
|
65
|
+
25. **`currency` object is the SAME everywhere** — invoices, bills, credit notes, AND journals all use `currency: { sourceCurrency: "USD", exchangeRate?: number }`. Never use `currencyCode: "USD"` (silently ignored on invoices/bills) or `currency: "USD"` (string — causes 400 on invoices/bills).
|
|
66
|
+
26. **Cash entries use `accountResourceId`** at top level for the BANK account + `journalEntries` array for offsets.
|
|
66
67
|
|
|
67
68
|
### Credit Notes & Refunds
|
|
68
|
-
|
|
69
|
-
|
|
69
|
+
27. **Credit note application wraps in `credits` array** with `amountApplied` — not flat.
|
|
70
|
+
28. **CN refunds use `refunds` wrapper** with `refundAmount` + `refundMethod` — NOT `payments`/`paymentAmount`/`paymentMethod`.
|
|
70
71
|
|
|
71
72
|
### Inventory Items
|
|
72
|
-
|
|
73
|
-
|
|
73
|
+
29. **Inventory items require**: `unit` (e.g., `"pcs"`), `costingMethod` (`"FIXED"` or `"WAC"`), `cogsResourceId`, `blockInsufficientDeductions`, `inventoryAccountResourceId`. `purchaseAccountResourceId` MUST be Inventory-type CoA.
|
|
74
|
+
30. **Delete inventory items via `DELETE /items/:id`** — not `/inventory-items/:id`.
|
|
74
75
|
|
|
75
76
|
### Cash Transfers
|
|
76
|
-
|
|
77
|
+
31. **Cash transfers use `cashOut`/`cashIn` sub-objects** — NOT flat `fromAccountResourceId`/`toAccountResourceId`. Each: `{ accountResourceId, amount }`.
|
|
77
78
|
|
|
78
79
|
### Schedulers
|
|
79
|
-
|
|
80
|
-
|
|
80
|
+
32. **Scheduled invoices/bills wrap in `{ invoice: {...} }` or `{ bill: {...} }`** — not flat. Recurrence field is `repeat` (NOT `frequency`/`interval`). `saveAsDraft: false` required.
|
|
81
|
+
33. **Scheduled journals use FLAT structure** with `schedulerEntries` — not nested in `journal` wrapper.
|
|
81
82
|
|
|
82
83
|
### Bookmarks
|
|
83
|
-
|
|
84
|
+
34. **Bookmarks use `items` array wrapper** with `name`, `value`, `categoryCode`, `datatypeCode`.
|
|
84
85
|
|
|
85
86
|
### Custom Fields
|
|
86
|
-
|
|
87
|
+
35. **Do NOT send `appliesTo` on custom field POST** — causes "Invalid request body". Only send `name`, `type`, `printOnDocuments`.
|
|
87
88
|
|
|
88
89
|
### Reports
|
|
89
|
-
|
|
90
|
+
36. **Report field names differ by type** — this is the most error-prone area:
|
|
90
91
|
|
|
91
92
|
| Report | Required Fields |
|
|
92
93
|
|--------|----------------|
|
|
@@ -101,32 +102,32 @@ You are working with the **Jaz/Juan REST API** — the backend for Jaz (Singapor
|
|
|
101
102
|
| Bank balance summary | `primarySnapshotDate` |
|
|
102
103
|
| Equity movement | `primarySnapshotStartDate`, `primarySnapshotEndDate` |
|
|
103
104
|
|
|
104
|
-
|
|
105
|
+
37. **Data exports use simpler field names**: P&L export uses `startDate`/`endDate` (NOT `primarySnapshotDate`). AR/AP export uses `endDate`.
|
|
105
106
|
|
|
106
107
|
### Pagination
|
|
107
|
-
|
|
108
|
+
38. **All list/search endpoints use `limit`/`offset` pagination** — NOT `page`/`size`. Default limit=100, offset=0. Max limit=1000, max offset=65536. `page`/`size` params are silently ignored. Response shape: `{ totalPages, totalElements, data: [...] }`.
|
|
108
109
|
|
|
109
110
|
### Other
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
111
|
+
39. **Currency rates use `/organization-currencies/:code/rates`** — note the HYPHENATED path (NOT `/organization/currencies`). Enable currencies first via `POST /organization/currencies`, then set rates via `POST /organization-currencies/:code/rates` with body `{ "rate": 0.74, "rateApplicableFrom": "YYYY-MM-DD" }` (see Rule 49 for direction). Cannot set rates for org base currency. Full CRUD: POST (create), GET (list), GET/:id, PUT/:id, DELETE/:id.
|
|
112
|
+
40. **FX invoices/bills MUST use `currency` object** — `currencyCode: "USD"` (string) is **silently ignored** (transaction created in base currency!). Use `currency: { sourceCurrency: "USD" }` to auto-fetch platform rate (ECB/FRANKFURTER), or `currency: { sourceCurrency: "USD", exchangeRate: 1.35 }` for a custom rate. Rate hierarchy: org rate → platform/ECB → transaction-level.
|
|
113
|
+
41. **Invoice GET uses `organizationAccountResourceId`** for line item accounts — POST uses `accountResourceId`. Request-side aliases resolve `issueDate` → `valueDate`, `bankAccountResourceId` → `accountResourceId`, etc.
|
|
114
|
+
42. **Scheduler GET returns `interval`** — POST uses `repeat`. (Response-side asymmetry remains.)
|
|
115
|
+
43. **Search sort is an object** — `{ sort: { sortBy: ["valueDate"], order: "DESC" } }`. Required when `offset` is present (even `offset: 0`).
|
|
116
|
+
44. **Bank records: two import methods** — Multipart CSV/OFX via `POST /magic/importBankStatementFromAttachment` (fields: `sourceFile`, `accountResourceId`, `businessTransactionType: "BANK_STATEMENT"`, `sourceType: "FILE"`). JSON via `POST /bank-records/:accountResourceId` with `{ records: [{description, netAmount, valueDate, ...}] }`.
|
|
117
|
+
45. **Withholding tax** on bills/supplier CNs only. Retry pattern: if `WITHHOLDING_CODE_NOT_FOUND`, strip field and retry.
|
|
118
|
+
46. **Known API bugs (500s)**: Contact groups PUT, custom fields PUT, capsules POST, catalogs POST, inventory balances GET — all return 500.
|
|
119
|
+
47. **Non-existent endpoints**: `POST /deposits` and `POST /inventory/adjustments` return 404 — these endpoints are not implemented.
|
|
120
|
+
48. **Attachments require PDF/PNG**: `POST /:type/:id/attachments` uses multipart `file` field but rejects `text/plain`. Use `application/pdf` or `image/png`.
|
|
121
|
+
49. **Currency rate direction: `rate` = functionalToSource (1 base = X foreign)** — POST `rate: 0.74` for a SGD org means 1 SGD = 0.74 USD. **If your data stores rates as "1 USD = 1.35 SGD" (sourceToFunctional), you MUST invert: `rate = 1 / 1.35 = 0.74`.** GET confirms both: `rateFunctionalToSource` (what you POSTed) and `rateSourceToFunctional` (the inverse).
|
|
121
122
|
|
|
122
123
|
### Search & Filter
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
124
|
+
50. **Search endpoint universal pattern** — All 28 `POST /*/search` endpoints share identical structure: `{ filter?, sort: { sortBy: ["field"], order: "ASC"|"DESC" }, limit: 1-1000, offset: 0-65536 }`. Sort is REQUIRED when offset is present (even `offset: 0`). Default limit: 100. `sortBy` is always an array on all endpoints (no exceptions). See `references/search-reference.md` for per-endpoint filter/sort fields.
|
|
125
|
+
51. **Filter operator reference** — String: `eq`, `neq`, `contains`, `in` (array, max 100), `likeIn` (array, max 100), `reg` (regex array, max 100), `isNull` (bool). Numeric: `eq`, `gt`, `gte`, `lt`, `lte`, `in`. Date (YYYY-MM-DD): `eq`, `gt`, `gte`, `lt`, `lte`, `between` (exactly 2 values). DateTime (RFC3339): same operators, converted to epoch ms internally. Boolean: `eq`. JSON: `jsonIn`, `jsonNotIn`. Logical: nest with `and`/`or`/`not` objects, or use `andGroup`/`orGroup` arrays (invoices, bills, journals, credit notes).
|
|
126
|
+
52. **Date format asymmetry (CRITICAL)** — Request dates: `YYYY-MM-DD` strings (all create/update and DateExpression filters). Request datetimes: RFC3339 strings (DateTimeExpression filters for `createdAt`, `updatedAt`, `approvedAt`, `submittedAt`). **ALL response dates**: `int64` epoch milliseconds — including `valueDate`, `createdAt`, `updatedAt`, `approvedAt`, `submittedAt`, `matchDate`. Convert: `new Date(epochMs).toISOString().slice(0,10)`.
|
|
127
|
+
53. **Field aliases on create endpoints** — Middleware transparently maps: `issueDate`/`date` → `valueDate` (invoices, bills, credit notes, journals). `name` → `tagName` (tags) or `internalName` (items). `paymentDate` → `valueDate`, `bankAccountResourceId` → `accountResourceId` (payments). `paymentAmount` → `refundAmount`, `paymentMethod` → `refundMethod` (credit note refunds). `accountType` → `classificationType`, `currencyCode` → `currency` (CoA). Canonical names always work; aliases are convenience only.
|
|
128
|
+
54. **All search/list responses are flat** — every search and list endpoint returns `{ totalElements, totalPages, data: [...] }` directly (no outer `data` wrapper). Access the array via `response.data`, pagination via `response.totalElements`.
|
|
129
|
+
55. **Scheduled endpoints support date aliases** — `txnDateAliases` middleware (mapping `issueDate`/`date` → `valueDate`) now applies to all scheduled create/update endpoints: `POST/PUT /scheduled/invoices`, `POST/PUT /scheduled/bills`, `POST/PUT /scheduled/journals`, `POST/PUT /scheduled/subscriptions`.
|
|
130
|
+
56. **Kebab-case URL aliases** — `capsuleTypes` endpoints also accept kebab-case paths: `/capsule-types` (list, search, CRUD). `moveTransactionCapsules` also accepts `/move-transaction-capsules`. Both camelCase and kebab-case work identically.
|
|
130
131
|
|
|
131
132
|
## Supporting Files
|
|
132
133
|
|
|
@@ -159,4 +160,4 @@ The backend DX overhaul is live. Key improvements now available:
|
|
|
159
160
|
- **Bill payments**: Embed in bill creation body (safest). Standalone `POST /bills/{id}/payments` also works.
|
|
160
161
|
- **Bank records**: Use multipart `POST /magic/importBankStatementFromAttachment`
|
|
161
162
|
- **Scheduled bills**: Wrap as `{ status, startDate, endDate, repeat, bill: {...} }`
|
|
162
|
-
- **FX currency**: `currency: { sourceCurrency: "USD" }` (auto-fetches platform rate) or `currency: { sourceCurrency: "USD", exchangeRate: 1.35 }` (custom rate). **Never use `currencyCode` string** — silently ignored.
|
|
163
|
+
- **FX currency (invoices, bills, credit notes, AND journals)**: `currency: { sourceCurrency: "USD" }` (auto-fetches platform rate) or `currency: { sourceCurrency: "USD", exchangeRate: 1.35 }` (custom rate). Same object form on all transaction types. **Never use `currencyCode` string** — silently ignored.
|
|
@@ -601,17 +601,25 @@ if (acct.code) ctx.coaIds[acct.code] = acct.resourceId;
|
|
|
601
601
|
|
|
602
602
|
## Journal Errors
|
|
603
603
|
|
|
604
|
-
###
|
|
605
|
-
**
|
|
606
|
-
**Fix**: Do NOT include `currency` in journal requests. The correct journal body only needs `saveAsDraft`, `reference`, `valueDate`, and `journalEntries`.
|
|
607
|
-
```json
|
|
608
|
-
// WRONG:
|
|
609
|
-
{ "saveAsDraft": false, "reference": "JV-001", "valueDate": "2026-02-08", "currency": "SGD", "journalEntries": [...] }
|
|
604
|
+
### Multi-currency journals — `currency` object
|
|
605
|
+
Journals support a top-level `currency` object to create entries in a foreign currency — **same format as invoices/bills**: `{ "sourceCurrency": "USD" }` (auto-fetch platform rate) or `{ "sourceCurrency": "USD", "exchangeRate": 1.35 }` (custom rate). The currency must be enabled for the org. Omit the field for base currency journals.
|
|
610
606
|
|
|
611
|
-
|
|
607
|
+
```json
|
|
608
|
+
// Base currency journal (omit currency):
|
|
612
609
|
{ "saveAsDraft": false, "reference": "JV-001", "valueDate": "2026-02-08", "journalEntries": [...] }
|
|
610
|
+
|
|
611
|
+
// Foreign currency journal (auto platform rate):
|
|
612
|
+
{ "saveAsDraft": false, "reference": "JV-001", "valueDate": "2026-02-08", "currency": { "sourceCurrency": "USD" }, "journalEntries": [...] }
|
|
613
|
+
|
|
614
|
+
// Foreign currency journal (custom rate):
|
|
615
|
+
{ "saveAsDraft": false, "reference": "JV-001", "valueDate": "2026-02-08", "currency": { "sourceCurrency": "USD", "exchangeRate": 1.35 }, "journalEntries": [...] }
|
|
613
616
|
```
|
|
614
617
|
|
|
618
|
+
**Three restrictions apply to foreign currency journals:**
|
|
619
|
+
1. **No controlled accounts** — accounts with `controlFlag` (AR, AP) cannot be used. Use invoices/bills for AR/AP entries instead.
|
|
620
|
+
2. **No FX accounts** — FX Unrealized Gain/Loss/Rounding accounts are system-managed and cannot be posted to directly.
|
|
621
|
+
3. **Bank accounts must match currency** — a USD journal can only post to USD-denominated bank accounts, not SGD bank accounts. All other non-controlled accounts (expenses, revenue, assets, liabilities) are available regardless of journal currency.
|
|
622
|
+
|
|
615
623
|
### Journal entry field format
|
|
616
624
|
**Cause**: Using `debit`/`credit` as separate number fields on journal entries.
|
|
617
625
|
**Fix**: Each entry uses `amount` (number) + `type` (`"DEBIT"` or `"CREDIT"`, UPPERCASE strings).
|
|
@@ -66,6 +66,8 @@ There is no dedicated `/deposits` endpoint (returns 404). Deposits are managed t
|
|
|
66
66
|
|
|
67
67
|
Manual accounting entries for non-payment transactions. Three types: Manual Journals (multi-line debit/credit entries), Cash Journals (2-line cash transfers between bank accounts with cross-currency support), and Transfer Journals (year-end trial balance transfers, non-editable).
|
|
68
68
|
|
|
69
|
+
Manual journals support multi-currency — the entire journal can be in the org's base currency or any enabled foreign currency. Foreign currency journal restrictions: (1) no controlled accounts (AR/AP — use invoices/bills instead), (2) no FX system accounts (Unrealized Gain/Loss/Rounding), (3) bank accounts must match the journal's currency (e.g., USD journal → USD bank only).
|
|
70
|
+
|
|
69
71
|
Minimum 2 balanced entries required. Cash journals are restricted to exactly 2 lines. Bank/cash/current asset/equity/liability accounts cannot have tax profiles applied. Supports scheduled/recurring journals with dynamic scheduler strings (`{{YEAR}}`, `{{MONTH}}`).
|
|
70
72
|
|
|
71
73
|
Cash transfer FX logic: if either side is base currency, keep as-is; if both non-base, fetch rate for cash-out and derive cash-in. Transfer rate = `Cash-in amount / Cash-out amount`.
|
|
@@ -195,7 +195,7 @@ When POSTing, `classificationType` must be one of these exact strings (same as `
|
|
|
195
195
|
| `lines` | `journalEntries` | Same |
|
|
196
196
|
| `entries` | `journalEntries` | Same |
|
|
197
197
|
| `debit` / `credit` (entry) | `amount` + `type` | `amount`: number, `type`: `"DEBIT"` or `"CREDIT"` (UPPERCASE) |
|
|
198
|
-
| `currency` (
|
|
198
|
+
| `currency: "USD"` (string) | `currency: { sourceCurrency: "USD" }` | **Object form** — same as invoices/bills. Auto-fetches platform rate. Add `exchangeRate: 1.35` for custom rate. Omit for base currency. |
|
|
199
199
|
|
|
200
200
|
---
|
|
201
201
|
|
|
@@ -421,8 +421,8 @@ Battle-tested patterns from production Jaz API clients:
|
|
|
421
421
|
| Bill payments | Always embedded in bill creation body, never standalone |
|
|
422
422
|
| Bank records | Multipart import via `importBankStatementFromAttachment` — the only endpoint |
|
|
423
423
|
| Scheduled bills | Wrapped as `{ repeat, startDate, endDate, bill: {...} }`. Field is `repeat` (NOT `frequency`/`interval`) |
|
|
424
|
-
| FX currency | MUST use `currency` OBJECT: `{ sourceCurrency: "USD", exchangeRate: 1.35 }
|
|
424
|
+
| FX currency | MUST use `currency` OBJECT on ALL transaction types (invoices, bills, credit notes, journals): `{ sourceCurrency: "USD" }` (auto platform rate) or `{ sourceCurrency: "USD", exchangeRate: 1.35 }` (custom). String `currencyCode` silently ignored. |
|
|
425
425
|
|
|
426
426
|
---
|
|
427
427
|
|
|
428
|
-
*Last updated: 2026-02-
|
|
428
|
+
*Last updated: 2026-02-18 — Multi-currency journals: `currency` object now documented (same `{ sourceCurrency, exchangeRate? }` form as invoices/bills). Date format matrix: request vs response asymmetry (YYYY-MM-DD in, epoch ms out). Complete middleware alias table from Go source code.*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: conversion
|
|
3
|
-
version: 2.
|
|
3
|
+
version: 2.6.0
|
|
4
4
|
description: Accounting data conversion skill — migrates customer data from Xero, QuickBooks, Sage, MYOB, and Excel exports to Jaz. Covers config, quick, and full conversion workflows, Excel parsing, CoA/contact/tax/items mapping, clearing accounts, TTB, and TB verification.
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: transaction-recipes
|
|
3
|
-
version: 2.
|
|
4
|
-
description:
|
|
3
|
+
version: 2.6.0
|
|
4
|
+
description: 16 IFRS-compliant recipes for complex multi-step accounting in Jaz — prepaid amortization, deferred revenue, loan schedules, IFRS 16 leases, hire purchase, fixed deposits, asset disposal, FX revaluation, ECL provisioning, IAS 37 provisions, dividends, intercompany, and capital WIP. Each recipe includes journal entries, capsule structure, and verification steps. Paired with 10 financial calculators that produce execution-ready blueprints with workings.
|
|
5
5
|
license: MIT
|
|
6
6
|
compatibility: Works with Claude Code, Claude Cowork, Claude.ai, and any agent that reads markdown. For API payloads, load the jaz-api skill alongside this one.
|
|
7
7
|
---
|
|
@@ -17,7 +17,17 @@ You are modeling **complex multi-step accounting scenarios** in Jaz — transact
|
|
|
17
17
|
- Setting up prepaid expenses, deferred revenue, or accrued liabilities
|
|
18
18
|
- Modeling loan repayment schedules with amortization tables
|
|
19
19
|
- Implementing IFRS 16 lease accounting (right-of-use assets + lease liabilities)
|
|
20
|
-
- Recording
|
|
20
|
+
- Recording hire purchase agreements (ownership transfers, depreciate over useful life)
|
|
21
|
+
- Recording depreciation using methods Jaz doesn't natively support (declining balance, 150DB)
|
|
22
|
+
- Managing fixed deposit placements with interest accrual schedules (IFRS 9)
|
|
23
|
+
- Disposing of fixed assets — sale, scrap, or write-off with gain/loss calculation (IAS 16)
|
|
24
|
+
- FX revaluation of non-AR/AP monetary items at period-end (IAS 21)
|
|
25
|
+
- Calculating expected credit loss provisions on aged receivables (IFRS 9)
|
|
26
|
+
- Accruing employee leave and bonus obligations (IAS 19)
|
|
27
|
+
- Recognizing provisions at PV with discount unwinding (IAS 37)
|
|
28
|
+
- Declaring and paying dividends
|
|
29
|
+
- Recording and reconciling intercompany transactions across entities
|
|
30
|
+
- Capitalizing costs in WIP and transferring to fixed assets
|
|
21
31
|
- Any scenario that groups related transactions in a capsule over multiple periods
|
|
22
32
|
|
|
23
33
|
## Building Blocks
|
|
@@ -27,12 +37,13 @@ Every recipe uses a combination of these Jaz features. See `references/building-
|
|
|
27
37
|
| Building Block | Role in Recipes |
|
|
28
38
|
|---|---|
|
|
29
39
|
| **Capsules** | Group all related entries into one workflow container |
|
|
30
|
-
| **Schedulers** | Automate fixed-amount recurring journals (prepaid, deferred) |
|
|
31
|
-
| **Manual Journals** | Record variable-amount entries (loan interest, IFRS 16 unwinding,
|
|
32
|
-
| **Fixed Assets** | Native straight-line depreciation for ROU assets |
|
|
40
|
+
| **Schedulers** | Automate fixed-amount recurring journals (prepaid, deferred, leave) |
|
|
41
|
+
| **Manual Journals** | Record variable-amount entries (loan interest, IFRS 16 unwinding, FX reval, ECL) |
|
|
42
|
+
| **Fixed Assets** | Native straight-line depreciation for ROU assets and completed capital projects |
|
|
43
|
+
| **Invoices / Bills** | Trade documents for intercompany, supplier bills for capital WIP |
|
|
33
44
|
| **Tracking Tags** | Tag all entries in a scenario for report filtering |
|
|
34
45
|
| **Nano Classifiers** | Classify line items by department, cost center, or project |
|
|
35
|
-
| **Custom Fields** | Record reference numbers (policy, loan, lease contract) |
|
|
46
|
+
| **Custom Fields** | Record reference numbers (policy, loan, lease contract, intercompany ref) |
|
|
36
47
|
|
|
37
48
|
## Key Principle: Schedulers vs Manual Journals
|
|
38
49
|
|
|
@@ -40,15 +51,27 @@ Jaz schedulers generate **fixed-amount** recurring entries. This determines whic
|
|
|
40
51
|
|
|
41
52
|
- **Fixed amounts each period** → Use a scheduler inside a capsule (automated)
|
|
42
53
|
- **Variable amounts each period** → Use manual journals inside a capsule (calculated per period)
|
|
54
|
+
- **One-off or two-entry events** → Use manual journals (e.g., dividend declaration + payment)
|
|
43
55
|
|
|
44
56
|
| Recipe | Pattern | Why |
|
|
45
57
|
|---|---|---|
|
|
46
58
|
| Prepaid Amortization | Scheduler + capsule | Same amount each month |
|
|
47
59
|
| Deferred Revenue | Scheduler + capsule | Same amount each month |
|
|
48
|
-
| Accrued Expenses | Two schedulers + capsule
|
|
60
|
+
| Accrued Expenses | Two schedulers + capsule | Accrual + reversal cycle with end dates |
|
|
61
|
+
| Employee Leave Accrual | Scheduler + capsule | Fixed monthly accrual |
|
|
49
62
|
| Bank Loan | Manual journals + capsule | Interest changes as principal reduces |
|
|
50
|
-
| IFRS 16 Lease | Hybrid (native FA + manual journals) + capsule | ROU depreciation is fixed
|
|
63
|
+
| IFRS 16 Lease | Hybrid (native FA + manual journals) + capsule | ROU depreciation is fixed; liability unwinding changes |
|
|
51
64
|
| Declining Balance | Manual journals + capsule | Depreciation changes as book value reduces |
|
|
65
|
+
| FX Revaluation | Manual journals + capsule | Rates change each period |
|
|
66
|
+
| ECL Provision | Manual journals + capsule | Receivables and rates change each quarter |
|
|
67
|
+
| Fixed Deposit | Cash-out + manual journals + cash-in + capsule | Placement, monthly accruals, maturity |
|
|
68
|
+
| Hire Purchase | Manual journals + FA registration + capsule | Like IFRS 16 but depreciate over useful life |
|
|
69
|
+
| Asset Disposal | Manual journal + FA deregistration | One-off compound entry + FA update |
|
|
70
|
+
| Provisions (IAS 37) | Manual journals + cash-out + capsule | Unwinding amount changes each month |
|
|
71
|
+
| Bonus Accrual | Manual journals + capsule | Revenue/profit changes each quarter |
|
|
72
|
+
| Dividends | Manual journals + capsule | One-off: declaration + payment |
|
|
73
|
+
| Intercompany | Invoices/bills + capsule | Mirrored entries in two entities |
|
|
74
|
+
| Capital WIP | Bills/journals + FA registration + capsule | Accumulate then transfer |
|
|
52
75
|
|
|
53
76
|
## Recipe Index
|
|
54
77
|
|
|
@@ -68,17 +91,138 @@ Each recipe includes: scenario description, accounts involved, journal entries,
|
|
|
68
91
|
|
|
69
92
|
5. **[IFRS 16 Lease](references/ifrs16-lease.md)** — Right-of-use asset recognition, lease liability unwinding with changing interest, native FA for ROU straight-line depreciation.
|
|
70
93
|
|
|
71
|
-
6. **[Declining Balance Depreciation](references/declining-balance.md)** —
|
|
94
|
+
6. **[Declining Balance Depreciation](references/declining-balance.md)** — DDB/150DB methods with switch-to-straight-line logic, for assets where Jaz's native SL isn't appropriate.
|
|
95
|
+
|
|
96
|
+
7. **[Fixed Deposit](references/fixed-deposit.md)** — Placement, monthly interest accrual (simple or compound), and maturity settlement. IFRS 9 amortized cost. *Paired calculator: `jaz calc fixed-deposit`*
|
|
97
|
+
|
|
98
|
+
8. **[Hire Purchase](references/hire-purchase.md)** — Like IFRS 16 lease but ownership transfers — ROU depreciation over useful life (not lease term). *Paired calculator: `jaz calc lease --useful-life <months>`*
|
|
99
|
+
|
|
100
|
+
9. **[Asset Disposal](references/asset-disposal.md)** — Sale at gain, sale at loss, or scrap/write-off. Computes accumulated depreciation to disposal date and gain/loss. *Paired calculator: `jaz calc asset-disposal`*
|
|
101
|
+
|
|
102
|
+
### Tier 3 — Month-End Close Recipes
|
|
103
|
+
|
|
104
|
+
10. **[FX Revaluation — Non-AR/AP Items](references/fx-revaluation.md)** — IAS 21 revaluation of non-AR/AP foreign currency monetary items (intercompany loans, term deposits, FX provisions) with Day 1 reversal. *Paired calculator: `jaz calc fx-reval`*
|
|
105
|
+
|
|
106
|
+
11. **[Bad Debt Provision / ECL](references/bad-debt-provision.md)** — IFRS 9 simplified approach provision matrix using aged receivables and historical loss rates. *Paired calculator: `jaz calc ecl`*
|
|
107
|
+
|
|
108
|
+
12. **[Employee Benefit Accruals](references/employee-accruals.md)** — IAS 19 leave accrual (scheduler, fixed monthly) and bonus accrual (manual journals, variable quarterly) with year-end true-up.
|
|
109
|
+
|
|
110
|
+
### Tier 4 — Corporate Events & Structures
|
|
111
|
+
|
|
112
|
+
13. **[Provisions with PV Unwinding](references/provisions.md)** — IAS 37 provision recognized at PV, with monthly discount unwinding schedule. For warranties, legal claims, decommissioning, restructuring. *Paired calculator: `jaz calc provision`*
|
|
113
|
+
|
|
114
|
+
14. **[Dividend Declaration & Payment](references/dividend.md)** — Board-declared dividend: two journals (declaration reducing retained earnings, then payment).
|
|
115
|
+
|
|
116
|
+
15. **[Intercompany Transactions](references/intercompany.md)** — Mirrored invoices/bills or journals across two Jaz entities with matching intercompany reference, quarterly settlement.
|
|
117
|
+
|
|
118
|
+
16. **[Capital WIP to Fixed Asset](references/capital-wip.md)** — Cost accumulation in CIP account during construction/development, transfer to FA on completion, auto-depreciation via Jaz FA module.
|
|
72
119
|
|
|
73
120
|
## How to Use These Recipes
|
|
74
121
|
|
|
75
122
|
1. **Read the recipe** for your scenario — understand the accounts, journal entries, and capsule structure.
|
|
76
123
|
2. **Create the accounts** listed in the "Accounts Involved" table (if they don't already exist in the CoA).
|
|
77
124
|
3. **Create the capsule** with an appropriate capsule type.
|
|
78
|
-
4. **
|
|
79
|
-
5. **
|
|
80
|
-
6. **For
|
|
81
|
-
7. **
|
|
125
|
+
4. **Run the calculator** (if available) to generate exact amounts: `jaz calc <command> --json` gives you a complete blueprint.
|
|
126
|
+
5. **Record the initial transaction** (bill, invoice, or journal) — assign it to the capsule.
|
|
127
|
+
6. **For scheduler recipes**: Create the scheduler with the same capsule — it generates all subsequent entries automatically.
|
|
128
|
+
7. **For manual journal recipes**: Record each period's journal using the calculator output or worked example, always assigning to the same capsule.
|
|
129
|
+
8. **Verify** using the steps in each recipe (ledger grouping by capsule, trial balance checks).
|
|
130
|
+
|
|
131
|
+
## Financial Calculators (CLI)
|
|
132
|
+
|
|
133
|
+
The `jaz-cli` includes 10 IFRS-compliant financial calculators. Each produces a formatted schedule + per-period journal entries + human-readable workings. Use `--json` for structured output with a complete **blueprint** — capsule type/name, tags, custom fields, workings (capsuleDescription), and every step with action type, date, accounts, and amounts.
|
|
134
|
+
|
|
135
|
+
All calculators support `--currency <code>` and `--json`.
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
# ── Tier 2 Calculators ──────────────────────────────────────────
|
|
139
|
+
|
|
140
|
+
# Loan amortization (PMT, interest/principal split)
|
|
141
|
+
jaz calc loan --principal 100000 --rate 6 --term 60 [--start-date 2025-01-01] [--currency SGD] [--json]
|
|
142
|
+
|
|
143
|
+
# IFRS 16 lease (PV, liability unwinding, ROU depreciation)
|
|
144
|
+
jaz calc lease --payment 5000 --term 36 --rate 5 [--start-date 2025-01-01] [--currency SGD] [--json]
|
|
145
|
+
|
|
146
|
+
# Hire purchase (lease + ownership transfer — depreciate over useful life)
|
|
147
|
+
jaz calc lease --payment 5000 --term 36 --rate 5 --useful-life 60 [--start-date 2025-01-01] [--currency SGD] [--json]
|
|
148
|
+
|
|
149
|
+
# Depreciation (DDB, 150DB, or straight-line)
|
|
150
|
+
jaz calc depreciation --cost 50000 --salvage 5000 --life 5 [--method ddb|150db|sl] [--frequency annual|monthly] [--currency SGD] [--json]
|
|
151
|
+
|
|
152
|
+
# Prepaid expense recognition
|
|
153
|
+
jaz calc prepaid-expense --amount 12000 --periods 12 [--frequency monthly|quarterly] [--start-date 2025-01-01] [--currency SGD] [--json]
|
|
154
|
+
|
|
155
|
+
# Deferred revenue recognition
|
|
156
|
+
jaz calc deferred-revenue --amount 36000 --periods 12 [--frequency monthly|quarterly] [--start-date 2025-01-01] [--currency SGD] [--json]
|
|
157
|
+
|
|
158
|
+
# Fixed deposit — simple or compound interest accrual (IFRS 9)
|
|
159
|
+
jaz calc fixed-deposit --principal 100000 --rate 3.5 --term 12 [--compound monthly|quarterly|annually] [--start-date 2025-01-01] [--currency SGD] [--json]
|
|
160
|
+
|
|
161
|
+
# Asset disposal — gain/loss on sale or scrap (IAS 16)
|
|
162
|
+
jaz calc asset-disposal --cost 50000 --salvage 5000 --life 5 --acquired 2022-01-01 --disposed 2025-06-15 --proceeds 20000 [--method sl|ddb|150db] [--currency SGD] [--json]
|
|
163
|
+
|
|
164
|
+
# ── Tier 3 Calculators ──────────────────────────────────────────
|
|
165
|
+
|
|
166
|
+
# FX revaluation — unrealized gain/loss on non-AR/AP items (IAS 21)
|
|
167
|
+
jaz calc fx-reval --amount 50000 --book-rate 1.35 --closing-rate 1.38 [--currency USD] [--base-currency SGD] [--json]
|
|
168
|
+
|
|
169
|
+
# Expected credit loss provision matrix (IFRS 9)
|
|
170
|
+
jaz calc ecl --current 100000 --30d 50000 --60d 20000 --90d 10000 --120d 5000 --rates 0.5,2,5,10,50 [--existing-provision 3000] [--currency SGD] [--json]
|
|
171
|
+
|
|
172
|
+
# ── Tier 4 Calculator ───────────────────────────────────────────
|
|
173
|
+
|
|
174
|
+
# IAS 37 provision PV + discount unwinding schedule
|
|
175
|
+
jaz calc provision --amount 500000 --rate 4 --term 60 [--start-date 2025-01-01] [--currency SGD] [--json]
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Blueprint Output (`--json`)
|
|
179
|
+
|
|
180
|
+
Every calculator's `--json` output includes a `blueprint` object — a complete execution plan for creating the capsule and posting all transactions in Jaz:
|
|
181
|
+
|
|
182
|
+
```json
|
|
183
|
+
{
|
|
184
|
+
"type": "loan",
|
|
185
|
+
"currency": "SGD",
|
|
186
|
+
"blueprint": {
|
|
187
|
+
"capsuleType": "Loan Repayment",
|
|
188
|
+
"capsuleName": "Bank Loan — SGD 100,000 — 6% — 60 months",
|
|
189
|
+
"capsuleDescription": "Loan Amortization Workings\nPrincipal: SGD 100,000.00 | Rate: 6% p.a. ...",
|
|
190
|
+
"tags": ["Bank Loan"],
|
|
191
|
+
"customFields": { "Loan Reference": null },
|
|
192
|
+
"steps": [
|
|
193
|
+
{
|
|
194
|
+
"step": 1,
|
|
195
|
+
"action": "cash-in",
|
|
196
|
+
"description": "Record loan proceeds received from bank",
|
|
197
|
+
"date": "2025-01-01",
|
|
198
|
+
"lines": [
|
|
199
|
+
{ "account": "Cash / Bank Account", "debit": 100000, "credit": 0 },
|
|
200
|
+
{ "account": "Loan Payable", "debit": 0, "credit": 100000 }
|
|
201
|
+
]
|
|
202
|
+
}
|
|
203
|
+
]
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
**Blueprint action types** — each step tells you HOW to execute it in Jaz:
|
|
209
|
+
|
|
210
|
+
| Action | When used | Jaz module |
|
|
211
|
+
|---|---|---|
|
|
212
|
+
| `bill` | Supplier document (prepaid expense) | Bills |
|
|
213
|
+
| `invoice` | Customer document (deferred revenue) | Invoices |
|
|
214
|
+
| `cash-in` | Cash arrives in bank (loan disbursement, FD maturity) | Bank / Manual Journal |
|
|
215
|
+
| `cash-out` | Cash leaves bank (FD placement, provision settlement) | Bank / Manual Journal |
|
|
216
|
+
| `journal` | No cash movement (accrual, depreciation, unwinding, reval) | Manual Journals |
|
|
217
|
+
| `fixed-asset` | Register/update FA module (ROU asset, capital project) | Fixed Assets |
|
|
218
|
+
| `note` | Instruction only (deregister FA on disposal) | N/A |
|
|
219
|
+
|
|
220
|
+
**Math guarantees:**
|
|
221
|
+
- `financial` npm package (TypeScript port of numpy-financial) for PV, PMT — no hand-rolled TVM
|
|
222
|
+
- 2dp per period, final period closes balance to exactly $0.00
|
|
223
|
+
- Input validation with clear error messages (negative values, invalid dates, salvage > cost)
|
|
224
|
+
- DDB→SL switch when straight-line >= declining balance or when DDB would breach salvage floor
|
|
225
|
+
- All journal entries balanced (debits = credits in every step)
|
|
82
226
|
|
|
83
227
|
## Cross-References
|
|
84
228
|
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
# Recipe: Asset Disposal
|
|
2
|
+
|
|
3
|
+
## Scenario
|
|
4
|
+
|
|
5
|
+
Your company disposes of a fixed asset — either selling it, trading it in, or scrapping it. IAS 16.67-72 requires derecognition on disposal or when no future economic benefits are expected. The gain or loss is the difference between net disposal proceeds and the carrying amount (IAS 16.68), and gains are NOT classified as revenue (IAS 16.71) — they appear separately in the P&L under Other Income.
|
|
6
|
+
|
|
7
|
+
**Pattern:** One-shot calculator (not a schedule) — computes accumulated depreciation to disposal date, net book value, and gain/loss, then produces a single disposal journal
|
|
8
|
+
|
|
9
|
+
**Why manual:** Jaz's fixed asset register tracks depreciation automatically, but the disposal journal (removing cost + accumulated depreciation + recognizing gain/loss) must be recorded manually. After the journal, the asset is marked as sold or discarded in the FA register.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Accounts Involved
|
|
14
|
+
|
|
15
|
+
| Account | Type | Subtype | Role |
|
|
16
|
+
|---|---|---|---|
|
|
17
|
+
| Fixed Asset (at cost) | Asset | Non-Current Asset | Original cost being removed |
|
|
18
|
+
| Accumulated Depreciation | Asset | Non-Current Asset (contra) | Contra-asset being cleared |
|
|
19
|
+
| Gain on Disposal | Revenue | Other Income | If proceeds > NBV |
|
|
20
|
+
| Loss on Disposal | Expense | Other Expense | If proceeds < NBV |
|
|
21
|
+
| Cash / Bank Account | Asset | Bank | Receives sale proceeds |
|
|
22
|
+
|
|
23
|
+
> **Note:** Gain on Disposal is NOT revenue — IAS 16.71 requires it to be classified separately. Use an "Other Income" account, not a sales revenue account.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Journal Entries
|
|
28
|
+
|
|
29
|
+
### Scenario A: Sale at a Gain (Proceeds > NBV)
|
|
30
|
+
|
|
31
|
+
Proceeds $12,000, NBV $10,000 — Gain of $2,000:
|
|
32
|
+
|
|
33
|
+
| Line | Account | Debit | Credit |
|
|
34
|
+
|---|---|---|---|
|
|
35
|
+
| 1 | Cash / Bank Account | $12,000 | |
|
|
36
|
+
| 2 | Accumulated Depreciation | $40,000 | |
|
|
37
|
+
| 3 | Fixed Asset (at cost) | | $50,000 |
|
|
38
|
+
| 4 | Gain on Disposal | | $2,000 |
|
|
39
|
+
|
|
40
|
+
### Scenario B: Sale at a Loss (Proceeds < NBV)
|
|
41
|
+
|
|
42
|
+
Proceeds $8,000, NBV $10,000 — Loss of $2,000:
|
|
43
|
+
|
|
44
|
+
| Line | Account | Debit | Credit |
|
|
45
|
+
|---|---|---|---|
|
|
46
|
+
| 1 | Cash / Bank Account | $8,000 | |
|
|
47
|
+
| 2 | Accumulated Depreciation | $40,000 | |
|
|
48
|
+
| 3 | Loss on Disposal | $2,000 | |
|
|
49
|
+
| 4 | Fixed Asset (at cost) | | $50,000 |
|
|
50
|
+
|
|
51
|
+
### Scenario C: Scrap / Write-Off (Zero Proceeds)
|
|
52
|
+
|
|
53
|
+
No proceeds, NBV $10,000 — Loss of $10,000:
|
|
54
|
+
|
|
55
|
+
| Line | Account | Debit | Credit |
|
|
56
|
+
|---|---|---|---|
|
|
57
|
+
| 1 | Accumulated Depreciation | $40,000 | |
|
|
58
|
+
| 2 | Loss on Disposal | $10,000 | |
|
|
59
|
+
| 3 | Fixed Asset (at cost) | | $50,000 |
|
|
60
|
+
|
|
61
|
+
**In all scenarios:** Debits = Credits = Original cost ($50,000).
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Capsule Structure
|
|
66
|
+
|
|
67
|
+
**Capsule:** "Asset Disposal — Delivery Van VH-1234"
|
|
68
|
+
**Capsule Type:** "Asset Disposal"
|
|
69
|
+
|
|
70
|
+
Contents:
|
|
71
|
+
- 1 disposal journal (removing cost, clearing accumulated depreciation, recognizing gain/loss)
|
|
72
|
+
- **Total entries:** 1
|
|
73
|
+
|
|
74
|
+
> **Note:** After recording the disposal journal, update the Jaz FA register to mark the asset as sold or discarded. This is a separate step — the register update does not create a journal entry but ensures the asset stops depreciating.
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Worked Example
|
|
79
|
+
|
|
80
|
+
**Asset details:**
|
|
81
|
+
- Asset: Delivery Van VH-1234
|
|
82
|
+
- Original cost: $50,000
|
|
83
|
+
- Salvage value: $5,000
|
|
84
|
+
- Useful life: 5 years (60 months)
|
|
85
|
+
- Depreciation method: Straight-line
|
|
86
|
+
- Acquired: January 1, 2022
|
|
87
|
+
- Disposed: June 15, 2025
|
|
88
|
+
- Sale proceeds: $12,000
|
|
89
|
+
|
|
90
|
+
**Step 1 — Calculate months held:**
|
|
91
|
+
```
|
|
92
|
+
Acquired: Jan 1, 2022
|
|
93
|
+
Disposed: Jun 15, 2025
|
|
94
|
+
Months held: 42 months (Jan 2022 through Jun 2025)
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**Step 2 — Calculate monthly depreciation (straight-line):**
|
|
98
|
+
```
|
|
99
|
+
Depreciable base = Cost − Salvage = $50,000 − $5,000 = $45,000
|
|
100
|
+
Monthly depreciation = $45,000 / 60 months = $750.00/month
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**Step 3 — Calculate accumulated depreciation to disposal date:**
|
|
104
|
+
```
|
|
105
|
+
Accumulated depreciation = $750.00 × 42 months = $31,500.00
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**Step 4 — Calculate net book value (NBV):**
|
|
109
|
+
```
|
|
110
|
+
NBV = Cost − Accumulated depreciation
|
|
111
|
+
NBV = $50,000 − $31,500 = $18,500.00
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
**Step 5 — Calculate gain or loss:**
|
|
115
|
+
```
|
|
116
|
+
Gain/(Loss) = Proceeds − NBV
|
|
117
|
+
Gain/(Loss) = $12,000 − $18,500 = −$6,500.00 (Loss)
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**Disposal journal (Jun 15, 2025):**
|
|
121
|
+
- Dr Cash $12,000.00
|
|
122
|
+
- Dr Accumulated Depreciation $31,500.00
|
|
123
|
+
- Dr Loss on Disposal $6,500.00
|
|
124
|
+
- Cr Fixed Asset (at cost) $50,000.00
|
|
125
|
+
- Description: "Disposal of Delivery Van VH-1234 — sold at loss"
|
|
126
|
+
- Assign to capsule
|
|
127
|
+
|
|
128
|
+
**Verification of debits = credits:**
|
|
129
|
+
```
|
|
130
|
+
Debits: $12,000 + $31,500 + $6,500 = $50,000
|
|
131
|
+
Credits: $50,000
|
|
132
|
+
Balanced: Yes
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**Use the calculator:** `jaz calc asset-disposal --cost 50000 --salvage 5000 --life 5 --acquired 2022-01-01 --disposed 2025-06-15 --proceeds 12000`
|
|
136
|
+
|
|
137
|
+
The CLI generates a `capsuleDescription` with full workings (cost, accumulated depreciation, NBV, gain/loss breakdown) that can be attached to the capsule for audit trail.
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## Enrichment Suggestions
|
|
142
|
+
|
|
143
|
+
| Enrichment | Value | Why |
|
|
144
|
+
|---|---|---|
|
|
145
|
+
| Tracking Tag | "Asset Disposal" | Filter all disposal transactions in reports |
|
|
146
|
+
| Nano Classifier | Disposal Type → "Sale" or "Scrap" | Distinguish sales from write-offs |
|
|
147
|
+
| Custom Field | "Asset Description" → "Delivery Van VH-1234" | Identify the specific asset disposed |
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Verification
|
|
152
|
+
|
|
153
|
+
1. **Fixed Asset account** → The original cost for this asset is fully removed (zeroed out).
|
|
154
|
+
2. **Accumulated Depreciation account** → The accumulated depreciation for this asset is fully cleared (zeroed out).
|
|
155
|
+
3. **P&L** → Gain or Loss on Disposal appears under "Other Income" or "Other Expense" (not revenue).
|
|
156
|
+
4. **FA register** → Asset is marked as sold or discarded. No further depreciation is posted.
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## Variations
|
|
161
|
+
|
|
162
|
+
**DDB/150DB depreciation:** If the asset uses declining balance instead of straight-line, use `--method ddb` or `--method 150db` in the calculator. The accumulated depreciation will differ, changing the NBV and gain/loss.
|
|
163
|
+
|
|
164
|
+
**Partial-year depreciation:** The calculator pro-rates automatically based on the acquisition and disposal dates. No manual adjustment needed for mid-month or mid-year disposals.
|
|
165
|
+
|
|
166
|
+
**Fully depreciated asset:** If the asset is fully depreciated, NBV = salvage value. Gain = proceeds − salvage. If scrapped, loss = salvage value (the remaining book value written off).
|
|
167
|
+
|
|
168
|
+
**Trade-in:** Record as a disposal (this recipe) plus a new asset acquisition in the same capsule. The trade-in allowance is the "proceeds" for the old asset. The new asset is recorded at its full cost, with the trade-in reducing the cash paid.
|
|
169
|
+
|
|
170
|
+
**Insurance claim (involuntary disposal):** If the asset is destroyed (fire, theft, accident), the insurance payout is the "proceeds." Same journal structure — the only difference is the source of cash (insurer instead of buyer).
|
|
171
|
+
|
|
172
|
+
**Jaz FA register update:** After recording the disposal journal, update the FA register:
|
|
173
|
+
- Sold: `POST /mark-as-sold/fixed-assets` — marks the asset as sold with the disposal date
|
|
174
|
+
- Scrapped: `POST /discard-fixed-assets/:id` — marks the asset as discarded
|