2026 · Product, policy interpretation, engineering
Project SOR — Schedule of Reductions calculator
An open calculator for the OBBBA less-than-full-time Direct Loan reduction, built for financial aid offices and the students they serve.
- Audiences served
- 4
- Regression tests
- 89 passing
- Public endpoints
- V1 + V2
- Source-labelled fixtures
- psr-001…008
Problem
- The One Big Beautiful Bill Act changed annual Direct Loan limits and forced schools to apply a Schedule of Reductions for less-than-full-time enrollment for 2026-27.
- Every institution was rebuilding the same spreadsheet privately, with no shared reference, no citations, and no way to compare answers.
Constraints
- Parts of 2026-27 depend on rulemaking still in flight, so the tool has to be explicit about what is confirmed versus preliminary.
- It can never look like an award: no COD origination, no NSLDS records, no institutional approval.
- Staff and students need the same engine but opposite levels of detail.
What I shipped
- A staff calculator covering SAY/BBAY academic years, standard and optional terms, child terms, paid history, distribution models, and per-term disbursements.
- A student estimator with a plain-language step-by-step of exactly how the number was produced.
- A public REST API plus an MCP server so other systems and AI agents can run the same engine.
- A published source register, methodology document, and scenario-challenge process so anyone can dispute the math with citations.
Evidence
- Parity fixtures
- Department-derived scenarios encoded as fixtures with source IDs, including rounding edge cases.
- Version discipline
- Engine version, policy year, snapshot date, and release marker returned on every API response.
- Public contract
- OpenAPI 3.1 spec with a CI contract check to keep docs and behaviour aligned.
What I would do next
- Add a full NSLDS aggregate and lifetime-limit model so Grad PLUS and graduate aggregates can be reasoned about safely.
- Shareable estimate URLs so an advisor can send a student their exact scenario.