# REPRODUCE — Cash Recovery Engine

Everything is deterministic (seeded) and dependency-free. Node 18+ only.

## 1. Reproduce the verified numbers

```bash
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

```bash
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:

```bash
node tools/forge-proof.mjs --outcome delivery-package/cash-recovery-engine \
  --verify "node verify.mjs" --report verification-report.json
```

## 4. Verify file integrity (checksums)

```bash
node tools/forge-proof-verify.mjs --outcome delivery-package/cash-recovery-engine
```

## 5. What controls the numbers

- Seeds: `verify.mjs` uses history seed 7, test seed 101; `run.mjs` uses 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 }` in `verify.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.
