CFDL

CRE: retail strip with expense stops

A retail strip center with base-year expense gross-ups, percentage rent over a breakpoint, and staggered tenant rollover across a ten-year hold.

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 retail strip center held for seven years. An anchor tenant pays base rent plus percentage rent above a stated breakpoint; inline shops sit on net leases with staggered expiries. Operating expense recoveries run off a base-year stop that is grossed up to 95% occupancy, so the landlord recovers as though the center were nearly full even when it is not. The center is sold on forward net operating income.

The reference

Retail center valuation conventions — base-year gross-ups and percentage rent as practiced in institutional retail underwriting.

Not redistributable. The source cannot be published, so the reference is an independent recreation of its conventions, built separately from the model and compared against it period by period.

What it exercises

Packcre
Contract typescre.lease_unit (two instances), cre.percentage_rent, cre.vacancy_loss, cre.opex_line, cre.exit
Language featuresmultiple instances of one contract type
Conventionsa base-year expense stop with a 95% gross-up, percentage rent over a breakpoint, net leases, staggered rollover

A gross-up implemented as a flat recovery understates income in every year the center sits below the gross-up threshold.

The result

Present value 8,328,491.23, net operating income 4,012,080.73 and leasing costs 340,000.00.

Asserted: effective gross income, net operating income and net cash flow per period across 84 months, plus the three lifetime figures.

Percentage rent, the base-year gross-up and the recovery stop can each be wrong in offsetting ways that a lifetime NOI would not show, so assertion is per period.

The delta

None: every period agrees inside a one-cent tolerance across all 120 months.

Run configuration

{
  "deterministic": {
    "annual_discount_rate": 0.0775
  }
}

Verified results

Checked period by period: 3 series across 84 periods252 values in all, each within ±0.01 of the reference.

  • net_cash_flow
  • domain.cre.egi
  • domain.cre.noi

Summary metrics for the base run:

MetricValueTolerance
model.npv8,328,491.23±1
domain.cre.noi4,012,080.73±1
domain.cre.leasing_costs340,000±1