jaz-conversion
npx machina-cli add skill teamtinvio/jaz-ai/conversion --openclawJaz Conversion Skill
You are performing an accounting data conversion — migrating a customer's financial data from their previous accounting software (Xero, QuickBooks, Sage, MYOB, or Excel-based systems) into Jaz.
This skill provides conversion domain knowledge. For API details (field names, endpoints, gotchas), load the jaz-api skill alongside this one.
When to Use This Skill
- Analyzing customer-provided Excel/CSV files for conversion
- Mapping source Chart of Accounts, contacts, tax codes, or items to Jaz
- Creating conversion transactions (invoices, bills, journals)
- Building or reviewing TTB (Transfer Trial Balance) entries
- Verifying post-conversion Trial Balance accuracy
- Troubleshooting TB mismatches after a conversion
Three Conversion Types
All types use the same pipeline — only the scope (which entity types) differs.
Config Mode (foundation only)
- Scope: CoA, contacts, items, currencies, tax mapping — NO transactions or journal
- Creates: Foundation entities only (Phases 0-1)
- When: Setting up an org before a conversion, or populating a fresh org with the customer's chart of accounts and contacts
- Manifest field:
"conversionType": "config" - Requires: At least one of
coaortbfile (no AR/AP needed)
Quick Conversion (Option 2 — recommended starting point)
- Scope: Open AR/AP at FYE + TTB opening balances
- Creates: CoA, contacts, currencies, tax mapping, conversion invoices/bills, TTB journal, lock date
- When: Customer wants to start fresh on Jaz with correct opening balances
- Accuracy check: TB at FYE must match between source and Jaz
- See:
references/option2-quick.md
Full Conversion (Option 1)
- Scope: ALL transactions for FY + FY-1 (complete history)
- Creates: Everything in Quick + items, detailed invoices, bills, payments, journals, credit notes, cash-in/out/transfers, bank records, fixed assets
- When: Customer needs full audit trail preserved
- Accuracy check: TB at multiple dates, plus detailed ledger comparison
- See:
references/option1-full.md
Conversion Pipeline
Every conversion follows this pipeline. Steps 1-3 use the parser + AI. Steps 4-8 use the jaz-api skill.
Step 1: Intake
Receive customer files. Organize by type. Expect messy Excel files with grouped sections, merged cells, subtotals, and inconsistent formatting.
Common file types:
- Chart of Accounts (CoA export)
- Trial Balance (TB at FYE)
- AR Aging / AP Aging (outstanding receivables/payables at FYE)
- Contact list (customers and suppliers)
- Tax profile list
- Exchange rates (closing rates at FYE)
- General Ledger detail (for Full only)
- Invoice/bill detail (for Full only)
Step 2: Parse (3-pass approach)
See references/file-analysis.md for parsing guidance and references/file-types.md for the comprehensive file type catalog (22 types across all source systems).
Pass A — Raw dump: Run the parser (parseFile()) to extract all cells + merge metadata from Excel files. The parser handles merged cell propagation automatically.
Pass B — AI structure detection: Read the raw JSON dump and identify:
- Where are the data tables? (header row + data rows)
- What are subtotal/total rows? (exclude from data extraction)
- What is metadata vs actual data? (company name, report date = metadata)
- Are there multiple data frames per sheet? (some exports have AR and AP on same sheet)
Pass C — AI classification: For each identified data table:
- What type of data is this? (TB, AR aging, AP aging, CoA, contacts, etc.)
- What are the column headers mapped to? (Account Code, Account Name, Debit, Credit, etc.)
- What date range does it cover?
- What currency is it in?
Step 3: Map
See references/mapping-rules.md for detailed rules.
For each entity type, map source data → Jaz entities:
- CoA: Match by code AND name. Fresh org = replace non-system accounts. Existing org = fuzzy match.
- Contacts: Match by name. Create if not found.
- Tax: Read-only in Jaz — discover existing profiles, match source codes to Jaz tax types.
- Currencies: Enable required currencies, set FYE exchange rates.
Assign confidence scores (high/medium/low) to each mapping. Flag low-confidence for human review.
Step 4: Transform
Convert mapped data into Jaz API payloads. Different per conversion type:
- Quick: See
references/option2-quick.md— clearing account pattern - Full: See
references/option1-full.md— detailed transaction creation
Step 5: Dry Run
Before any API calls, present a summary for human review:
- Entity counts (how many of each type will be created)
- CoA mapping table (source → Jaz, with confidence)
- Contact list to be created
- For Quick: each conversion invoice/bill (contact, amount, currency)
- Edge cases flagged (FX, unmapped accounts, partial payments)
Do NOT project a Trial Balance. TB comes from the ledger after execution. Projecting it is unreliable and misleading.
Step 6: Execute
Create records via Jaz API. Follow the dependency order:
- Phase 0: Probe (discover existing resources — accounts, contacts, tax profiles)
- Phase 1A: Currencies → FX Rates (rates must come AFTER currencies are enabled)
- Phase 1B: CoA via
POST /api/v1/chart-of-accounts/bulk-upsert - Phase 1C: Contacts → Items (items reference accounts + tax profiles)
- Phase 1D: Cleanup stale conversions (search + delete CONV-INV-, CONV-BILL-, etc.)
- Phase 2: Conversion invoices (AR), bills (AP), customer credit notes, supplier credit notes
- Phase 3: TTB journal (routes AR/AP through clearing accounts)
- Phase 4: Lock dates (per-account, at FYE date)
Rollback: If Phase 2 or 3 fails, all Phase 2 resources are automatically rolled back.
Step 7: Verify
After execution, pull the Trial Balance from Jaz and compare against the source TB.
See references/verification.md for the full checklist format.
Step 8: Triage (if TB doesn't match)
If TB doesn't match, identify the discrepancy:
- Missing accounts? → Create them + journal adjustment
- Rounding drift? → Small adjustment journal
- FX differences? → Check rates, may need unrealized gain/loss journal
- Missed transactions? → Create them
- Re-verify after each fix until TB matches
Critical Rules
- TTB is a regular journal entry — Jaz's TTB module is not yet on the API. Create via
POST /journals. Lock date is set separately via CoA API. - Fixed asset transfers use
POST /api/v1/transfer-fixed-assets— not the "new asset" endpoint. Preserves accumulated depreciation. - Clearing accounts must net to zero — if they don't, something was missed in the conversion.
- Never project TB before execution — verify AFTER, then triage.
- FYE exchange rates + original dates — Quick conversion uses original dates (for aging) but explicit FYE rate via
currency: { sourceCurrency, exchangeRate }on every FX transaction. Prior UGL is in the TTB; explicit rate ensures zero UGL in Jaz. Seereferences/edge-cases.md. - System-generated CoA accounts cannot be deleted — discover them via API before attempting a wipe-and-replace.
- 100% accuracy is required — customer's accountant signs off on TB match. No rounding errors, no missing balances.
- Always load
jaz-apiskill alongside this one — this skill has conversion domain knowledge,jaz-apihas API field names, endpoints, and gotchas. - Filter noise from aging reports before creating contacts — AR/AP aging reports contain subtotal rows, dates, column headers, and numeric-only strings that are NOT contact names. Reject them to avoid creating garbage contacts. See
references/mapping-rules.md. - TTB routing differs between Quick and Full — Quick routes AR/AP through clearing accounts (conversion invoices already hold the real AR/AP). Full posts directly to all accounts (detailed transactions follow). See
references/option1-full.md.
Source
git clone https://github.com/teamtinvio/jaz-ai/blob/main/cli/src/skills/conversion/SKILL.mdView on GitHub Overview
jaz-conversion migrates customer financial data from Xero, QuickBooks, Sage, MYOB, and Excel exports into Jaz, covering CoA, contacts, tax codes, items, and opening balances. It supports config, quick, and full conversion workflows, Excel parsing, clearing accounts, TTB, and TB verification to preserve an accurate audit trail.
How This Skill Works
The skill follows a defined pipeline: Step 1 Intake collects and organizes customer files (including messy Excel/CSV exports). Step 2 Parse uses a 3-pass approach (raw dump, AI structure detection, AI classification) to identify data tables and metadata. Step 3 Apply uses the conversion scope (config, quick, full) and the jaz-api to create foundation entities, map CoA/contacts/tax/items, and generate transactions and TB entries; Steps 4-8 are powered by jaz-api for transactional data and verification.
When to Use It
- Analyzing customer-provided Excel/CSV files for conversion
- Mapping source Chart of Accounts, contacts, tax codes, or items to Jaz
- Creating conversion transactions (invoices, bills, journals)
- Building or reviewing Transfer Trial Balance (TTB) entries
- Verifying post-conversion Trial Balance accuracy
Quick Start
- Step 1: Intake — collect and organize customer files (CoA, TB at FYE, AR/AP aging, Contacts, Tax, Rates)
- Step 2: Parse — run the 3-pass parse to extract tables and metadata
- Step 3: Apply scope — choose config/quick/full, map CoA/contacts/tax/items, and prepare TB and transactions
Best Practices
- Start with Config mode to establish CoA, contacts, and tax mapping before loading transactions
- Pre-map CoA, contacts, and tax codes before Quick/Full conversions
- Validate TB alignment at FYE and after conversion to catch mismatches early
- Use the 3-pass parse approach (Pass A raw dump, Pass B AI structure detection, Pass C AI classification) for reliable data extraction
- Keep a clear manifest with conversionType and scope and maintain audit-friendly logs
Example Use Cases
- Migrate CoA and contacts from Xero to Jaz and verify TB alignment
- Move QuickBooks data to Jaz with opening balances and a valid TTB
- Migrate Sage data to Jaz including tax codes and item mappings
- Import MYOB data to Jaz with clearing accounts and TB verification
- Load Excel TB and CoA exports into Jaz for a config-only foundation