jaz-clio 9.0.1 → 9.0.2

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.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: jaz-api
3
- version: 9.0.1
3
+ version: 9.0.2
4
4
  description: >-
5
5
  Use this skill whenever you call, debug, or review code that touches the Jaz
6
6
  REST API. Covers field names, response shapes, 148 production gotchas, error
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: jaz-cli
3
- version: 9.0.1
3
+ version: 9.0.2
4
4
  description: >-
5
5
  Use this skill when running Clio CLI commands, building shell scripts with
6
6
  Clio, debugging auth issues, understanding --json output, paginating results,
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: jaz-conversion
3
- version: 9.0.1
3
+ version: 9.0.2
4
4
  description: >-
5
5
  Use this skill when migrating accounting data into Jaz, importing from Xero,
6
6
  QuickBooks, Sage, MYOB, or Excel exports. Covers the full conversion pipeline:
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: jaz-kit
3
- version: 9.0.1
3
+ version: 9.0.2
4
4
  description: >-
5
5
  Use this skill when an accountant, bookkeeper, or owner is running real books
6
6
  in Jaz across one or more organizations from the terminal: setting up a
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: jaz-pseudo-sql
3
- version: 9.0.1
3
+ version: 9.0.2
4
4
  description: >-
5
5
  Use this skill when answering ad-hoc data questions that aren't covered by
