SSM-Audit Q&A Series – Lenders & Project Finance (Question 37)

Construction draws are on plan, yet covenant headroom feels thin

Question
Our project’s construction draws match the schedule and monthly reports read green. But cost-to-complete keeps nudging up, milestone verification lags after site checks, change orders bunch late, and the lender’s DSCR cushion feels tight as rates move. Why does financing feel riskier when the draw curve is on plan?

Answer ✅
Draw totals can mask stability cracks. If site verification slips, cost-to-complete becomes volatile, hedge rolls drift, or change orders cluster, you can “meet the schedule” while predictability and covenant headroom thin. SSM-Audit adds a stability band beside the KPIs you already track so you can tell whether delivery is calm and repeatable—or ticking toward waivers and re-pricing.

What the bands would have shown 📊
Drawdown cadence sliding A+ -> A0 (end-month bunching to hit plan)
Verification timeliness degrading to A- (site/auditor confirmations lag disbursements)
Cost-to-complete stability weakening A0 -> A- (variance widens on materials/labor)
Change-order cadence tilting A0 -> A- (scope adds cluster late in phases)
DSCR stability dipping A0 -> A- (rate moves and ramp delays reduce cushion)
Covenant headroom softening A+ -> A0 (tight NCF vs tests as contingencies draw)

What to do now 🛠️

  1. Band the lender panel: draws, verification timeliness, cost-to-complete, change-order cadence, DSCR stability, covenant headroom—review weekly.
  2. Gate by evidence: if verification band < A0, throttle disbursements until confirmations catch up; publish lead/lag days.
  3. Stabilize cost-to-complete: when CtC band < A0, freeze non-critical scope and re-bid high-vol items; protect contingency.
  4. De-spike change orders: require mid-phase scope locks; large adds need parallel value engineering if the band slips.
  5. Hedge discipline: if DSCR band < A0, extend/ladder hedges and align interest resets to revenue ramp.
  6. Protect headroom: set a covenant early-warning trigger at A0; escalate to sponsor equity top-ups before tests breach.

How SSM-Audit helps (practicalities) 🌟
No additional infrastructure: runs beside your owner’s rep logs, QS reports, lender draw files, and schedules.
Numbers unchanged: draw amounts, CtC, and DSCR stay the same; stability is a read-only overlay.
Easy to use: spreadsheet/BI friendly; one lightweight weekly review with owner, EPC, QS, and lender.
Universal language: A++ / A+ / A0 / A- / A– aligns sponsors, lenders, and builders fast.

CLI 💻 — try our mini CLI to identify the drift
Feed your CSVs and see bands and drift at a glance (numbers unchanged).

# Drawdown cadence (intra-month smoothness)
ssm_audit_mini_calc project.csv --kpi "Drawdown Cadence" \
  --out bands_draws.csv --plot_kpi "Drawdown Cadence" --build_id proj

# Verification timeliness (days: site/auditor confirm -> disburse)
ssm_audit_mini_calc project.csv --kpi "Verification Timeliness" \
  --out bands_verify.csv --plot_kpi "Verification Timeliness" --build_id proj

# Cost-to-complete stability (variance-normalized)
ssm_audit_mini_calc project.csv --kpi "Cost-to-Complete Stability" \
  --out bands_ctc.csv --plot_kpi "Cost-to-Complete Stability" --build_id proj

# Change-order cadence (adds vs plan, bunching)
ssm_audit_mini_calc project.csv --kpi "Change-Order Cadence" \
  --out bands_change.csv --plot_kpi "Change-Order Cadence" --build_id proj

# DSCR stability (rolling DSCR under current rate path)
ssm_audit_mini_calc project.csv --kpi "DSCR Stability" \
  --out bands_dscr.csv --plot_kpi "DSCR Stability" --build_id proj

# Covenant headroom (distance to tests, normalized)
ssm_audit_mini_calc project.csv --kpi "Covenant Headroom Stability" \
  --out bands_covenant.csv --plot_kpi "Covenant Headroom Stability" --build_id proj

Outputs you will get:
• CSVs with stability bands for each timestamp (e.g., bands_ctc.csv).
• Drift charts per KPI (--plot_kpi) showing exactly where financing predictability thins.
• Optional alerts if you enable thresholds in your setup.

Technical notes

Representation: x = (m, a) with a in (-1, +1)
Collapse parity: phi((m,a)) = m
Order-invariant pooling:
  U = sum(w_i * atanh(a_i))
  W = sum(w_i)
  a_out = tanh( U / max(W, eps_w) )

Typical bands (example):
  A++: a >= 0.75
  A+:  0.50 - 0.75
  A0:  0.25 - 0.50
  A-:  0.10 - 0.25
  A--: a < 0.10

Navigation
Back: SSM-Audit Q&A Series – Credit Rating Agencies (Question 36)
Next: SSM-Audit Q&A Series – Exchanges & Regulators (Question 38)

Page disclaimer
Illustrative scenario for research and education. Observation-only; do not use for critical decisions without independent validation.