Project Finance Workbench
A live model, not an illustration. Debt is sized by sculpting to a target cover ratio and then held fixed — because at close it is committed, and every shock after that lands on the cover, not on the loan. Change any assumption and the sizing, the cover ratios, the sensitivity ranking, the simulated breach probability and the construction tracking all recompute.
Assumptions
Everything below feeds the sizing. Edit any field.
Cash available, debt service, and the cover that results
Sculpting sets each year’s debt service to CFADS divided by the target cover, so the amber line sits flat on target until something moves. Any capitalising period is marked.
Sources and uses
Interest during construction is itself funded by the loan.
Debt outstanding and the cover ratios
LLCR stops at debt maturity. PLCR keeps going to the end of the asset life — the gap between them is the tail.
Scenario cases
The same committed debt, run against the sponsor case, the lender’s haircut, and a bad decade.
Which driver actually moves cover
Each driver taken to its low and high case in isolation, ranked by the swing in minimum DSCR.
Simulated distribution of minimum cover
Every driver moved together through a common factor, 600 times. A single-case model reports one number from the middle of this.
Reverse stress — what has to happen to break it
Instead of asking what a shock does, solve for the shock that reaches the covenant.
Lifecycle framework
Which question each phase is really asking, and which output answers it.
Construction tracking — earned value against the drawdown curve
Planned value is the drawdown S-curve. Earned value is what has actually been delivered. Actual cost is what delivering it cost.
What this model does that a spreadsheet usually does not
1. It sizes the debt once, then refuses to re-size it
This is the single most consequential line in the engine. Debt is sized by sculpting — each year’s service set to cash available divided by the target cover, discounted back to a loan amount. That happens once, on the sponsor case. Every sensitivity, scenario and simulation after that runs against the same committed principal schedule.
Get this wrong and the model lies in a specific, flattering direction. If a revenue shock is allowed to shrink the loan, cover snaps back to target and the model reports that nothing bad can happen. I built it that way first and the tests caught it: every stress case came back with higher cover than the base. The fix is not a better formula; it is remembering that the loan agreement was signed before the shock arrived.
2. The textbook sizing formula returns loans that cannot be drawn
Debt as the present value of CFADS over target cover is the standard result, and on a ramping asset it happily produces a loan whose first-year interest bill exceeds the entire allowable debt service. The toll road preset does exactly this. Real transactions solve it by capitalising interest through the ramp and starting principal later, which is what the grace period here does; where that is still not enough, the model shrinks the loan until cover clears its own lock-up in every year.
Watch the cover chart on the toll road: the first four years carry no cash debt service at all, and the loan balance grows before it starts falling.
3. A capex overrun does not touch the cover ratio
The tornado ranks capex last on the DSCR axis, with a swing of essentially zero, and that is not a bug. An overrun against a committed facility is funded by sponsor equity or contingency — the debt service schedule does not change, so cover does not move. What moves is the equity return. Two risks that feel similar in a risk register behave completely differently in the capital structure, and only one of them is a lender problem.
4. Cutting costs can reduce cover in a single year
An oddity the invariant tests flagged and I left in because it is real. On the toll road, a 10% cut in operating cost lowers minimum cover slightly. Lower costs mean higher taxable profit, which exhausts the carried-forward tax losses a year sooner, so tax arrives in a year that was previously sheltered. In that one year the tax bill exceeds the cost saving and cover dips. Cover ratios are not monotone in the inputs once tax timing is modelled, and a sensitivity table that assumes they are will occasionally be wrong about the sign.
5. Sizing to a point estimate does not remove the distribution
Each preset is sized to hit its target cover exactly in the base case. The simulation then moves every driver together through a common factor — because traffic, construction cost and interest rates are all correlated with the same cycle, and single-variable sensitivities systematically understate the joint tail. The resulting probability of touching the lock-up is not small on any of these presets. That gap between “the base case is exactly on target” and “there is a material chance of a covenant conversation” is the entire argument for looking at a distribution.
6. LLCR flatters you when there is no tail
Loan life cover stops at debt maturity; project life cover runs to the end of the concession or the asset. On the solar preset the debt tenor is matched to the PPA, so there are fifteen years of tail and PLCR sits far above LLCR. On the availability PPP the debt runs almost to the end of the contract, the tail is two years, and the two ratios nearly converge. Same headline LLCR, completely different refinancing story — which is why the operations phase asks about the tail rather than about the ratio.
What is deliberately missing
Annual periods, not semi-annual or quarterly, so the cover ratios are slightly smoother than a real model would show. No inflation split between revenue and cost indices beyond the single escalation rates. No debt tranching, no hedging profile, no cash sweep, no equity bridge, no construction contingency drawdown logic, and a single flat tax rate with simple loss carryforward. Availability deductions are a single percentage rather than a regime.
The presets are generic parameter sets chosen to be plausible for each asset class, not market quotes, and the risk ranges are stated assumptions rather than fitted distributions. This is a framework for structuring the argument and seeing which lever matters — the transaction model is a different, longer document, and it should be built on the actual contracts.