Pack contracts
A contract is how a model states business terms instead of building streams by hand. Declare a lease and the pack expands it into the streams that lease implies — rent, escalations, recoveries, the abatement — each already classified so it lands in the right line of a statement.
use pack "cre" version "0.1.0"
contract cre.lease on entity asset.tower {
term 2026-07..2031-12
terms {
rent = 25000
}
}
What you get back
Each contract lowers to one or more streams with fixed names, so a model can refer to them, a benchmark can assert them, and a statement can group them. The names are stable: they are part of the pack's interface, not an implementation detail.
A term you do not supply is either defaulted by the pack or reported as a missing-term error at compile time. It is never silently zero.
Choosing a pack
| Pack | For |
|---|---|
cre | Commercial real estate — leases, rollover, operating expenses, permanent debt, exit |
credit | Loan pools and structured credit — amortization, prepayment, defaults, recoveries |
energy | Generation projects — PPAs, merchant revenue, O&M, tax credits, project debt |
opco | Operating companies — revenue and cost lines, working capital, leverage, exit |
Every contract
Generated from each pack's lowering rules, so a contract cannot be listed here
without existing, or exist without being listed. Terms shown are those a model
supplies; a pack also reads the contract's own term range.
[.suffix] in a stream name means the contract can be declared more than once.
Give it a suffix — contract cre.lease.suite_200 — and the streams it emits
carry that suffix, so two leases stay separable in the results and on a
statement.
energy
| Contract | Terms it reads | Streams it emits |
|---|---|---|
energy.ppa | availability, degradation, escalation, price, quantity | energy.ppa.revenue[.suffix] |
energy.merchant | availability, degradation, escalation, price, quantity | energy.merchant.revenue[.suffix] |
energy.storage_arbitrage | degradation, price, quantity | energy.storage.margin[.suffix] |
energy.capacity | price | energy.capacity.revenue[.suffix] |
energy.om | escalation, fee_year | energy.om.expense[.suffix] |
energy.itc | amount | energy.itc.credit[.suffix] |
energy.capex | amount | energy.capex.outlay[.suffix] |
energy.debt_service | funded_at_close, interest_rate, principal | energy.debt.proceeds[.suffix], energy.debt.interest[.suffix], energy.debt.principal[.suffix] |
energy.ptc | amount, availability, degradation, escalation, quantity, round_step | energy.ptc.credit[.suffix] |
energy.macrs_shield | basis, funded_at_close, life, months_of_debt_service, target, tax_rate | energy.macrs.shield[.suffix] |
energy.reserve | funded_at_close, interest_rate, months_of_debt_service, subject, target | energy.reserve.deposit[.suffix], energy.reserve.release[.suffix], energy.reserve.interest[.suffix] |
cre
| Contract | Terms it reads | Streams it emits |
|---|---|---|
cre.budget_line | amount, amount_year, contingency_pct, profile, retainage_pct, subject, total | cre.budget.[…].spend[.suffix], cre.budget_retained.[…].held[.suffix], cre.budget.[…].retainage_release[.suffix] |
cre.reserve_funding | cap, pct_of_revenue, per_sf_year, per_unit_year, subject | cre.reserve.deposit[.suffix] |
cre.capex_program | amount, amount_year, profile, total | cre.capex_program.spend[.suffix], cre.reserve.release[.suffix] |
cre.equity_commitment | capital_account, commitment, funding, funding_share, funds_after, hurdle_1, hurdle_2, hurdle_3, preferred_from, preferred_return, share, shortfall_account, subject | cre.equity.[…].contribution[.suffix], cre.equity.[…].shortfall[.suffix].call |
cre.lease | absorption_shape, area, escalation, escalation_cap, escalation_every_months, escalation_floor, escalation_index, lease_up_months, occupancy, rent, rent_per_unit_month, rent_psf, rent_year, stabilized_occupancy, subject, units | cre.lease.base_rent[.suffix], cre.lease.abatement[.suffix] |
cre.lease_unit | area, base_year, cam_cap_pct, count, downtime_months, escalation, escalation_cap, escalation_every_months, escalation_floor, escalation_index, expense_stop_psf, expense_stop_year, gross_up_factor, gross_up_occupancy, lc_pct, lc_total, market_escalation, market_rent_psf, occupancy, opex_escalation, opex_year, outcome, pro_rata_share, recovery_pool, renewal_draw, renewal_probability, rent, rent_per_unit_month, rent_psf, rent_year, security_deposit_months, subject, subject_parent, ti_psf, ti_total, variable_share | cre.unit.base_rent.[suffix], cre.unit.abatement.[suffix], cre.unit.ti_lc.[suffix], cre.unit.deposit_held.[suffix], cre.unit.recoveries.[suffix], cre.unit.deposit_returned.[suffix], cre.unit.rollover_rent.[…], cre.unit.rollover_abatement.[…], cre.unit.rollover_ti_lc.[…] |
cre.revenue_line | amount, amount_year, growth_rate | cre.revenue.line[.suffix] |
cre.spec_lease | area, downtime_months, market_escalation, market_rent_psf, outcome, renewal_draw, renewal_probability, subject | cre.unit.rollover_rent.[…], cre.unit.rollover_abatement.[…], cre.unit.rollover_ti_lc.[…], cre.spec_lease.rent.[suffix], cre.spec_lease.abatement.[suffix], cre.spec_lease.ti_lc.[suffix] |
cre.rollover | area, downtime_months, market_escalation, market_rent_psf, market_rent_year, new_ti_lc, renewal_probability, renewal_rent_year, renewal_ti_lc | cre.rollover.rent.[suffix], cre.rollover.ti_lc.[suffix], cre.rollover.abatement.[suffix] |
cre.vacancy_loss | potential_gross_year, rate | cre.vacancy.loss[.suffix] |
cre.opex_line | amount, amount_year, growth_rate, occupancy, pct_fixed | cre.opex.line[.suffix] |
cre.percentage_rent_expected | breakpoint_year, overage_pct, sales_growth, sales_year | cre.pct_rent.overage[.suffix] |
cre.percentage_rent | breakpoint_year, overage_pct, sales_growth, sales_year | cre.pct_rent.overage[.suffix] |
cre.purchase | closing_costs_pct, price | cre.purchase.price[.suffix], cre.purchase.closing_costs[.suffix] |
cre.unit_sales | deposit_pct, gross_proceeds, pace, price_growth, price_per_unit, release_pct, selling_costs, subject, units | cre.unit_sales.closings[.suffix], cre.unit_sales.selling_costs[.suffix], cre.unit_sales.release[.suffix], cre.unit_sales.deposits_held[.suffix], cre.unit_sales.deposits_released[.suffix] |
cre.ground_lease | escalation, funded_at_close, land_value, leasehold, participation_pct, principal, rent, rent_year, reset_every_months, reset_pct, subject | cre.ground_lease.rent[.suffix], cre.ground_lease.participation[.suffix] |
cre.permanent_debt | amortization_rate, balloon_at_maturity, dsra_months, funded_at_close, index, interest_rate, make_whole_floor, make_whole_rate, margin, name, payment_frequency, principal, rate_cap, rate_floor, step_down_pct, subject | cre.debt.proceeds[.suffix], cre.debt.interest[.suffix], cre.debt.principal[.suffix], cre.debt.reserve[.suffix], cre.debt.reserve_release[.suffix], cre.debt.sweep_applied[.suffix], cre.debt.sweep_cleared[.suffix], cre.debt.trap_release[.suffix], cre.debt.acceleration[.suffix], cre.debt.prepayment_premium[.suffix], cre.debt.takeout.{{contract.pays_off.term.name}}[.suffix] |
cre.mezzanine | balloon_at_maturity, funded_at_close, index, interest_rate, make_whole_floor, make_whole_rate, margin, name, payment_frequency, principal, rate_cap, rate_floor, step_down_pct, subject | cre.debt.proceeds[.suffix], cre.debt.interest[.suffix], cre.debt.principal[.suffix], cre.debt.payoff.[…], cre.debt.prepayment_premium[.suffix] |
cre.interest_rate_cap | notional, premium, reference, strike | cre.rate_cap.premium[.suffix], cre.rate_cap.settlement[.suffix] |
cre.mortgage_insurance | coverage, premium, premium_rate | cre.mortgage_insurance.premium[.suffix] |
cre.construction_loan | commitment, fee_pct, interest, interest_rate, prepay_from, subject | cre.construction.loan_draw[.suffix], cre.construction.interest[.suffix], cre.construction.interest_draw[.suffix], cre.construction.interest_accrued[.suffix], cre.construction.fee[.suffix], cre.construction.principal[.suffix], cre.construction.prepayment[.suffix] |
cre.exit | amortization_months, amortization_rate, cap_rate, capital_account, catch_up, covenant_debt_yield_min, covenant_dscr_min, covenant_ltv_max, covenant_test_every_months, cure_periods, debt_yield_min, dscr_min, extension_months, fee, fee_pct, hurdle_1, hurdle_2, hurdle_3, hurdle_basis, income, interest_rate, ltv_max, name, noi, notice_months, on_breach, promote_1, promote_2, promote_3, promote_account, promote_residual, selling_costs, share, subject, ti_total, unit, value | cre.exit.proceeds[.suffix], cre.exit.selling_costs[.suffix], cre.debt.payoff.{{contract.pays_off.term.name}}[.suffix] |
cre.sponsor_fee | base, fee_account, rate, subject | cre.fee.acquisition[.suffix], cre.budget.[…].fee[.suffix], cre.fee.asset_management[.suffix], cre.fee.disposition[.suffix], cre.fee.fund_management[.suffix] |
cre.property_tax | abatement_pct, abatement_phase_out_years, abatement_years, amount, assessed_pct_of_value, assessment_cap_rate, assessment_growth, assessment_growth_cap, base_value, basis, cap, in_arrears_months, installments_per_year, pilot_growth, pilot_year, reassess_every_months, subject, tax_rate | cre.property_tax.accrued[.suffix], cre.property_tax.abated[.suffix], cre.opex.line.property_tax[.suffix], cre.opex.line.property_tax.abatement[.suffix], cre.opex.line.property_tax.pilot[.suffix], cre.property_tax.increment[.suffix] |
cre.incentive | amount, amount_year, basis, share, target | cre.incentive.support[.suffix] |
cre.affordable_covenant | ami_growth, ami_year, fee, fee_year, market_rent_per_unit_month, rent_burden, rent_limit_pct_of_ami, restricted_units, subject, utility_allowance | cre.affordable.monitoring_fee[.suffix] |
credit
| Contract | Terms it reads | Streams it emits |
|---|---|---|
credit.loan | abs_speed, age_months, cdr, cpr, index, interest_rate, make_whole_floor, make_whole_rate, margin, name, payment_frequency, prepay_penalty_rate, principal, psa_speed, rate_cap, rate_floor, sda_speed, servicing_fee, severity, subject | credit.loan.interest[.suffix], credit.loan.defaults[.suffix], credit.loan.sched_principal[.suffix], credit.loan.prepay[.suffix], credit.loan.recoveries[.suffix], credit.loan.servicing[.suffix], credit.loan.penalty[.suffix], credit.loan.bullet[.suffix], credit.loan.zero_balance[.suffix], credit.loan.advance[.suffix] |
credit.servicing | advance_rate, fee_account, fee_rate, reimbursement_account, subject | credit.servicing.advance_interest[.suffix] |
credit.guarantee | fee, limit | credit.guarantee.fee[.suffix] |
credit.purchase | price | credit.purchase.price[.suffix] |
credit.participation | share | credit.participation.interest[.suffix], credit.participation.principal[.suffix] |
credit.note | coupon, face, index, interest_account, margin, payment_frequency, principal_account, rate_cap, rate_floor, subject |
opco
| Contract | Terms it reads | Streams it emits |
|---|---|---|
opco.revenue_line | amount, amount_year, growth_rate | opco.revenue.recurring[.suffix] |
opco.opex_line | amount, amount_year, growth_rate | opco.opex.recurring[.suffix] |
opco.working_capital | amount | opco.working_capital.adjustment[.suffix] |
opco.exit_multiple | base, multiple, selling_costs | opco.exit.value[.suffix], opco.exit.selling_costs[.suffix] |
opco.working_capital_policy | ap_days, ar_days, inv_days, release_at_end | opco.working_capital.adjustment[.suffix] |
opco.capex_line | amount, amount_year, growth_rate, pct_of_revenue | opco.capex.line[.suffix] |
opco.reinvestment | growth_rate, sales_to_capital | opco.capex.reinvestment[.suffix] |
opco.term_debt | funded_at_close, interest_rate, principal | opco.debt.proceeds[.suffix], opco.debt.interest[.suffix], opco.debt.principal[.suffix] |
opco.cash_taxes | da_growth, da_monthly, da_year, tax_rate | opco.taxes.cash[.suffix] |
opco.exit_ebitda | multiple, selling_costs | opco.exit.value[.suffix], opco.exit.selling_costs[.suffix] |
opco.acquisition | price | opco.acquisition.price[.suffix] |
opco.exit_perpetuity | base, discount_rate, growth_rate, selling_costs | opco.exit.value[.suffix], opco.exit.selling_costs[.suffix] |
Related
- Statements — how the streams a contract emits become a pro forma.
- Contracts and packs — a walkthrough.
- Pack interface — authoring a pack.