If uncertain
Hold for human review
Show the source and blocking reasons. Record a correction, then validate the revised document again.
I built a TypeScript document workflow that validates extracted fields, holds uncertain receipts for review and reconciles accounting writes before replay.
Invoice & Receipt Processor Demonstration · 4:31Untrimmed browser QA with a real receipt and synthetic recovery control. Silent footage; includes a reload during a button fix.
This demonstration has no spoken narration. The text below describes the recorded visuals.
Untrimmed browser QA with a real receipt and synthetic recovery control. Silent footage; includes a reload during a button fix.
00:00:00.000 Actual recorded browser QA: a real receipt is submitted to the development task and held for review.
00:00:40.000 A declared synthetic control is submitted through Trigger.dev. This is controlled QA, not production bookkeeping.
00:01:30.000 The synthetic control requires currency confirmation. Missing fields must not be guessed.
00:02:15.000 A test-contract correction supplies USD for the synthetic control. Approval and export are verified in this recording.
00:03:00.000 The accepted synthetic control and review interface are inspected. The untrimmed footage includes a reload during a button fix.
00:03:45.000 Accepted synthetic output is available for local QA CSV export. Incomplete real receipts remain held.
01
Repeated entry of vendor names, amounts and due dates creates an accounting task that needs both speed and a reliable way to handle uncertainty.
02
Independent controlled portfolio project. I designed and implemented the intake, receipt parser, validation rules, private review interface, accounting adapter and recovery tests.
03
Hosted Trigger.dev schedules a single macOS development worker. The worker reads private PDF snapshots, extracts draft fields with source evidence and validates them in TypeScript. A durable private store routes uncertain records to review and accepted revisions to a controlled CSV.
From document to decision
Hosted Trigger.dev schedules the private macOS worker and records its attempts. The worker keeps extraction, validation and permission to export separate.
Interactive browser practice. Uses retained extraction and the processor’s validation rules. No upload, Trigger.dev run or external accounting write.

Real receipt with unresolved vendor and currency. The retained OCR draft is available to inspect.
NAVER CLOVA, CORD v2 test split, CC BY 4.0. Original JPEG retained; resized thumbnail. Dataset source
Inspect the full documentReal receipt with unresolved vendor and currency. The retained OCR draft is available to inspect.
Choose a sample and inspect its draft.
No accepted output yet.
Bound the file, calculate its content hash and preserve an immutable snapshot.
Read text or run local OCR. Keep the original source line beside each proposed field.
Check required fields, exact amounts and due-date rules before allowing output.
If uncertain
Show the source and blocking reasons. Record a correction, then validate the revised document again.
If accepted
Persist intent, append and sync the accounting row, then save its destination receipt. Reconcile uncertain writes before replay.
Actual controlled architecture. The portfolio presents retained evidence; it does not submit a new task.
04
The private browser shows each source beside its fields and validation reasons. Corrections preserve a reason, actor, timestamp and version, then pass through validation again. A stable business marker and complete-row readback protect the accounting boundary after a lost acknowledgement.

One real receipt, two different conclusions
TOTAL SALES 28,00028000.00A comma can mark grouping or a decimal separator. Strict parsing preserves the source and asks for confirmation when notation is ambiguous. Currency stays unknown instead of being inferred from the country.
Receipts can omit a due date. Invoices require a valid date and invoice number. A plausible amount alone never grants permission to export.


05
All five CORD development receipt totals matched reference annotations. All five remained in review and produced zero exports because required fields were unresolved. Three separate synthetic controls produced three accounting rows with unique markers.
06
Preserve ownership and human review across the connected workflow. Measure each outcome separately and retain the limits of the controlled evidence.
07
The failure path is part of the design
Retained Trigger.dev history shows a transient control recovering on attempt two and a separate control exhausting all four attempts. Three retries after the first attempt are explicitly configured, with 1, 2 and 4 second backoff.
Persist a stable business marker before appending the accounting row.
A timeout after append aborts automatic retry. A lost acknowledgement does not establish a failed write.
One exact marker and complete-row match confirms the existing effect. Missing, changed or multiple rows require operator reconciliation.
5 of 5 development receipt totals matched reference annotations. All five stayed in review.
3 unique markers for three synthetic accounting rows. A new run ID is not a new transaction.
The central example is receipt 002, where the original total line uses a comma. The parser proposes 28000.00 while preserving the original evidence. Missing vendor and currency fields keep the receipt in review. The separate synthetic controls show approval and export without inventing fields for a real receipt.
A timeout after an accounting append does not establish that the write failed. The processor saves intent first and then compares a stable destination marker and the complete expected row before replay. Missing, changed or multiple rows stop for operator reconciliation.
Open the visual presentation, read the detailed architecture explanation. Presentation controls navigate retained evidence; they do not submit new Trigger.dev tasks.
The regression suite passes 55 checks and TypeScript validation. Actual Trigger.dev runs demonstrate retry recovery, four-attempt exhaustion, review routing and timeout-after-write reconciliation. Renamed duplicates and complete destination-row matching are covered.
Talk with me about your team and the systems you need.