Six separate teaching estimates. No false combined price.
The engine separates credit shortfall, distribution capacity and assumed contractual-right proxies. They share a unit conversion, not one economic meaning. It does not produce a market price or legal conclusion.
What this is, and is not
Every claim uses one of three labels. Development stages such as parametric, state-path or mark-constrained describe implementation inside a label; they are not extra valuation labels.
The engine never touches market data. The quoted spread is an input you supply. That is deliberate: it keeps this an analytics and teaching instrument, not a pricing service.
Inputs: paths and terms
Upload a JSON object with paths (an array of equally weighted scenarios) and pricingSpec.fullDecomposition (the terms below). Cash values use one consistent unit, normally €m; rates and percentages are decimals, not whole percentages. Files are processed in this browser; the tool does not send the uploaded data to a server.
Every path must start at time: 0, use the same strictly increasing time grid and end at horizonYears. Points can carry enterpriseValue, cumulativeCni, leverage, freeCashFlow, ebitda and netDebt. CNI is cumulative from the contractual start date; FCF is the cash amount for that single interval, not an annual rate. Optional alive and marketOpen values must be booleans. An omitted flag assumes no early default / open markets; a default cannot reverse on the same path.
The required terms are debtFaceGross, riskFreeRate, horizonYears, assetVol, builderPct, cureRemedyPct, cureCovenantThreshold, ecfTrigger, ecfSweepPct, makeWholeVol, makeWholeOffset, portabilityPCoc, portabilityThreshold and portabilityCocPutPct. Optional terms include quotedSpreadBps, builderLeverageGate, makeWholeMoneyness and spreadPeriods.
A missing required state field on any path suppresses the affected line; it is never silently priced as zero. The Black–Scholes reference additionally requires the same positive EV at time zero on every path. Forecast EV is not substituted for today's EV. Files are limited to 20 MB and two million path states. Set top-level independentPaths: false for constructed scenarios, antithetic or dependent paths; this suppresses an unsupported sampling error. The downloadable synthetic example uses this flag.
Quick-start uses seeded, independent lognormal EV paths with drift r and no asset payout. EBITDA growth and debt paydown are deterministic. It approximates CNI with FCF and gross face with opening net debt; neither accounting identity is true in general. Change those assumptions in your own exporter before interpreting a real credit.
The spread-equivalent denominator
Each PV is converted using the same explicit premium-leg denominator, not face × undiscounted tenor:
teaching bps = PV / PV01
The default is a bullet face N, continuous discounting at the entered rate, payment dates from the path grid, and S(t) = 1. That is a 100%-survival teaching bridge, not an estimated credit curve. An optional spreadPeriods array must supply positive discountFactor, positive accrual and explicit, non-increasing survival in [0,1] at every date; accruals must sum to the horizon.
RiskyPV01 changes the denominator only; it does not upgrade the numerator's evidence label. The output reports the denominator and its survival basis. Early amortisation and default-accrual conventions require a different, contract-consistent premium leg.
The six separate lines
On smaller screens, scroll the table horizontally to see every column.
| Line | What is actually calculated | Important limit |
|---|---|---|
| Terminal credit put | E[exp(−rT) × max(F − EV_T, 0)]. The analytic reference is the no-payout Black–Scholes put; zero volatility uses its deterministic limit. | A terminal structural shortfall, not a model of early default, recovery timing, coupons or calibrated credit spreads. |
| Builder: CNI-only capacity | Discounted max(builder share × cumulative CNI, 0), conditional on being alive. Separate terminal-gated and time-weighted snapshots are shown. | No starter, other limbs or prior usage. Capacity is not sponsor exercise or lender loss. Use the full Builder Basket Lab to examine shared pools and cumulative deficits. |
| First-breach remedy proxy | One assumed remedy payment, discounted at the first live future monitoring date above the covenant threshold; time zero is not a test date. Breach probability uses the same weights as the payoff. | One use only. No unlimited repeat charges for persistent breaches, optimal sponsor decision, negotiated remedy, cure funding, EBITDA-only cure mechanics or contractual frequency rules. |
| ECF paired-put difference | On each path, sum positive interval FCF × sweep share only at live dates above the trigger; cap principal swept at F. Compute −exp(−rT) × [max(F − EV_T, 0) − max(F − swept − EV_T, 0)]. | Terminal EV is held fixed as face falls. Sweep triggers use supplied leverage without recalculating it after earlier sweeps. This isolates a debt-only shortfall sensitivity, not the economics of assets leaving the borrower, accelerated principal, coupon changes or reinvestment. Do not describe it as a full lender cash-flow benefit. |
| Generic call proxy | CRR call on a no-payout lognormal reference asset at 100, strike 130 by default, multiplied by an assumed retained fraction (1 − offset). Very small volatility may use the equivalent analytic no-payout call where early exercise is suboptimal; extreme volatility outside the numerical domain is rejected. | Not a bond make-whole. No coupon schedule or contractual Treasury calculation. The dedicated Make-Whole Lab models scheduled bond cash flows. Historical output targets cannot override the calculation. |
| Portability: lost premium proxy | Discounted CoC premium × an independent assumed probability of an event at the horizon × the probability that the loan is alive, markets open and leverage at/below its threshold at that date. | The test is not “was leverage ever below the threshold”. The proxy omits the full put, event-time distribution, acquisition financing, holder definitions and contractual sunset. |
Alternative builder snapshots, not universal bounds
- Terminal capacity discounts the positive CNI-only balance at T.
- Terminal availability applies the leverage gate at the assumed distribution date. Earnings do not vanish merely because leverage was high when earned.
- Time-weighted snapshots average discounted balances by interval length. This is not a series of withdrawals of the same money.
There is no universal upper/lower ordering: earnings can fall and a later balance can be smaller than earlier balances. A terminal capacity measure is not an upper bound on all possible early distributions. Usage and remaining capacity must be tracked in a real exercise model.
Why there is no combined price
The six lines are not additive. A distribution capacity, an assumed foregone remedy, a refinancing proxy and a credit shortfall do not measure the same thing. Summing them and subtracting the sum from a quoted spread creates a misleading number even if every line is labelled educational. The tool therefore no longer reports that total, an implied all-in yield or a quoted-spread residual.
The only combined reference shown is credit put after sweep: the expected put on the reduced face on the same paths, with EV fixed. It is non-negative and cannot exceed the original credit put. Computing the difference path by path preserves the dependence between sweeping and shortfall; a product of average swept cash and an arbitrary loss fraction does not.
Interactions and sequencing
A more complete lender-value comparison needs two paired runs under the same draws: a specified reference contract and the contract being studied. Both must value lender cash flows with consistent gross debt, cash, asset depletion, discounting, default, recovery and borrower exercise using information available at the decision date. Sponsor proceeds are a different output and must not be added to lender losses.
This engine does not implement that full system. An unsupported numerical ranking of negotiation terms would imply more precision than these separate proxies justify, so it is not displayed here.
Re-weighting to supplied targets
The optional layer finds the minimum-relative-entropy re-weighting of the uploaded paths that reproduces selected target moments, then re-runs the six teaching estimates. It shows how individual lines change under those targets; it does not manufacture an aggregate residual.
The technique is weighted Monte Carlo: among all path weightings that hit the targets, choose the one closest to the equal-weight prior. Matching moments is not enough to establish an arbitrage-free risk-neutral measure.
Three targets ship in v1: a forward moment, a terminal shortfall probability, and an EV log-return volatility with the prior mean log-return held fixed. The volatility target creates two constraints: preserve the prior mean log-return and match its squared dispersion, so the fitted variance really equals volatility² × T. The probability target is exactly terminal EV < opening face, not early default or a survival curve. Diagnostics include effective sample size, relative entropy and target residuals. The engine does not verify whether an input is market-implied, historical or a management assumption.
The re-weighted output remains a teaching estimate. A calibrated risk-neutral price requires instrument-backed calibration, an arbitrage-consistent measure, contract-specific cash flows and exercise, survival/recovery consistency, and RiskyPV01 conversion.
Finite scenario support matters: impossible or non-converged targets must not produce a fitted result. A terminal forward constraint by itself also cannot impose the conditional martingale restrictions needed at intermediate exercise dates.
Primary method references: Avellaneda et al., weighted Monte Carlo; martingale consistency in weighted Monte Carlo; and Cox–Ross–Rubinstein, discrete-time option pricing. These establish techniques, not validation of this covenant application.
Limits and model risk
This is a teaching estimate. Sampling errors assume independent scenarios and exclude model risk. Fixed-weight errors after re-weighting are approximate and exclude uncertainty in fitted targets; a single effective observation cannot support a sampling error. The volatility strip compares the path estimate with an analytic reference, not with a market price. The engine does not calibrate to market instruments, establish a risk-neutral measure, read a document, parse a covenant stack or determine contract-specific availability. It applies simplified option-style arithmetic to the paths and terms you give it.
Common questions
The engine maps six selected terms into separate teaching estimates in common units. They are not combined into one price: capacity is not lender loss.
The numerator mixed unlike economic quantities. A quoted-spread comparison would remain misleading even with a disclaimer, so the tool no longer reports it.
Only when a contract-specific payoff is priced under an arbitrage-consistent risk-neutral measure calibrated to observable instruments, with discount, survival, recovery, exercise and RiskyPV01 conventions validated. This engine does not currently produce that label.
No. It applies simplified option-style arithmetic to the paths and terms you supply. It does not read a document, parse a covenant stack or determine contract-specific availability.
Merton credit-risk put, builder basket, equity cure, ECF cash sweep, make-whole call and portability. Each is an option-style teaching estimate in basis points. The builder line shows alternative capacity snapshots, not universal upper or lower bounds.
The public engine is a teaching demo and is marked noindex. This methodology page is the indexable explanation of assumptions, evidence labels and limits.