# Six checks before a CRE output reaches a workbook

**Synthetic inputs and deterministic checks, authored by NextAutomation.** This is a runnable extension of our existing source-to-output kit. No model, document-extraction service or customer workflow was tested. The seeded mistakes are constructed review cases, not observed model errors or an accuracy sample.

Inspect [the actual local result](RESULTS.md), [machine-readable cases](results.json) and the [expected workbook import](expected-workbook-import.csv). Download the [complete portable review lab](cre-handoff-review-lab.zip) to reproduce it offline. Its frozen fixture is the existing fictional kit, included under `fixture/` with source records, calculations and expected answers.

## What the lab tests

Eight output cases use the same three fictional properties: two clean controls and six seeded error cases. The checker compares stable property/source IDs, documented roles, known and unknown values, and selected financial fields against the source-derived fixture reference. Reordering the same records or equivalent decimal formatting remains valid.

| Seeded error | Review question |
|---|---|
| Stale assessor substituted for later deed grantee | Which supplied record supports the entity attached to the property? |
| Manager promoted to beneficial owner | Does the record establish this role, or is ownership still unknown? |
| Missing NOI replaced with zero | Was financial evidence actually supplied? |
| Capex subtracted in NOI | Are operating expenses and capital spending kept separate? |
| Vacancy deducted a second time | Is occupied rent already net of the vacant units? |
| Source ID removed | Can the next reviewer trace the proposed value to its source? |

The reference preserves T12 NOI of $180,000, capital expenditure of $24,000 and assumed annual debt service of $144,000 as separate fields for fictional Parcel A. The rent-roll snapshot and T12 retain separate measures. Parcel C's missing financials remain unknown. These figures come from this fixture; they are not a valuation or customer result.

## Reproduce

Python3.10+ standard library only. Extract the ZIP into a new empty directory. No network, account, API key or installation is required.

```sh
python3 -m unittest discover -s tests -v
python3 evaluate.py candidates/control-original.json
python3 evaluate.py candidates/capex-in-noi.json
```

The clean control returns `accepted_by_fixture_contract` and exit0. The seeded capex case returns `blocked_for_review` with `financial_or_period_mismatch` and exit1. Malformed input fails closed. The checker reads inputs and prints a disposition; it never sends messages, updates a workbook, connects to a CRM or approves an investment.

`MANIFEST.json` lists the files and hashes. The reference calculations are verified from the frozen CSV inputs before a candidate is checked. Tests also exercise duplicate identities, unknown values, source removal and malformed numbers. The expected CSV is an example import contract: `UNKNOWN` is explicit, not an empty cell or zero. A real integration needs the firm's own field mapping, permissions, source validation and acceptance rules.

## Apply this to your workflow

Bring a permitted sample, the output fields your team uses and its review rules. Agree the inputs, source references, exception handling and reviewer acceptance before connecting an export to your own model or CRM. The fixture demonstrates these specific checks only; it does not measure extraction accuracy, human review speed, source coverage or investment quality.

[Explore custom underwriting](https://nextautomation.us/solutions/underwriting) · [Explore sourcing](https://nextautomation.us/solutions/off-market-sourcing)
