Triage taxonomy

Classification reference for incoming tax notices — the lookup layer the agent matches against

Total rows
Avg risk
Check-fault
Employer-fault
Category Reason Scope IRS code Fault Risk

Data schema

Nine entities across three functional layers — click any entity to see its purpose and relationships

Agent architecture

Four-layer system: intake sources → agent core → data layer → routing outputs

Intake layer
Raw notice arrives from any source
PDF / mail scan
OCR via Textract or Vision API → raw_text
Agency portal
Headless scrape or agency-provided API
API / webhook
Structured JSON from agency or partner system
Manual upload
Ops team uploads file to intake UI
Agent core — three sequential sub-agents
Each agent has a single job and writes to a specific schema table
Extraction agent
OCR + NLP → pulls EIN, agency, notice code, period, amount, deadline
Writes → notice
Classification agent
Semantic match vs taxonomy_ref — scores fault signal, risk, confidence
Writes → classification
Pattern agent
Queries notice_event for anomaly clusters — detects volume, fault shift, jurisdiction
Writes → pattern_signal
Data layer
Schema entities — append-only event log at center
notice
classification
notice_event
pattern_signal
resolution
Routing layer
Outputs based on confidence score, risk level, and fault signal
Auto-resolve
confidence ≥ 0.9, low-risk, clear fault
Human review
confidence < 0.75 — ops team queue
Employer notified
fault = employer — partner platform alert
Eng escalation
pattern_signal fired — ticket created

Notice lifecycle workflow

How a single notice moves from intake through classification, routing, pattern detection, and resolution

1
Notice received
Arrives via PDF/mail scan, agency portal, API webhook, or manual upload. Intake layer normalizes to raw_text.
intake
2
Extraction agent
LLM pass with constrained JSON schema prompt + few-shot examples. Pulls EIN, agency_code, notice_code, tax period, amount_due, response_deadline.
agentllmocr
3
Write → notice table
Validated fields written to notice. Status set to "new". First entry appended to notice_event audit log.
writenotice
4
Classification agent
Embeds notice text, semantically matches against taxonomy_ref. Scores category, reason_code, fault_signal, risk_score, and confidence_score.
agentembeddingtaxonomy
5
Write → classification
Classification record written with category, reason, fault signal, risk score, and confidence score.
writeclassification
6
Confidence check
Score ≥ 0.75 → proceed to fault routing. Score < 0.75 → drop to human review queue. Human override flows back into routing.
decisionthreshold: 0.75
7
Fault routing
Check → internal ops workflow. Employer → partner notification. Both → human split triage. Pattern signal also checked here — if active cluster exists, parallel eng escalation fires.
routingcheckemployer
8
Resolution action
Pay, abate, dispute, or notify employer. Deadline watch running throughout — escalates if response_deadline within 10 days and notice still open.
payabatedisputenotify
9
Write → resolution
Confirmed fault, amount paid/abated, outcome, days_to_resolve written. check_absorbed boolean set.
writeresolution
Feedback loop
resolution.confirmed_fault fed back into taxonomy_ref.default_fault over time. Improves agent's classification priors — confidence scores rise, human review volume drops.
learningfeedback

Extraction agent simulator

Select a sample notice to see how the agent parses raw text into structured schema fields

High confidence
Raw notice textPDF / OCR
Extracted fields
Confidence
JSON output → notice table row