Project · live demo

DrawCheck

Construction contractors bill monthly with a pay application: every line of work, what was billed before, what is billed now, and what is due after retainage. DrawCheck reads the bill as PDF, Excel, Word or a scan, checks the arithmetic and the contract terms, and points to the exact cell behind every problem. If it cannot read a bill completely, it says so instead of guessing.

How it works

  1. 01

    Read

    Parse every table and cell, keeping its address.

  2. 02

    Locate

    Find which column is which. For unfamiliar layouts an AI model proposes addresses only. It never types a number.

  3. 03

    Check

    Plain-code rules: line math, totals, summary vs detail, retainage, payment due, overbilling, last month, change orders, budget.

  4. 04

    Verdict

    Clean, findings, or can't verify. Each finding is labeled complete, correct or consistent.

Try it on sample bills

How well it works

Real public bills

0

false passes on 4 bills with known errors

Documents
13
Can't verify
9
False alarms
0

Held-out layouts

0

false passes on 18 bills with known errors

Documents
24
Can't verify
1
False alarms
0

Generated bills

0

false passes on 225 bills with known errors

Documents
300
Can't verify
0
False alarms
0
Full scorecard

Real public bills

False passes: 0 of 4 bills with known errors

MeasureResult
Documents13
Could not verify (abstentions)9
Correct abstentions on unreadable documents6
False alarms on clean documents0
Verdicts on documents expected to be unverifiable0
Model usage cost (USD)1.580598
Mean review time (seconds)27.595

Type scores exclude every abstained document. Each type counts once per document. N/A means there were no eligible documents for that ratio.

Finding typeRecallPrecision
E6100.00%100.00%
LayoutDocumentsFalse passesAbstentionsFalse alarms
unspecified13090
Why verification failedOccurrences
mapping_reconcile_failed2
missing_fields1
prior_unverifiable1
row_count_mismatch1
unmapped_columns1
unreadable_cells1
vision_unconfirmed7

Held-out layouts

False passes: 0 of 18 bills with known errors

MeasureResult
Documents24
Could not verify (abstentions)1
Correct abstentions on unreadable documents0
False alarms on clean documents0
Verdicts on documents expected to be unverifiable0
Model usage cost (USD)0.493188
Mean review time (seconds)6.384

Type scores exclude every abstained document. Each type counts once per document. N/A means there were no eligible documents for that ratio.

Finding typeRecallPrecision
E1100.00%100.00%
E2100.00%100.00%
E3100.00%100.00%
E4100.00%100.00%
E5100.00%100.00%
E6100.00%100.00%
LayoutDocumentsFalse passesAbstentionsFalse alarms
docx_renamed8000
pdf_reordered8010
xlsx_draw8000
Why verification failedOccurrences
mapping_reconcile_failed1

Generated bills

False passes: 0 of 225 bills with known errors

MeasureResult
Documents300
Could not verify (abstentions)0
Correct abstentions on unreadable documents0
False alarms on clean documents0
Verdicts on documents expected to be unverifiable0
Model usage cost (USD)0
Mean review time (seconds)0.041

Type scores exclude every abstained document. Each type counts once per document. N/A means there were no eligible documents for that ratio.

Finding typeRecallPrecision
E1100.00%100.00%
E2100.00%100.00%
E3100.00%100.00%
E4100.00%100.00%
E5100.00%100.00%
E6100.00%100.00%
LayoutDocumentsFalse passesAbstentionsFalse alarms
docx_tables75000
pdf_g70x75000
xlsx_clean75000
xlsx_messy75000

Synthetic scores measure generated documents separately from real bills. Replay cost reflects recorded token usage; replay makes no paid calls.

Scanned bills are read twice, by a vision model and by OCR, and a number counts only when both readers agree on it; anything else is reported as "can't verify". Generated bills test reading accuracy; the real public bills (from city council and school board packets) are the honest test. Personal project on synthetic and public documents, not affiliated with AIA.