document-extract-agent / docs /01_requirements.md
kennethzychew's picture
seed: specs + loop scaffolding
3a5b10f
|
Raw
History Blame Contribute Delete
7.34 kB
# Requirements Specification — Document Extraction Agent
## 1. Overview
An autonomous agent that ingests invoices, receipts, and similar
semi-structured financial documents, extracts their key fields into a
validated structured record, and routes anything it is not confident about
to a human review queue. The agent runs unattended over a stream of incoming
documents and is also exposed through a small public web demo.
The reasoning step (turning document text/images into structured fields) is
performed by a swappable LLM backend. Everything around it — triggering,
parsing, validation, confidence scoring, routing, persistence, logging — is
application code. The engineering value of this project is the system around
the model, not the model itself.
## 2. Problem statement
Manually keying fields off invoices and receipts is slow and error-prone, and
the documents arrive in inconsistent formats and qualities (clean PDFs,
flatbed scans, phone photos). We want a pipeline that processes them
automatically, is confident only when it should be, and surfaces the rest for
a human — with measurable accuracy.
## 3. Goals
- Ingest documents from a watched location with no human trigger per document.
- Support three input modalities: native-text PDFs, scanned images, and phone
photos.
- Extract a defined set of fields into a strict JSON schema.
- Validate extracted values, including arithmetic consistency checks.
- Assign a confidence to each document and route low-confidence documents to
review rather than auto-accepting them.
- Persist accepted records and export them to CSV.
- Provide a public demo URL where a single uploaded document is processed and
its result shown.
- Run entirely on free infrastructure and free model access.
- Be measurable against ground-truth datasets (precision, recall, F1).
## 4. Non-goals (explicitly out of scope for v1)
- Fine-tuning or training a model. Off-the-shelf models only.
- A full review *application* with auth, multi-user workflows, or audit trails.
The review queue is a directory plus a CSV, not a product.
- Persistent multi-tenant storage in the cloud demo. The demo is
presentation-only and stateless.
- Handling non-financial document types (contracts, IDs, medical records).
- Real-time / low-latency guarantees. This is a background batch system.
- Production hardening (SLAs, horizontal scale, queue infrastructure).
## 5. Users and usage modes
1. **Autonomous batch mode (primary).** Operator drops files into an `inbox/`
directory (local or mounted). The agent processes each, writes accepted
records to storage, and moves uncertain ones to `review/`. No interaction
per document.
2. **Demo mode (secondary).** A visitor uploads one document to the public web
UI and sees the extracted fields, per-field confidence, validation results,
and the accept/review decision. Nothing is persisted.
Both modes call the same core pipeline.
## 6. Functional requirements
- **FR-1 Ingestion.** Detect new files in `inbox/` (file-watcher or poll) and
enqueue them for processing. Supported types: `.pdf`, `.png`, `.jpg`,
`.jpeg`, `.webp`, `.tif/.tiff`.
- **FR-2 Parsing / text acquisition.** For native-text PDFs, extract text and
layout. For scans/photos, obtain content either via OCR or via a multimodal
model that reads the image directly. The chosen path is backend-dependent
(see architecture).
- **FR-3 Field extraction.** Produce a JSON object conforming to the schema in
the data spec, using the active model backend with structured-output
enforcement.
- **FR-4 Validation.** Apply type/format checks and arithmetic cross-checks.
Each field carries a validation status.
- **FR-5 Confidence + routing.** Compute a document-level confidence from
model signal, validation results, and required-field completeness. If it
clears the threshold, auto-accept; otherwise route to review.
- **FR-6 Persistence.** Append accepted records to a local SQLite database and
export to CSV. Move source files to `processed/` or `review/` accordingly.
- **FR-7 Logging.** Emit structured logs for every document: inputs, backend
used, decision, validation failures, and timings. Never crash the loop on a
single bad document — isolate, log, and continue.
- **FR-8 Web demo.** Accept one uploaded document, run the core pipeline, and
render fields, confidence, validation, and decision. Stateless.
- **FR-9 Backend selection.** The model backend is chosen by configuration at
startup with no code change (Gemini free tier or local Ollama).
- **FR-10 Evaluation.** A harness runs the pipeline over a labelled dataset and
reports field-level precision, recall, and F1, plus document-level routing
statistics.
## 7. Non-functional requirements
- **NFR-1 Cost.** Zero spend for development and demo. Local model = no quota;
hosted model = free tier only.
- **NFR-2 Privacy.** Free hosted backends may use inputs for training; the
public demo must process only synthetic/public documents. This must be
stated in the demo UI. Sensitive data is handled only via the local backend.
- **NFR-3 Swappability.** Adding or replacing a backend requires implementing
one interface and changing config — nothing else.
- **NFR-4 Robustness.** A malformed or unreadable document produces a logged
failure and a review routing, never a crash.
- **NFR-5 Reproducibility.** Pinned dependencies; deterministic config;
documented setup that runs from a clean checkout.
- **NFR-6 Portability.** The core pipeline is independent of both entry points
and of any specific host.
## 8. Success criteria
The project is successful when:
- The agent processes a mixed batch (native PDFs + scans + phone photos)
end-to-end with no per-document intervention, persisting accepted records and
correctly diverting uncertain ones to review.
- On a held-out labelled set, **auto-accept precision on the critical fields
(`total`, `tax`, `invoice_number`) is ≥ 0.98**, with recall reported at that
operating point. (Rationale and method in the data spec.)
- A public demo URL processes an uploaded document of each modality and
displays a correct, validated result.
- Swapping between the Gemini and Ollama backends requires only a config
change.
## 9. Key assumptions
- Documents are predominantly English. Multilingual handling is best-effort.
- Volume during development is low (tens to low hundreds of documents), well
within free-tier limits.
- The operator's local machine or chosen free host can run lightweight Python
continuously; the model itself runs locally (Ollama) or via free API.
- Free-tier quotas and free hosting behaviour (idle sleep, CPU-only) are
acceptable for a portfolio demo.
## 10. Glossary
- **Auto-accept:** a document whose confidence clears the threshold and whose
record is persisted without human review.
- **Review:** a document routed to a human because confidence is below
threshold or a hard validation rule failed.
- **Critical fields:** fields where a confidently-wrong value is most costly —
`total`, `tax`, `invoice_number`.
- **Backend:** an implementation of the model interface that turns a document
into structured fields.
- **Core pipeline:** the host- and entry-point-independent function that takes
a document and returns an extraction result.