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).
| Term | Required | Default | Meaning |
|---|---|---|---|
amount | one 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_year | one of amount, amount_year, total | — | The line's spend per year, spread by the calendar |
growth_rate | no | — | Annual growth; may hold an expression |
total | one of amount, amount_year, total | — | The whole cost, spent over the term on profile |
profile | no | level | How 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_pct | no | 0 | Contingency, as a share added to the line's spend |
retainage_pct | no | 0 | The 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.
| Term | Required | Default | Meaning |
|---|---|---|---|
commitment | yes | — | The amount committed |
share | yes | — | Share |
preferred_return | no | 0 | Annual preferred return on the interest's capital |
funding | no | first | How 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_account | no | — | 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_account | no | — | 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) |
seniority | no | — | 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 |
compounding | no | annual | How 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_from | no | 1900-01 | The 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_on | no | — | The interest whose return the promote's hurdles measure, by name: promote_on = cre.equity_commitment.investor |
promote_account | no | — | The declared account the promote is paid into, one the promote's holder owns, so its return counts it |
hurdle_basis | no | — | What the hurdles measure: irr (the default, the measured interest's return) or multiple (its distributions over its contributions) |
hurdle_1 | no | 0 | The first hurdle: the measured interest's IRR (or multiple) up to which promote_1 is paid |
promote_1 | no | — | The share of the distributions to the promote's holder until the measured interest reaches hurdle_1 |
hurdle_2 | no | 0 | The second hurdle: the measured interest's IRR (or multiple) up to which promote_2 is paid |
promote_2 | no | — | The share of the distributions to the promote's holder until the measured interest reaches hurdle_2 |
hurdle_3 | no | 0 | The third hurdle: the measured interest's IRR (or multiple) up to which promote_3 is paid |
promote_3 | no | — | The share of the distributions to the promote's holder until the measured interest reaches hurdle_3 |
promote_residual | no | — | The promote's share of the distributions above the last hurdle |
catch_up | no | — | 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).
| Term | Required | Default | Meaning |
|---|---|---|---|
fee | one of fee, fee_year, rate | — | Fee per period |
fee_year | one of fee, fee_year, rate | — | Annual fee |
escalation | no | — | Annual rent escalation |
fee_account | no | — | The declared account the fee is paid into, one the sponsor owns, so its return counts it |
basis | no | — | 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) |
rate | one of fee, fee_year, rate | — | The fee as a share of its basis |
base | no | — | 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.
| Term | Required | Default | Meaning |
|---|---|---|---|
principal | no | — | Loan amount |
commitment | yes | — | The facility's commitment: the most it lends, interest reserve and rolled-up interest included |
interest_rate | yes | — | Nominal annual rate on the drawn balance |
index | no | — | Floating rate: a series-shaped assumption |
margin | no | — | Spread over the index |
rate_floor | no | — | Floor on the floating rate |
rate_cap | no | — | Cap on the floating rate |
day_count | no | — | Interest accrual basis |
amortization_day_count | no | — | The basis the payment is struck on |
payment_frequency | no | — | Payment rhythm; the model calendar by default |
amortization_months | no | — | Amortization term; strikes the payment |
interest_only_months | no | — | Interest-only months before amortization |
funded_at_close | no | — | true draws the principal at the term start; false, a loan outstanding when the model begins, opens at it |
balloon_at_maturity | no | false | true pays the balance as principal at maturity |
make_whole_rate | no | — | Rate a make-whole discounts the remaining payments at |
make_whole_floor | no | — | Least make-whole premium, as a share of the amount repaid |
draw_months | no | — | The availability period: the facility draws for this many months from the term's start, then pays interest only |
interest | no | paid | How interest is met: paid (the default) by the borrower each period |
prepay_from | no | — | 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_pct | no | — | 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).
| Term | Required | Default | Meaning |
|---|---|---|---|
amount | one of amount, amount_year | 0 | Amount per period |
amount_year | one of amount, amount_year | 0 | Annual amount |
growth_rate | no | 0 | Annual 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.
| Term | Required | Default | Meaning |
|---|---|---|---|
amount | one of amount, amount_year | 0 | Amount per period |
amount_year | one of amount, amount_year | 0 | Annual amount |
growth_rate | no | 0 | Annual growth; may hold an expression |
pct_fixed | no | 1 | Share of the expense that is fixed |
occupancy | no | 1 | Occupancy 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.
| Term | Required | Default | Meaning |
|---|---|---|---|
amount | no | — | Amount per period |
amount_year | no | — | Annual amount |
growth_rate | no | — | Annual growth; may hold an expression |
rate | yes | — | Vacancy and credit loss as a fraction of potential gross revenue |
potential_gross_year | yes | — | 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.
| Term | Required | Default | Meaning |
|---|---|---|---|
tax_rate | one of tax_rate, amount | 0 | The tax rate on the assessed value: a mill rate of 12 is 0.012 |
amount | one of tax_rate, amount | 0 | Amount per period |
basis | no | 0 | The assessed value, where it is stated: a number, the purchase price, or an expression (a phase-in, a published series) |
assessment | no | stated | How 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_growth | no | 0 | The stated assessment's growth each tax year: a cap such as 2% a year where the law limits it |
assessment_cap_rate | no | — | The income approach's cap rate, before it is loaded with the effective tax rate |
reassess_every_months | no | 12 | How often the income approach reassesses |
assessment_growth_cap | no | none | The most an income-approach reassessment may rise each year, where the law caps it |
assessed_pct_of_value | no | 1 | The assessment ratio: the share of the value that is assessed |
abatement_pct | no | — | The share of the tax abated |
abatement_years | no | 0 | Tax years the full abatement runs from the term's start |
abatement_phase_out_years | no | 0 | Tax years the abatement then steps down over, evenly to zero |
pilot_year | no | — | A payment in lieu of taxes, a year, paid while the abatement runs |
pilot_growth | no | 0 | The payment in lieu of taxes' growth each tax year |
installments_per_year | no | 0 | How many installments the tax is paid in a year |
in_arrears_months | no | 0 | Months after a period's tax accrues that it is paid |
base_value | no | — | 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.
| Term | Required | Default | Meaning |
|---|---|---|---|
amount | one of amount, amount_year, target, share | 0 | Amount per period |
amount_year | one of amount, amount_year, target, share | 0 | Annual amount |
target | one of amount, amount_year, target, share | — | The amount a top-up brings basis to |
cap | no | none | The most the incentive pays |
share | one of amount, amount_year, target, share | — | The share of basis the incentive pays: 0.75 of a tax increment |
nature | no | capital | What 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.
| Term | Required | Default | Meaning |
|---|---|---|---|
fee | one of fee, fee_year | 0 | Fee per period |
fee_year | one of fee, fee_year | 0 | Annual fee |
escalation | no | — | Annual rent escalation |
fee_account | no | — | The account the fee is paid into |
restricted_units | yes | — | The units whose rent is restricted |
rent_limit_pct_of_ami | yes | — | The income band the rent limit is set at, as a share of area median income: 0.60 for 60% AMI |
ami_year | yes | — | The area median income for the household size the units are rented to, a year |
ami_growth | no | 0 | The area median income's growth each year |
rent_burden | no | 0.30 | The share of income the rent limit is set at |
utility_allowance | no | 0 | The utility allowance, a month per unit, which the rent limit is net of |
market_rent_per_unit_month | no | — | 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.
| Term | Required | Default | Meaning |
|---|---|---|---|
rent | one of rent, rent_year, rent_psf, rent_per_unit_month | 0 | Rent per period |
rent_year | one of rent, rent_year, rent_psf, rent_per_unit_month | 0 | Annual rent |
escalation | no | 0 | Annual rent escalation |
free_rent_months | no | — | 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 |
area | no | — | 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_months | no | 0 | A tenant taking its space in stages: base rent ramps straight-line over these months from the lease start |
occupancy | no | 1 | The building's occupancy, an expression, usually the asset's derived field asset.<name>.occupancy |
rent_psf | one of rent, rent_year, rent_psf, rent_per_unit_month | — | Base rent per square foot per year on the premises' area |
rent_per_unit_month | one 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_kind | no | step | How 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_index | no | — | The index an "index" or "collar" escalation follows, a series assumption named as one: inputs.cpi |
escalation_floor | no | none | The least a collar's reset moves the rent by, as a rate: 0.02 for 2% |
escalation_cap | no | none | The most a collar's reset moves the rent by, as a rate |
escalation_every_months | no | 12 | Months between escalations, from the term's start |
lease_up_months | no | 0 | Months from the term start to stabilization |
stabilized_occupancy | no | 1 | Where occupancy settles once the lease-up is done |
absorption_shape | no | straight_line | The path occupancy takes between the term start and stabilization: "straight_line" (the default) or "s_curve" (slow, then fast, then slow) |
units | no | — | 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.
| Term | Required | Default | Meaning |
|---|---|---|---|
rent | one of rent, rent_year, rent_psf, rent_per_unit_month | 0 | Rent per period |
rent_year | one of rent, rent_year, rent_psf, rent_per_unit_month | 0 | Base rent per year, spread by the calendar |
escalation | no | 0 | Annual rent escalation |
free_rent_months | no | 0 | 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 |
area | no | — | 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_months | no | 0 | A tenant taking its space in stages: base rent ramps straight-line over these months from the lease start |
occupancy | no | 1 | The building's occupancy, an expression, usually the asset's derived field asset.<name>.occupancy |
rent_psf | one of rent, rent_year, rent_psf, rent_per_unit_month | — | Base rent per square foot per year on the premises' area |
rent_per_unit_month | one 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_kind | no | step | How 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_index | no | — | The index an "index" or "collar" escalation follows, a series assumption named as one: inputs.cpi |
escalation_floor | no | none | The least a collar's reset moves the rent by, as a rate: 0.02 for 2% |
escalation_cap | no | none | The most a collar's reset moves the rent by, as a rate |
escalation_every_months | no | 12 | Months between escalations, from the term's start |
market_leasing | no | — | The market leasing set the unit rolls on at expiry, by name: market_leasing = inputs.retail_market |
outcome | no | draw | The 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 |
count | no | 1 | How many like units this lease covers |
opex_year | no | 0 | Recoverable operating expenses per year — the base the expense stop is measured against |
opex_escalation | no | 0 | Annual growth of the recoverable opex base |
gross_up_factor | no | 1 | Factor recoverable opex is grossed up by before the stop is applied, so a part-vacant building recovers as if full |
expense_stop_year | no | 0 | Expense stop per year: the tenant reimburses recoverable opex above it, times its pro rata share |
pro_rata_share | no | 0 | The tenant's share of recoverable opex above the stop, 0 to 1 |
ti_total | no | 0 | Tenant improvement allowance, paid at term start |
lc_total | no | 0 | Leasing commissions, paid at term start |
recoveries | no | — | The recovery structure: "gross" (none), "modified_gross" (all expenses above the stop), "net" (taxes and insurance) or "nnn" (all expenses) |
recoverable_categories | no | — | Which expenses are recoverable, where the structure's default does not hold: "taxes", "taxes_insurance" or "all" |
recovery_pool | no | — | The entity whose expenses are recovered, by path: asset.tower |
expense_stop_psf | no | 0 | Expense stop per square foot per year of the premises: the tenant pays its share above it |
base_year | no | — | The base year: the stop is the recoverable expenses of that calendar year, and a CAM cap grows from them |
cam_cap_pct | no | none | Annual cap on the growth of recoverable expenses other than taxes and insurance, from the base year: 0.05 for 5% |
gross_up_occupancy | no | 0 | The occupancy variable expenses are grossed up to before the stop, where the building's occupancy is below it: 0.95 |
variable_share | no | 0 | The share of recoverable expenses that varies with occupancy, which the gross-up applies to |
ti_psf | no | — | Tenant improvement allowance per square foot of the premises, paid at the term's start |
lc_pct | no | 0 | Leasing commission as a share of the rent over the term, paid at the term's start |
security_deposit_months | no | — | 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.
| Term | Required | Default | Meaning |
|---|---|---|---|
rent | one of rent, rent_year, area, renewal_rent_year, market_rent_year | — | Rent per period |
rent_year | one of rent, rent_year, area, renewal_rent_year, market_rent_year | — | Annual rent |
escalation | no | — | Annual rent escalation |
free_rent_months | no | — | 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 |
area | one 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_leasing | no | — | The market leasing set the space rolls on, by name: market_leasing = inputs.retail_market |
renewal_probability | yes | — | Probability the tenant renews at expiry |
renewal_rent_year | one 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_year | one 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_months | no | the set's; else 0 | Vacant months before a replacement tenant starts paying |
market_escalation | no | the set's; else 0 | Annual growth of market rent |
renewal_ti_lc | no | 0 | Tenant improvements and leasing commissions on renewal |
new_ti_lc | no | 0 | Tenant 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.
| Term | Required | Default | Meaning |
|---|---|---|---|
rent | no | — | Rent per period |
rent_year | no | — | Annual rent |
escalation | no | — | Annual rent escalation |
free_rent_months | no | — | 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 |
area | no | — | The premises the per-foot figures apply to: a rent, TI or stop per foot, or a market set's per-foot rents |
market_leasing | yes | — | The market leasing set the space is let on, by name: market_leasing = inputs.office_market |
outcome | no | draw | The 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.
| Term | Required | Default | Meaning |
|---|---|---|---|
rent | no | — | Rent per period |
rent_year | no | — | Annual rent |
escalation | no | — | Annual rent escalation |
free_rent_months | no | — | 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_year | yes | — | 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_growth | no | 0 | Annual growth of sales |
breakpoint_year | yes | — | Sales per year above which overage rent is due |
overage_pct | yes | — | 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).
| Term | Required | Default | Meaning |
|---|---|---|---|
rent | one of rent, rent_year | 0 | Rent per period |
rent_year | one of rent, rent_year | 0 | Annual rent |
escalation | no | 0 | Annual rent escalation |
free_rent_months | no | — | 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 |
side | yes | — | Which side of the lease the subject is: "fee" (it owns the land and receives the rent) or "leasehold" (it pays it) |
reset_every_months | no | none | Months between resets to a share of the land's value, from the term's start |
reset_pct | no | 0 | The share of the land's value the rent resets to, upward only: 0.06 |
land_value | no | 0 | The land's appraised value, unencumbered: a number or a series of appraisals, inputs.land_appraisal |
participation_pct | no | — | The share of the leasehold's effective gross income paid as rent beside the base, the month after it is earned |
leasehold | no | — | 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.
| Term | Required | Default | Meaning |
|---|---|---|---|
amount | no | — | Amount per period |
amount_year | no | — | Annual amount |
growth_rate | no | — | Annual growth; may hold an expression |
per_unit_year | one 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_year | one 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_revenue | one 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% |
cap | no | — | 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.
| Term | Required | Default | Meaning |
|---|---|---|---|
amount | one of amount, amount_year, total | — | Amount per period |
amount_year | one of amount, amount_year, total | — | Annual amount |
growth_rate | no | — | Annual growth; may hold an expression |
total | one of amount, amount_year, total | — | The whole cost, spent over the term on profile |
profile | no | level | How 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))) |
reserve | no | — | 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.
| Term | Required | Default | Meaning |
|---|---|---|---|
principal | one of principal, commitment, draw, ltv_max, dscr_min, debt_yield_min | — | The loan amount |
commitment | one of principal, commitment, draw, ltv_max, dscr_min, debt_yield_min | — | The amount committed |
draw | one of principal, commitment, draw, ltv_max, dscr_min, debt_yield_min | — | |
interest_rate | one of interest_rate, index | 0 | Nominal annual rate, when the rate is fixed |
index | one of interest_rate, index | 0 | The index a floating rate resets off, with margin: a series-shaped assumption read each period, index = inputs.sofr |
margin | no | 0 | The spread over index |
rate_floor | no | 0 | The least the floating rate may be |
rate_cap | no | 1 | The most the floating rate may be, where the note caps it |
day_count | no | — | Interest accrual basis |
amortization_day_count | no | — | The basis the payment is struck on |
payment_frequency | no | `` | Payment rhythm; the model calendar by default |
amortization_months | yes | — | Amortization term the level payment is struck on |
interest_only_months | no | 0 | Interest-only months before amortization |
funded_at_close | no | true | true draws the principal at the term start; false, a loan outstanding when the model begins, opens at it |
balloon_at_maturity | no | false | true pays the balance as principal at maturity |
make_whole_rate | no | 0 | Rate a make-whole discounts the remaining payments at |
make_whole_floor | no | 0 | Least make-whole premium, as a share of the amount repaid |
step_down_pct | no | 0 | A prepayment fee as a share of the balance repaid: 0.03 is 3% |
lockout_months | no | 0 | Months 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_rate | no | 0 | The 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_max | one 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_min | one 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_min | one of principal, commitment, draw, ltv_max, dscr_min, debt_yield_min | — | Sizing: the least NOI may be as a share of the loan |
basis | no | — | 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) |
noi | no | — | The underwritten NOI, where the basis is stated_noi |
cap_rate | no | — | The cap rate the loan values the property at, for loan-to-value |
value | no | — | The value loan-to-value is measured on, where it is stated: an appraisal, or the price at an acquisition |
pays_off | no | — | 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_min | no | — | Covenant: the least trailing NOI may be as a multiple of trailing debt service |
covenant_ltv_max | no | — | Covenant: the most the balance may be as a share of the value |
covenant_debt_yield_min | no | — | Covenant: the least trailing NOI may be as a share of the balance |
covenant_test_every_months | no | — | How often the covenants are tested |
on_breach | no | — | 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_periods | no | — | Consecutive passing tests that end a breach |
dsra_months | no | — | 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.
| Term | Required | Default | Meaning |
|---|---|---|---|
principal | one of principal, commitment, draw | — | The loan amount |
commitment | one of principal, commitment, draw | — | The amount committed |
draw | one of principal, commitment, draw | — | |
interest_rate | one of interest_rate, index | 0 | Nominal annual rate, when the rate is fixed |
index | one of interest_rate, index | — | The index a floating rate resets off, with margin: a series-shaped assumption read each period, index = inputs.sofr |
margin | no | 0 | The spread over index |
rate_floor | no | 0 | The least the floating rate may be |
rate_cap | no | 1 | The most the floating rate may be, where the note caps it |
day_count | no | — | Interest accrual basis |
amortization_day_count | no | — | The basis the payment is struck on |
payment_frequency | no | `` | Payment rhythm; the model calendar by default |
amortization_months | no | — | Amortization term; strikes the payment |
interest_only_months | no | 0 | Interest-only months before amortization |
funded_at_close | no | true | true draws the principal at the term start; false, a loan outstanding when the model begins, opens at it |
balloon_at_maturity | no | false | true pays the balance as principal at maturity |
make_whole_rate | no | 0 | Rate a make-whole discounts the remaining payments at |
make_whole_floor | no | 0 | Least make-whole premium, as a share of the amount repaid |
step_down_pct | no | 0 | A prepayment fee as a share of the balance repaid: 0.03 is 3% |
lockout_months | no | 0 | Months 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_by | no | — | 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.
| Term | Required | Default | Meaning |
|---|---|---|---|
notional | yes | — | |
reference | yes | — | |
strike | yes | — | The rate above which the cap pays |
premium | no | — | 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.
| Term | Required | Default | Meaning |
|---|---|---|---|
premium | no | 0 | Premium paid |
premium_rate | yes | — | Annual premium as a rate on coverage — HUD's 0.45% of the original principal |
coverage | yes | — | 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.
| Term | Required | Default | Meaning |
|---|---|---|---|
price | yes | — | Purchase price |
closing_costs_pct | no | 0 | Closing 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.
| Term | Required | Default | Meaning |
|---|---|---|---|
selling_costs | no | 0 | Costs of sale, a fraction of gross proceeds |
cap_rate | one of cap_rate, value | — | The capitalization rate the NOI of the basis is divided by: forward_noi, trailing_noi or stated_noi |
value | one of cap_rate, value | — | The stated price, where the basis is price |
income | no | — | The NOI the cap rate is applied to, where the basis is stated_noi |
basis | no | stated_noi | What 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) |
share | no | 1 | The share of the asset sold, above 0 and at most 1 |
pays_off | no | — | 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).
| Term | Required | Default | Meaning |
|---|---|---|---|
selling_costs | no | 0 | Costs of sale, a fraction of gross proceeds |
units | yes | — | How many units the sale closes |
price_per_unit | one of price_per_unit, gross_proceeds | — | The price of a unit at the sale's start |
gross_proceeds | one 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_growth | no | 0 | Annual growth of the price, stepped on the sale's anniversaries |
pace | no | level | How 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_pct | no | — | 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_to | no | — | The construction loan each closing repays a share of, by name: release_to = cre.construction_loan.senior |
release_pct | no | 1 | The 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.
| option | terms | on exercise |
|---|---|---|
CRE.Option.Renewal | renewal_rent_year, renewal_term_months, renewal_ti_lc | pays -renewal_ti_lc as leasing cost; the renewal lease opens at the entry its action writes |
CRE.Option.Termination | fee, notice_months | pays fee; the lease ends notice_months later |
CRE.Option.Contraction | fee, share | pays fee; the lease's lines fall by the share given back |
CRE.Option.Expansion | unit, ti_total | pays -ti_total; the unit it names is let |
CRE.Option.Extension | extension_months, fee_pct | extends 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.
| field | unit | bound | meaning |
|---|---|---|---|
market_rent_psf | USD/sf/yr | at least 0 | Face rent a new lease strikes at today |
market_escalation | ratio | at least -1 | Annual growth in the market rent |
renewal_probability | ratio | 0 to 1 | The share of expiring leases that renew rather than vacating |
downtime_months | months | at least 0 | Months the space sits empty between a tenant leaving and the next one paying |
new.term_months | months | at least 1 | Length of a lease to a new tenant |
renewal.term_months | months | at least 1 | Length of a renewal |
new.ti_psf | USD/sf | at least 0 | Tenant improvement allowance for a new tenant |
renewal.ti_psf | USD/sf | at least 0 | Tenant improvement allowance on a renewal, normally the smaller of the two |
new.lc_pct | ratio | 0 to 1 | Leasing commission on a new lease, as a share of the rent over its term |
renewal.lc_pct | ratio | 0 to 1 | Leasing commission on a renewal |
new.free_rent_months | months | at least 0 | Months of free rent granted to a new tenant, a fraction of a month among them |
renewal.free_rent_months | months | at least 0 | Months of free rent granted on a renewal, a fraction of a month among them |
renewal.rent_share | ratio | above 0 | What a renewal strikes at, as a share of market rent |
renewal_draw | ratio | 0 to 1 | The 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.