CFDL

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 {
  term 2026-07..2031-12
  terms {
    base_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

PackFor
creCommercial real estate — leases, rollover, operating expenses, permanent debt, exit
creditLoan pools and structured credit — amortisation, prepayment, defaults, recoveries
energyGeneration projects — PPAs, merchant revenue, O&M, tax credits, project debt
opcoOperating 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

ContractTerms it readsStreams it emits
energy.ppaavailability, degradation, escalation, mwh_year, ppa_priceenergy.ppa.revenue[.suffix]
energy.merchantavailability, degradation, mwh_year, price, price_escalationenergy.merchant.revenue[.suffix]
energy.storage_arbitragedegradation, mwh_cycled_year, spreadenergy.storage.margin[.suffix]
energy.capacitypayment_yearenergy.capacity.revenue[.suffix]
energy.omescalation, om_yearenergy.om.expense[.suffix]
energy.itccreditenergy.itc.credit[.suffix]
energy.capexamountenergy.capex.outlay[.suffix]
energy.debt_serviceprincipal, rateenergy.debt.service[.suffix]
energy.ptcavailability, credit_per_mwh, degradation, escalation, mwh_year, round_stepenergy.ptc.credit[.suffix]
energy.macrs_shieldbasis, life, tax_rateenergy.macrs.shield[.suffix]

cre

ContractTerms it readsStreams it emits
cre.construction_stubamountcre.construction.draws
cre.leasebase_rent, base_rent_yearcre.lease.base_rent
cre.ops_revenueamountcre.ops.revenue
cre.ops_expenseamountcre.ops.expense
cre.exit_capexit_cap, noi_valuecre.exit.sale
cre.lease_unitescalation, expense_stop_year, gross_up_factor, lc_total, opex_escalation, opex_year, pro_rata_share, rent_year, ti_totalcre.unit.base_rent.[suffix], cre.unit.abatement.[suffix], cre.unit.recoveries.[suffix], cre.unit.ti_lc.[suffix]
cre.rollovermarket_escalation, market_rent_year, new_ti_lc, renewal_probability, renewal_rent_year, renewal_ti_lccre.rollover.rent.[suffix], cre.rollover.ti_lc.[suffix]
cre.vacancy_losspotential_gross_year, ratecre.vacancy.loss
cre.property_opexescalation, opex_yearcre.property.opex[.suffix]
cre.exitexit_cap, noi_forward_year, selling_costscre.exit.proceeds
cre.percentage_rentbreakpoint_year, overage_pct, sales_growth, sales_yearcre.pct_rent[.suffix]
cre.exit_forwardexit_cap, selling_costscre.exit.proceeds
cre.permanent_debtballoon_at_maturity, payment_frequency, principal, rateloan.permanent_debt_service

credit

ContractTerms it readsStreams it emits
credit.pool_level_payabs_speed, age_months, balance, cdr, cpr, payment_frequency, prepay_penalty_rate, psa_speed, rate, sda_speed, servicing_fee, severitycredit.pool.interest[.suffix], credit.pool.sched_principal[.suffix], credit.pool.prepay[.suffix], credit.pool.recoveries[.suffix], credit.pool.servicing[.suffix], credit.pool.penalty[.suffix]
credit.pool_io_bulletabs_speed, age_months, balance, cdr, cpr, payment_frequency, prepay_penalty_rate, psa_speed, rate, sda_speed, servicing_fee, severitycredit.pool.interest[.suffix], credit.pool.prepay[.suffix], credit.pool.bullet[.suffix], credit.pool.recoveries[.suffix], credit.pool.servicing[.suffix], credit.pool.penalty[.suffix]
credit.pool_float_io_bulletabs_speed, age_months, balance, cdr, cpr, index_curve, margin, payment_frequency, prepay_penalty_rate, psa_speed, rate_cap, rate_floor, sda_speed, servicing_fee, severitycredit.pool.interest[.suffix], credit.pool.prepay[.suffix], credit.pool.bullet[.suffix], credit.pool.recoveries[.suffix], credit.pool.servicing[.suffix], credit.pool.penalty[.suffix]
credit.purchasepricecredit.purchase.price[.suffix]

opco

ContractTerms it readsStreams it emits
opco.revenue_lineamount, amount_year, growth_curve, growth_rateopco.revenue.recurring[.suffix]
opco.opex_lineamount, amount_year, growth_curve, growth_rateopco.opex.recurring[.suffix]
opco.working_capitalamountopco.working_capital.adjustment[.suffix]
opco.exit_multiplebase_value, exit_multipleopco.exit.value
opco.working_capital_policyap_days, ar_days, inv_days, release_at_endopco.working_capital.adjustment[.suffix]
opco.capex_lineamount, amount_year, growth_curve, growth_rate, pct_of_revenueopco.capex[.suffix]
opco.term_debtfunded_at_close, principal, rateopco.debt.proceeds[.suffix], opco.debt.interest[.suffix], opco.debt.principal[.suffix]
opco.cash_taxesda_growth, da_monthly, da_year, tax_rate, tax_rate_curveopco.taxes[.suffix]
opco.exit_ebitdaexit_multiple, selling_costsopco.exit.value
opco.acquisitionpriceopco.acquisition.price[.suffix]
opco.exit_perpetuitybase_value, discount_rate, growth_rate, selling_costsopco.exit.value[.suffix]