The problem

When VA combines a veteran's disability ratings under 38 CFR 4.25, one rule is easy to get wrong: under 38 CFR 4.26, disabilities of both arms or both legs are combined first and 10% of that value is added, the bilateral factor. Which ratings belong in it can move the final rating by 10 points, and with it the monthly payment.

VA treats this as a real error class. Its rating quality-review checklist (M21-5) carries the error code "C2c-Misapplication of the bilateral factor". In December 2025 the Board of Veterans' Appeals found a bilateral factor improperly calculated and the combined rating went from 40% to 50% (BVA A25111179). The people who catch this are County Veterans Service Officers and accredited representatives, working through stacks of decision letters.

What Recheck does

Recheck is a caseload agent for those representatives. recheck sweep <folder> works through every .txt or .pdf decision letter unattended:

  1. Reads each evaluation, the stated combined rating and the line it came from (deterministic parser that refuses rather than half-reads a letter).
  2. Classifies each condition as an arm, a leg or neither. The rating schedule's own vocabulary is handled by a deterministic lexicon; only unfamiliar clinical names ("cubital tunnel syndrome") go to a model, in at most one structured-output call per letter, and the answer is validated before use.
  3. Reads sides from the letter's own words. The model is never asked for a side or a number.
  4. Decides whether anything unknown matters by running every possible answer through the rating engine. If they all give the same rating, nobody is asked.
  5. Asks a person only when the answer changes the rating, persists the question and exits. The representative answers later, from another process, and the graph resumes where it stopped.
  6. Applies 4.26 and 4.25 and reports NO DISCREPANCY, POTENTIAL DISCREPANCY (for human review, never "VA is wrong"), or UNDETERMINED, with the full arithmetic.

On the committed synthetic caseload of 24 letters: 13 no discrepancy, 8 potential discrepancies, 3 questions, 1 letter with an unknown fact that could not change the result, so nobody was asked.

How it uses Strands Agents

  • GraphBuilder with custom MultiAgentBase nodes: extract, classify, assess, compute; conditional edges gate computation on committed state.
  • Interrupts: the assess node returns a Strands Interrupt when a fact is material; FileSessionManager persists the graph so a different process resumes it.
  • Agent structured output for the one model judgment, with a strict schema, a confidence floor, a veto for limb vocabulary, one turn, a timeout and no Strands retry.
  • Hooks record which process ran each node, shown in the report.
  • A scripted Strands Model replays committed fixtures, so the whole workflow runs with no API key and no network.

Model execution and AWS

  • Live model run (local): Recheck's classifier was run live once through its Strands structured-output path against qwen2.5:3b served by Ollama on the build laptop. The model put both clinical names in the upper-extremity group; code applied the sides, the bilateral factor and the arithmetic, and the report gave 80%, POTENTIAL DISCREPANCY (shown in the video; output in docs/evidence/live-ollama-run.txt). One run on one letter: it shows the path works, not model accuracy.
  • Amazon Bedrock and AgentCore: Recheck's providers include Amazon Bedrock (via Strands' BedrockModel), and the repository ships deploy/agentcore/: a Bedrock AgentCore Runtime entrypoint (BedrockAgentCoreApp) that runs the same audit/resume pipeline with Bedrock, plus a CloudShell script that deploys and invokes it. Honest status: the entrypoint is tested locally through the zero-model path; it was not deployed and no Bedrock inference was run during the hackathon, because no AWS credentials were available on the build machine.

How it was verified

  • The engine matches all 684 published 38 CFR 4.25 Table I cells, the regulations' worked examples, published Board and Federal Register calculations, and an independent reading of 4.26 (0 mismatches over 485,370 generated evaluations).
  • 1,800+ tests pass on Python 3.12 and 3.10, including regression tests from a red team, a deep review in nine areas and a mutation run.
  • On 9,562 generated letters with known ground truth, the parser makes 0 silent misreads: every letter is read correctly, turned into a question, or refused.

Try it

git clone https://github.com/vbhure/recheck.git && cd recheck
python -m venv .venv
pip install -e ".[dev]"
python tools/demo.py

No API key, AWS account or network needed.

Limitations

Synthetic letters only; no real veteran data and no user study. No OCR. The parser refuses some ordinary wording rather than guess. Paired skeletal muscles are not modelled, and the decision date is not read. Not legal advice or a VA adjudication.

Built with

Python, Strands Agents SDK, Amazon Bedrock (provider), Amazon Bedrock AgentCore (deployment package), Ollama (local live run), pypdf, pytest. Built during the submission period with Claude Code as an AI coding assistant.

Built With

  • amazon-bedrock
  • amazon-bedrock-agentcore
  • ollama
  • pypdf
  • pytest
  • python
  • strands
Share this project:

Updates