Systems We've Built
In Development

Statement Extractor

Extraction is not trustworthy just because its own math agrees with itself.

Statement Extractor is an engineering system for turning native-text bank statements into structured transaction data, then reconciling that data against controls captured independently from the statement before extraction begins.

Independent controls firstA person keys the statement's printed balances and totals before extraction runs.
Deterministic extraction pathThe current architecture uses PDF text geometry and exact business rules, not an LLM.
Fail-loud validationReconciliation failures move the run to review rather than producing a normal deliverable.
Human sign-off remains humanThe system never marks a run “approved.” Operator disposition begins as PENDING.
The Operating Problem

Internal consistency is not the same as independent verification.

A parser can extract a set of rows, total those same rows, and prove that its own numbers reconcile. That still does not prove it captured the statement correctly. Statement Extractor was designed around a separate trust boundary so the extracted ledger is checked against values the extraction process never supplied.

The system is designed to answer

Did the extracted deposits match the total independently read from the statement?
Did the extracted debits match the independently keyed debit total?
Does opening balance + increases − decreases equal the independently keyed closing balance?
Does the statement's printed running balance remain internally consistent row by row?
The Trust Boundary

Two independent tracks converge at validation.

The distinction matters: the extraction path cannot feed values back into the control-entry path.

TRACK A

Human control entry

An operator reads the statement and keys four printed controls: opening balance, closing balance, deposit total, and debit total. The control-entry function is designed to take those values from keyboard input before extraction runs.

→
TRACK B

System extraction

The parser reads transaction rows from a native-text PDF using deterministic geometry and format rules, creating structured rows with amounts, categories, provenance, and running-balance information.

Then the two are reconciled.If the independent controls and extracted ledger do not agree to the cent, the normal deliverable path is blocked for review.
Interactive Synthetic Demo

See why the independent controls matter.

This demo starts from a synthetic extracted ledger. Toggle the independently keyed summary between a matching version and a version missing one $15.99 debit. The validator logic changes the run from PASS to REVIEW REQUIRED even though the row-by-row balance chain still agrees with itself.

No upload. No real bank data.The values are fictional. The pass/fail messages are based on outputs generated by the real validation code against this synthetic dataset. The public demo does not expose the PDF parsing engine or proprietary format heuristics.

Example Community Bank

Checking · Account ID 01 · January 1–31, 2025
Fictional statement · synthetic data
DateDescriptionCreditDebitBalance
01/02Direct Deposit – Payroll$1,200.00—$1,700.00
01/05Grocery Mart Purchase—$85.40$1,614.60
01/07Electric Utility Co—$64.10$1,550.50
01/10Coffee Shop—$5.25$1,545.25
01/14Transfer From Savings$300.00—$1,845.25
01/18Auto Loan Payment—$210.00$1,635.25
01/22Online Retailer—$142.99$1,492.26
01/29Streaming Service—$15.99$1,476.27
Independently keyed controls
Opening balance$500.00
Deposits / credits$1,500.00
Debits / withdrawals$523.73
Closing balance$1,476.27
Change only what the independently keyed printed summary says:
Validation result
BALANCE CHAIN PASS Deliverable produced. Operator disposition remains PENDING.
Public demonstration of validation behavior only. Extraction is simulated from preloaded synthetic rows; no statement is uploaded or parsed in the browser.
What the Demo Shows

Four checks tell the core architecture story.

The development validator implements nine checks today. The public demo surfaces four that make the independence and reconciliation model easiest to understand.

V1

Deposits total

Compares extracted deposits and credits with the independently keyed deposit control.

V2

Debits total

Compares extracted checks and withdrawals with the independently keyed debit control.

V3

Full balance walk

Tests opening balance + increases − decreases against the independently keyed closing balance.

V11

Running-balance chain

Tests whether the printed running balance is internally consistent from row to row. It is useful, but it is not independent source verification.

Architecture Proof

A perfect internal chain can still fail independent reconciliation.

Synthetic Awesome Bank sample
$20,600
Difference between the sample's row-level debit total and its independently keyed printed debit control.

That is the point of the trust boundary.

In the project's original synthetic sample statement (Awesome Bank, a fictional institution used for demonstration and testing), all 32 running-balance links reconciled internally. But four debit rows totaling $20,600 were not represented in the sample's printed summary control. The validator therefore failed V2 and V3 and moved the run to REVIEW_REQUIRED.

The latest ground-truth review reproduced that validator result from the sample's hand-verified oracle data. This is an architecture proof on synthetic data—not a claim about a real client's bank statement or broad bank-format support.

See the Workflow in Action

A recorded walkthrough of the full workflow.

This recorded walkthrough replays an actual run of the Statement Extractor development code against a synthetic sample statement from Awesome Bank, a fictional institution created for demonstration and testing.

It shows the workflow from document fingerprinting and blind control entry through row extraction, nine validation checks, review-state handling, and workbook output.

The walkthrough demonstrates one synthetic layout only. It does not establish production readiness or support for any real-world financial institution. Statement Extractor remains in development, with 9 of 15 designed validation checks currently implemented.

Hosted externally on Claude. No client financial data is used. A passing validation result is not human approval.

Where It Stands Today

Implemented architecture, narrow evidence base.

The maturity label is intentionally conservative. The project proves important components and controls, but it is not a generalized statement-processing product.

Control-entry trust boundary

Verified

The orchestration test suite passed 54/54 in the latest review, including tests that prevent extraction or file reads from supplying the four operator-entered controls.

Validation engine

Verified

Nine implemented checks were exercised against the hand-verified sample data; the expected pass and review-required outcomes were reproduced.

Workbook output

Verified

The real writer produced both a diagnostic workbook for the failing sample and a deliverable workbook for the corrected passing test copy, with operator review still PENDING.

Extraction parser

Implemented / recheck pending

The deterministic PDF parser exists. The latest review could not rerun the full extraction test suite because the fixture files attached to that project were stale ZIP substitutes rather than the genuine PDFs expected by the parser. The recorded walkthrough shows an actual run of the development code against the synthetic sample. The separate full extraction-suite rerun noted here remains pending from the latest documented review.

Real bank formats

Not yet

The walkthrough runs on one synthetic sample layout. No real-world financial institution format is currently verified or claimed as supported.

Operator interface

Not yet

The current operator workflow is command-line based. There is no production web or desktop interface in the evidence reviewed.

Designed validation checks

9 of 15 implemented

Six designed checks—V4, V9, V10, V13, V14, and V15—are explicitly deferred rather than represented as working.

Public maturity

In Development

The appropriate public frame is an engineering case study and active development system, not production software, beta software, or a multi-bank product.

Intentional Boundaries

What this page does not claim

The development story is stronger when the limits are explicit.

Not “AI reads any bank statement” — the current extraction path is deterministic, not LLM-based
No claim of support for PNC, Wells Fargo, Bank of America, TD, Citizens, Capital One, or any other named bank
No production-ready, beta, accuracy, ROI, time-saved, or error-reduction claim
No real client bank statement or client financial data in the public demonstration
No live public PDF upload
No claim that all designed validation checks are implemented
No automatic approval; final operator disposition remains a human decision
No exposure of parser tolerances, format signatures, or reproducible extraction heuristics
Build Around the Control

Where does your data workflow need independent verification instead of another automated guess?

O2S builds custom internal systems around real operating requirements, including extraction, reconciliation, exception handling, review gates, and usable outputs.