Reproduce
REPRODUCE — Cash Recovery Engine
Everything is deterministic (seeded) and dependency-free. Node 18+ only.
1. Reproduce the verified numbers
cd delivery-package/cash-recovery-engine
node verify.mjs
Expected: Verification PASS: 13/13 checks passed (100%). The suite writes verification-report.json and verification-report.md. Key figures (seeds fixed at history=7, test=101, eval capacity=200h):
| Metric | Expected value |
|---|---|
| Self-cure AUC | 0.8173 |
| Calibration ECE / Brier | 0.018 / 0.1588 |
| Engine cash | $1,665,446 |
| FIFO / Largest / Random cash | $565,742 / $733,603 / $454,269 |
| Skill vs strongest baseline | +127.0% |
| Lift vs FIFO | 2.94× |
| Movable-cash ceiling / capture | $3,417,896 / 48.7% |
2. Reproduce the demo deliverables
node run.mjs
Writes reports/collections-worklist.csv, reports/engine-output.json, reports/executive-summary.md, and public/ledger.js (the web-tool snapshot). Demo headline (seeds history=7, open=23, capacity=80h): open AR $19,011,646 / 900 invoices → 61-invoice worklist in 80h → projected $524,242 accelerated (2.76% of AR).
3. Reproduce the proof package
From the repo root:
node tools/forge-proof.mjs --outcome delivery-package/cash-recovery-engine \
--verify "node verify.mjs" --report verification-report.json
4. Verify file integrity (checksums)
node tools/forge-proof-verify.mjs --outcome delivery-package/cash-recovery-engine
5. What controls the numbers
- Seeds:
verify.mjsuses history seed 7, test seed 101;run.mjsuses history
seed 7, open seed 23. Change a seed → different (but internally consistent) numbers.
- The synthetic world:
src/synth.mjs(coefficients, uplift shape, effort
model). Editing it changes every reported figure — it is the benchmark.
- Model hyperparameters:
{ l2: 1.0, lr: 0.5, iters: 400 }inverify.mjs,
run.mjs, and src/engine.mjs.
6. Reproduce on real data
Place data/official/history.csv and data/official/open.csv (schema in run-deploy-instructions.md) and re-run node verify.mjs. An officialBenchmark block appears and the official control-AUC check runs on your data.