Skip to main content
CFDL

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

Packcre
Contract typescre.exit (forward NOI)
Declaredtwo contracts, nine streams
Language featuresnative streams alongside pack contracts
Conventionstwo 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_200
  • cre.capex
  • cre.exit.proceeds
  • cre.exit.selling_costs
  • cre.opex.line
  • cre.unit.base_rent.suite_100
  • cre.unit.base_rent.suite_200
  • cre.unit.recoveries.suite_100
  • cre.unit.recoveries.suite_200
  • cre.unit.ti_lc.suite_100
  • cre.unit.ti_lc.suite_200
  • cre.vacancy.loss
  • net_cash_flow

Summary metrics for the base run:

MetricValueTolerance
model.npv2,292,810.18±1
model.total3,852,483.13±1