jaz-clio 4.30.16 → 4.30.18
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 +10 -1
- package/assets/skills/conversion/SKILL.md +1 -1
- package/assets/skills/jobs/SKILL.md +1 -1
- package/assets/skills/transaction-recipes/SKILL.md +1 -1
- package/dist/commands/bank-rules.js +8 -1
- package/dist/commands/quick-fix.js +2 -2
- package/dist/commands/schedulers.js +13 -1
- package/dist/core/recipe/engine.js +6 -3
- package/dist/core/registry/tools.js +40 -24
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: jaz-api
|
|
3
|
-
version: 4.30.
|
|
3
|
+
version: 4.30.18
|
|
4
4
|
description: Complete reference for the Jaz 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 API key (x-jk-api-key header). Works with Claude Code, Google Antigravity, OpenAI Codex, GitHub Copilot, Cursor, and any agent that reads markdown.
|
|
@@ -281,6 +281,15 @@ Bills, invoices, and credit notes share identical mandatory field specs. Adding
|
|
|
281
281
|
### Quick Fix (Bulk Update)
|
|
282
282
|
107. **20 Quick Fix endpoints for bulk-updating transactions and line items** — `POST /api/v1/quick-fix/{entity}` with `{ resourceIds: [...], attributes: {...} }`. Response: `{ updated: [...], failed: [{ resourceId, error, errorCode }] }`. Entities grouped by domain: **ARAP**: invoices, bills, customer-credit-notes, supplier-credit-notes. **Accounting**: journals, cash-entries. **Schedulers**: sale-schedules, purchase-schedules, subscription-schedules, journal-schedules. Line-item endpoints add `/line-items` suffix. ARAP line items use `{ lineItemResourceIds, attributes }`. Scheduler line items use `{ schedulerUpdates: [{ schedulerResourceId, lineItemUpdates }] }`. **Known gotcha**: `valueDate` (and `dueDate` for ARAP) must currently be included in `attributes` even when unchanged — absent fields are treated as "remove" rather than "keep existing". This will be fixed server-side.
|
|
283
283
|
|
|
284
|
+
### Scheduler Dynamic Strings
|
|
285
|
+
108. **Scheduler placeholder strings** — All scheduled transactions (invoices, bills, journals, subscriptions) support dynamic strings in any free text field (`reference`, line item `name`, `notes`). Strings are replaced with values relative to the **transaction date**: `{{Day}}` → day name (Monday), `{{Date}}` → full date (09 Mar 2026), `{{Date+X}}` → date + X days, `{{DateRange:X}}` → date range spanning X days (min 1, max 999), `{{Month}}` → month name (March), `{{Month+X}}` → month + X months, `{{MonthRange:X}}` → month range spanning X months, `{{Year}}` → year (2026), `{{Year+X}}` → year + X years. Example: `reference: "INV-{{Month}}-{{Year}}"` → `"INV-March-2026"` for a March transaction.
|
|
286
|
+
|
|
287
|
+
### Bank Rule Dynamic Strings
|
|
288
|
+
109. **Bank rule placeholder strings** — Bank reconciliation rules support dynamic strings in any free text field (`name`, `reference`, cash entry description). Strings are replaced with actual **bank record** values during reconciliation: `{{bankReference}}` → bank record reference (e.g., INV-03/01/2025-01), `{{bankPayee}}` → payer/payee name (e.g., Fruit Planet), `{{bankDescription}}` → transaction description (e.g., QR Payment), `{{bankDate}}` → transaction date (e.g., 09 Mar 2026). Example: `reference: "{{bankPayee}} - {{bankReference}}"`.
|
|
289
|
+
|
|
290
|
+
### Quick Fix Tag Field
|
|
291
|
+
110. **Quick-fix uses `tags` (string array) — e.g., `"tags": ["Q1"]`** — The `attributes` object in quick-fix transaction endpoints accepts `tags` as a string array (e.g., `"tags": ["Q1"]`). `tag` (singular) is silently ignored. This matches the `tags` array format used on create/update for all transaction types. The CLI `--tag` flag auto-wraps to `tags: [name]`.
|
|
292
|
+
|
|
284
293
|
## Supporting Files
|
|
285
294
|
|
|
286
295
|
For detailed reference, read these files in this skill directory:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: jaz-conversion
|
|
3
|
-
version: 4.30.
|
|
3
|
+
version: 4.30.18
|
|
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,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: jaz-jobs
|
|
3
|
-
version: 4.30.
|
|
3
|
+
version: 4.30.18
|
|
4
4
|
description: 12 accounting jobs for SMB bookkeepers and accountants — month-end, quarter-end, and year-end close playbooks plus 9 ad-hoc operational jobs (bank recon, document collection, GST/VAT filing, payment runs, credit control, supplier recon, audit prep, fixed asset review, statutory filing). Jobs can have paired tools as nested subcommands (e.g., `clio jobs bank-recon match`, `clio jobs document-collection ingest`, `clio jobs statutory-filing sg-cs`). Paired with an interactive CLI blueprint generator (clio jobs).
|
|
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. For individual transaction patterns, load the jaz-recipes skill.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: jaz-recipes
|
|
3
|
-
version: 4.30.
|
|
3
|
+
version: 4.30.18
|
|
4
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 13 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.
|
|
@@ -12,7 +12,14 @@ const BANK_RULES_COLUMNS = [
|
|
|
12
12
|
export function registerBankRulesCommand(program) {
|
|
13
13
|
const cmd = program
|
|
14
14
|
.command('bank-rules')
|
|
15
|
-
.description('Manage bank reconciliation rules')
|
|
15
|
+
.description('Manage bank reconciliation rules')
|
|
16
|
+
.addHelpText('after', `
|
|
17
|
+
Dynamic Strings (usable in name, reference — any free text field):
|
|
18
|
+
{{bankReference}} Bank record reference (e.g., INV-03/01/2025-01)
|
|
19
|
+
{{bankPayee}} Payer/payee name (e.g., Fruit Planet)
|
|
20
|
+
{{bankDescription}} Transaction description (e.g., QR Payment)
|
|
21
|
+
{{bankDate}} Transaction date (e.g., 09 Mar 2026)
|
|
22
|
+
Strings are replaced with actual bank record values during reconciliation.`);
|
|
16
23
|
cmd
|
|
17
24
|
.command('list')
|
|
18
25
|
.description('List bank rules')
|
|
@@ -24,7 +24,7 @@ Entities (grouped by domain):
|
|
|
24
24
|
Schedulers: sale-schedules, purchase-schedules, subscription-schedules, journal-schedules
|
|
25
25
|
|
|
26
26
|
Examples:
|
|
27
|
-
clio quick-fix invoices --ids id1,id2 --attributes '{"valueDate":"2026-01-15","
|
|
27
|
+
clio quick-fix invoices --ids id1,id2 --attributes '{"valueDate":"2026-01-15","tag":"Q1"}'
|
|
28
28
|
clio quick-fix bills --ids id1 --date 2026-02-01 --due 2026-03-01 --tag Marketing
|
|
29
29
|
clio quick-fix journals --line-items --ids li1,li2 --attributes '{"organizationAccountResourceId":"<uuid>"}'
|
|
30
30
|
clio quick-fix sale-schedules --line-items --input scheduler-updates.json`)
|
|
@@ -34,7 +34,7 @@ Examples:
|
|
|
34
34
|
.option('--input <file>', 'Read attributes/body from JSON file')
|
|
35
35
|
.option('--date <date>', 'Shorthand: set valueDate (YYYY-MM-DD)')
|
|
36
36
|
.option('--due <date>', 'Shorthand: set dueDate (YYYY-MM-DD)')
|
|
37
|
-
.option('--tag <name>', 'Shorthand: set
|
|
37
|
+
.option('--tag <name>', 'Shorthand: set tag')
|
|
38
38
|
.option('--contact <id>', 'Shorthand: set contactResourceId')
|
|
39
39
|
.option('--account <id>', 'Shorthand: set organizationAccountResourceId (line items)')
|
|
40
40
|
.option('--tax-profile <id>', 'Shorthand: set taxProfileResourceId (line items)')
|
|
@@ -17,7 +17,19 @@ const SCHEDULER_COLUMNS = [
|
|
|
17
17
|
export function registerSchedulersCommand(program) {
|
|
18
18
|
const cmd = program
|
|
19
19
|
.command('schedulers')
|
|
20
|
-
.description('Manage scheduled (recurring) transactions')
|
|
20
|
+
.description('Manage scheduled (recurring) transactions')
|
|
21
|
+
.addHelpText('after', `
|
|
22
|
+
Dynamic Strings (usable in reference, line item name, notes):
|
|
23
|
+
{{Day}} Day name (Monday)
|
|
24
|
+
{{Date}} Full date (09 Mar 2026)
|
|
25
|
+
{{Date+X}} Date + X days (e.g., {{Date+7}} → 16 Mar 2026)
|
|
26
|
+
{{DateRange:X}} Date range spanning X days (e.g., {{DateRange:7}} → 09 Mar - 15 Mar 2026)
|
|
27
|
+
{{Month}} Month name (March)
|
|
28
|
+
{{Month+X}} Month + X months (e.g., {{Month+1}} → April)
|
|
29
|
+
{{MonthRange:X}} Month range spanning X months
|
|
30
|
+
{{Year}} Year (2026)
|
|
31
|
+
{{Year+X}} Year + X years (e.g., {{Year+1}} → 2027)
|
|
32
|
+
Strings are replaced with values relative to the transaction date.`);
|
|
21
33
|
// ── clio schedulers list-invoices ──────────────────────────────
|
|
22
34
|
cmd
|
|
23
35
|
.command('list-invoices')
|
|
@@ -20,16 +20,19 @@ export async function executeRecipe(client, input) {
|
|
|
20
20
|
validateInputs(input);
|
|
21
21
|
// 2. Resolve or create capsule type
|
|
22
22
|
const capsuleTypeId = await resolveCapsuleType(client, blueprint.capsuleType);
|
|
23
|
-
// 3. Create capsule
|
|
23
|
+
// 3. Create capsule (append date to avoid name collisions from repeated runs)
|
|
24
|
+
// Prefer the first step's accounting date over wall-clock UTC for audit traceability
|
|
25
|
+
const capsuleDate = blueprint.steps[0]?.date ?? new Date().toISOString().slice(0, 10);
|
|
26
|
+
const capsuleTitle = `${blueprint.capsuleName} (${capsuleDate})`;
|
|
24
27
|
const capsuleRes = await createCapsule(client, {
|
|
25
28
|
capsuleTypeResourceId: capsuleTypeId,
|
|
26
|
-
title:
|
|
29
|
+
title: capsuleTitle,
|
|
27
30
|
description: blueprint.capsuleDescription,
|
|
28
31
|
});
|
|
29
32
|
const capsule = {
|
|
30
33
|
resourceId: capsuleRes.data.resourceId,
|
|
31
34
|
type: blueprint.capsuleType,
|
|
32
|
-
title:
|
|
35
|
+
title: capsuleTitle,
|
|
33
36
|
};
|
|
34
37
|
// 4. Determine which step to skip (attach mode)
|
|
35
38
|
const attachStepIndex = findAttachStep(input);
|
|
@@ -1026,7 +1026,7 @@ Steps: 1) search_customer_credit_notes with status UNAPPLIED for the same contac
|
|
|
1026
1026
|
},
|
|
1027
1027
|
{
|
|
1028
1028
|
name: 'generate_cash_balance',
|
|
1029
|
-
description: 'Generate a cash balance report showing cash position at a specific date.
|
|
1029
|
+
description: 'Generate a cash balance report showing cash position at a specific date. PREFERRED for cash position questions — use this (NOT balance sheet) when asked about total cash, cash on hand, available cash, or cash position across all bank accounts.',
|
|
1030
1030
|
params: {
|
|
1031
1031
|
endDate: { type: 'string', description: 'Snapshot date (YYYY-MM-DD)' },
|
|
1032
1032
|
},
|
|
@@ -1834,7 +1834,7 @@ WHEN NOT TO USE: moving money between your own bank/cash accounts — use create
|
|
|
1834
1834
|
WHEN TO USE: expenses paid, supplier payments, reimbursements, withdrawals to external parties.
|
|
1835
1835
|
WHEN NOT TO USE: moving money between your own bank/cash accounts — use create_cash_transfer instead.
|
|
1836
1836
|
- accountResourceId MUST be a Bank Accounts type account — use list_bank_accounts or search_accounts with accountType "Bank Accounts" to find the correct one. Non-bank accounts are rejected.
|
|
1837
|
-
- journalEntries are the offsetting entries. Each needs accountResourceId, type (DEBIT
|
|
1837
|
+
- journalEntries are the offsetting entries. Each needs accountResourceId, type (DEBIT for cash-out expenses), and amount (must be > 0). For cash-out: use type "DEBIT" on the expense/offset account. IMPORTANT: offset accounts must be regular P&L or balance sheet accounts (expense, revenue, asset, liability) — NOT bank/cash accounts or controlled accounts (AR/AP). Example: { accountResourceId: "<expense-acct-id>", type: "DEBIT", amount: 100 }.
|
|
1838
1838
|
- The API enforces account separation: cash-out bank account cannot appear in journalEntries.`,
|
|
1839
1839
|
params: {
|
|
1840
1840
|
reference: { type: 'string', description: 'Reference number' },
|
|
@@ -1869,7 +1869,7 @@ WHEN NOT TO USE: moving money between your own bank/cash accounts — use create
|
|
|
1869
1869
|
},
|
|
1870
1870
|
{
|
|
1871
1871
|
name: 'update_cash_in',
|
|
1872
|
-
description: 'Update an existing cash-in entry (change amount, date, reference, notes, tags, or journal entries). Use when the user says "update", "change", "fix", or "adjust" a cash-in that was just created or found. Do NOT create a new entry — use this tool instead.',
|
|
1872
|
+
description: 'Update an existing cash-in entry (change amount, date, reference, notes, tags, or journal entries). Use when the user says "update", "change", "fix", or "adjust" a cash-in that was just created or found. Do NOT create a new entry — use this tool instead. NOTE: cash entries created without saveAsDraft:true are ACTIVE (finalized) and cannot be updated — they must be deleted and recreated.',
|
|
1873
1873
|
params: {
|
|
1874
1874
|
resourceId: { type: 'string', description: 'Cash-in resourceId (parentEntityResourceId from create response)' },
|
|
1875
1875
|
accountResourceId: { type: 'string', description: 'Bank account resourceId (required for update)' },
|
|
@@ -1900,7 +1900,7 @@ WHEN NOT TO USE: moving money between your own bank/cash accounts — use create
|
|
|
1900
1900
|
},
|
|
1901
1901
|
{
|
|
1902
1902
|
name: 'update_cash_out',
|
|
1903
|
-
description: 'Update an existing cash-out entry (change amount, date, reference, notes, tags, or journal entries). Use when the user says "update", "change", "fix", or "adjust" a cash-out that was just created or found. Do NOT create a new entry — use this tool instead.',
|
|
1903
|
+
description: 'Update an existing cash-out entry (change amount, date, reference, notes, tags, or journal entries). Use when the user says "update", "change", "fix", or "adjust" a cash-out that was just created or found. Do NOT create a new entry — use this tool instead. NOTE: cash entries created without saveAsDraft:true are ACTIVE (finalized) and cannot be updated — they must be deleted and recreated.',
|
|
1904
1904
|
params: {
|
|
1905
1905
|
resourceId: { type: 'string', description: 'Cash-out resourceId (parentEntityResourceId from create response)' },
|
|
1906
1906
|
accountResourceId: { type: 'string', description: 'Bank account resourceId (required for update)' },
|
|
@@ -1982,7 +1982,7 @@ WHEN NOT TO USE: receiving money from external parties (use create_cash_in) or p
|
|
|
1982
1982
|
},
|
|
1983
1983
|
{
|
|
1984
1984
|
name: 'search_bank_records',
|
|
1985
|
-
description: 'Search bank records (imported bank transactions) for a specific account. Use this to find unreconciled items, match deposits to invoices, or identify bank charges. Filter by status (UNRECONCILED/RECONCILED), date range, description, payer/payee, reference, and amount range. Call list_bank_accounts first to get the accountResourceId.',
|
|
1985
|
+
description: 'Search bank records (imported bank transactions) for a specific account. Use this to find unreconciled items, match deposits to invoices, or identify bank charges. For duplicate detection, also cross-reference with search_cashflow_transactions to check if matching payments/cash entries exist. Filter by status (UNRECONCILED/RECONCILED/POSSIBLE_DUPLICATE), date range, description, payer/payee, reference, and amount range. Call list_bank_accounts first to get the accountResourceId.',
|
|
1986
1986
|
params: {
|
|
1987
1987
|
accountResourceId: { type: 'string', description: 'Bank account resourceId' },
|
|
1988
1988
|
status: { type: 'string', enum: ['UNRECONCILED', 'RECONCILED', 'ARCHIVED', 'POSSIBLE_DUPLICATE'], description: 'Filter by reconciliation status' },
|
|
@@ -2402,7 +2402,8 @@ Auto-resolves accounts from chart of accounts. Provide bankAccountName for recip
|
|
|
2402
2402
|
- Use schedulerEntries (NOT journalEntries) — each needs accountResourceId, amount, type (DEBIT/CREDIT), name.
|
|
2403
2403
|
- Use repeat (NOT frequency/interval): WEEKLY, MONTHLY, QUARTERLY, YEARLY.
|
|
2404
2404
|
- Total debits MUST equal total credits.
|
|
2405
|
-
- Flat structure — reference, valueDate, saveAsDraft at top level (not nested)
|
|
2405
|
+
- Flat structure — reference, valueDate, saveAsDraft at top level (not nested).
|
|
2406
|
+
Dynamic strings for reference/name/notes: {{Day}}, {{Date}}, {{Date+X}}, {{DateRange:X}}, {{Month}}, {{Month+X}}, {{MonthRange:X}}, {{Year}}, {{Year+X}} — replaced with values relative to the transaction date.`,
|
|
2406
2407
|
params: {
|
|
2407
2408
|
reference: { type: 'string', description: 'Journal reference' },
|
|
2408
2409
|
valueDate: { type: 'string', description: 'Template date (YYYY-MM-DD)' },
|
|
@@ -2445,7 +2446,8 @@ DIFFERENT from subscriptions: no proration, but currency/tax/items can differ pe
|
|
|
2445
2446
|
CRITICAL:
|
|
2446
2447
|
- saveAsDraft MUST be false (API rejects INVALID_SALE_STATUS otherwise).
|
|
2447
2448
|
- Use repeat (NOT frequency/interval): WEEKLY, MONTHLY, QUARTERLY, YEARLY.
|
|
2448
|
-
- Each lineItem needs name, unitPrice, quantity, accountResourceId
|
|
2449
|
+
- Each lineItem needs name, unitPrice, quantity, accountResourceId.
|
|
2450
|
+
Dynamic strings for reference/name/notes: {{Day}}, {{Date}}, {{Date+X}}, {{DateRange:X}}, {{Month}}, {{Month+X}}, {{MonthRange:X}}, {{Year}}, {{Year+X}} — replaced with values relative to the transaction date.`,
|
|
2449
2451
|
params: {
|
|
2450
2452
|
startDate: { type: 'string', description: 'First occurrence (YYYY-MM-DD)' },
|
|
2451
2453
|
endDate: { type: 'string', description: 'Last occurrence (YYYY-MM-DD, optional)' },
|
|
@@ -2494,7 +2496,8 @@ CRITICAL:
|
|
|
2494
2496
|
description: `Create a scheduled (recurring) bill. CRITICAL:
|
|
2495
2497
|
- saveAsDraft MUST be false (API rejects INVALID_PURCHASE_STATUS otherwise).
|
|
2496
2498
|
- Use repeat (NOT frequency/interval): WEEKLY, MONTHLY, QUARTERLY, YEARLY.
|
|
2497
|
-
- Each lineItem needs name, unitPrice, quantity, accountResourceId
|
|
2499
|
+
- Each lineItem needs name, unitPrice, quantity, accountResourceId.
|
|
2500
|
+
Dynamic strings for reference/name/notes: {{Day}}, {{Date}}, {{Date+X}}, {{DateRange:X}}, {{Month}}, {{Month+X}}, {{MonthRange:X}}, {{Year}}, {{Year+X}} — replaced with values relative to the transaction date.`,
|
|
2498
2501
|
params: {
|
|
2499
2502
|
startDate: { type: 'string', description: 'First occurrence (YYYY-MM-DD)' },
|
|
2500
2503
|
endDate: { type: 'string', description: 'Last occurrence (YYYY-MM-DD, optional)' },
|
|
@@ -3083,13 +3086,15 @@ CRITICAL:
|
|
|
3083
3086
|
description: `Create a bank reconciliation rule. Rules auto-match bank records to transactions during reconciliation.
|
|
3084
3087
|
- actionType: "RECONCILE_WITH_DIRECT_CASH_ENTRY" (most common — creates cash-in/cash-out on match)
|
|
3085
3088
|
- appliesToReconciliationAccountResourceId: the bank account this rule applies to
|
|
3086
|
-
- configuration MUST
|
|
3087
|
-
|
|
3089
|
+
- configuration MUST be nested under reconcileWithDirectCashEntry key. Structure:
|
|
3090
|
+
{ reconcileWithDirectCashEntry: { amountAllocationType: "PERCENTAGE"|"FIXED"|"FIXED_AND_PERCENTAGE", percentageAllocation: [{ organizationAccountResourceId: "<acct-id>", amount: 100, index: 0 }], fixedAllocation: [{ organizationAccountResourceId: "<acct-id>", amount: 0.50, index: 0 }], reference: "{{bankReference}}", tags: [], taxInclusion: false, taxVatApplicable: false } }
|
|
3091
|
+
- For simple 100% allocation: { reconcileWithDirectCashEntry: { amountAllocationType: "PERCENTAGE", percentageAllocation: [{ organizationAccountResourceId: "<revenue-acct>", amount: 100, index: 0 }], reference: "", tags: [], taxInclusion: false, taxVatApplicable: false } }
|
|
3092
|
+
Dynamic strings for name/reference: {{bankReference}} (e.g., INV-03/01/2025-01), {{bankPayee}} (e.g., Fruit Planet), {{bankDescription}} (e.g., QR Payment), {{bankDate}} (e.g., 09 Mar 2026) — replaced with actual bank record values during reconciliation.`,
|
|
3088
3093
|
params: {
|
|
3089
|
-
name: { type: 'string', description: 'Rule name
|
|
3094
|
+
name: { type: 'string', description: 'Rule name — supports dynamic strings: {{bankReference}}, {{bankPayee}}, {{bankDescription}}, {{bankDate}}' },
|
|
3090
3095
|
actionType: { type: 'string', description: 'Action type: "RECONCILE_WITH_DIRECT_CASH_ENTRY" (creates cash entry on match)' },
|
|
3091
3096
|
appliesToReconciliationAccountResourceId: { type: 'string', description: 'Bank account resourceId this rule applies to' },
|
|
3092
|
-
configuration: { type: 'object', description: '
|
|
3097
|
+
configuration: { type: 'object', description: 'MUST nest under reconcileWithDirectCashEntry key. Required fields: amountAllocationType, percentageAllocation (array), reference, tags, taxInclusion, taxVatApplicable. See tool description for full example.' },
|
|
3093
3098
|
},
|
|
3094
3099
|
required: ['name', 'actionType', 'appliesToReconciliationAccountResourceId', 'configuration'],
|
|
3095
3100
|
group: 'bank_rules',
|
|
@@ -3098,11 +3103,11 @@ Example configuration: { "allocationType": "PERCENTAGE", "allocationDetails": [{
|
|
|
3098
3103
|
},
|
|
3099
3104
|
{
|
|
3100
3105
|
name: 'update_bank_rule',
|
|
3101
|
-
description: 'Update an existing bank reconciliation rule (conditions, actions, or name). Fetches current rule first — only send fields to change.',
|
|
3106
|
+
description: 'Update an existing bank reconciliation rule (conditions, actions, or name). Fetches current rule first — only send fields to change. Dynamic strings: {{bankReference}}, {{bankPayee}}, {{bankDescription}}, {{bankDate}}.',
|
|
3102
3107
|
params: {
|
|
3103
3108
|
resourceId: { type: 'string', description: 'Bank rule resourceId' },
|
|
3104
|
-
name: { type: 'string', description: 'New rule name' },
|
|
3105
|
-
configuration: { type: 'object', description: 'Updated configuration' },
|
|
3109
|
+
name: { type: 'string', description: 'New rule name — supports dynamic strings: {{bankReference}}, {{bankPayee}}, etc.' },
|
|
3110
|
+
configuration: { type: 'object', description: 'Updated configuration — must nest under reconcileWithDirectCashEntry key (same structure as create)' },
|
|
3106
3111
|
},
|
|
3107
3112
|
required: ['resourceId'],
|
|
3108
3113
|
group: 'bank_rules',
|
|
@@ -3317,13 +3322,15 @@ Example configuration: { "allocationType": "PERCENTAGE", "allocationDetails": [{
|
|
|
3317
3322
|
DIFFERENT from scheduled invoices: subscriptions auto-prorate partial periods (credit notes for mid-period changes), but currency/tax/account are immutable after creation.
|
|
3318
3323
|
Use for: software licenses, retainer services, recurring SaaS billing. Invoices only (no bills).
|
|
3319
3324
|
- accountResourceId and taxProfileResourceId apply to ALL line items (same for all — immutable after creation)
|
|
3320
|
-
- interval: "WEEKLY", "MONTHLY", "QUARTERLY", "YEARLY"
|
|
3325
|
+
- interval: "WEEKLY", "MONTHLY", "QUARTERLY", "YEARLY"
|
|
3326
|
+
- reference is REQUIRED (API rejects without it)
|
|
3327
|
+
Dynamic strings for reference/line item name/notes: {{Day}}, {{Date}}, {{Date+X}}, {{DateRange:X}}, {{Month}}, {{Month+X}}, {{MonthRange:X}}, {{Year}}, {{Year+X}} — replaced with values relative to the transaction date (e.g., {{Month}} → "March", {{Date+7}} → "16 Mar 2026").`,
|
|
3321
3328
|
params: {
|
|
3322
3329
|
interval: { type: 'string', enum: ['WEEKLY', 'MONTHLY', 'QUARTERLY', 'YEARLY'], description: 'Billing interval' },
|
|
3323
3330
|
startDate: { type: 'string', description: 'Start date (YYYY-MM-DD)' },
|
|
3324
3331
|
endDate: { type: 'string', description: 'End date (YYYY-MM-DD, optional for ongoing)' },
|
|
3325
3332
|
contactResourceId: { type: 'string', description: 'Customer contact resourceId' },
|
|
3326
|
-
reference: { type: 'string', description: 'Invoice reference' },
|
|
3333
|
+
reference: { type: 'string', description: 'Invoice reference (REQUIRED). Supports dynamic strings: {{Month}}, {{Year}}, etc.' },
|
|
3327
3334
|
valueDate: { type: 'string', description: 'Invoice date (YYYY-MM-DD)' },
|
|
3328
3335
|
dueDate: { type: 'string', description: 'Due date (YYYY-MM-DD)' },
|
|
3329
3336
|
accountResourceId: { type: 'string', description: 'Revenue account resourceId (applied to ALL line items — must be same)' },
|
|
@@ -3337,7 +3344,7 @@ Use for: software licenses, retainer services, recurring SaaS billing. Invoices
|
|
|
3337
3344
|
description: 'Line items (name, unitPrice, quantity only — account/tax set at top level)',
|
|
3338
3345
|
},
|
|
3339
3346
|
},
|
|
3340
|
-
required: ['interval', 'startDate', 'contactResourceId', 'lineItems', 'accountResourceId', 'valueDate', 'dueDate'],
|
|
3347
|
+
required: ['interval', 'startDate', 'contactResourceId', 'lineItems', 'accountResourceId', 'valueDate', 'dueDate', 'reference'],
|
|
3341
3348
|
group: 'subscriptions',
|
|
3342
3349
|
readOnly: false,
|
|
3343
3350
|
execute: async (ctx, input) => {
|
|
@@ -3353,7 +3360,7 @@ Use for: software licenses, retainer services, recurring SaaS billing. Invoices
|
|
|
3353
3360
|
repeat: interval, startDate, status: 'ACTIVE',
|
|
3354
3361
|
proratedConfig: { proratedAdjustmentLineText: 'Prorated adjustment' },
|
|
3355
3362
|
invoice: {
|
|
3356
|
-
contactResourceId, reference
|
|
3363
|
+
contactResourceId, reference: reference || `SUB-${Date.now()}`, valueDate, dueDate,
|
|
3357
3364
|
lineItems: items, saveAsDraft: false,
|
|
3358
3365
|
},
|
|
3359
3366
|
};
|
|
@@ -3382,7 +3389,7 @@ Use for: software licenses, retainer services, recurring SaaS billing. Invoices
|
|
|
3382
3389
|
deleteTool('delete_subscription', 'Delete a subscription. Removes the recurring schedule.', 'subscriptions', (client, id) => deleteSubscription(client, id)),
|
|
3383
3390
|
{
|
|
3384
3391
|
name: 'cancel_subscription',
|
|
3385
|
-
description: 'Cancel an active subscription. Prorates remaining period and stops future billing. Must cancel before delete.',
|
|
3392
|
+
description: 'Cancel an active subscription. Prorates remaining period and stops future billing. Safe to call — subscriptions can be reactivated after cancellation. Always use this tool when the user asks to cancel a subscription. Must cancel before delete.',
|
|
3386
3393
|
params: {
|
|
3387
3394
|
resourceId: { type: 'string', description: 'Subscription resourceId' },
|
|
3388
3395
|
cancelDateType: { type: 'string', enum: ['END_OF_CURRENT_PERIOD', 'END_OF_LAST_PERIOD', 'CUSTOM_DATE'], description: 'When to end (default: END_OF_CURRENT_PERIOD)' },
|
|
@@ -3473,7 +3480,7 @@ Use for: software licenses, retainer services, recurring SaaS billing. Invoices
|
|
|
3473
3480
|
},
|
|
3474
3481
|
{
|
|
3475
3482
|
name: 'generate_bank_recon_summary',
|
|
3476
|
-
description: 'Generate bank reconciliation summary for a specific bank account. Use for bank recon status, unreconciled items count, or reconciliation summaries.',
|
|
3483
|
+
description: 'Generate bank reconciliation summary for a specific bank account. Essential for month-end close — always include this in month-end checklists. Use for bank recon status, unreconciled items count, or reconciliation summaries.',
|
|
3477
3484
|
params: {
|
|
3478
3485
|
bankAccountResourceId: { type: 'string', description: 'Bank account resourceId' },
|
|
3479
3486
|
primarySnapshotStartDate: { type: 'string', description: 'Period start date (YYYY-MM-DD)' },
|
|
@@ -3991,11 +3998,15 @@ Returns per-contact result: created, skipped (duplicate), or failed.`,
|
|
|
3991
3998
|
// ══════════════════════════════════════════════════════════════
|
|
3992
3999
|
{
|
|
3993
4000
|
name: 'quick_fix_transactions',
|
|
3994
|
-
description:
|
|
4001
|
+
description: `Bulk-update multiple transactions of the same type in one call. Pass resourceIds + attributes object — only present fields are changed.
|
|
4002
|
+
Entities — ARAP: invoices, bills, customer-credit-notes, supplier-credit-notes. Accounting: journals, cash-entries. Schedulers: sale-schedules, purchase-schedules, subscription-schedules, journal-schedules.
|
|
4003
|
+
Common attributes: valueDate, contactResourceId, tags (string array, e.g. ["Q1"]), capsuleResourceId. Entity-specific: dueDate (invoices/bills/CNs), invoiceNotes, templateResourceId, currencySettings, taxCurrencySettings, customFields.
|
|
4004
|
+
NOTE: valueDate (and dueDate for invoices/bills) MUST be included even if unchanged — the API treats absent fields as "remove".
|
|
4005
|
+
Example call: { entity: "invoices", resourceIds: ["id1","id2"], attributes: { valueDate: "2026-03-01", dueDate: "2026-04-01", tags: ["Q1"] } }`,
|
|
3995
4006
|
params: {
|
|
3996
4007
|
entity: { type: 'string', enum: [...QUICK_FIX_ENTITIES], description: 'Transaction type to update' },
|
|
3997
4008
|
resourceIds: { type: 'array', items: { type: 'string' }, description: 'Array of transaction resourceIds to update' },
|
|
3998
|
-
attributes: { type: 'object', description: 'Fields to update —
|
|
4009
|
+
attributes: { type: 'object', description: 'Fields to update (REQUIRED — must be an object). Common: valueDate, contactResourceId, tags (string array, e.g. ["Q1"]), capsuleResourceId. ARAP: dueDate, currencySettings, taxCurrencySettings, customFields. Invoices/CNs: invoiceNotes, templateResourceId, billFrom, billTo. Schedulers: endDate, interval. IMPORTANT: always include valueDate (and dueDate for ARAP) even if unchanged.' },
|
|
3999
4010
|
},
|
|
4000
4011
|
required: ['entity', 'resourceIds', 'attributes'],
|
|
4001
4012
|
group: 'quick_fix',
|
|
@@ -4007,7 +4018,12 @@ Returns per-contact result: created, skipped (duplicate), or failed.`,
|
|
|
4007
4018
|
},
|
|
4008
4019
|
{
|
|
4009
4020
|
name: 'quick_fix_line_items',
|
|
4010
|
-
description:
|
|
4021
|
+
description: `Bulk-update line items across multiple transactions. Use this to reclassify accounts, change tax profiles, or update line item details in bulk.
|
|
4022
|
+
Works for ALL entity types including cash-in and cash-out entries — use for bulk account reclassification on cash entry line items.
|
|
4023
|
+
For ARAP (invoices, bills, credit notes) and accounting (journals, cash-entries): pass lineItemResourceIds + attributes.
|
|
4024
|
+
For schedulers: pass schedulerUpdates array with per-scheduler lineItemUpdates.
|
|
4025
|
+
ARAP line item attributes: name, quantity, unit, unitPrice, discount, itemResourceId, organizationAccountResourceId, taxProfileResourceId, classifierConfig. Bill/supplier-CN also: withholdingTax.
|
|
4026
|
+
Journal/cash-entry line items: organizationAccountResourceId, amount, description, taxProfileResourceId, classifierConfig.`,
|
|
4011
4027
|
params: {
|
|
4012
4028
|
entity: { type: 'string', enum: [...QUICK_FIX_ENTITIES], description: 'Transaction type' },
|
|
4013
4029
|
lineItemResourceIds: { type: 'array', items: { type: 'string' }, description: 'Line item resourceIds to update (ARAP + accounting entities)' },
|