CFDL

CRE: rent-regulated plaza

A five-year office acquisition and disposition from MIT's real estate finance course, valued on a levered 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.

What it exercises

Packcre
Contract typescre.exit_forward
Declaredseven native streams
Language featuresnative streams alongside a pack contract
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: eight stream columns 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 periods65 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