6
6
  download_export (canonical reports: anomaly, audit, aging, P&L, BS, GL,
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: jaz-jobs
3
- version: 9.0.1
3
+ version: 9.0.2
4
4
  description: >-
5
5
  Use this skill for recurring accounting workflows: month/quarter/year-end
6
6
  close, bank reconciliation, GST/VAT filing, payment runs, credit control,
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: jaz-recipes
3
- version: 9.0.1
3
+ version: 9.0.2
4
4
  description: >-
5
5
  Use this skill when modeling complex multi-step accounting transactions:
6
6
  anything that spans multiple periods, involves changing amounts, or requires
package/cli.mjs CHANGED
@@ -822,7 +822,7 @@ ASYNC: returns jobId \u2192 poll search_background_jobs(filter:{resourceId:{eq:j
822
822
 
823
823
  Required per row: reference, registrationType. NEW also needs purchaseBusinessTransactionType + purchaseBusinessTransactionResourceId (the purchase LINE ITEM, not the bill/journal id); TRANSFER takes accumulatedDepreciationAtTransferDate + bookValueAtTransferDate. Recommended: typeCode, typeName, category, purchaseAmount, purchaseDate, effectiveLife, depreciationMethod + the three account UUIDv4s.
824
824
 
825
- ASYNC: returns jobId \u2192 poll search_background_jobs(filter:{resourceId:{eq:jobId}}); on PARTIAL_SUCCESS read data[0].errorDetails.`,params:{fixedAssets:{type:"array",description:"Fixed assets to create/update (max 500).",items:{type:"object",properties:{rowIndex:{type:"string"},reference:{type:"string",description:"Natural key"},registrationType:{type:"string",enum:["NEW","TRANSFER"],description:"NEW = newly acquired, TRANSFER = inherited; required"},typeCode:{type:"string",description:"Asset class code (e.g. FURNITURE_AND_FIXTURE)"},typeName:{type:"string",description:"Human label for typeCode"},category:{type:"string",enum:["TANGIBLE","INTANGIBLE"],description:"TANGIBLE | INTANGIBLE"},name:{type:"string",description:"Asset name"},purchaseAmount:{type:"number",description:"Acquisition cost."},purchaseDate:{type:"number",description:"Acquisition date, epoch ms (NOT YYYY-MM-DD on this endpoint)."},depreciationStartDate:{type:"number",description:"Epoch ms. Omit to default to purchaseDate."},effectiveLife:{type:"number",description:"Useful life months."},depreciationMethod:{type:"string",enum:["STRAIGHT_LINE","NO_DEPRECIATION"],description:"Bulk accepts only STRAIGHT_LINE or NO_DEPRECIATION (422 otherwise); use create_fixed_asset for declining-balance methods."},purchaseAssetAccountResourceId:{type:"string",description:"Asset (PPE) account UUIDv4."},depreciationExpenseAccountResourceId:{type:"string",description:"Depreciation expense account UUIDv4."},accumulatedDepreciationAccountResourceId:{type:"string",description:"Accumulated depreciation account UUIDv4."},purchaseBusinessTransactionType:{type:"string",enum:[...jy],description:"Required for NEW."},purchaseBusinessTransactionResourceId:{type:"string",description:"Purchase LINE ITEM id, unlinked. Required for NEW."},accumulatedDepreciationAtTransferDate:{type:"number",description:"TRANSFER only."},bookValueAtTransferDate:{type:"number",description:"TRANSFER only."},internalNotes:{type:"string"}},required:["reference"]}}},required:["fixedAssets"],group:"fixed_assets",readOnly:!1,isDestructive:!0,searchHint:"bulk fixed assets ppe register upsert import migrate",execute:async(e,t)=>{Ut(t.fixedAssets,"fixedAssets",500,"fixed assets");let r=t.fixedAssets;return ORe(r,["purchaseDate","depreciationStartDate"]),iG(e.client,r)}},{name:"quick_reconcile",description:`Bulk-reconcile bank statement entries against a list of journals (max 500). Reconciliation mode is hardcoded to QUICK_RECON. ${ql} Caller provides bankAccountResourceId + journalsForReconciliation[] (each row: bankStatementEntryResourceId, journalReference, journalAccountResourceId).`,params:{bankAccountResourceId:{type:"string",description:"Bank account UUID (the entries belong to this account)"},journalsForReconciliation:{type:"array",description:"Per-row reconciliation instructions (max 500).",items:{type:"object",properties:{bankStatementEntryResourceId:{type:"string",description:"Bank entry UUID"},journalReference:{type:"string",description:"Journal reference text"},journalAccountResourceId:{type:"string",description:"Offsetting account UUID (revenue for cash-in, expense for cash-out)"},contactResourceId:{type:"string",description:"Contact UUID"},capsuleResourceId:{type:"string",description:"Capsule UUID"},taxProfileResourceId:{type:"string",description:"Tax profile UUID"},internalNotes:{type:"string"},journalEntryDescription:{type:"string"},tags:{type:"array",items:{type:"string"}},rowIndex:{type:"string",description:"Optional caller-supplied index for error correlation"}},required:["bankStatementEntryResourceId","journalAccountResourceId","journalReference"]}}},required:["bankAccountResourceId","journalsForReconciliation"],group:"reconciliations",readOnly:!1,isDestructive:!0,searchHint:"bulk reconcile bank statement journals match",execute:async(e,t)=>(Ut(t.journalsForReconciliation,"journalsForReconciliation",500,"journals"),iV(e.client,t))},{name:"apply_bank_rule",description:"Apply a pre-configured bank rule (action shortcut) to a batch of bank statement entries (max 500). Async: returns a jobId. Poll search_background_jobs filtered by resourceId. The rule executes its configured action (e.g. RECONCILE_WITH_DIRECT_CASH_ENTRY) on each entry.",params:{actionShortcutResourceId:{type:"string",description:"Bank rule UUID"},businessTransactionResourceIds:{type:"array",description:"Bank statement entry UUIDs to apply the rule to (max 500). Note: the field is named businessTransactionResourceIds for legacy reasons but accepts bank entry IDs.",items:{type:"string"}}},required:["actionShortcutResourceId","businessTransactionResourceIds"],group:"reconciliations",readOnly:!1,isDestructive:!0,searchHint:"bank rule apply action shortcut bulk reconcile",execute:async(e,t)=>(Ut(t.businessTransactionResourceIds,"businessTransactionResourceIds",500,"entries"),oV(e.client,t))},{name:"reconcile_direct_cash_entry",description:"Reconcile a bank statement entry with a single cash-in / cash-out line. Direction (cash-in vs cash-out) is INFERRED from the bank entry sign. Sync: returns the reconciled entry status. Retrying a RECONCILED entry 422s (Invalid bank statement entry status); it does not duplicate.",params:{bankStatementEntryResourceId:{type:"string",description:"Bank entry UUID"},bankAccountResourceId:{type:"string",description:"Bank account UUID (used to look up the entry)"},reference:{type:"string",description:"Reference for the cash entry"},accountResourceId:{type:"string",description:"Offsetting account UUID (revenue for cash-in, expense for cash-out)"},amount:{type:"number",description:"Amount in source currency; defaults to and must EQUAL the entry amount; a partial allocation 422s (Total journal entries amount mismatch). Split an entry via reconcile_cash_journal instead."},description:{type:"string"},contactResourceId:{type:"string"},taxProfileResourceId:{type:"string"},internalNotes:{type:"string"},bankAccountJournalEntryDescription:{type:"string",description:"Description for the bank-side journal entry"},tags:{type:"array",items:{type:"string"}},taxVatApplicable:{type:"boolean"},taxInclusion:{type:"boolean"},capsuleResourceId:{type:"string"}},required:["bankStatementEntryResourceId","bankAccountResourceId","reference","accountResourceId"],group:"reconciliations",readOnly:!1,isDestructive:!0,searchHint:"reconcile bank entry direct cash in out single line",execute:async(e,t)=>sV(e.client,t)},{name:"reconcile_cash_journal",description:"Reconcile a bank statement entry with a multi-line cashflow journal (multiple cash splits, max 200 lines). Sync: returns the reconciled entry status. Retrying a RECONCILED entry 422s (Invalid bank statement entry status); it does not duplicate.",params:{bankStatementEntryResourceId:{type:"string",description:"Bank entry UUID"},bankAccountResourceId:{type:"string",description:"Bank account UUID"},reference:{type:"string",description:"Journal reference"},journalEntries:{type:"array",description:"Cash journal lines (max 200). Each row is one debit OR credit against an account.",items:{type:"object",properties:{accountResourceId:{type:"string",description:"Account UUID"},amount:{type:"number",description:"Amount in source currency (>0)"},description:{type:"string"},taxProfileResourceId:{type:"string"}},required:["accountResourceId","amount"]}},contactResourceId:{type:"string"},bankAccountJournalEntryDescription:{type:"string"},internalNotes:{type:"string"},tags:{type:"array",items:{type:"string"}},taxVatApplicable:{type:"boolean"},taxInclusion:{type:"boolean"},capsuleResourceId:{type:"string"}},required:["bankStatementEntryResourceId","bankAccountResourceId","reference","journalEntries"],group:"reconciliations",readOnly:!1,isDestructive:!0,searchHint:"reconcile bank entry multi line cash journal splits",execute:async(e,t)=>(Ut(t.journalEntries,"journalEntries",200,"entries"),aV(e.client,t))},{name:"reconcile_manual_journal",description:'\u26A0\uFE0F CALLER PROVIDES ONLY THE OFFSET LEG(S); backend AUTO-ADDS the bank-side leg from the statement entry. Sending both debit AND credit legs \u2192 422 "sum of debit and credit amounts are not equal" (your sides duplicate after the auto-add). Reconcile a bank statement entry with a double-entry manual journal. Sync: returns the reconciled entry status. valueDate prefills from bank entry if omitted. Retrying a RECONCILED entry 422s (Invalid bank statement entry status); it does not duplicate.',params:{bankStatementEntryResourceId:{type:"string",description:"Bank entry UUID"},bankAccountResourceId:{type:"string",description:"Bank account UUID"},status:{type:"string",enum:["DRAFT","ACTIVE"],description:"Journal status"},journalEntries:{type:"array",description:"Offset-side journal entries only (max 200). The bank-side leg is auto-added by the API.",items:{type:"object",properties:{accountResourceId:{type:"string",description:"Account UUID"},type:{type:"string",enum:["DEBIT","CREDIT"]},amount:{type:"number",description:"Amount, required"},description:{type:"string"},taxProfileResourceId:{type:"string"},exchangeRate:{type:"number",description:"Line rate, account currency to base; applied as sent."}},required:["accountResourceId","type"]}},reference:{type:"string"},valueDate:{type:"string",description:"YYYY-MM-DD. Defaults to bank entry value date."},contactResourceId:{type:"string"},internalNotes:{type:"string"},bankAccountJournalEntryDescription:{type:"string"},taxVatApplicable:{type:"boolean"},taxInclusion:{type:"boolean"},tags:{type:"array",items:{type:"string"}},capsuleResourceId:{type:"string"}},required:["bankStatementEntryResourceId","bankAccountResourceId","status","journalEntries"],group:"reconciliations",readOnly:!1,isDestructive:!0,searchHint:"reconcile bank entry manual journal double entry",execute:async(e,t)=>(Ut(t.journalEntries,"journalEntries",200,"entries"),cV(e.client,t))},{name:"reconcile_cash_transfer",description:"Reconcile a bank statement entry with an inter-account transfer. Sync: returns the reconciled entry status. amount is required only when the counterparty account is in a non-functional currency. Retrying a RECONCILED entry 422s (Invalid bank statement entry status); it does not duplicate.",params:{bankStatementEntryResourceId:{type:"string",description:"Bank entry UUID"},bankAccountResourceId:{type:"string",description:"Bank account UUID"},accountResourceId:{type:"string",description:"Counterparty cash account UUID"},reference:{type:"string",description:"Transfer reference"},amount:{type:"number",description:"Amount in source currency. Required only for cross-currency transfers."},contactResourceId:{type:"string"},internalNotes:{type:"string"},tags:{type:"array",items:{type:"string"}},capsuleResourceId:{type:"string"}},required:["bankStatementEntryResourceId","bankAccountResourceId","accountResourceId","reference"],group:"reconciliations",readOnly:!1,isDestructive:!0,searchHint:"reconcile bank entry transfer between accounts",execute:async(e,t)=>lV(e.client,t)},{name:"reconcile_invoice_receipt",description:'CREATES A NEW invoice and auto-reconciles it to a bank statement entry (AR). To match an EXISTING open invoice instead, use reconcile_with_payments (do not create a duplicate). \u26A0\uFE0F BSE must have `paymentDirection: PAYIN` (money in, AR). Produce via `bank add-records` with a POSITIVE amount (creates `credit_amount > 0` \u2192 PAYIN). Statement-imported BSEs from `bank import` also work. The error code "Invalid business transaction type" (422) is misleadingly named; the actual gate is direction, not entry type. Sync: returns the reconciled entry status. valueDate / dueDate / payment amount prefill from the bank entry if omitted. Retrying a RECONCILED entry 422s (Invalid bank statement entry status); it does not duplicate.',params:{bankStatementEntryResourceId:{type:"string",description:"Bank entry UUID"},bankAccountResourceId:{type:"string",description:"Bank account UUID"},invoiceDetails:Jnt("Invoice","Customer","Revenue")},required:["bankStatementEntryResourceId","bankAccountResourceId","invoiceDetails"],group:"reconciliations",readOnly:!1,isDestructive:!0,searchHint:"reconcile bank entry invoice receipt AR sale",execute:async(e,t)=>(ipe(t.invoiceDetails,"invoiceDetails"),uV(e.client,t))},{name:"reconcile_bill_receipt",description:'CREATES A NEW bill and auto-reconciles it to a bank statement entry (AP). To match an EXISTING open bill instead, use reconcile_with_payments (do not create a duplicate). \u26A0\uFE0F BSE must have `paymentDirection: PAYOUT` (money out, AP). Produce via `bank add-records` with a NEGATIVE amount (creates `debit_amount > 0` \u2192 PAYOUT). Statement-imported BSEs from `bank import` also work. The error code "Invalid business transaction type" (422) is misleadingly named; the actual gate is direction, not entry type. Sync: returns the reconciled entry status. valueDate / dueDate / payment amount prefill from the bank entry if omitted. Retrying a RECONCILED entry 422s (Invalid bank statement entry status); it does not duplicate.',params:{bankStatementEntryResourceId:{type:"string",description:"Bank entry UUID"},bankAccountResourceId:{type:"string",description:"Bank account UUID"},billDetails:Jnt("Bill","Supplier","Expense")},required:["bankStatementEntryResourceId","bankAccountResourceId","billDetails"],group:"reconciliations",readOnly:!1,isDestructive:!0,searchHint:"reconcile bank entry bill receipt AP purchase",execute:async(e,t)=>(ipe(t.billDetails,"billDetails"),dV(e.client,t))},{name:"reconcile_with_payments",description:"USE THIS to match a bank statement entry to an EXISTING open bill / invoice / payment (NOT reconcile_bill_receipt or reconcile_invoice_receipt, which CREATE a new bill/invoice). Pass the open transaction's cashflowTransactionResourceId (from search_cashflow_transactions or a view_auto_reconciliation suggestion) in businessTransactionPayments[]: this CREATES the payment AND reconciles in one call; no pay_bill / pay_invoice first. FX is resolved server-side; pass NO rate for the common case (only supply paymentAmount + currencySettings for the rare bill-currency \u2260 bank-currency case). Sync: returns the reconciled entry status. NOT idempotent: a blind retry double-creates a payment; confirm reconciled-state via search_bank_records(status: RECONCILED) before retrying.",params:{bankStatementEntryResourceId:{type:"string",description:"Bank entry UUID"},businessTransactionPayments:{type:"array",description:"Open business transactions (bills/invoices) to reconcile by creating a payment against each.",items:{type:"object",properties:{cashflowTransactionResourceId:{type:"string",description:"Open BT cashflow UUID (the bill/invoice)"},transactionAmount:{type:"number",description:"Payment amount in the BT currency (>0)"},paymentAmount:{type:"number",description:"Actual amount in bank-statement currency. Required ONLY when bank currency \u2260 BT currency."},currencySettings:{type:"object",description:"FX settings: supply ONLY for cross-currency (bank ccy \u2260 BT ccy). Omit otherwise (server resolves).",properties:{sourceCurrencyCode:{type:"string",description:"BT currency (ISO 4217)"},rateFunctionalToSource:{type:"number"},exchangeToken:{type:"string"}},required:["sourceCurrencyCode"]}},required:["cashflowTransactionResourceId","transactionAmount"]}},matchedPayments:{type:"array",items:{type:"string"},description:"Existing payment UUIDs to reconcile against the entry"},matchedBatchPayments:{type:"array",items:{type:"string"},description:"Existing batch payment UUIDs to reconcile against the entry"},adjustment:{type:"object",description:"Optional adjustment leg to balance payments vs the statement amount (over/under-payment, rounding, or FX gain/loss write-off; the platform does NOT auto-post FX gain/loss).",properties:{reference:{type:"string"},contactResourceId:{type:"string"},tags:{type:"array",items:{type:"string"}},cashAdjustmentEntries:{type:"array",items:{type:"object",properties:{organizationAccountResourceId:{type:"string",description:"e.g. the FX gain/loss account UUID"},amount:{type:"number"},description:{type:"string"},taxProfileResourceId:{type:"string"},rateSourceToFunctional:{type:"number",description:"Required when this account is in a non-functional currency."}},required:["amount"]}},bankAccountJournalEntryRateFunctionalToSource:{type:"number",description:"Required when the bank account is in a non-functional currency."}}}},required:["bankStatementEntryResourceId"],group:"reconciliations",readOnly:!1,isDestructive:!0,searchHint:"match bank entry to existing open bill invoice payment reconcile with payments pay outstanding",execute:async(e,t)=>(lnt(t),fV(e.client,t))},{name:"reconcile_magic_match",description:"Bulk-accept MAGIC_MATCH suggestions: reconcile many bank entries against EXISTING open business transactions and/or payments in one call (max 500 entries). Feed entries from view_auto_reconciliation suggestions. Returns a per-entry split { reconciled[], failed[] }: a 200 with a non-empty failed[] is a PARTIAL success; surface failed entries (with their errorCode) and loop. Entry-level idempotency-keyed server-side. Use reconcile_with_payments for a single precise match; use this to accept a batch of suggestions at once.",params:{bankAccountResourceId:{type:"string",description:"Bank account UUID the entries belong to"},autoReconcileRunResourceId:{type:"string",description:"Auto-reconciliation run UUID for batch tracking"},entries:{type:"array",description:"One row per bank entry to reconcile (max 500).",items:{type:"object",properties:{workflowType:{type:"string",enum:["MAGIC_MATCH"],description:"Only MAGIC_MATCH (match to existing) is supported here."},bankStatementEntryResourceId:{type:"string",description:"Bank entry UUID"},matchedBusinessTransactions:{type:"array",items:{type:"string"},description:"Open BT cashflow UUIDs to reconcile by creating payments"},matchedPayments:{type:"array",items:{type:"string"},description:"Existing payment UUIDs"},matchedBatchResourceId:{type:"string",description:"Batch payment UUID"}},required:["bankStatementEntryResourceId","workflowType"]}}},required:["bankAccountResourceId","entries"],group:"reconciliations",readOnly:!1,isDestructive:!0,searchHint:"bulk accept magic match suggestions reconcile many bank entries to existing",execute:async(e,t)=>(Ut(t.entries,"entries",500,"entries"),hV(e.client,t))},{name:"reconcile_learned_prediction",description:"Accept an ML learned-prediction suggestion to reconcile a bank entry. predictedPayload + predictedPayloadSchemaVersion are passed through VERBATIM from a view_auto_reconciliation suggestion (recommendationType MAGIC_RECONCILE_WITH_CASH_IN_OUT); do not construct them by hand. Pass retryToken to force a fresh journal on an edit-then-retry; omit it for an idempotent replay. Sync: returns the reconciled entry status. On failure (stale/invalid payload), fall back to reconcile_with_payments; do NOT retry the same opaque payload.",params:{bankStatementEntryResourceId:{type:"string",description:"Bank entry UUID"},learnedPredictionResourceId:{type:"string",description:"Learned-prediction UUID from the suggestion"},predictedPayload:{type:"string",description:"Opaque JSON payload from the suggestion; required, passed verbatim"},predictedPayloadSchemaVersion:{type:"string",description:"Schema version from the suggestion"},retryToken:{type:"string",description:"Optional idempotency retry token"},autoReconcileRunResourceId:{type:"string",description:"Auto-reconciliation run UUID for batch tracking"}},required:["bankStatementEntryResourceId","learnedPredictionResourceId","predictedPayload","predictedPayloadSchemaVersion"],group:"reconciliations",readOnly:!1,isDestructive:!0,searchHint:"reconcile bank entry learned prediction ML cash in out accept suggestion",execute:async(e,t)=>pV(e.client,t)},{name:"undo_reconciliations",description:"Unlink bank entries from what they were reconciled against, returning each to UNRECONCILED. Re-running reports already-unreconciled/archived entries as per-entry FAILED (INVALID_BANK_STATEMENT_ENTRY_STATUS); it never double-applies. On a non-200 nothing was applied, the batch rolls back. Ids that do not resolve are OMITTED from resetReconciliationResponse, so compare returned ids against what you sent. Does NOT delete the record it was matched to; reconcile_* tools that CREATE one leave it on the books as a bank-rec discrepancy, and re-reconciling without deleting it duplicates the record. Delete via linkedRecords by businessTransactionType: SALE=delete_invoice, PURCHASE=delete_bill, SALE_CREDIT_NOTE=delete_customer_credit_note, PURCHASE_CREDIT_NOTE=delete_supplier_credit_note, PAYMENT_*=delete_payment, JOURNAL_MANUAL=delete_journal (voids an ACTIVE); all using businessTransactionResourceId. JOURNAL_DIRECT_CASH_IN/OUT and JOURNAL_CASH_TRANSFER use delete_cash_in/out/transfer with parentEntityResourceId instead. Any other type has no delete tool: locate it with search_cashflow_transactions first.",params:{bankStatementEntryResourceIds:{type:"array",items:{type:"string"},description:"Bank entry UUIDs to unlink. 1-500, unique."}},required:["bankStatementEntryResourceIds"],group:"reconciliations",readOnly:!1,isDestructive:!0,searchHint:"undo unreconcile reset reverse reconciliation unlink bank entry mistake wrong match",execute:async(e,t)=>{Ut(t.bankStatementEntryResourceIds,"bankStatementEntryResourceIds",500,"bank entries");let r=[...new Set(t.bankStatementEntryResourceIds)];return mV(e.client,{...t,bankStatementEntryResourceIds:r})}},{name:"validate_drafts",description:`BULK validate up to 500 draft business transactions in ONE call, mixing any btType. SYNC: returns per-item errors + display data; no state change. Run before convert_drafts_to_active.
825
+ ASYNC: returns jobId \u2192 poll search_background_jobs(filter:{resourceId:{eq:jobId}}); on PARTIAL_SUCCESS read data[0].errorDetails.`,params:{fixedAssets:{type:"array",description:"Fixed assets to create/update (max 500).",items:{type:"object",properties:{rowIndex:{type:"string"},reference:{type:"string",description:"Natural key"},registrationType:{type:"string",enum:["NEW","TRANSFER"],description:"NEW = newly acquired, TRANSFER = inherited; required"},typeCode:{type:"string",description:"Asset class code (e.g. FURNITURE_AND_FIXTURE)"},typeName:{type:"string",description:"Human label for typeCode"},category:{type:"string",enum:["TANGIBLE","INTANGIBLE"],description:"TANGIBLE | INTANGIBLE"},name:{type:"string",description:"Asset name"},purchaseAmount:{type:"number",description:"Acquisition cost."},purchaseDate:{type:"number",description:"Acquisition date, epoch ms (NOT YYYY-MM-DD on this endpoint)."},depreciationStartDate:{type:"number",description:"Epoch ms. Omit to default to purchaseDate."},effectiveLife:{type:"number",description:"Useful life months."},depreciationMethod:{type:"string",enum:["STRAIGHT_LINE","NO_DEPRECIATION"],description:"Bulk accepts only STRAIGHT_LINE or NO_DEPRECIATION (422 otherwise); use create_fixed_asset for declining-balance methods."},purchaseAssetAccountResourceId:{type:"string",description:"Asset (PPE) account UUIDv4."},depreciationExpenseAccountResourceId:{type:"string",description:"Depreciation expense account UUIDv4."},accumulatedDepreciationAccountResourceId:{type:"string",description:"Accumulated depreciation account UUIDv4."},purchaseBusinessTransactionType:{type:"string",enum:[...jy],description:"Required for NEW."},purchaseBusinessTransactionResourceId:{type:"string",description:"Purchase LINE ITEM id, unlinked. Required for NEW."},accumulatedDepreciationAtTransferDate:{type:"number",description:"TRANSFER only."},bookValueAtTransferDate:{type:"number",description:"TRANSFER only."},internalNotes:{type:"string"}},required:["reference"]}}},required:["fixedAssets"],group:"fixed_assets",readOnly:!1,isDestructive:!0,searchHint:"bulk fixed assets ppe register upsert import migrate",execute:async(e,t)=>{Ut(t.fixedAssets,"fixedAssets",500,"fixed assets");let r=t.fixedAssets;return ORe(r,["purchaseDate","depreciationStartDate"]),iG(e.client,r)}},{name:"quick_reconcile",description:`Bulk-reconcile bank statement entries against a list of journals (max 500). Reconciliation mode is hardcoded to QUICK_RECON. ${ql} Caller provides bankAccountResourceId + journalsForReconciliation[] (each row: bankStatementEntryResourceId, journalReference, journalAccountResourceId).`,params:{bankAccountResourceId:{type:"string",description:"Bank account UUID (the entries belong to this account)"},journalsForReconciliation:{type:"array",description:"Per-row reconciliation instructions (max 500).",items:{type:"object",properties:{bankStatementEntryResourceId:{type:"string",description:"Bank entry UUID"},journalReference:{type:"string",description:"Journal reference text"},journalAccountResourceId:{type:"string",description:"Offsetting account UUID (revenue for cash-in, expense for cash-out)"},contactResourceId:{type:"string",description:"Contact UUID"},capsuleResourceId:{type:"string",description:"Capsule UUID"},taxProfileResourceId:{type:"string",description:"Tax profile UUID"},internalNotes:{type:"string"},journalEntryDescription:{type:"string"},tags:{type:"array",items:{type:"string"}},rowIndex:{type:"string",description:"Optional caller-supplied index for error correlation"}},required:["bankStatementEntryResourceId","journalAccountResourceId","journalReference"]}}},required:["bankAccountResourceId","journalsForReconciliation"],group:"reconciliations",readOnly:!1,isDestructive:!0,searchHint:"bulk reconcile bank statement journals match",execute:async(e,t)=>(Ut(t.journalsForReconciliation,"journalsForReconciliation",500,"journals"),iV(e.client,t))},{name:"apply_bank_rule",description:"Reconcile bank statement entries (max 500) with one saved bank rule: each entry gets the cash-in or cash-out entry the rule defines (its accounts and amount split). Async: returns a jobId; poll search_background_jobs filtered by resourceId.",params:{actionShortcutResourceId:{type:"string",description:"Saved bank rule resourceId"},businessTransactionResourceIds:{type:"array",description:"Bank statement entry resourceIds (max 500).",items:{type:"string"}}},required:["actionShortcutResourceId","businessTransactionResourceIds"],group:"reconciliations",readOnly:!1,isDestructive:!0,searchHint:"bank rule apply action shortcut bulk reconcile",execute:async(e,t)=>(Ut(t.businessTransactionResourceIds,"businessTransactionResourceIds",500,"entries"),oV(e.client,t))},{name:"reconcile_direct_cash_entry",description:"Reconcile a bank statement entry with a single cash-in / cash-out line. Direction (cash-in vs cash-out) is INFERRED from the bank entry sign. Sync: returns the reconciled entry status. Retrying a RECONCILED entry 422s (Invalid bank statement entry status); it does not duplicate.",params:{bankStatementEntryResourceId:{type:"string",description:"Bank entry UUID"},bankAccountResourceId:{type:"string",description:"Bank account UUID (used to look up the entry)"},reference:{type:"string",description:"Reference for the cash entry"},accountResourceId:{type:"string",description:"Offsetting account UUID (revenue for cash-in, expense for cash-out)"},amount:{type:"number",description:"Amount in source currency; defaults to and must EQUAL the entry amount; a partial allocation 422s (Total journal entries amount mismatch). Split an entry via reconcile_cash_journal instead."},description:{type:"string"},contactResourceId:{type:"string"},taxProfileResourceId:{type:"string"},internalNotes:{type:"string"},bankAccountJournalEntryDescription:{type:"string",description:"Description for the bank-side journal entry"},tags:{type:"array",items:{type:"string"}},taxVatApplicable:{type:"boolean"},taxInclusion:{type:"boolean"},capsuleResourceId:{type:"string"}},required:["bankStatementEntryResourceId","bankAccountResourceId","reference","accountResourceId"],group:"reconciliations",readOnly:!1,isDestructive:!0,searchHint:"reconcile bank entry direct cash in out single line",execute:async(e,t)=>sV(e.client,t)},{name:"reconcile_cash_journal",description:"Reconcile a bank statement entry with a multi-line cashflow journal (multiple cash splits, max 200 lines). Sync: returns the reconciled entry status. Retrying a RECONCILED entry 422s (Invalid bank statement entry status); it does not duplicate.",params:{bankStatementEntryResourceId:{type:"string",description:"Bank entry UUID"},bankAccountResourceId:{type:"string",description:"Bank account UUID"},reference:{type:"string",description:"Journal reference"},journalEntries:{type:"array",description:"Cash journal lines (max 200). Each row is one debit OR credit against an account.",items:{type:"object",properties:{accountResourceId:{type:"string",description:"Account UUID"},amount:{type:"number",description:"Amount in source currency (>0)"},description:{type:"string"},taxProfileResourceId:{type:"string"}},required:["accountResourceId","amount"]}},contactResourceId:{type:"string"},bankAccountJournalEntryDescription:{type:"string"},internalNotes:{type:"string"},tags:{type:"array",items:{type:"string"}},taxVatApplicable:{type:"boolean"},taxInclusion:{type:"boolean"},capsuleResourceId:{type:"string"}},required:["bankStatementEntryResourceId","bankAccountResourceId","reference","journalEntries"],group:"reconciliations",readOnly:!1,isDestructive:!0,searchHint:"reconcile bank entry multi line cash journal splits",execute:async(e,t)=>(Ut(t.journalEntries,"journalEntries",200,"entries"),aV(e.client,t))},{name:"reconcile_manual_journal",description:'\u26A0\uFE0F CALLER PROVIDES ONLY THE OFFSET LEG(S); backend AUTO-ADDS the bank-side leg from the statement entry. Sending both debit AND credit legs \u2192 422 "sum of debit and credit amounts are not equal" (your sides duplicate after the auto-add). Reconcile a bank statement entry with a double-entry manual journal. Sync: returns the reconciled entry status. valueDate prefills from bank entry if omitted. Retrying a RECONCILED entry 422s (Invalid bank statement entry status); it does not duplicate.',params:{bankStatementEntryResourceId:{type:"string",description:"Bank entry UUID"},bankAccountResourceId:{type:"string",description:"Bank account UUID"},status:{type:"string",enum:["DRAFT","ACTIVE"],description:"Journal status"},journalEntries:{type:"array",description:"Offset-side journal entries only (max 200). The bank-side leg is auto-added by the API.",items:{type:"object",properties:{accountResourceId:{type:"string",description:"Account UUID"},type:{type:"string",enum:["DEBIT","CREDIT"]},amount:{type:"number",description:"Amount, required"},description:{type:"string"},taxProfileResourceId:{type:"string"},exchangeRate:{type:"number",description:"Line rate, account currency to base; applied as sent."}},required:["accountResourceId","type"]}},reference:{type:"string"},valueDate:{type:"string",description:"YYYY-MM-DD. Defaults to bank entry value date."},contactResourceId:{type:"string"},internalNotes:{type:"string"},bankAccountJournalEntryDescription:{type:"string"},taxVatApplicable:{type:"boolean"},taxInclusion:{type:"boolean"},tags:{type:"array",items:{type:"string"}},capsuleResourceId:{type:"string"}},required:["bankStatementEntryResourceId","bankAccountResourceId","status","journalEntries"],group:"reconciliations",readOnly:!1,isDestructive:!0,searchHint:"reconcile bank entry manual journal double entry",execute:async(e,t)=>(Ut(t.journalEntries,"journalEntries",200,"entries"),cV(e.client,t))},{name:"reconcile_cash_transfer",description:"Reconcile a bank statement entry with an inter-account transfer. Sync: returns the reconciled entry status. amount is required only when the counterparty account is in a non-functional currency. Retrying a RECONCILED entry 422s (Invalid bank statement entry status); it does not duplicate.",params:{bankStatementEntryResourceId:{type:"string",description:"Bank entry UUID"},bankAccountResourceId:{type:"string",description:"Bank account UUID"},accountResourceId:{type:"string",description:"Counterparty cash account UUID"},reference:{type:"string",description:"Transfer reference"},amount:{type:"number",description:"Amount in source currency. Required only for cross-currency transfers."},contactResourceId:{type:"string"},internalNotes:{type:"string"},tags:{type:"array",items:{type:"string"}},capsuleResourceId:{type:"string"}},required:["bankStatementEntryResourceId","bankAccountResourceId","accountResourceId","reference"],group:"reconciliations",readOnly:!1,isDestructive:!0,searchHint:"reconcile bank entry transfer between accounts",execute:async(e,t)=>lV(e.client,t)},{name:"reconcile_invoice_receipt",description:'CREATES A NEW invoice and auto-reconciles it to a bank statement entry (AR). To match an EXISTING open invoice instead, use reconcile_with_payments (do not create a duplicate). \u26A0\uFE0F BSE must have `paymentDirection: PAYIN` (money in, AR). Produce via `bank add-records` with a POSITIVE amount (creates `credit_amount > 0` \u2192 PAYIN). Statement-imported BSEs from `bank import` also work. The error code "Invalid business transaction type" (422) is misleadingly named; the actual gate is direction, not entry type. Sync: returns the reconciled entry status. valueDate / dueDate / payment amount prefill from the bank entry if omitted. Retrying a RECONCILED entry 422s (Invalid bank statement entry status); it does not duplicate.',params:{bankStatementEntryResourceId:{type:"string",description:"Bank entry UUID"},bankAccountResourceId:{type:"string",description:"Bank account UUID"},invoiceDetails:Jnt("Invoice","Customer","Revenue")},required:["bankStatementEntryResourceId","bankAccountResourceId","invoiceDetails"],group:"reconciliations",readOnly:!1,isDestructive:!0,searchHint:"reconcile bank entry invoice receipt AR sale",execute:async(e,t)=>(ipe(t.invoiceDetails,"invoiceDetails"),uV(e.client,t))},{name:"reconcile_bill_receipt",description:'CREATES A NEW bill and auto-reconciles it to a bank statement entry (AP). To match an EXISTING open bill instead, use reconcile_with_payments (do not create a duplicate). \u26A0\uFE0F BSE must have `paymentDirection: PAYOUT` (money out, AP). Produce via `bank add-records` with a NEGATIVE amount (creates `debit_amount > 0` \u2192 PAYOUT). Statement-imported BSEs from `bank import` also work. The error code "Invalid business transaction type" (422) is misleadingly named; the actual gate is direction, not entry type. Sync: returns the reconciled entry status. valueDate / dueDate / payment amount prefill from the bank entry if omitted. Retrying a RECONCILED entry 422s (Invalid bank statement entry status); it does not duplicate.',params:{bankStatementEntryResourceId:{type:"string",description:"Bank entry UUID"},bankAccountResourceId:{type:"string",description:"Bank account UUID"},billDetails:Jnt("Bill","Supplier","Expense")},required:["bankStatementEntryResourceId","bankAccountResourceId","billDetails"],group:"reconciliations",readOnly:!1,isDestructive:!0,searchHint:"reconcile bank entry bill receipt AP purchase",execute:async(e,t)=>(ipe(t.billDetails,"billDetails"),dV(e.client,t))},{name:"reconcile_with_payments",description:"USE THIS to match a bank statement entry to an EXISTING open bill / invoice / payment (NOT reconcile_bill_receipt or reconcile_invoice_receipt, which CREATE a new bill/invoice). Pass the open transaction's cashflowTransactionResourceId (from search_cashflow_transactions or a view_auto_reconciliation suggestion) in businessTransactionPayments[]: this CREATES the payment AND reconciles in one call; no pay_bill / pay_invoice first. FX is resolved server-side; pass NO rate for the common case (only supply paymentAmount + currencySettings for the rare bill-currency \u2260 bank-currency case). Sync: returns the reconciled entry status. NOT idempotent: a blind retry double-creates a payment; confirm reconciled-state via search_bank_records(status: RECONCILED) before retrying.",params:{bankStatementEntryResourceId:{type:"string",description:"Bank entry UUID"},businessTransactionPayments:{type:"array",description:"Open business transactions (bills/invoices) to reconcile by creating a payment against each.",items:{type:"object",properties:{cashflowTransactionResourceId:{type:"string",description:"Open BT cashflow UUID (the bill/invoice)"},transactionAmount:{type:"number",description:"Payment amount in the BT currency (>0)"},paymentAmount:{type:"number",description:"Actual amount in bank-statement currency. Required ONLY when bank currency \u2260 BT currency."},currencySettings:{type:"object",description:"FX settings: supply ONLY for cross-currency (bank ccy \u2260 BT ccy). Omit otherwise (server resolves).",properties:{sourceCurrencyCode:{type:"string",description:"BT currency (ISO 4217)"},rateFunctionalToSource:{type:"number"},exchangeToken:{type:"string"}},required:["sourceCurrencyCode"]}},required:["cashflowTransactionResourceId","transactionAmount"]}},matchedPayments:{type:"array",items:{type:"string"},description:"Existing payment UUIDs to reconcile against the entry"},matchedBatchPayments:{type:"array",items:{type:"string"},description:"Existing batch payment UUIDs to reconcile against the entry"},adjustment:{type:"object",description:"Optional adjustment leg to balance payments vs the statement amount (over/under-payment, rounding, or FX gain/loss write-off; the platform does NOT auto-post FX gain/loss).",properties:{reference:{type:"string"},contactResourceId:{type:"string"},tags:{type:"array",items:{type:"string"}},cashAdjustmentEntries:{type:"array",items:{type:"object",properties:{organizationAccountResourceId:{type:"string",description:"e.g. the FX gain/loss account UUID"},amount:{type:"number"},description:{type:"string"},taxProfileResourceId:{type:"string"},rateSourceToFunctional:{type:"number",description:"Required when this account is in a non-functional currency."}},required:["amount"]}},bankAccountJournalEntryRateFunctionalToSource:{type:"number",description:"Required when the bank account is in a non-functional currency."}}}},required:["bankStatementEntryResourceId"],group:"reconciliations",readOnly:!1,isDestructive:!0,searchHint:"match bank entry to existing open bill invoice payment reconcile with payments pay outstanding",execute:async(e,t)=>(lnt(t),fV(e.client,t))},{name:"reconcile_magic_match",description:"Bulk-accept MAGIC_MATCH suggestions: reconcile many bank entries against EXISTING open business transactions and/or payments in one call (max 500 entries). Feed entries from view_auto_reconciliation suggestions. Returns a per-entry split { reconciled[], failed[] }: a 200 with a non-empty failed[] is a PARTIAL success; surface failed entries (with their errorCode) and loop. Entry-level idempotency-keyed server-side. Use reconcile_with_payments for a single precise match; use this to accept a batch of suggestions at once.",params:{bankAccountResourceId:{type:"string",description:"Bank account UUID the entries belong to"},autoReconcileRunResourceId:{type:"string",description:"Auto-reconciliation run UUID for batch tracking"},entries:{type:"array",description:"One row per bank entry to reconcile (max 500).",items:{type:"object",properties:{workflowType:{type:"string",enum:["MAGIC_MATCH"],description:"Only MAGIC_MATCH (match to existing) is supported here."},bankStatementEntryResourceId:{type:"string",description:"Bank entry UUID"},matchedBusinessTransactions:{type:"array",items:{type:"string"},description:"Open BT cashflow UUIDs to reconcile by creating payments"},matchedPayments:{type:"array",items:{type:"string"},description:"Existing payment UUIDs"},matchedBatchResourceId:{type:"string",description:"Batch payment UUID"}},required:["bankStatementEntryResourceId","workflowType"]}}},required:["bankAccountResourceId","entries"],group:"reconciliations",readOnly:!1,isDestructive:!0,searchHint:"bulk accept magic match suggestions reconcile many bank entries to existing",execute:async(e,t)=>(Ut(t.entries,"entries",500,"entries"),hV(e.client,t))},{name:"reconcile_learned_prediction",description:"Accept an ML learned-prediction suggestion to reconcile a bank entry. predictedPayload + predictedPayloadSchemaVersion are passed through VERBATIM from a view_auto_reconciliation suggestion (recommendationType MAGIC_RECONCILE_WITH_CASH_IN_OUT); do not construct them by hand. Pass retryToken to force a fresh journal on an edit-then-retry; omit it for an idempotent replay. Sync: returns the reconciled entry status. On failure (stale/invalid payload), fall back to reconcile_with_payments; do NOT retry the same opaque payload.",params:{bankStatementEntryResourceId:{type:"string",description:"Bank entry UUID"},learnedPredictionResourceId:{type:"string",description:"Learned-prediction UUID from the suggestion"},predictedPayload:{type:"string",description:"Opaque JSON payload from the suggestion; required, passed verbatim"},predictedPayloadSchemaVersion:{type:"string",description:"Schema version from the suggestion"},retryToken:{type:"string",description:"Optional idempotency retry token"},autoReconcileRunResourceId:{type:"string",description:"Auto-reconciliation run UUID for batch tracking"}},required:["bankStatementEntryResourceId","learnedPredictionResourceId","predictedPayload","predictedPayloadSchemaVersion"],group:"reconciliations",readOnly:!1,isDestructive:!0,searchHint:"reconcile bank entry learned prediction ML cash in out accept suggestion",execute:async(e,t)=>pV(e.client,t)},{name:"undo_reconciliations",description:"Unlink bank entries from what they were reconciled against, returning each to UNRECONCILED. Re-running reports already-unreconciled/archived entries as per-entry FAILED (INVALID_BANK_STATEMENT_ENTRY_STATUS); it never double-applies. On a non-200 nothing was applied, the batch rolls back. Ids that do not resolve are OMITTED from resetReconciliationResponse, so compare returned ids against what you sent. Does NOT delete the record it was matched to; reconcile_* tools that CREATE one leave it on the books as a bank-rec discrepancy, and re-reconciling without deleting it duplicates the record. Delete via linkedRecords by businessTransactionType: SALE=delete_invoice, PURCHASE=delete_bill, SALE_CREDIT_NOTE=delete_customer_credit_note, PURCHASE_CREDIT_NOTE=delete_supplier_credit_note, PAYMENT_*=delete_payment, JOURNAL_MANUAL=delete_journal (voids an ACTIVE); all using businessTransactionResourceId. JOURNAL_DIRECT_CASH_IN/OUT and JOURNAL_CASH_TRANSFER use delete_cash_in/out/transfer with parentEntityResourceId instead. Any other type has no delete tool: locate it with search_cashflow_transactions first.",params:{bankStatementEntryResourceIds:{type:"array",items:{type:"string"},description:"Bank entry UUIDs to unlink. 1-500, unique."}},required:["bankStatementEntryResourceIds"],group:"reconciliations",readOnly:!1,isDestructive:!0,searchHint:"undo unreconcile reset reverse reconciliation unlink bank entry mistake wrong match",execute:async(e,t)=>{Ut(t.bankStatementEntryResourceIds,"bankStatementEntryResourceIds",500,"bank entries");let r=[...new Set(t.bankStatementEntryResourceIds)];return mV(e.client,{...t,bankStatementEntryResourceIds:r})}},{name:"validate_drafts",description:`BULK validate up to 500 draft business transactions in ONE call, mixing any btType. SYNC: returns per-item errors + display data; no state change. Run before convert_drafts_to_active.
826
826
 
827
827
  btType enum: SALE = invoice, PURCHASE = bill, SALE_CREDIT_NOTE = customer CN, PURCHASE_CREDIT_NOTE = supplier CN. Journals NOT in this enum.
828
828
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jaz-clio",
3
- "version": "9.0.1",
3
+ "version": "9.0.2",
4
4
  "description": "Fastest ledger for agents. Jaz accounting CLI and MCP server: invoicing, bills, payments, quotes & orders, bank reconciliation, fixed assets, inventory, expense claims, tax, reports, and period close.",
5
5
  "type": "module",
6
6
  "bin": {