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 architecture fixture
$20,600
Difference between the fixture'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 fixture, all 32 running-balance links reconciled internally. But four debit rows totaling $20,600 were not represented in the fixture'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 fixture'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.

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 fixture data; the expected pass and review-required outcomes were reproduced.

Workbook output

Verified

The real writer produced both a diagnostic workbook for the failing fixture and a deliverable workbook for the passing fixture, 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.

Real bank formats

Not yet

No named real-world bank format is implemented or verified in the current project evidence. The only format profile is the fictional architecture fixture.

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.