CRE: rent-regulated plaza
A five-year office acquisition and disposition from MIT's real estate finance course, valued on an unlevered before-tax cash flow with an exit at a stated cap rate.
Every number below is checked against an independent reference implementation on every commit — period by period, and on each metric, inside a declared tolerance. See benchmark methodology.
The case
A 30,000 rentable square foot office building with two suites, acquired and held for five years. The two suites sit at different expense stops, so recoveries differ between them; the stop resets to a new base year when a suite re-lets. Operating expenses vary with occupancy, rollover at expiry is probability-weighted, market rent spikes once during the hold, and the building is sold at ten times forward net operating income net of a 5% commission.
The reference
Problem Set 1 from MIT OpenCourseWare's real estate finance and investment course. It publishes the full pro forma table and the answer: a present value at 12% of $2,292,810.
Redistributable. Released under CC BY-NC-SA 4.0.
The source publishes both the working and the answer, so the case checks every intermediate line as well as the result.
Provenance. The expectations are taken from an independent published reference, cited above. The source is not committed with the case; a reader checks the asserted figures against the published document itself.
What it exercises
| Pack | cre |
| Contract types | cre.exit (forward NOI) |
| Declared | two contracts, nine streams |
| Language features | native streams alongside pack contracts |
| Conventions | two expense stops at different levels, a base-year stop reset on re-lease, occupancy-varying operating expenses, probability-weighted rollover, a forward-NOI reversion |
The result
Every pro forma line reproduces, and so does the published answer:
model.npv = 2,292,810.18 against the problem set's $2,292,810.
Asserted: twelve stream columns and net_cash_flow across the five-year table,
plus the present value and the undiscounted total.
The delta
The 18 cents is the source's rounding, not the engine's — the problem set states its answer to the dollar. Every per-period line agrees inside a one-cent tolerance.
Run configuration
{
"deterministic": {
"annual_discount_rate": 0.12
}
}Verified results
Checked period by period: 13 series across 5 periods — 65 values in all, each within ±0.01 of the reference.
cre.abatement.suite_200cre.capexcre.exit.proceedscre.exit.selling_costscre.opex.linecre.unit.base_rent.suite_100cre.unit.base_rent.suite_200cre.unit.recoveries.suite_100cre.unit.recoveries.suite_200cre.unit.ti_lc.suite_100cre.unit.ti_lc.suite_200cre.vacancy.lossnet_cash_flow
Summary metrics for the base run:
| Metric | Value | Tolerance |
|---|---|---|
model.npv | 2,292,810.18 | ±1 |
model.total | 3,852,483.13 | ±1 |