Project Finance & Financial ModellingFinancial modelling structure and best practice · Lesson 9 of 20
Building revenue, costs, tax and cash flow
Video lecture
Building revenue, costs, tax and cash flow
The narrated lecture is in production
Every chapter is scripted and ready. Browse the chapters and read the full transcript now — the video will appear here when it’s published.
Chapters
Transcript of the narration, chapter by chapter.
0:00 From megawatts to CFADS
Every project finance deal eventually comes down to one line in the model: cash flow available for debt service, or CFADS. It decides how much debt the project can raise, whether covenants are met and when equity gets paid. And it's built from a chain of simpler calculations: output, price, indexation, operating costs, working capital and tax. Get any link in that chain wrong, and the error flows straight through to debt sizing. In this lecture you'll learn how to build revenue logic that follows the contract, how indexation factors work, how to structure operating costs, why working capital and tax matter more than people expect, and how to arrive at CFADS exactly as the loan agreement defines it. By the end, you'll be able to reconcile a first operating year by hand.
0:58 Why it matters
Why does this matter? Because CFADS is the engine room. Lenders size debt by dividing CFADS by a target coverage ratio, so every one per cent of CFADS error becomes roughly one per cent of debt capacity. Covenants are tested on it. Distributions depend on it. And it must follow the contracts. Revenue isn't 'capacity times price'. It's whatever the power purchase agreement, concession or payment mechanism says, including deductions, caps and indexation. Early years are especially sensitive, because working capital builds up and tax allowances kick in, so a first-year ratio can look quite different from a steady-state one.
1:41 The concept: revenue follows the contract
Here's the key idea: revenue logic follows the contract. Think of it like reading a recipe exactly rather than cooking from memory. Availability-based contracts, common in PPPs, pay for making the asset available to a standard, less deductions for unavailability or poor performance. Volume-times-price contracts pay for energy sold or vehicles using a toll road, times a tariff. Some power contracts use capacity plus energy: a capacity payment for being available, plus an energy payment for each unit delivered. Whatever the structure, give each component its own row: volume, price, indexation and deductions. For a solar plant, output equals capacity, times hours, times capacity factor, times availability, times one minus degradation to the power of the year. Revenue equals output times the indexed tariff, times the operations flag.
2:37 Indexation, opex and working capital
Contracts index prices and costs to inflation or exchange rates, so build an indexation factor row for each index: this period's factor equals last period's factor times one plus the rate, starting at one at the contract's base date. Getting the base date or the lag wrong is one of the most common errors auditors find. Operating costs come next: separate fixed and variable, each with its own indexation. The O and M fixed fee, variable O and M per megawatt hour, insurance, land lease, SPV administration, and lifecycle costs like an inverter replacement in year twelve. Lumpy lifecycle costs are often smoothed by a maintenance reserve account. Then working capital. Revenue is rarely received immediately, perhaps forty-five to sixty days later, and costs are paid perhaps thirty days later. The build-up of receivables in year one reduces cash available for debt service.
3:39 Lifecycle costs and the maintenance reserve
One cost category deserves special attention: lifecycle, or major maintenance. Solar inverters, turbine gearboxes, gas turbine overhauls and road resurfacing don't happen every year. They arrive as big, lumpy spikes. If you let a spike hit CFADS directly, DSCR in that year can plunge, even though nothing is wrong with the asset. So lenders usually require a maintenance reserve account. The project sets aside cash in the years before the spike, and draws it down when the work happens, which smooths the effect on debt service cover. In the model, that means three rows: the forecast lifecycle cost, contributions to the reserve, and releases from it. Then read the loan agreement carefully, because CFADS definitions differ on whether reserve contributions and releases sit inside or outside CFADS. Get that wrong, and your DSCRs are wrong in exactly the years lenders look at most closely.
4:42 Worked example one: a first operating year
Let's build a first operating year from the lesson, with illustrative numbers. A fifty megawatt solar plant in the UAE. Capacity factor, twenty-four per cent. Availability, ninety-nine per cent. We'll ignore first-year degradation. Tariff, forty dollars per megawatt hour. Output: fifty megawatts, times eight thousand seven hundred and sixty hours, times nought point two four, times nought point nine nine. About one hundred and four thousand megawatt hours. Revenue: times forty dollars, about four point one six million. Operating costs, including fixed O and M, insurance, lease and admin: about nought point nine five million. Tax: assume none payable in year one because of allowances, which is illustrative. Working capital: receivables build by about half a million, roughly forty-five days of revenue. So CFADS is about two point seven one million. Notice how much the working-capital build reduces year one.
5:43 Worked example two: tax and CFADS definitions
Now the harder part: tax and definitions. Taxable profit is revenue minus operating costs, minus tax depreciation or capital allowances, minus deductible interest, subject to any limits, plus or minus other adjustments. Then losses carried forward, with their limits, tax holidays in some sectors, withholding taxes on interest or dividends paid abroad, and indirect taxes like VAT, which mainly affect cash timing. Regimes differ a lot. The UAE introduced a federal corporate tax regime in twenty twenty-three. Saudi Arabia applies zakat and income tax depending on ownership. Pakistan and the UK have their own corporate tax and allowance rules, and US projects may use federal incentives under current law. Always get tax advice and have the logic reviewed. And finally, CFADS must follow the loan agreement's definition exactly, including which reserve movements are in or out.
6:42 Watch me do it: a CFADS build in a spreadsheet
Let me show you the operating block. First row: output, using capacity, hours, capacity factor, availability and degradation, times the operations flag. Next: the base tariff, times the index factor row, gives the tariff in each period. Revenue is output times tariff divided by a thousand, to put it in thousands of dollars. Then each opex line with its own index. Tax paid, linked from the tax sheet. Working capital: receivables are revenue times collection days over days in the period, and the movement is this period's balance minus last period's. CFADS is revenue, minus opex, minus tax, minus the increase in working capital. Then the habit that catches the most errors: in a side panel, I recalculate the first full operating year by hand, on one page. If my hand figure and the model's CFADS differ by more than rounding, something's wrong, and I find it before a lender does.
7:48 Common mistakes, recap and try this now
The common mistakes. Revenue formulas that ignore contract deductions or caps. Wrong indexation base dates. Ignoring working capital in the first year. Tax modelled as a flat percentage of revenue. And defining CFADS differently from the loan agreement. So, to recap. Build revenue the way the contract pays, one component per row. Create index factors with the right base date and lag. Separate fixed, variable and lifecycle costs. Model working capital and tax properly. And make CFADS match the loan agreement's definition. Reconcile the first operating year by hand every time you change the model. Your try-this-now: build a one-year revenue and CFADS calculation for a small asset, such as rooftop solar or a rental property, using the template in the lesson, and state every assumption with its source.
The operating model
Once structure and timing are in place, build the operating cash flows that everything else depends on.
Revenue
Revenue logic follows the contract:
- Availability-based (many PPPs): payment for making the asset available to specified standards, less deductions for unavailability or poor performance.
- Volume × price (e.g., energy sold × tariff; vehicles × toll).
- Capacity + energy (some power contracts): a capacity payment for being available plus an energy payment per unit delivered.
Each component should have its own row: volume, price, indexation, deductions.
Energy output (MWh) = capacity (MW) × hours × capacity factor × availability × (1 − degradation)^(years)
Tariff (USD/MWh) = base tariff × indexation factor
Revenue (USD 000) = output × tariff / 1,000 × operations flagIndexation
Contracts often index prices and costs to inflation indices (CPI, local wage indices, USD exchange rates). Build an indexation factor row per index: factor_t = factor_(t−1) × (1 + rate_t), starting at 1.0 at the base date. Use the right base date and lag specified in the contract.
Operating costs
Separate fixed and variable costs, each with its own indexation:
| Cost | Driver | Indexation |
|---|---|---|
| O&M contract fixed fee | Per period | Contract index |
| Variable O&M | Per MWh or per unit | Contract index |
| Insurance | Per period, % of asset value | Market assumption |
| Land lease | Per period | Lease terms |
| SPV management and admin | Per period | CPI |
| Lifecycle / major maintenance | Scheduled (e.g., inverter replacement year 12) | Relevant index |
Lifecycle costs are lumpy; lenders often require a maintenance reserve account (MRA) to smooth them.
Working capital
Revenue is rarely received immediately and costs are rarely paid immediately. Model receivables (e.g., 45–60 days) and payables (e.g., 30 days). Working capital movements reduce or increase cash available for debt service.
Tax
Tax logic depends on jurisdiction and can be complex. Model the key elements:
- Taxable profit = revenue − opex − tax depreciation (capital allowances) − deductible interest (subject to limits) ± other adjustments.
- Tax losses carried forward (and their limits).
- Tax holidays or exemptions available in some jurisdictions for certain sectors.
- Withholding taxes on interest or dividends paid abroad.
- Indirect taxes such as VAT/GST/sales tax, which mainly affect cash timing.
Corporate tax regimes vary: for example, the UAE introduced a federal corporate tax regime in 2023; KSA applies zakat and income tax depending on ownership; Pakistan and the UK have their own corporate tax and allowance rules; US projects may use federal tax credits and incentives under current law. Always obtain tax advice and have the tax logic reviewed.
From revenue to CFADS
The key operating output is cash flow available for debt service (CFADS):
Revenue
− Operating costs (incl. lifecycle costs, or + release from MRA)
− Tax paid
± Working capital movements
= CFADSCFADS is typically defined precisely in the loan agreement; the model must follow that definition. (Some definitions exclude certain items or include reserve releases.)
Worked example: first operating year
Illustrative. A 50 MW solar plant in the UAE; capacity factor 24%; availability 99%; first-year degradation ignored; tariff USD 40/MWh.
Output = 50 × 8,760 × 0.24 × 0.99 ≈ 104,069 MWh
Revenue = 104,069 × 40 ≈ USD 4.16M
Opex (fixed O&M, insurance, lease, admin) ≈ USD 0.95M
Tax: assume none payable in year 1 due to allowances (illustrative)
Working capital: receivables increase ≈ USD 0.5M (45 days of revenue)
CFADS ≈ 4.16 − 0.95 − 0.5 ≈ USD 2.71MIn later years, working capital stabilises, degradation reduces output slightly and indexation adjusts tariff and costs.
Common mistakes
- Revenue formulas that ignore contract deductions or caps.
- Wrong indexation base dates.
- Ignoring working capital in the first year.
- Tax modelled as a flat percentage of revenue.
- Defining CFADS differently from the loan agreement.
Quick self-check
Reconcile your first full operating year by hand: output, revenue, each opex line, tax and working capital. If you cannot reproduce the model's CFADS within a small rounding difference on a single page, something in the logic is either wrong or too complex to audit. This simple habit catches a surprising share of errors, including wrong indexation base dates and flags switched on in the wrong period.
Hands-on: an operating block in Excel
Inputs: MW, CF (capacity factor), Avail, Degr (annual), Tariff_base, Index_rate, Opex_fixed, Opex_var_per_MWh, DSO (days)
Output (MWh) =MW*Hours_in_period*CF*Avail*(1-Degr)^(Op_year-1)*Ops_flag
Index factor F: =1 at base date ; G: =F_idx*(1+Index_rate)^(Period_years) (per contract base date and lag)
Tariff =Tariff_base*Index_factor
Revenue (000) =Output*Tariff/1000
Opex (000) =(Opex_fixed*Period_years + Opex_var_per_MWh*Output/1000)*Opex_index*Ops_flag
Receivables =Revenue*DSO/Days_in_period
WC movement =Receivables - Receivables_prev - (Payables - Payables_prev)
CFADS =Revenue - Opex - Tax_paid - WC_movement (align to the loan agreement definition)Hands-on: the first-year reconciliation in Python
mw, hours, cf, avail = 50, 8760, 0.24, 0.99
tariff = 40 # USD/MWh, illustrative
opex = 0.95e6 # fixed O&M, insurance, lease, admin (illustrative)
dso = 45 # days of revenue outstanding at year end
output = mw * hours * cf * avail
revenue = output * tariff
receivables_build = revenue * dso / 365
tax_paid = 0.0 # illustrative: allowances shelter year 1
cfads = revenue - opex - tax_paid - receivables_build
print(f"Output {output:,.0f} MWh | Revenue {revenue/1e6:.2f}M | WC {receivables_build/1e6:.2f}M | CFADS {cfads/1e6:.2f}M")Output: about 104,069 MWh, revenue 4.16M, working-capital build 0.51M and CFADS about 2.70M (the lesson rounds the build to 0.5M, giving 2.71M). Match your model to this kind of one-page check.
How to measure success
- First operating year reconciles by hand within rounding.
- Every index has a documented base date and lag from the contract.
- The CFADS row matches the loan agreement definition, confirmed by the model auditor.
Key takeaways
- Model revenue as the contract defines it: availability, volume × price, or capacity + energy.
- Build separate indexation factors and split fixed, variable and lifecycle costs.
- Include working capital and jurisdiction-specific tax logic, reviewed by tax advisers.
- CFADS = revenue − opex − tax ± working capital, as defined in the loan agreement.
Check your understanding
Quick questions to lock in the lesson. They don’t count towards your certificate.
Put it into practice
Build a one-year revenue and CFADS calculation for a small asset (e.g., rooftop solar or a rental property) using the template, stating every assumption.
Enrol for free to save your progress
Reading is always free. Enrol to keep your place, take the final assessment and earn a verifiable certificate.