Methodology · The Decomposition Engine

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.

taxonomy
A selected legal term is mapped to the holder, payoff, exercise style, legal states, blockers and interactions. This is a classification claim, not a number.
teaching estimate
A simplified, assumption-dependent number for explanation or sensitivity. Every output from this engine currently sits here, including parametric paths, uploaded paths and moment-re-weighted paths. Not a market price or legal conclusion.
calibrated risk-neutral price
Reserved for a contract-specific payoff priced under an arbitrage-consistent risk-neutral measure calibrated to observable instruments, with discount, survival, recovery, exercise, market-access and RiskyPV01 conventions validated. This engine does not currently produce this label.

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:

PV01 = N × 0.0001 × Σ DF(tᵢ) × S(tᵢ) × Δtᵢ
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.

LineWhat is actually calculatedImportant limit
Terminal credit putE[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 capacityDiscounted 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 proxyOne 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 differenceOn 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 proxyCRR 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 proxyDiscounted 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.

minw Σ wi log(wi / pi)   s.t.   Ew[gj] = cj  ⇒  wi ∝ pi exp( Σj λj gj(pathi) )

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

What is covenant decomposition?

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.

Why was the residual removed?

The numerator mixed unlike economic quantities. A quoted-spread comparison would remain misleading even with a disclaimer, so the tool no longer reports it.

When is an output a calibrated risk-neutral price?

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.

Does the engine parse credit agreements?

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.

What are the six lines?

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.

Why is the live engine not in the sitemap?

The public engine is a teaching demo and is marked noindex. This methodology page is the indexable explanation of assumptions, evidence labels and limits.