For AbilityOne BD and pricing analysts: a transparent fair-market-price band builder that mirrors the U.S. AbilityOne Commission's official cost structure (Policy 51.601) with every number cited and every assumption named. Part of TENS HQ.
This tool produces a recommended-price band estimate, never "the FMP." Not affiliated with the U.S. AbilityOne Commission, SourceAmerica, or NIB.
A provenance-carrying cost ledger. The table below is real output, not a mock-up: it is printed by
python scripts/render_golden_ledger.py, which runs the shipped compute_services_ledger against
golden vector 1 — one Janitor FTE, $18.00/hr WD base rate, 2,000 hours, 10% overhead, 5% G&A, 5%
net proceeds, 3.75% Program Fee — and asserts every figure against
tests/golden/services_single_occupation.json before it will print anything. The same assertion
runs in CI as tests/test_golden_services.py.
| Line | Amount | Provenance | Basis |
|---|---|---|---|
| Direct labor | $36,000.00 | ESTIMATE | base WD rate x effective hours |
| H&W fringe | $11,100.00 | ESTIMATE | H&W 5.55 x effective hours (standard) |
| Other WD fringe (vacation/holiday/sick) | $0.00 | ESTIMATE | other WD fringe hourly x effective hours |
| Payroll burden | $3,289.00 | ESTIMATE | FICA/FUTA/SUTA/WC, annualized-per-employee approximation (ESTIMATE) |
| Materials | $0.00 | user-entered | analyst-entered direct materials |
| Other Direct Costs | $0.00 | user-entered | analyst-entered ODC (subcontracts/travel/equipment) |
| Overhead | $5,038.90 | ESTIMATE | overhead_rate x labor base |
| G&A | $2,771.40 | ESTIMATE | ga_rate x tci base |
| Net Proceeds | $2,909.97 | ESTIMATE | net_proceeds x total_cost base |
| Rehabilitation costs (job coaches, vocational counselors) — unallowable, excluded | $0.00 | observed | Procedure 51.610-01: rehab costs not allowable |
| Total NPA Compensation | $61,109.27 | ESTIMATE | sum of the lines above |
| Program Fee | $2,291.60 | ESTIMATE | on fee base $61,109.27 |
| Recommended FMP | $63,400.87 | ESTIMATE | Total NPA Compensation + Program Fee |
Rate caveat: that 3.75% Program Fee is primary-verified only through 2025-12-31 — fmp/constants.py
flags the extension to 2026-09-30 as "secondary-summarized, unconfirmed", and the app's Methodology &
Citations page shows the same note. Re-verify the ceiling before quoting a current-period number.
Every derived line is labeled ESTIMATE, every factual line carries its provenance, and the unallowable rehabilitation-cost line is shown at $0.00 rather than hidden. The app's export renders the same ledger as a cited markdown packet.
python -m venv .venv
.venv/Scripts/activate # Windows; source .venv/bin/activate on POSIX
pip install -r requirements.txt
pip install -e . --no-deps
streamlit run app/Home.pyOn Home, click "Load the seeded custodial-services demo" and walk Services → Band → Benchmarks
→ Export. See docs/DEMO.md for the 30-second script.
- Services buildup — the Policy 51.601 provenance-carrying ledger (labor → fringe → burden → indirects → Net Proceeds → Total NPA Compensation → Program Fee → Recommended FMP).
- Products buildup — the simplified Procedure 51.610-01 unit model (wholesale, not retail).
- Band — Low/Med/High as three named full-recompute scenarios, never a confidence interval.
- Option-year adjuster — the FAR 52.222-43 / 52.222-44 wage-delta pass-through (OH/G&A/profit frozen).
- Handoff — loads a typed
packet-fmp/v1file and re-verifies it into the same scenario manual entry builds. - Benchmarks — live-but-honestly-empty USAspending comparable obligations + CALC+ ceiling rates.
- Export — a cited markdown packet + a formula-injection-guarded CSV. Services lane only today; the products lane has no export yet.
- Limits & Governance / Methodology & Citations — every constant, citation, effective date, and convention in one auditable place.
pytest # golden vectors + property + AppTest + envelope + socket + citation guards
python scripts/validate.pyMoney is computed in Decimal (ROUND_HALF_UP, cents). Core modules are network-free (socket-guarded);
network happens only behind injectable client Protocols and is never called in CI.
I specified this app, cut it into gated slices, and verified each one; AI agents wrote most of the
line-level code. The gate is what CI runs on every push: ruff check ., ruff format --check .,
pytest, python scripts/validate.py, a headless Streamlit boot, and
pip-audit -r requirements.txt.
An adversarial review pass then read slices 1–4. ADR-001
(docs/adr/ADR-001-products-carve-semantics.md) comes out of it — "Deciders: FMP Calculator
maintainers (Slices 1–4 final review)" — and records what it found: the products buildup had reused
the services-lane carve-out, one scenario-level dollar amount, and subtracted it from every unit's
per-unit Total NPA Compensation, double-counting across lines and able to take a unit's fee base
negative with no visible error. The fix is not a clamp — the carve became a per-line field, and the
scenario-level one now raises there, because a fee base that quietly goes negative is worse than a
refusal to compute. tests/golden/products_multi_unit_carve.json locks it.
That pass fixed one side and declared the other correct, and it was not. A later credibility review
found the services lane still had no upper bound on the carve — a carve above Total NPA Compensation
returned a negative fee base, a negative Program Fee and a negative Recommended FMP in silence — and
found something worse next to it: because the packet-fmp contract deliberately carries no internal
rates, a loaded handoff defaulted overhead, G&A and net proceeds to 0.00 and printed the result as
Recommended FMP (ESTIMATE): $579,220.51, understated by the entire indirect load and labeled
exactly like a computed figure. ADR-002 (docs/adr/ADR-002-refuse-unset-indirect-rates.md) records
the fix: an unentered rate is None, not 0; every compute entry point and every render path
refuses and names what is missing; and the app finally has the numeric inputs three shipped strings
had been pointing at. An ESTIMATE label on an imputed zero is worse than no number, because it
reads as computed.
The app arrives in the log as one commit, so the slice boundaries are not visible there; its
Co-Authored-By trailer names Claude. The judgment calls — where the slices were cut, what to
refuse to compute, and running an adversarial pass at all — are the part worth evaluating.
MIT — see LICENSE.