tax-doc-classifier
Classifies tax PDF pages into 261 IRS forms and 7 page kinds with one Jev request per page and a confidence gate.
Overview
tax-doc-classifier is a TypeScript library open-sourced from a production tax-document pipeline. Each page's text goes to Jev in one request, which returns a probability over 261 IRS forms and 7 page kinds. No model is trained and nothing is hosted: the classifier is a JSON file of form descriptions generated from the IRS's own PDFs, plus Jev as the decision model. Results include the form, page kind, a confidence equal to the minimum over steps and a gated flag.
The authors report that Jev classifies their whole corpus at about $0.001 per page, 34 times cheaper and 6 times faster than the LLM pipeline it replaced. On their strict scoring, where low confidence counts as an error, the README reports zero errors on 314 filled TaxCalcBench pages and 38 low-confidence but not wrong pages out of 753 blank IRS forms. It is document triage, not tax advice; scanned pages need OCR, and users are told to calibrate the gate on their own pages.
What the decision model decides
| Type | Question | Answers |
|---|---|---|
| Choice | Which IRS form is this page from? | 261 IRS form labels |
| Choice | What kind of page is this? | 7 page kinds, e.g. form_page |
How it works
- Extract a page's text lines with pdftotext.
- Send the text and form descriptions to Jev.
- Receive form and page-kind probabilities.
- Act if confidence is at or above the gate (0.95 in the examples); otherwise fall back to existing handling.
Strengths
- No training or hosting; behaviour defined by a JSON criteria file.
- Reported large cost and speed gains over an LLM classifier.
- Reproducible evaluation with pnpm eval.
Caveats
- Text-bearing PDFs only; scanned pages need OCR.
- Calibration is specific to the reported corpora.
- Requires a TypeSafe API key.
Getting started
Install Node 20+, pnpm and poppler, set TYPESAFE_API_KEY, then pnpm install && pnpm test.At a glance
- Type
- Project
- Status
- production
- Language
- TypeScript
- Runtime
- Node library
- Has code
- yes
- Has tests
- yes
- License
- Apache-2.0
Use cases and integrations
How curated lists describe it
Tax-page classifier open-sourced from a production pipeline: one Jev request per page picks among 261 IRS forms and 7 page kinds from a JSON file of form descriptions, at about $0.001 per page
AnotiaWang/awesome-decision-modelsA tax-document page classifier that uses Jev to choose from predefined IRS form and page categories.
logicrw/awesome-jev-projectsTax document page classifier built on Jev decisions.
wh000wh000/awesome-jev-liveClassifies text-bearing PDF pages into IRS form and page-kind candidates with a confidence gate; document triage, not tax advice, and scanned pages need OCR.
cobanov/awesome-jevClassifies tax-document pages into IRS forms and page kinds with one Jev request per page, driven by a JSON file of form descriptions.
MrJev/awesome-jev
Frequently asked questions
What does Jev decide?
Which of 261 IRS forms and which of 7 page kinds a PDF page belongs to.
How accurate is it?
The README reports zero wrong answers on both its corpora, with 38 pages below the 0.95 confidence gate on blank forms.
Does it give tax advice?
No, it only classifies pages for document triage.
Related projects
Rust tool that asks Jev which PDF pages genuinely need OCR, extracting text pages locally and sending only the rest to OCR.
ProjectbetaRustDocker service that classifies the Paperless-ngx inbox with Jev (or local Clef via Ollama), setting confident fields and queueing the rest.
ProjectbetaDaily pipeline that reads Spain's official gazette with Jev, scoring relevance, tagging categories and picking a summary paragraph.
AppprototypeTypeScriptLibrary, CLI and app that classify PDFs, DOCX and PPTX with Jev and split document packets at predicted boundaries.
BenchmarkbetaPythonLocal library that turns an image into a transparent text state (OCR, boxes, labels) so Jev can decide over screenshots.
ProjectbetaPythonWindows office workbench with search, OCR and batch renaming, where Jev optionally helps pick extracted contract fields.
ProjectbetaRust