Finance

Finance reconciliation

Automates bank, card, SII and Buk reconciliation against your accounting, with controlled exception workflows and reviewable execution records.

Finance · Accounting · SII · Banking · Audit · Bank reconciliation

Request a diagnostic

In short

A governed agent suite that pulls bank movements, card settlements, tax documents from the SII (Chile's tax authority) and Buk payroll centralizations, matches them against the accounting system of record (Odoo, NetSuite, SAP), resolves the long tail of fuzzy matches with an LLM under explicit policy, and surfaces only the unresolvable cases for a human accountant. Every link, every ignore, every annotation is recorded in an immutable audit trail and round-trips into the ERP under the operator's user.

Reconciliation — bank, card, tax and payroll — is the slowest, most error-prone link in monthly close. Bank statements arrive in heterogeneous formats, card processors lump days of activity into a single deposit, the SII publishes documents on its own cadence, and payroll centralizations land as compound entries. Most teams handle it by hand, in spreadsheets, against the clock.

The Finance reconciliation suite runs four governed agents — one per source (bank, card, SII, Buk) — that each produce a typed link, ignore or pending decision, with the evidence behind it. Deterministic rules clear the obvious matches; the agent layer resolves the fuzzy ones with explicit policy bounds; the human reviews exceptions only.

The platform never posts to the ERP without a recorded approval. Each link is reversible, each agent decision expands into the underlying tool calls, and the audit log is exportable for external auditors and the SII review process.

What this case fixes

In a typical mid-market Chilean operation closing a single month touches four reconciliation surfaces — bank, card, SII and Buk — each with its own format, cadence and edge cases. The team spends days copy-pasting between spreadsheets and the ERP, and the long tail of fuzzy matches (a deposit that aggregates three invoices, a card settlement net of fees, a Boleta de Honorarios that lags the SII by 48 hours) consumes most of the effort.

Generic OCR and rule-based reconcilers solve the easy half and silently break on the rest. What the operation actually needs is a runtime that combines deterministic rules for the high-confidence cases, an agent layer that proposes resolutions for the ambiguous ones with traceable evidence, and a human queue for what remains — all under one audit log so external auditors and the SII can reconstruct any decision after the fact.

Who it's for

  • Mid-market and enterprise CFO offices operating in Chile and the Andean region
  • Organizations running multi-bank, multi-currency operations against a single ERP
  • Shared service centers consolidating accounting for several legal entities

How it runs

A reference pattern uses separate bank, card, SII and payroll workers with one controlled pipeline. Permissions are limited to the required records. Writes require operator approval and use delegated identity where supported, or a least-privilege service account otherwise.

  1. DataIngest sources and ERP statePulls daily bank statements (typed connectors per bank), card settlement files, SII tax ledgers (purchases, sales and contractor fee receipts), Buk centralization payloads and the open accounting state from the ERP. Read-only.
  2. AutomationApply deterministic match rulesExact-amount, exact-date and reference-number matches clear without LLM involvement. The bulk of routine activity (typically 60–80%) resolves here; nothing leaves this phase without a recorded match strength.
  3. AgentResolve fuzzy cases under policyFor unmatched items the reconcile agent proposes a link or a typed ignore reason. Each proposal cites the source rows on both sides, the rule that flagged it, and the policy clause that allows the resolution. Confidence below the configured threshold routes to the exception queue.
  4. PersonOperator review of exceptionsThe accountant sees only the unresolved tail in the Xophia console: side-by-side source rows, the agent's proposed action, and a one-click approve / edit / reject. Bulk operations (e.g., approve all card settlements net of fees from processor X) are first-class.
  5. AutomationApply, post and auditApproved actions write to the ERP through the connector under the operator's user. Each action emits an immutable audit row: source ids on both sides, agent trace id, policy clause, operator id and timestamp. The reconciliation state machine advances and the audit row is exportable for the external auditor and the SII.

Systems it connects

  • Odoo / NetSuite / SAPERP (system of record)
  • BCI · Santander · Itaú · BancoEstado · Banco de ChileBank statement connectors
  • Cardda · Transbank · WebpayCard settlement connectors
  • SIITax documents (purchases, sales, contractor fees)
  • BukPayroll centralization
  • Xophia audit logCompliance and external audit

Reference targets

MetricBeforeTarget
Auto-match rateCount of source rows resolved via deterministic rule or approved agent proposal, divided by total reconcilable rows in the period.40–55% of items matched without human intervention≥ 85% auto-matched (deterministic + agent), within configured confidence threshold
Time-to-clear month-endFrom the moment all source files are ingested for the period, to the moment 100% of items are in a terminal state (matched, ignored or escalated).5–10 business days after period close≤ 2 business days after period close
Exception backlog ageDistribution of (now − exception_created_at) over items in the exception queue, measured daily.Multi-week tails commonp95 exception age ≤ 3 business days
Audit completenessAudit-log check: every link, unlink, ignore and post must reference both source rows and an operator id; gaps trigger a compliance alert.Ad-hoc spreadsheets, partial trails100% of state transitions linked to an audit row with source ids, policy and operator

Values from an illustrative scenario, not customer results.

Illustrative execution trace

A synthetic example of how a reconciliation could be recorded. Names, identifiers, volumes, costs and outcomes are fictional; the sequence is illustrative, not a customer result.

Daily run for legal entity LE-02. The bank statement contains 47 movements. Deterministic rules cleared 31; the agent proposed resolutions for 14 and routed 2 to the exception queue.

ToolInputOutput
bank.list_statement_movementsentity_id=LE-02, account=CL-BCI-1234, date=2026-05-0447 movements, total amount CLP 184,520,330
erp.list_open_invoicesentity_id=LE-02, status=posted, payment_state=not_paid, currency=CLP212 candidate invoices in the matching window
rules.deterministic_matchmovements=47, candidates=212, tolerance=CLP 131 exact matches, 16 unresolved (12 partial-amount, 3 fee-aggregated, 1 reversal)
agent.propose_resolutionmovement_id=BM-9087, signals=['fee_aggregated','same_processor']Suggest link to invoices INV-3041, INV-3052 net of CLP 12,400 processor fee. Confidence 0.93. Policy: card_processor.cardda.allow_fee_aggregation
agent.flag_exceptionmovement_id=BM-9112, signals=['no_candidate','amount_mismatch']No matching open invoice within ±5d window. Routed to exception queue with priority=normal.
console.publish_digestoperator_id=ACC-04, items=16 (14 proposed, 2 informational)digest_id=R-2026-05-05-LE-02-BCI awaiting review

Operator approved 13 proposals and edited 1 at 09:42 UTC; remaining exception escalated to the controller. Approved items posted to Odoo as bank.statement.line.reconcile under operator user. Audit row R-2026-05-05-LE-02-BCI closed. Total agent cost: $0.078; latency p95: 8.4s.

Does this module fit?

In 20 minutes we review how it would look on your systems.

Xophia

Tell me what your company does.

Let's understand what you need and prepare an example you can explore before talking with the team.

Xophia is preparing a response…

You are chatting with an AI agent. Your messages are sent to generate a response. Avoid sharing confidential information.