Skip to content

Vessel Finance

Budget vs actual, forecast.

A vessel’s annual budget is a number on a spreadsheet until you start spending it. Once spending starts, the question shifts: “are we tracking, and if not, where is the variance coming from, and will it close out the year over plan?“

pro-rata accountingyear-end forecastNB fund balancecost-driver attributionvariance shape

Three numbers

NumberWhat it answers
YTD varianceAre we over or under against where we should be right now?
Year-end forecastIf nothing changes, where do we close out the year?
NB fund balanceIs there cash to keep operating?

The Vessel Finance pipeline computes all three on a rolling basis, drills to the cost categories driving the variance, and surfaces the fund-balance position so a Technical Superintendent can act before the month-end close.

Pro-rata: the trick everyone gets wrong

Comparing month-to-date spend against one-twelfth of the annual budget produces nonsense. Drydocks land in a single month; surveys cluster around certificate cycles; lube-oil bunkering happens at port calls. The pipeline uses category-aware pro-rata:

B_prorata(t) = B_annual × f_category(t)
Variance_prorata = Actual_YTD − B_prorata(t)

f_category(t) is the cumulative fraction of the annual budget expected to have been spent by time t. Crew uses a linear profile; Drydock uses a step function around the planned drydock month.

A vessel “10% over annual budget” looks alarming until pro-rata accounting shows it’s within 2% of the expected curve because the drydock landed in March.

Worked example — MV POSUN

2026 budget year, reviewed end of April:

ViewNumberVerdict
OPEX YTD pro-rata variance+$48,300 (+8.4%)Watch
Year-end forecast+$112,000 (+11.7%)Over — escalate
Top variance driverLube Oil +$16,400 (Singapore bunker Apr-12)
Second driverRepairs +$22,800 (turbocharger overhaul March)
Third driverStores +$9,100 (consumables uptick)
NB fund closing$1.2M positiveHealthy
DD fund vs planned$340k vs $850k plannedUnderfunded
Per-day OPEX$4,150$50 over fleet median

Verdict: HIGH on year-end forecast — projecting +12%, primarily repairs and the Singapore bunker outlier. DD funding gap routes to owner / commercial for attention.

Under the hood

Pro-rata implementation
def prorata_calculation(row, env):
"""Compute the pro-rata budget for a row given category and current period."""
category = row["category"]
period_end = row["period_end_date"]
annual_bud = row["annualBudget"]
today = datetime.utcnow() if env != "test" else datetime(2025, 11, 20)
# Choose the time profile by category
profile = CATEGORY_PROFILES.get(category, "linear")
if profile == "linear":
elapsed = (today - row["budget_start_date"]).days
total = (period_end - row["budget_start_date"]).days
fraction = elapsed / total
elif profile == "drydock":
# Step function — full allocation lands in planned drydock month
fraction = 1.0 if today >= row["drydock_month"] else 0.0
elif profile == "lubeoil_quarterly":
# Quarterly lumps tied to typical bunker calls
fraction = quarterly_fraction(today, row["budget_start_date"])
else:
fraction = elapsed / total
return annual_bud * fraction

The reviewer doesn’t see this calculation. They see one number: variance against the expected curve.

Year-end forecast logic
Forecast_YE = Actual_YTD + burn_rate_recent × Months_remaining

burn_rate_recent is the average monthly spend over the last 3 months.

Forecast vs annual budgetTier
≤ +5%On track
+5% to +10%Watch
+10% to +25%Over — escalate
> +25%Critical — re-forecast required

A vessel forecasting -15% under budget is also flagged — that usually means deferred maintenance storing up future cost, not genuine savings.

Cost-driver attribution — the transaction detail

When a category is over budget, the analyzer ranks the underlying transactions:

LUBE OIL — Annual budget $84,000 · YTD pro-rata $42,000
Actual $58,400 · Variance +$16,400 (+39%)
Top drivers:
1. PO LUB-2026-04-118 Singapore bunker $12,200
2. PO LUB-2026-02-073 Cylinder oil × 4 drums $4,800
3. PO LUB-2026-03-091 System oil top-up $1,200

“Lube oil over by $16k” can be a budgeting error, a price spike, a one-off bunker, or systematic overconsumption. The driver list collapses the ambiguity: “Singapore bunker drove most of it.”

Variance shape classification

Different variance shapes mean different things:

PatternLikely cause
Single-month spike, returns to baselineOne-off event (drydock, bunker, repair)
Rising trend across 3+ monthsStructural — price inflation, aging equipment, over-consumption
Stable variance, growing absolute numberVolume — more vessel days, more activity
Falling varianceRecovery or under-spend (check for deferred work)

The pipeline classifies the variance shape and adds it to the verdict so a TSI knows whether they’re chasing an event or a trend.

The five tables a reviewer reads

The Committed Cost Summary assembles five views:

  1. OPEX Current Month — spend vs pro-rata monthly budget; the most-recent-data view.
  2. OPEX Previous Month — closed prior month for trend comparison.
  3. NB (Newbuilding fund) — opening balance, receipts, expenses, closing balance.
  4. DD (Drydock fund) — reserve status (accumulating or drawn down) vs planned drydock cost.
  5. PD (Periodic drydock) — periodic drydock provision tracking.

A reviewer reading all five together can spot an OPEX overrun being absorbed by an underfunded DD reserve — a problem invisible in any single view.

NB fund and per-day OPEX

NB fund balance tracks a separate ledger from OPEX:

Closing balance = Opening + Receipts − Expenses

A vessel with NB fund running negative is a cash issue, not a budget issue — usually visible weeks before the month-end close.

Per-day OPEX answers “what does this vessel cost per operating day?”:

Per-day OPEX = OPEX_YTD / Operating_days_YTD

Comparable across vessels of the same type. A vessel at $4,200/day where the fleet median is $3,600/day is structurally more expensive — usually older equipment, higher repair burden, or longer port stays.

Escalation triggers
TriggerSeverity
Year-end forecast breach > 25%CRITICAL
Year-end forecast breach > 10%HIGH
NB fund balance turning negativeCRITICAL
DD fund underfunded vs planned drydock with < 90 daysHIGH
Single category overspend > 25%HIGH
Rising variance trend across 3+ months in any categoryHIGH
Unbudgeted spend on safety-critical itemsCRITICAL