jaz-cli 2.2.1 → 2.5.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 +15 -3
- 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 +199 -0
- package/assets/skills/transaction-recipes/references/accrued-expenses.md +157 -0
- package/assets/skills/transaction-recipes/references/bad-debt-provision.md +145 -0
- package/assets/skills/transaction-recipes/references/bank-loan.md +145 -0
- package/assets/skills/transaction-recipes/references/building-blocks.md +135 -0
- package/assets/skills/transaction-recipes/references/capital-wip.md +167 -0
- package/assets/skills/transaction-recipes/references/declining-balance.md +190 -0
- package/assets/skills/transaction-recipes/references/deferred-revenue.md +125 -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/fx-revaluation.md +135 -0
- package/assets/skills/transaction-recipes/references/ifrs16-lease.md +188 -0
- package/assets/skills/transaction-recipes/references/intercompany.md +150 -0
- package/assets/skills/transaction-recipes/references/prepaid-amortization.md +123 -0
- package/assets/skills/transaction-recipes/references/provisions.md +142 -0
- package/dist/calc/amortization.js +104 -0
- package/dist/calc/blueprint.js +21 -0
- package/dist/calc/depreciation.js +177 -0
- package/dist/calc/ecl.js +89 -0
- package/dist/calc/format.js +389 -0
- package/dist/calc/fx-reval.js +83 -0
- package/dist/calc/lease.js +117 -0
- package/dist/calc/loan.js +97 -0
- package/dist/calc/provision.js +112 -0
- package/dist/calc/types.js +21 -0
- package/dist/calc/validate.js +48 -0
- package/dist/commands/calc.js +200 -0
- package/dist/commands/init.js +8 -3
- package/dist/index.js +2 -0
- package/dist/types/index.js +2 -1
- package/dist/utils/template.js +1 -1
- package/package.json +3 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: api
|
|
3
|
-
version: 2.
|
|
3
|
+
version: 2.5.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 — set `currency: { sourceCurrency: "USD" }` (same object form as invoices/bills) to create a journal in a foreign currency. Omit for base 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`.
|
|
@@ -78,7 +80,7 @@ Cash transfer FX logic: if either side is base currency, keep as-is; if both non
|
|
|
78
80
|
|
|
79
81
|
Containers that group related transactions for complex accounting scenarios. Use cases: prepaid expenses (annual insurance amortization), deferred revenue, accrued expenses, fixed asset acquisitions (CIP), intercompany transactions, renovation projects.
|
|
80
82
|
|
|
81
|
-
A capsule links invoices, bills, journals, and schedulers into a single logical unit. The ledger can be filtered and grouped by capsule. Capsule Types are customizable labels. A capsule must be empty before deletion.
|
|
83
|
+
A capsule links invoices, bills, journals, and schedulers into a single logical unit. If a scheduler belongs to a capsule, every recurring entry it generates is automatically created under that same capsule — this is how prepaid expenses, deferred revenue, and accruals spread entries across periods while keeping them grouped. The ledger can be filtered and grouped by capsule (the only enrichment that supports group-by). Capsule Types are customizable labels. A capsule must be empty before deletion. Transactions can be bulk-attached via Quick Fix or moved between capsules.
|
|
82
84
|
|
|
83
85
|
**API**: CRUD `GET/POST/PUT/DELETE /capsules`, `POST /capsules/search`, `POST /move-transaction-capsules`, CRUD `GET/POST/PUT/DELETE /capsuleTypes`, `POST /capsuleTypes/search` (also available as `/capsule-types/*` kebab-case aliases)
|
|
84
86
|
|
|
@@ -185,9 +187,19 @@ Fixed assets lock their linked line items — cannot edit account, amounts, or e
|
|
|
185
187
|
|
|
186
188
|
**Currencies & FX Rates**: Enable currencies before use. Rate priority: transaction-level custom rate > org-level custom rate > ECB/Frankfurter auto-fetch. Rate direction: `rate` = functionalToSource (1 base = X foreign).
|
|
187
189
|
|
|
188
|
-
**
|
|
190
|
+
**Transaction Data Enrichments** — four optional metadata layers at different granularities:
|
|
191
|
+
|
|
192
|
+
| Layer | Scope | Purpose | Reporting | PDF | Scheduler |
|
|
193
|
+
|-------|-------|---------|-----------|-----|-----------|
|
|
194
|
+
| **Tracking Tags** | Transaction only | Hashtags for advanced reporting | Filter | No | Inherited |
|
|
195
|
+
| **Nano Classifiers** | Line item only | Classification intent (department, cost center) | Filter | Yes (line items) | Inherited |
|
|
196
|
+
| **Capsules** | Group of transactions | Workflow container for multi-step accounting | Filter + Group by | No | All entries land in capsule |
|
|
197
|
+
| **Custom Fields** | Transaction | Additional record-keeping | No impact | Yes | No |
|
|
189
198
|
|
|
190
|
-
**
|
|
199
|
+
- **Tracking Tags**: Like hashtags on transactions — data enrichment for advanced reporting. Transaction-level only (not line items). Can be set on schedulers — generated entries inherit them. Cannot group by tags in reports, only filter.
|
|
200
|
+
- **Nano Classifiers**: Data enrichment with a classification intent — group line items into named classes within a classifier (e.g., Department: Engineering/Sales/Finance). Line-item-level only (not transaction headers). Can be displayed on PDF line items. Can be set on schedulers — generated entries inherit them. Assigning classifiers to items auto-applies them to line items in transactions.
|
|
201
|
+
- **Capsules**: Not a classification — a workflow container that groups related transactions for a specific accounting scenario (prepaid, deferred, accrual, CIP). The only enrichment supporting group-by in reports. See dedicated Capsules section above.
|
|
202
|
+
- **Custom Fields**: Text/number/date/dropdown fields for additional record-keeping. Transaction-level, applied to invoices/bills/journals/contacts. Can show on PDFs and be made mandatory. No reporting impact, not available on schedulers.
|
|
191
203
|
|
|
192
204
|
**Lock Dates**: Prevent edits to transactions before a date (org-wide or per-account). Prevents backdated entries.
|
|
193
205
|
|
|
@@ -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.5.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
|
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: transaction-recipes
|
|
3
|
+
version: 2.5.0
|
|
4
|
+
description: 13 IFRS-compliant recipes for modeling complex multi-step accounting scenarios in Jaz — from prepaid amortization and loan schedules to FX revaluation, ECL provisioning, dividend declarations, and intercompany transactions. Each recipe includes journal entries, capsule structure, and verification steps. Paired with 8 financial calculators that produce execution-ready blueprints.
|
|
5
|
+
license: MIT
|
|
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
|
+
---
|
|
8
|
+
|
|
9
|
+
# Transaction Recipes Skill
|
|
10
|
+
|
|
11
|
+
You are modeling **complex multi-step accounting scenarios** in Jaz — transactions that span multiple periods, involve changing amounts, or require several linked entries to complete a single business event.
|
|
12
|
+
|
|
13
|
+
**This skill provides conceptual recipes with full accounting logic. For API field names and payloads, load the `jaz-api` skill alongside this one.**
|
|
14
|
+
|
|
15
|
+
## When to Use This Skill
|
|
16
|
+
|
|
17
|
+
- Setting up prepaid expenses, deferred revenue, or accrued liabilities
|
|
18
|
+
- Modeling loan repayment schedules with amortization tables
|
|
19
|
+
- Implementing IFRS 16 lease accounting (right-of-use assets + lease liabilities)
|
|
20
|
+
- Recording depreciation using methods Jaz doesn't natively support (declining balance, 150DB)
|
|
21
|
+
- FX revaluation of non-AR/AP monetary items at period-end (IAS 21)
|
|
22
|
+
- Calculating expected credit loss provisions on aged receivables (IFRS 9)
|
|
23
|
+
- Accruing employee leave and bonus obligations (IAS 19)
|
|
24
|
+
- Recognizing provisions at PV with discount unwinding (IAS 37)
|
|
25
|
+
- Declaring and paying dividends
|
|
26
|
+
- Recording and reconciling intercompany transactions across entities
|
|
27
|
+
- Capitalizing costs in WIP and transferring to fixed assets
|
|
28
|
+
- Any scenario that groups related transactions in a capsule over multiple periods
|
|
29
|
+
|
|
30
|
+
## Building Blocks
|
|
31
|
+
|
|
32
|
+
Every recipe uses a combination of these Jaz features. See `references/building-blocks.md` for details.
|
|
33
|
+
|
|
34
|
+
| Building Block | Role in Recipes |
|
|
35
|
+
|---|---|
|
|
36
|
+
| **Capsules** | Group all related entries into one workflow container |
|
|
37
|
+
| **Schedulers** | Automate fixed-amount recurring journals (prepaid, deferred, leave) |
|
|
38
|
+
| **Manual Journals** | Record variable-amount entries (loan interest, IFRS 16 unwinding, FX reval, ECL) |
|
|
39
|
+
| **Fixed Assets** | Native straight-line depreciation for ROU assets and completed capital projects |
|
|
40
|
+
| **Invoices / Bills** | Trade documents for intercompany, supplier bills for capital WIP |
|
|
41
|
+
| **Tracking Tags** | Tag all entries in a scenario for report filtering |
|
|
42
|
+
| **Nano Classifiers** | Classify line items by department, cost center, or project |
|
|
43
|
+
| **Custom Fields** | Record reference numbers (policy, loan, lease contract, intercompany ref) |
|
|
44
|
+
|
|
45
|
+
## Key Principle: Schedulers vs Manual Journals
|
|
46
|
+
|
|
47
|
+
Jaz schedulers generate **fixed-amount** recurring entries. This determines which recipe pattern to use:
|
|
48
|
+
|
|
49
|
+
- **Fixed amounts each period** → Use a scheduler inside a capsule (automated)
|
|
50
|
+
- **Variable amounts each period** → Use manual journals inside a capsule (calculated per period)
|
|
51
|
+
- **One-off or two-entry events** → Use manual journals (e.g., dividend declaration + payment)
|
|
52
|
+
|
|
53
|
+
| Recipe | Pattern | Why |
|
|
54
|
+
|---|---|---|
|
|
55
|
+
| Prepaid Amortization | Scheduler + capsule | Same amount each month |
|
|
56
|
+
| Deferred Revenue | Scheduler + capsule | Same amount each month |
|
|
57
|
+
| Accrued Expenses | Two schedulers + capsule | Accrual + reversal cycle with end dates |
|
|
58
|
+
| Employee Leave Accrual | Scheduler + capsule | Fixed monthly accrual |
|
|
59
|
+
| Bank Loan | Manual journals + capsule | Interest changes as principal reduces |
|
|
60
|
+
| IFRS 16 Lease | Hybrid (native FA + manual journals) + capsule | ROU depreciation is fixed; liability unwinding changes |
|
|
61
|
+
| Declining Balance | Manual journals + capsule | Depreciation changes as book value reduces |
|
|
62
|
+
| FX Revaluation | Manual journals + capsule | Rates change each period |
|
|
63
|
+
| ECL Provision | Manual journals + capsule | Receivables and rates change each quarter |
|
|
64
|
+
| Provisions (IAS 37) | Manual journals + capsule | Unwinding amount changes each month |
|
|
65
|
+
| Bonus Accrual | Manual journals + capsule | Revenue/profit changes each quarter |
|
|
66
|
+
| Dividends | Manual journals + capsule | One-off: declaration + payment |
|
|
67
|
+
| Intercompany | Invoices/bills + capsule | Mirrored entries in two entities |
|
|
68
|
+
| Capital WIP | Bills/journals + FA registration + capsule | Accumulate then transfer |
|
|
69
|
+
|
|
70
|
+
## Recipe Index
|
|
71
|
+
|
|
72
|
+
Each recipe includes: scenario description, accounts involved, journal entries, capsule structure, worked example with real numbers, enrichment suggestions, verification steps, and common variations.
|
|
73
|
+
|
|
74
|
+
### Tier 1 — Scheduler Recipes (Automated)
|
|
75
|
+
|
|
76
|
+
1. **[Prepaid Amortization](references/prepaid-amortization.md)** — Annual insurance, rent, or subscription paid upfront with monthly expense recognition via scheduler.
|
|
77
|
+
|
|
78
|
+
2. **[Deferred Revenue](references/deferred-revenue.md)** — Upfront customer payment for a service delivered over time, with monthly revenue recognition via scheduler.
|
|
79
|
+
|
|
80
|
+
### Tier 2 — Manual Journal Recipes (Calculated)
|
|
81
|
+
|
|
82
|
+
3. **[Accrued Expenses](references/accrued-expenses.md)** — Month-end expense accrual and start-of-month reversal using two schedulers with end dates, plus the actual supplier bill.
|
|
83
|
+
|
|
84
|
+
4. **[Bank Loan](references/bank-loan.md)** — Loan disbursement, monthly installments splitting principal and interest, full amortization table with worked example.
|
|
85
|
+
|
|
86
|
+
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.
|
|
87
|
+
|
|
88
|
+
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.
|
|
89
|
+
|
|
90
|
+
### Tier 3 — Month-End Close Recipes
|
|
91
|
+
|
|
92
|
+
7. **[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`*
|
|
93
|
+
|
|
94
|
+
8. **[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`*
|
|
95
|
+
|
|
96
|
+
9. **[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.
|
|
97
|
+
|
|
98
|
+
### Tier 4 — Corporate Events & Structures
|
|
99
|
+
|
|
100
|
+
10. **[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`*
|
|
101
|
+
|
|
102
|
+
11. **[Dividend Declaration & Payment](references/dividend.md)** — Board-declared dividend: two journals (declaration reducing retained earnings, then payment).
|
|
103
|
+
|
|
104
|
+
12. **[Intercompany Transactions](references/intercompany.md)** — Mirrored invoices/bills or journals across two Jaz entities with matching intercompany reference, quarterly settlement.
|
|
105
|
+
|
|
106
|
+
13. **[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.
|
|
107
|
+
|
|
108
|
+
## How to Use These Recipes
|
|
109
|
+
|
|
110
|
+
1. **Read the recipe** for your scenario — understand the accounts, journal entries, and capsule structure.
|
|
111
|
+
2. **Create the accounts** listed in the "Accounts Involved" table (if they don't already exist in the CoA).
|
|
112
|
+
3. **Create the capsule** with an appropriate capsule type.
|
|
113
|
+
4. **Run the calculator** (if available) to generate exact amounts: `jaz calc <command> --json` gives you a complete blueprint.
|
|
114
|
+
5. **Record the initial transaction** (bill, invoice, or journal) — assign it to the capsule.
|
|
115
|
+
6. **For scheduler recipes**: Create the scheduler with the same capsule — it generates all subsequent entries automatically.
|
|
116
|
+
7. **For manual journal recipes**: Record each period's journal using the calculator output or worked example, always assigning to the same capsule.
|
|
117
|
+
8. **Verify** using the steps in each recipe (ledger grouping by capsule, trial balance checks).
|
|
118
|
+
|
|
119
|
+
## Financial Calculators (CLI)
|
|
120
|
+
|
|
121
|
+
The `jaz-cli` includes 8 IFRS-compliant financial calculators. Each produces a formatted schedule table with per-period journal entries. Use `--json` for structured output with a complete **blueprint** — an execution plan containing capsule type, name, tags, custom fields, and every journal entry with dates, accounts, and amounts.
|
|
122
|
+
|
|
123
|
+
All calculators support `--currency <code>` for currency labeling and `--json` for agent-parseable output.
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
# ── Tier 2 Calculators ──────────────────────────────────────────
|
|
127
|
+
|
|
128
|
+
# Loan amortization schedule (PMT, interest/principal split)
|
|
129
|
+
jaz calc loan --principal 100000 --rate 6 --term 60 [--start-date 2025-01-01] [--currency SGD] [--json]
|
|
130
|
+
|
|
131
|
+
# IFRS 16 lease (PV, liability unwinding, ROU depreciation)
|
|
132
|
+
jaz calc lease --payment 5000 --term 36 --rate 5 [--start-date 2025-01-01] [--currency SGD] [--json]
|
|
133
|
+
|
|
134
|
+
# Depreciation (DDB, 150DB, or straight-line)
|
|
135
|
+
jaz calc depreciation --cost 50000 --salvage 5000 --life 5 [--method ddb|150db|sl] [--frequency annual|monthly] [--currency SGD] [--json]
|
|
136
|
+
|
|
137
|
+
# Prepaid expense recognition
|
|
138
|
+
jaz calc prepaid-expense --amount 12000 --periods 12 [--frequency monthly|quarterly] [--start-date 2025-01-01] [--currency SGD] [--json]
|
|
139
|
+
|
|
140
|
+
# Deferred revenue recognition
|
|
141
|
+
jaz calc deferred-revenue --amount 36000 --periods 12 [--frequency monthly|quarterly] [--start-date 2025-01-01] [--currency SGD] [--json]
|
|
142
|
+
|
|
143
|
+
# ── Tier 3 Calculators ──────────────────────────────────────────
|
|
144
|
+
|
|
145
|
+
# FX revaluation — unrealized gain/loss on non-AR/AP items (IAS 21)
|
|
146
|
+
jaz calc fx-reval --amount 50000 --book-rate 1.35 --closing-rate 1.38 [--currency USD] [--base-currency SGD] [--json]
|
|
147
|
+
|
|
148
|
+
# Expected credit loss provision matrix (IFRS 9)
|
|
149
|
+
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]
|
|
150
|
+
|
|
151
|
+
# ── Tier 4 Calculator ───────────────────────────────────────────
|
|
152
|
+
|
|
153
|
+
# IAS 37 provision PV + discount unwinding schedule
|
|
154
|
+
jaz calc provision --amount 500000 --rate 4 --term 60 [--start-date 2025-01-01] [--currency SGD] [--json]
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### Blueprint Output (`--json`)
|
|
158
|
+
|
|
159
|
+
Every calculator's `--json` output includes a `blueprint` object — a complete execution plan that an AI agent or human can follow to create the capsule and post all transactions in Jaz:
|
|
160
|
+
|
|
161
|
+
```json
|
|
162
|
+
{
|
|
163
|
+
"type": "loan",
|
|
164
|
+
"currency": "SGD",
|
|
165
|
+
"blueprint": {
|
|
166
|
+
"capsuleType": "Loan Repayment",
|
|
167
|
+
"capsuleName": "Bank Loan — SGD 100,000 — 6% — 60 months",
|
|
168
|
+
"tags": ["Bank Loan"],
|
|
169
|
+
"customFields": { "Loan Reference": null },
|
|
170
|
+
"steps": [
|
|
171
|
+
{
|
|
172
|
+
"step": 1,
|
|
173
|
+
"action": "journal",
|
|
174
|
+
"description": "Loan disbursement",
|
|
175
|
+
"date": "2025-01-01",
|
|
176
|
+
"lines": [
|
|
177
|
+
{ "account": "Cash / Bank Account", "debit": 100000, "credit": 0 },
|
|
178
|
+
{ "account": "Loan Payable", "debit": 0, "credit": 100000 }
|
|
179
|
+
]
|
|
180
|
+
}
|
|
181
|
+
]
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**Math guarantees:**
|
|
187
|
+
- Uses `financial` npm package (TypeScript port of numpy-financial) for PV, PMT — no hand-rolled TVM
|
|
188
|
+
- 2 decimal places per period, final period closes balance to exactly $0.00
|
|
189
|
+
- Input validation with clear error messages (negative values, invalid dates, salvage > cost)
|
|
190
|
+
- DDB→SL switch when straight-line >= declining balance or when DDB would breach salvage floor
|
|
191
|
+
- Journal entries balanced (sum of debits = sum of credits in every step)
|
|
192
|
+
|
|
193
|
+
## Cross-References
|
|
194
|
+
|
|
195
|
+
- **API field names and payloads**: Load the `jaz-api` skill — see `references/endpoints.md` and `references/field-map.md`
|
|
196
|
+
- **Capsule API**: `POST /capsules`, `POST /capsuleTypes` — see api skill's `references/full-api-surface.md`
|
|
197
|
+
- **Scheduler API**: `POST /scheduled/journals`, `POST /scheduled/invoices`, `POST /scheduled/bills`
|
|
198
|
+
- **Fixed Assets API**: `POST /fixed-assets` — see api skill's `references/feature-glossary.md`
|
|
199
|
+
- **Enrichments overview**: See `references/building-blocks.md` or api skill's `references/feature-glossary.md`
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# Recipe: Accrued Expenses
|
|
2
|
+
|
|
3
|
+
## Scenario
|
|
4
|
+
|
|
5
|
+
Your company receives electricity each month but the supplier invoices quarterly. At the end of January, you estimate $3,000 of electricity expense that hasn't been billed yet. You accrue it, reverse it next month, and record the actual bill when it arrives.
|
|
6
|
+
|
|
7
|
+
**Pattern:** Two schedulers + capsule (accrual scheduler + reversal scheduler with end dates), or manual journals for one-off accruals
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Accounts Involved
|
|
12
|
+
|
|
13
|
+
| Account | Type | Subtype | Role |
|
|
14
|
+
|---|---|---|---|
|
|
15
|
+
| Accrued Expenses | Liability | Current Liability | Holds the accrued liability |
|
|
16
|
+
| Utilities Expense | Expense | Expense | Receives the expense charge |
|
|
17
|
+
| Accounts Payable | Liability | Current Liability | When the actual bill arrives |
|
|
18
|
+
| Cash / Bank Account | Asset | Bank | Pays the bill |
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## How Reversals Work in Jaz
|
|
23
|
+
|
|
24
|
+
Jaz does not have a native "reversal" concept. To automate the accrual-reversal cycle, use **two journal schedulers** — one for the accrual, one for the reversal — each with an end date. The end date stops the schedulers when the actual bill is expected.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Journal Entries
|
|
29
|
+
|
|
30
|
+
### Step 1: Accrual Scheduler (runs at month-end)
|
|
31
|
+
|
|
32
|
+
Create a journal scheduler for the monthly accrual:
|
|
33
|
+
|
|
34
|
+
| Line | Account | Debit | Credit |
|
|
35
|
+
|---|---|---|---|
|
|
36
|
+
| 1 | Utilities Expense | $3,000 | |
|
|
37
|
+
| 2 | Accrued Expenses | | $3,000 |
|
|
38
|
+
|
|
39
|
+
**Scheduler settings:**
|
|
40
|
+
- Frequency: Monthly
|
|
41
|
+
- Start date: 2025-01-31 (last day of first accrual month)
|
|
42
|
+
- **End date: 2025-03-31** — stops when you expect the bill to arrive
|
|
43
|
+
- Capsule: "Q1 2025 Electricity — PowerCo"
|
|
44
|
+
- Description: `Electricity accrual — {{MONTH_NAME}} {{YEAR}}`
|
|
45
|
+
|
|
46
|
+
### Step 2: Reversal Scheduler (runs at start of next month)
|
|
47
|
+
|
|
48
|
+
Create a second journal scheduler for the reversal (opposite entries):
|
|
49
|
+
|
|
50
|
+
| Line | Account | Debit | Credit |
|
|
51
|
+
|---|---|---|---|
|
|
52
|
+
| 1 | Accrued Expenses | $3,000 | |
|
|
53
|
+
| 2 | Utilities Expense | | $3,000 |
|
|
54
|
+
|
|
55
|
+
**Scheduler settings:**
|
|
56
|
+
- Frequency: Monthly
|
|
57
|
+
- Start date: 2025-02-01 (first day after first accrual)
|
|
58
|
+
- **End date: 2025-04-01** — one month after the accrual scheduler's end date
|
|
59
|
+
- Capsule: same capsule — "Q1 2025 Electricity — PowerCo"
|
|
60
|
+
- Description: `Reversal of electricity accrual — {{MONTH_NAME}} {{YEAR}}`
|
|
61
|
+
|
|
62
|
+
This clears each month's accrual so the actual bill can be recorded cleanly.
|
|
63
|
+
|
|
64
|
+
### Step 3: Actual Bill (when received — e.g., Mar 15)
|
|
65
|
+
|
|
66
|
+
Create a bill to the electricity supplier for the actual amount (which may differ from the estimate):
|
|
67
|
+
|
|
68
|
+
- Bill: Dr Utilities Expense $9,200 / Cr AP $9,200
|
|
69
|
+
- Assign to the same capsule
|
|
70
|
+
|
|
71
|
+
The net effect per month:
|
|
72
|
+
- Each month's P&L shows the estimated expense (accrual)
|
|
73
|
+
- Each reversal clears the accrual at the start of the next month
|
|
74
|
+
- The bill captures the full actual amount when it arrives
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Capsule Structure
|
|
79
|
+
|
|
80
|
+
**Capsule:** "Q1 2025 Electricity — PowerCo"
|
|
81
|
+
**Capsule Type:** "Accrued Expenses"
|
|
82
|
+
|
|
83
|
+
Contents:
|
|
84
|
+
- 3 accrual journals — generated by the accrual scheduler (one per month-end)
|
|
85
|
+
- 3 reversal journals — generated by the reversal scheduler (one at start of next month)
|
|
86
|
+
- 1 supplier bill (when received)
|
|
87
|
+
- **Total entries:** 7
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Worked Example
|
|
92
|
+
|
|
93
|
+
**Setup:**
|
|
94
|
+
- Create capsule "Q1 2025 Electricity — PowerCo" with type "Accrued Expenses"
|
|
95
|
+
- Create accrual scheduler (Dr Utilities $3,000 / Cr Accrued $3,000) — monthly, end date Mar 31, assign to capsule
|
|
96
|
+
- Create reversal scheduler (Dr Accrued $3,000 / Cr Utilities $3,000) — monthly, end date Apr 1, assign to capsule
|
|
97
|
+
|
|
98
|
+
**Jan 31, 2025 — auto-generated by accrual scheduler:**
|
|
99
|
+
- Dr Utilities Expense $3,000 / Cr Accrued Expenses $3,000
|
|
100
|
+
- P&L: Utilities Expense $3,000
|
|
101
|
+
|
|
102
|
+
**Feb 1, 2025 — auto-generated by reversal scheduler:**
|
|
103
|
+
- Dr Accrued Expenses $3,000 / Cr Utilities Expense $3,000
|
|
104
|
+
- Accrued balance cleared to $0
|
|
105
|
+
|
|
106
|
+
**Feb 28, 2025 — auto-generated by accrual scheduler:**
|
|
107
|
+
- Dr Utilities Expense $3,000 / Cr Accrued Expenses $3,000
|
|
108
|
+
|
|
109
|
+
**Mar 1, 2025 — auto-generated by reversal scheduler:**
|
|
110
|
+
- Dr Accrued Expenses $3,000 / Cr Utilities Expense $3,000
|
|
111
|
+
|
|
112
|
+
**Mar 15, 2025 — Actual bill received:**
|
|
113
|
+
- Create bill: $9,200 to PowerCo, coded to Utilities Expense
|
|
114
|
+
- Assign to same capsule
|
|
115
|
+
- Pay bill when due
|
|
116
|
+
|
|
117
|
+
**Mar 31, 2025 — auto-generated by accrual scheduler (final):**
|
|
118
|
+
- Dr Utilities Expense $3,000 / Cr Accrued Expenses $3,000
|
|
119
|
+
|
|
120
|
+
**Apr 1, 2025 — auto-generated by reversal scheduler (final):**
|
|
121
|
+
- Dr Accrued Expenses $3,000 / Cr Utilities Expense $3,000
|
|
122
|
+
|
|
123
|
+
**P&L impact per month:**
|
|
124
|
+
- January: $3,000 (accrual, not yet reversed)
|
|
125
|
+
- February: −$3,000 (reversal) + $3,000 (new accrual) = net $0 change
|
|
126
|
+
- March: −$3,000 (reversal) + $9,200 (bill) + $3,000 (accrual) = net $9,200
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Enrichment Suggestions
|
|
131
|
+
|
|
132
|
+
| Enrichment | Value | Why |
|
|
133
|
+
|---|---|---|
|
|
134
|
+
| Tracking Tag | "Utilities" | Filter all utility-related transactions |
|
|
135
|
+
| Nano Classifier | Department → "Operations" | Attribute to responsible department |
|
|
136
|
+
| Custom Field | "Supplier Account #" → "PWR-88201" | Record the utility account number |
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Verification
|
|
141
|
+
|
|
142
|
+
1. **Group General Ledger by Capsule** → "Q1 2025 Electricity — PowerCo" shows all 7 entries. Accrued Expenses should net to zero after all reversals.
|
|
143
|
+
2. **Trial Balance at Jan 31** → Accrued Expenses shows $3,000 credit (liability exists). Utilities Expense shows $3,000.
|
|
144
|
+
3. **Trial Balance at Mar 31 (after bill)** → Accrued Expenses shows $3,100 credit (March accrual not yet reversed). Utilities Expense reflects year-to-date charges.
|
|
145
|
+
4. **Trial Balance at Apr 1 (after reversal)** → Accrued Expenses shows $0 (all cleared).
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## Variations
|
|
150
|
+
|
|
151
|
+
**One-off accrual (no scheduler):** For a single accrual-reversal pair (e.g., a year-end audit adjustment), create two manual journals instead of schedulers — one accrual journal at Dec 31 and one reversal journal at Jan 1. Both go in the same capsule.
|
|
152
|
+
|
|
153
|
+
**Variable estimate amounts:** If the monthly estimate changes (e.g., $3,000 in Jan, $3,100 in Feb), schedulers won't work since they produce fixed amounts. Use manual journals for each accrual and reversal instead, all in the same capsule.
|
|
154
|
+
|
|
155
|
+
**No reversal method:** Some companies accrue at month-end and only reverse when the actual bill arrives (instead of reversing at the start of each month). This is simpler but less granular in monthly P&L. Use one accrual scheduler with an end date, and a single manual reversal journal when the bill comes.
|
|
156
|
+
|
|
157
|
+
**Known amount, unknown timing:** If you know the quarterly bill is always ~$9,000 but don't know the exact date, set the scheduler end dates to your best estimate. Adjust by deleting or adding manual journals in the capsule if timing shifts.
|