Skip to main content
CFDLAcademy
All chapters

Part 5 · Reference · Chapter 27 of 28

Appendix B: CRE pack term tables

The CRE pack's contract types, one table each: the terms each type declares, which are required, what the defaults are, and what each means, followed by the streams the lowering emits and their categories, which is what statements and NOI are built from. "One of" names a group: state at least one term of it. A term marked Also declared by the master type is part of the type's roster through the master it refines; a combination no rule of the pack lowers is refused (E1385). Amount conventions: *_year terms are annual and divide by the model's periods per year; escalations step on term anniversaries. Every contract is written on entity <ref>, the subject that owns its cash. The pack's own reference page at cfdl.dev is normative if the two ever disagree, and the lookup tool returns the same rosters for any pack.

Development

cre.budget_line{.<id>} → cre.budget.<subject>.spend (investing.capital.construction, outflow), cre.budget.<subject>.retainage_release (investing.capital.construction, outflow) and cre.budget_retained.<subject>.held (an accrual on the development's retainage account). One line of a development budget; a total spreads over its profile (level, s_curve, front_loaded, back_loaded).

TermRequiredDefaultMeaning
amountone of amount, amount_year, total—The line's spend per period, as a number or an expression — a published schedule read from a series-shaped assumption, or a formula over the period
amount_yearone of amount, amount_year, total—The line's spend per year, spread by the calendar
growth_rateno—Annual growth; may hold an expression
totalone of amount, amount_year, total—The whole cost, spent over the term on profile
profilenolevelHow total is spent over the term's n periods, period e from 0: level (1/n each), s_curve (F((e+1)/n) − F(e/n), F(x) = x²(3 − 2x)), front_loaded (2(n − e)/(n(n + 1))), back_loaded (2(e + 1)/(n(n + 1)))
contingency_pctno0Contingency, as a share added to the line's spend
retainage_pctno0The share of each period's spend held back from the contractor and released in one payment in the term's last period

cre.equity_commitment{.<id>} → cre.equity.<subject>.contribution (financing.equity.contribution, inflow), raising the holder's capital account on the subject. Its distributions are one line the model's waterfall names, pay for contract "cre.equity_commitment.*" line distribution; the interest contributes the steps <id>_preferred, <id>_promote and <id>_residual, and publishes irr, multiple and, each period, cash_on_cash.

TermRequiredDefaultMeaning
commitmentyes—The amount committed
shareyes—Share
preferred_returnno0Annual preferred return on the interest's capital
fundingnofirstHow the commitment is funded: first (the default) calls the whole of each period's budget cost until the commitment is spent, and debt funds the rest
capital_accountno—The declared account the holder's contributions move, where the model keeps the holder's capital itself — a partner's capital account it owns, which the partner's return folds and its distribution steps read
shortfall_accountno—The account holding the venture's cash, which its distributions draw from: where it closes a period below zero, the holder funds share of the shortfall the next period, into its capital account, beyond commitment (cre.equity.<subject>.shortfall.<id>.call)
seniorityno—The interest's rank in the priority of distributions, 1 the most senior: preferred equity at 1 is paid its capital and preferred return before the common
compoundingnoannualHow the preferred return accrues: annual (the default, the effective annual rate, so the holder's IRR is the rate), monthly (the rate over twelve, compounded monthly) or simple (on unreturned capital, not on accrued return)
preferred_fromno1900-01The month the preferred return starts to accrue, "2018-04": the commencement date a venture agreement states, so land contributed at formation earns no return until the build begins
promote_onno—The interest whose return the promote's hurdles measure, by name: promote_on = cre.equity_commitment.investor
promote_accountno—The declared account the promote is paid into, one the promote's holder owns, so its return counts it
hurdle_basisno—What the hurdles measure: irr (the default, the measured interest's return) or multiple (its distributions over its contributions)
hurdle_1no0The first hurdle: the measured interest's IRR (or multiple) up to which promote_1 is paid
promote_1no—The share of the distributions to the promote's holder until the measured interest reaches hurdle_1
hurdle_2no0The second hurdle: the measured interest's IRR (or multiple) up to which promote_2 is paid
promote_2no—The share of the distributions to the promote's holder until the measured interest reaches hurdle_2
hurdle_3no0The third hurdle: the measured interest's IRR (or multiple) up to which promote_3 is paid
promote_3no—The share of the distributions to the promote's holder until the measured interest reaches hurdle_3
promote_residualno—The promote's share of the distributions above the last hurdle
catch_upno—After the preferred return, the share of the distributions to the promote's holder until it has promote_1 of the profit distributed: 1 is a full catch-up

cre.sponsor_fee{.<id>} → by basis: cre.fee.acquisition (investing.acquisition.costs), cre.budget.<subject>.fee for development or construction management (investing.capital.construction), cre.fee.asset_management and cre.fee.fund_management (financing.equity.fees), cre.fee.disposition (investing.disposal.selling_costs).

TermRequiredDefaultMeaning
feeone of fee, fee_year, rate—Fee per period
fee_yearone of fee, fee_year, rate—Annual fee
escalationno—Annual rent escalation
fee_accountno—The declared account the fee is paid into, one the sponsor owns, so its return counts it
basisno—What the fee is struck on: acquisition (the purchase price, at the term's start), development or construction_management (base, the development cost, spread over the term and paid as a budget line), asset_management (the equity contributed, a year), disposition (the sale's gross value) or fund_management (base, the committed capital, a year)
rateone of fee, fee_year, rate—The fee as a share of its basis
baseno—The amount a development, construction management or fund management fee is struck on

cre.construction_loan{.<id>} → cre.construction.loan_draw (financing.debt.proceeds), cre.construction.interest (financing.debt.service), cre.construction.interest_draw (financing.debt.proceeds, with interest = "reserve"), cre.construction.interest_accrued (an accrual, with interest = "rolled_up"), cre.construction.fee (financing.debt.fees), cre.construction.principal (financing.debt.principal, the balloon) and cre.construction.prepayment (financing.debt.prepayment, from prepay_from). It opens a balance account and binds the cre.construction_loan machine.

TermRequiredDefaultMeaning
principalno—Loan amount
commitmentyes—The facility's commitment: the most it lends, interest reserve and rolled-up interest included
interest_rateyes—Nominal annual rate on the drawn balance
indexno—Floating rate: a series-shaped assumption
marginno—Spread over the index
rate_floorno—Floor on the floating rate
rate_capno—Cap on the floating rate
day_countno—Interest accrual basis
amortization_day_countno—The basis the payment is struck on
payment_frequencyno—Payment rhythm; the model calendar by default
amortization_monthsno—Amortization term; strikes the payment
interest_only_monthsno—Interest-only months before amortization
funded_at_closeno—true draws the principal at the term start; false, a loan outstanding when the model begins, opens at it
balloon_at_maturitynofalsetrue pays the balance as principal at maturity
make_whole_rateno—Rate a make-whole discounts the remaining payments at
make_whole_floorno—Least make-whole premium, as a share of the amount repaid
draw_monthsno—The availability period: the facility draws for this many months from the term's start, then pays interest only
interestnopaidHow interest is met: paid (the default) by the borrower each period
prepay_fromno—The proceeds that repay the loan as they arrive, a selector over the model's streams ("cre.proceeds.*"): unit closings under release provisions, a sale, a refinance
fee_pctno—An origination fee, as a share of the commitment, paid at the term's start

Also declared by the master type: draw, amortization.

Operations

cre.revenue_line{.<id>} → cre.revenue.line{.<id>} (operating.revenue.other, inflow).

TermRequiredDefaultMeaning
amountone of amount, amount_year0Amount per period
amount_yearone of amount, amount_year0Annual amount
growth_rateno0Annual growth; may hold an expression

cre.opex_line{.<id>} → cre.opex.line{.<id>} (operating.expense.opex, outflow). Instanced per expense for an itemized schedule; the growth term is growth_rate.

TermRequiredDefaultMeaning
amountone of amount, amount_year0Amount per period
amount_yearone of amount, amount_year0Annual amount
growth_rateno0Annual growth; may hold an expression
pct_fixedno1Share of the expense that is fixed
occupancyno1Occupancy the variable share scales with

cre.vacancy_loss{.<id>} → cre.vacancy.loss{.<id>} (operating.deduction.vacancy, outflow). Apply over stabilized operations only — during lease-up, vacancy is already in the ramp.

TermRequiredDefaultMeaning
amountno—Amount per period
amount_yearno—Annual amount
growth_rateno—Annual growth; may hold an expression
rateyes—Vacancy and credit loss as a fraction of potential gross revenue
potential_gross_yearyes—Potential gross revenue per year the rate is applied to

cre.property_tax{.<id>} → cre.opex.line.property_tax, .abatement and .pilot (operating.expense.opex), and the non-cash series cre.property_tax.accrued, .abated and .increment. It opens payable and increment accounts.

TermRequiredDefaultMeaning
tax_rateone of tax_rate, amount0The tax rate on the assessed value: a mill rate of 12 is 0.012
amountone of tax_rate, amount0Amount per period
basisno0The assessed value, where it is stated: a number, the purchase price, or an expression (a phase-in, a published series)
assessmentnostatedHow the value is assessed: stated (the default, basis) or income (the NOI before property tax over assessment_cap_rate plus the effective tax rate, reassessed every reassess_every_months)
assessment_growthno0The stated assessment's growth each tax year: a cap such as 2% a year where the law limits it
assessment_cap_rateno—The income approach's cap rate, before it is loaded with the effective tax rate
reassess_every_monthsno12How often the income approach reassesses
assessment_growth_capnononeThe most an income-approach reassessment may rise each year, where the law caps it
assessed_pct_of_valueno1The assessment ratio: the share of the value that is assessed
abatement_pctno—The share of the tax abated
abatement_yearsno0Tax years the full abatement runs from the term's start
abatement_phase_out_yearsno0Tax years the abatement then steps down over, evenly to zero
pilot_yearno—A payment in lieu of taxes, a year, paid while the abatement runs
pilot_growthno0The payment in lieu of taxes' growth each tax year
installments_per_yearno0How many installments the tax is paid in a year
in_arrears_monthsno0Months after a period's tax accrues that it is paid
base_valueno—A tax increment financing district's frozen base: the tax on the assessed value above it is the increment a TIF pays from

cre.incentive{.<id>} → cre.incentive.support: investing.capital.incentive, below NOI, or operating.revenue.subsidy with nature = "rental_subsidy". It opens a remaining account.

TermRequiredDefaultMeaning
amountone of amount, amount_year, target, share0Amount per period
amount_yearone of amount, amount_year, target, share0Annual amount
targetone of amount, amount_year, target, share—The amount a top-up brings basis to
capnononeThe most the incentive pays
shareone of amount, amount_year, target, share—The share of basis the incentive pays: 0.75 of a tax increment
naturenocapitalWhat the support is: capital (the default, below NOI: a TIF, a grant, a one-off subsidy) or rental_subsidy (rent an agency pays for a unit, in revenue)

Also declared by the master type: basis.

cre.affordable_covenant{.<id>} → cre.affordable.monitoring_fee (operating.expense.opex), and the field affordable_rent_limit on its subject, which the restricted units' lease reads, for the covenant's term.

TermRequiredDefaultMeaning
feeone of fee, fee_year0Fee per period
fee_yearone of fee, fee_year0Annual fee
escalationno—Annual rent escalation
fee_accountno—The account the fee is paid into
restricted_unitsyes—The units whose rent is restricted
rent_limit_pct_of_amiyes—The income band the rent limit is set at, as a share of area median income: 0.60 for 60% AMI
ami_yearyes—The area median income for the household size the units are rented to, a year
ami_growthno0The area median income's growth each year
rent_burdenno0.30The share of income the rent limit is set at
utility_allowanceno0The utility allowance, a month per unit, which the rent limit is net of
market_rent_per_unit_monthno—The restricted units' market rent, a month per unit, which the gap to the limit is measured from

Leases

cre.lease{.<id>} → cre.lease.base_rent{.<id>} (operating.revenue.base_rent, inflow), and with a ramp the field occupancy{_<id>} on its subject. The aggregate lease: a building, or one use of it, let as one thing, leasing up from its term's start. free_rent_months abates the rent of the term's first months, booked as cre.lease.abatement{.<id>} (operating.deduction.abatement, outflow) beside the gross base rent.

TermRequiredDefaultMeaning
rentone of rent, rent_year, rent_psf, rent_per_unit_month0Rent per period
rent_yearone of rent, rent_year, rent_psf, rent_per_unit_month0Annual rent
escalationno0Annual rent escalation
free_rent_monthsno—Months of free rent at the term's start, at least 0; a fraction of a month abates that share of the next month's rent
areano—The premises the per-foot figures apply to: a rent, TI or stop per foot, or a market set's per-foot rents
phase_in_monthsno0A tenant taking its space in stages: base rent ramps straight-line over these months from the lease start
occupancyno1The building's occupancy, an expression, usually the asset's derived field asset.<name>.occupancy
rent_psfone of rent, rent_year, rent_psf, rent_per_unit_month—Base rent per square foot per year on the premises' area
rent_per_unit_monthone of rent, rent_year, rent_psf, rent_per_unit_month—Base rent per unit per month: on the building's units for cre.lease, per unit of count for cre.lease_unit
escalation_kindnostepHow the rent escalates: "step" (by escalation at each reset, the default), "index" (by the index's change since the last reset) or "collar" (the index's change held to between escalation_floor and escalation_cap)
escalation_indexno—The index an "index" or "collar" escalation follows, a series assumption named as one: inputs.cpi
escalation_floornononeThe least a collar's reset moves the rent by, as a rate: 0.02 for 2%
escalation_capnononeThe most a collar's reset moves the rent by, as a rate
escalation_every_monthsno12Months between escalations, from the term's start
lease_up_monthsno0Months from the term start to stabilization
stabilized_occupancyno1Where occupancy settles once the lease-up is done
absorption_shapenostraight_lineThe path occupancy takes between the term start and stabilization: "straight_line" (the default) or "s_curve" (slow, then fast, then slow)
unitsno—How many units a per-unit rent is on

cre.lease_unit.<id> → cre.unit.base_rent.<id> (operating.revenue.base_rent), cre.unit.abatement.<id> (operating.deduction.abatement), cre.unit.recoveries.<id> (operating.revenue.recovery), cre.unit.ti_lc.<id> (investing.capital.leasing), and the non-cash cre.unit.deposit_held.<id> and cre.unit.deposit_returned.<id> on its security_deposit account. On a market set, the unit's rollover streams cre.unit.rollover_rent.<subject>, cre.unit.rollover_abatement.<subject> and cre.unit.rollover_ti_lc.<subject>. It raises the event ended_early.

TermRequiredDefaultMeaning
rentone of rent, rent_year, rent_psf, rent_per_unit_month0Rent per period
rent_yearone of rent, rent_year, rent_psf, rent_per_unit_month0Base rent per year, spread by the calendar
escalationno0Annual rent escalation
free_rent_monthsno0Months of free rent at the term's start, at least 0; a fraction of a month abates that share of the next month's rent
areano—The premises the per-foot figures apply to: a rent, TI or stop per foot, or a market set's per-foot rents
phase_in_monthsno0A tenant taking its space in stages: base rent ramps straight-line over these months from the lease start
occupancyno1The building's occupancy, an expression, usually the asset's derived field asset.<name>.occupancy
rent_psfone of rent, rent_year, rent_psf, rent_per_unit_month—Base rent per square foot per year on the premises' area
rent_per_unit_monthone of rent, rent_year, rent_psf, rent_per_unit_month—Base rent per unit per month: on the building's units for cre.lease, per unit of count for cre.lease_unit
escalation_kindnostepHow the rent escalates: "step" (by escalation at each reset, the default), "index" (by the index's change since the last reset) or "collar" (the index's change held to between escalation_floor and escalation_cap)
escalation_indexno—The index an "index" or "collar" escalation follows, a series assumption named as one: inputs.cpi
escalation_floornononeThe least a collar's reset moves the rent by, as a rate: 0.02 for 2%
escalation_capnononeThe most a collar's reset moves the rent by, as a rate
escalation_every_monthsno12Months between escalations, from the term's start
market_leasingno—The market leasing set the unit rolls on at expiry, by name: market_leasing = inputs.retail_market
outcomenodrawThe outcome at a unit's expiry: "renew", "relet" or "vacate" as the scenario's decision, or "draw" (the default), a draw of the set's renewal_draw against renewal_probability, taken on each expiry
countno1How many like units this lease covers
opex_yearno0Recoverable operating expenses per year — the base the expense stop is measured against
opex_escalationno0Annual growth of the recoverable opex base
gross_up_factorno1Factor recoverable opex is grossed up by before the stop is applied, so a part-vacant building recovers as if full
expense_stop_yearno0Expense stop per year: the tenant reimburses recoverable opex above it, times its pro rata share
pro_rata_shareno0The tenant's share of recoverable opex above the stop, 0 to 1
ti_totalno0Tenant improvement allowance, paid at term start
lc_totalno0Leasing commissions, paid at term start
recoveriesno—The recovery structure: "gross" (none), "modified_gross" (all expenses above the stop), "net" (taxes and insurance) or "nnn" (all expenses)
recoverable_categoriesno—Which expenses are recoverable, where the structure's default does not hold: "taxes", "taxes_insurance" or "all"
recovery_poolno—The entity whose expenses are recovered, by path: asset.tower
expense_stop_psfno0Expense stop per square foot per year of the premises: the tenant pays its share above it
base_yearno—The base year: the stop is the recoverable expenses of that calendar year, and a CAM cap grows from them
cam_cap_pctnononeAnnual cap on the growth of recoverable expenses other than taxes and insurance, from the base year: 0.05 for 5%
gross_up_occupancyno0The occupancy variable expenses are grossed up to before the stop, where the building's occupancy is below it: 0.95
variable_shareno0The share of recoverable expenses that varies with occupancy, which the gross-up applies to
ti_psfno—Tenant improvement allowance per square foot of the premises, paid at the term's start
lc_pctno0Leasing commission as a share of the rent over the term, paid at the term's start
security_deposit_monthsno—The security deposit, in months of the first year's rent, held from the term's start and returned at its end

cre.rollover.<id> → cre.rollover.rent.<id> (operating.revenue.base_rent), cre.rollover.abatement.<id> (operating.deduction.abatement) and cre.rollover.ti_lc.<id> (investing.capital.leasing). The market-leasing assumption at an expiry: the window starts at expiry; during downtime only the renewal scenario pays; afterwards rent is the probability-weighted blend.

TermRequiredDefaultMeaning
rentone of rent, rent_year, area, renewal_rent_year, market_rent_year—Rent per period
rent_yearone of rent, rent_year, area, renewal_rent_year, market_rent_year—Annual rent
escalationno—Annual rent escalation
free_rent_monthsno—Months of free rent at the term's start, at least 0; a fraction of a month abates that share of the next month's rent
areaone of rent, rent_year, area, renewal_rent_year, market_rent_year—The space rolling, where the rollover names a market leasing set: rents, free rent, TI and commission are then the set's per-foot figures on it
market_leasingno—The market leasing set the space rolls on, by name: market_leasing = inputs.retail_market
renewal_probabilityyes—Probability the tenant renews at expiry
renewal_rent_yearone of rent, rent_year, area, renewal_rent_year, market_rent_year—Rent per year if the tenant renews — the clause's rent on the renewal branch
market_rent_yearone of rent, rent_year, area, renewal_rent_year, market_rent_year—Rent per year to a replacement tenant after downtime — the clause's rent on the re-let branch
downtime_monthsnothe set's; else 0Vacant months before a replacement tenant starts paying
market_escalationnothe set's; else 0Annual growth of market rent
renewal_ti_lcno0Tenant improvements and leasing commissions on renewal
new_ti_lcno0Tenant improvements and leasing commissions on a new lease

cre.spec_lease.<id> → cre.spec_lease.rent.<id>, .abatement.<id> and .ti_lc.<id>, and on a unit the unit's rollover streams. Space no tenant holds, let at market on a set after the set's downtime; it raises the event to_market.

TermRequiredDefaultMeaning
rentno—Rent per period
rent_yearno—Annual rent
escalationno—Annual rent escalation
free_rent_monthsno—Months of free rent at the term's start, at least 0; a fraction of a month abates that share of the next month's rent
areano—The premises the per-foot figures apply to: a rent, TI or stop per foot, or a market set's per-foot rents
market_leasingyes—The market leasing set the space is let on, by name: market_leasing = inputs.office_market
outcomenodrawThe outcome at each expiry after the first lease, on a unit, as on cre.lease_unit: "renew", "relet", "vacate" or "draw", the default

cre.percentage_rent.<id> and cre.percentage_rent_expected.<id> → cre.pct_rent.overage.<id> (operating.revenue.percentage_rent). Overage: max(0, sales − breakpoint) × pct, on one sales figure; the expected form takes the partial expectation over a quantile-shaped sales_year.

TermRequiredDefaultMeaning
rentno—Rent per period
rent_yearno—Annual rent
escalationno—Annual rent escalation
free_rent_monthsno—Months of free rent at the term's start, at least 0; a fraction of a month abates that share of the next month's rent
sales_yearyes—The tenant's sales per year in the first year of the clause: a number on cre.percentage_rent, a quantile-shaped assumption on cre.percentage_rent_expected
sales_growthno0Annual growth of sales
breakpoint_yearyes—Sales per year above which overage rent is due
overage_pctyes—Share of sales above the breakpoint paid as rent — the clause's rent, stated as a rate on sales

cre.ground_lease{.<id>} → cre.ground_lease.rent and cre.ground_lease.participation: operating.revenue.ground_rent for the fee owner, operating.expense.ground_rent for the leasehold (side).

TermRequiredDefaultMeaning
rentone of rent, rent_year0Rent per period
rent_yearone of rent, rent_year0Annual rent
escalationno0Annual rent escalation
free_rent_monthsno—Months of free rent at the term's start, at least 0; a fraction of a month abates that share of the next month's rent
sideyes—Which side of the lease the subject is: "fee" (it owns the land and receives the rent) or "leasehold" (it pays it)
reset_every_monthsnononeMonths between resets to a share of the land's value, from the term's start
reset_pctno0The share of the land's value the rent resets to, upward only: 0.06
land_valueno0The land's appraised value, unencumbered: a number or a series of appraisals, inputs.land_appraisal
participation_pctno—The share of the leasehold's effective gross income paid as rent beside the base, the month after it is earned
leaseholdno—The entity whose income the participation is on, by path

Capital

cre.reserve_funding{.<id>} → cre.reserve.deposit (investing.capital.reserve), raising its reserve account on the asset.

TermRequiredDefaultMeaning
amountno—Amount per period
amount_yearno—Annual amount
growth_rateno—Annual growth; may hold an expression
per_unit_yearone of per_unit_year, per_sf_year, pct_of_revenue—The deposit per unit per year, read against the asset's units — the multifamily form, $250 to $300 a unit
per_sf_yearone of per_unit_year, per_sf_year, pct_of_revenue—The deposit per square foot per year, read against the asset's rentable_area — the commercial form, $0.15 to $0.25 a foot
pct_of_revenueone of per_unit_year, per_sf_year, pct_of_revenue—The deposit as a share of the period's gross revenue — the FF&E form, 3% to 5%
capno—The balance at which deposits stop, where the agreement caps the reserve

cre.capex_program{.<id>} → cre.capex_program.spend (investing.capital.capex) and cre.reserve.release (investing.capital.reserve) from the reserve it names.

TermRequiredDefaultMeaning
amountone of amount, amount_year, total—Amount per period
amount_yearone of amount, amount_year, total—Annual amount
growth_rateno—Annual growth; may hold an expression
totalone of amount, amount_year, total—The whole cost, spent over the term on profile
profilenolevelHow total is spent over the term's n periods, period e from 0: level (1/n each), s_curve (F((e+1)/n) − F(e/n), F(x) = x²(3 − 2x)), front_loaded (2(n − e)/(n(n + 1))), back_loaded (2(e + 1)/(n(n + 1)))
reserveno—The reserve requirement the program draws from first, by name: a cre.reserve_funding contract

Debt

cre.permanent_debt{.<id>} → cre.debt.proceeds (financing.debt.proceeds), cre.debt.interest (financing.debt.interest_paid), cre.debt.principal (financing.debt.principal), cre.debt.prepayment_premium (financing.debt.prepayment_premium), cre.debt.reserve, .reserve_release and .trap_release (financing.debt.reserve), cre.debt.acceleration and cre.debt.takeout.<loan> (financing.debt.repayment), and the non-cash cre.debt.sweep_applied and .sweep_cleared. Accounts balance, dsra, trap and swept; steps <id>_trap and <id>_sweep; events covenant_breach, covenant_cure, covenant_cured and repaid; machine cre.property_loan. Per period it publishes metric.<loan>.dscr, .debt_yield and, with a value, .ltv.

TermRequiredDefaultMeaning
principalone of principal, commitment, draw, ltv_max, dscr_min, debt_yield_min—The loan amount
commitmentone of principal, commitment, draw, ltv_max, dscr_min, debt_yield_min—The amount committed
drawone of principal, commitment, draw, ltv_max, dscr_min, debt_yield_min—
interest_rateone of interest_rate, index0Nominal annual rate, when the rate is fixed
indexone of interest_rate, index0The index a floating rate resets off, with margin: a series-shaped assumption read each period, index = inputs.sofr
marginno0The spread over index
rate_floorno0The least the floating rate may be
rate_capno1The most the floating rate may be, where the note caps it
day_countno—Interest accrual basis
amortization_day_countno—The basis the payment is struck on
payment_frequencyno``Payment rhythm; the model calendar by default
amortization_monthsyes—Amortization term the level payment is struck on
interest_only_monthsno0Interest-only months before amortization
funded_at_closenotruetrue draws the principal at the term start; false, a loan outstanding when the model begins, opens at it
balloon_at_maturitynofalsetrue pays the balance as principal at maturity
make_whole_rateno0Rate a make-whole discounts the remaining payments at
make_whole_floorno0Least make-whole premium, as a share of the amount repaid
step_down_pctno0A prepayment fee as a share of the balance repaid: 0.03 is 3%
lockout_monthsno0Months from the term's start in which the loan may not be prepaid: a payoff inside them pays the make-whole at make_whole_rate, as a defeasance would cost
amortization_rateno0The fixed rate a floating loan's principal schedule is struck on, and its sizing constant: the industry's 30-year schedule at an assumed 6%
ltv_maxone of principal, commitment, draw, ltv_max, dscr_min, debt_yield_min—Sizing: the most the loan may be as a share of the value
dscr_minone of principal, commitment, draw, ltv_max, dscr_min, debt_yield_min—Sizing: the least NOI may be as a multiple of the amortizing debt service
debt_yield_minone of principal, commitment, draw, ltv_max, dscr_min, debt_yield_min—Sizing: the least NOI may be as a share of the loan
basisno—The NOI the loan is sized and valued on: "forward_noi" (the twelve months from funding, the default), "trailing_noi" (the twelve before) or "stated_noi" (noi)
noino—The underwritten NOI, where the basis is stated_noi
cap_rateno—The cap rate the loan values the property at, for loan-to-value
valueno—The value loan-to-value is measured on, where it is stated: an appraisal, or the price at an acquisition
pays_offno—A take-out: the loan this loan's proceeds repay at its term's start, by name: pays_off = cre.construction_loan.senior
covenant_dscr_minno—Covenant: the least trailing NOI may be as a multiple of trailing debt service
covenant_ltv_maxno—Covenant: the most the balance may be as a share of the value
covenant_debt_yield_minno—Covenant: the least trailing NOI may be as a share of the balance
covenant_test_every_monthsno—How often the covenants are tested
on_breachno—What a failed test does: "cash_trap" (the default) traps the cash left after debt service, "sweep" pays it to principal, "default" accelerates the balance
cure_periodsno—Consecutive passing tests that end a breach
dsra_monthsno—A debt service reserve: months of debt service held from the proceeds at funding and released at repayment

Also declared by the master type: amortization.

cre.mezzanine{.<id>} → cre.debt.proceeds, .interest, .principal, .prepayment_premium and cre.debt.payoff.<loan>, repaid by the sale repaid_by names.

TermRequiredDefaultMeaning
principalone of principal, commitment, draw—The loan amount
commitmentone of principal, commitment, draw—The amount committed
drawone of principal, commitment, draw—
interest_rateone of interest_rate, index0Nominal annual rate, when the rate is fixed
indexone of interest_rate, index—The index a floating rate resets off, with margin: a series-shaped assumption read each period, index = inputs.sofr
marginno0The spread over index
rate_floorno0The least the floating rate may be
rate_capno1The most the floating rate may be, where the note caps it
day_countno—Interest accrual basis
amortization_day_countno—The basis the payment is struck on
payment_frequencyno``Payment rhythm; the model calendar by default
amortization_monthsno—Amortization term; strikes the payment
interest_only_monthsno0Interest-only months before amortization
funded_at_closenotruetrue draws the principal at the term start; false, a loan outstanding when the model begins, opens at it
balloon_at_maturitynofalsetrue pays the balance as principal at maturity
make_whole_rateno0Rate a make-whole discounts the remaining payments at
make_whole_floorno0Least make-whole premium, as a share of the amount repaid
step_down_pctno0A prepayment fee as a share of the balance repaid: 0.03 is 3%
lockout_monthsno0Months from the term's start in which the loan may not be prepaid: a payoff inside them pays the make-whole at make_whole_rate, as a defeasance would cost
repaid_byno—The sale or take-out that repays it, by name: repaid_by = cre.exit.sale

Also declared by the master type: amortization.

cre.interest_rate_cap{.<id>} → cre.rate_cap.premium (financing.debt.fees) and cre.rate_cap.settlement (financing.debt.hedge), which offsets interest in debt service.

TermRequiredDefaultMeaning
notionalyes—
referenceyes—
strikeyes—The rate above which the cap pays
premiumno—What the cap costs, paid at its term's start

Also declared by the master type: fixed_rate.

cre.mortgage_insurance{.<id>} → cre.mortgage_insurance.premium (financing.debt.mortgage_insurance). Not debt service; domain.cre.debt_service includes it.

TermRequiredDefaultMeaning
premiumno0Premium paid
premium_rateyes—Annual premium as a rate on coverage — HUD's 0.45% of the original principal
coverageyes—The insured principal the rate applies to — the loan's original amount, flat, where the premium is struck on it

Also declared by the master type: deductible.

Transactions

cre.purchase{.<id>} → cre.purchase.price (investing.acquisition.purchase) and cre.purchase.closing_costs (investing.acquisition.costs), paid on the term's start.

TermRequiredDefaultMeaning
priceyes—Purchase price
closing_costs_pctno0Closing costs as a share of the price: transfer taxes, title, legal and due diligence

cre.exit{.<id>} → cre.exit.proceeds (investing.disposal.reversion) = the gross value, and cre.exit.selling_costs (investing.disposal.selling_costs) beside it; with pays_off, cre.debt.payoff.<loan> (financing.debt.repayment), repaying that loan's balance. basis is stated_noi (the default, income / cap_rate), forward_noi or trailing_noi (the NOI derived from the subject's modeled streams, the year after or before the sale; forward needs the projection to reach a year past the sale; an earlier sale closes the asset and values the year after it from the asset's own tail), or price (a stated value). It publishes the valuation as figures, metric.cre.exit.income, .cap_rate, .gross_value, .selling_costs and .net_value, and the subject's value every period, metric.asset.<name>.value. Every basis settles at the end of the sale period.

TermRequiredDefaultMeaning
selling_costsno0Costs of sale, a fraction of gross proceeds
cap_rateone of cap_rate, value—The capitalization rate the NOI of the basis is divided by: forward_noi, trailing_noi or stated_noi
valueone of cap_rate, value—The stated price, where the basis is price
incomeno—The NOI the cap rate is applied to, where the basis is stated_noi
basisnostated_noiWhat the value is struck on: "forward_noi" (the twelve months of NOI after the sale, over cap_rate), "trailing_noi" (the twelve months up to and including it), "stated_noi" (income over cap_rate, the default) or "price" (value)
shareno1The share of the asset sold, above 0 and at most 1
pays_offno—The loan the sale repays, by name: pays_off = cre.permanent_debt.senior

cre.unit_sales{.<id>} → cre.unit_sales.closings (investing.disposal.sale), .selling_costs (investing.disposal.selling_costs), .release (financing.debt.prepayment, to the loan release_to names), and the non-cash .deposits_held and .deposits_released on its deposits account. The building must be held for sale (E6080).

TermRequiredDefaultMeaning
selling_costsno0Costs of sale, a fraction of gross proceeds
unitsyes—How many units the sale closes
price_per_unitone of price_per_unit, gross_proceeds—The price of a unit at the sale's start
gross_proceedsone of price_per_unit, gross_proceeds—The other way: the closings' gross proceeds each period, stated, usually a recorded closings ledger as a curve (gross_proceeds = inputs.closings)
price_growthno0Annual growth of the price, stepped on the sale's anniversaries
pacenolevelHow the units close: "level" (evenly over the term, the default), "s_curve" (slow, then fast, then slow over the term), or units a month, a number or an expression such as inputs.monthly_closings
deposit_pctno—The buyer's deposit as a share of the price, held in the sale's deposits account from the sale's start and released at each closing
release_tono—The construction loan each closing repays a share of, by name: release_to = cre.construction_loan.senior
release_pctno1The share of each closing's price the lender releases the unit for, paid against the loan release_to names until it is repaid

Options

A lease's or a loan's rights are option declarations written on it, option <name> on contract <contract> type <Type> { … }. CRE.Option.Surrender is abstract: it is the master of termination and contraction, and is not declared directly.

optiontermson exercise
CRE.Option.Renewalrenewal_rent_year, renewal_term_months, renewal_ti_lcpays -renewal_ti_lc as leasing cost; the renewal lease opens at the entry its action writes
CRE.Option.Terminationfee, notice_monthspays fee; the lease ends notice_months later
CRE.Option.Contractionfee, sharepays fee; the lease's lines fall by the share given back
CRE.Option.Expansionunit, ti_totalpays -ti_total; the unit it names is let
CRE.Option.Extensionextension_months, fee_pctextends a loan's maturity by extension_months for fee_pct of its balance

Each also declares strike through its master. A model option that states its own payoff or actions replaces the pack's.

The market leasing set

CRE.Reference.MarketLeasing is a set, stated once with a set-shaped assume and read by cre.lease_unit, cre.rollover and cre.spec_lease through market_leasing = inputs.<set>. It states no defaults: a field the set leaves out has no value to read.

fieldunitboundmeaning
market_rent_psfUSD/sf/yrat least 0Face rent a new lease strikes at today
market_escalationratioat least -1Annual growth in the market rent
renewal_probabilityratio0 to 1The share of expiring leases that renew rather than vacating
downtime_monthsmonthsat least 0Months the space sits empty between a tenant leaving and the next one paying
new.term_monthsmonthsat least 1Length of a lease to a new tenant
renewal.term_monthsmonthsat least 1Length of a renewal
new.ti_psfUSD/sfat least 0Tenant improvement allowance for a new tenant
renewal.ti_psfUSD/sfat least 0Tenant improvement allowance on a renewal, normally the smaller of the two
new.lc_pctratio0 to 1Leasing commission on a new lease, as a share of the rent over its term
renewal.lc_pctratio0 to 1Leasing commission on a renewal
new.free_rent_monthsmonthsat least 0Months of free rent granted to a new tenant, a fraction of a month among them
renewal.free_rent_monthsmonthsat least 0Months of free rent granted on a renewal, a fraction of a month among them
renewal.rent_shareratioabove 0What a renewal strikes at, as a share of market rent
renewal_drawratio0 to 1The draw a unit's expiry takes against renewal_probability: a distribution on 0 to 1, renewal_draw ~ Uniform(min=0, max=1)

What the pack publishes

Statements: operating (by period), operating_annual (by year) and sources_and_uses. Slices: capitalization, unlevered and levered; the last two publish an IRR and a multiple. Metrics: domain.cre.noi, debt_service, dscr, leasing_costs, expense_ratio, total_cost, equity_contributed, ltc, yield_on_cost and cash_on_cash_year_one. Lifecycles: cre.property on CRE.Asset.RealProperty, cre.unit on CRE.Asset.Unit, cre.holding on CRE.Container.Portfolio, cre.property_loan on the permanent loan and cre.construction_loan on the construction loan.

Reading a term table like a reviewer

Three habits, in closing. Requireds are the pack's floor, not the deal's. A lease can satisfy the table and still misstate your deal. The table tells you what the pack checks; chapter 19 told you what to do when your deal says more. Defaults are claims — escalation = 0 unstated is still an escalation assumption, visible only here; state terms you relied on even when they equal the default. Categories are where the money reports — the parenthesized category on each stream is what NOI, DSCR, and the statements aggregate; when a metric looks wrong, the category trail is the four-step descent's first stop.