Rufineer v0.43.0
Account
Browse the docs

Example 10 of 13

Upstream oil: PSC and reserve-based loan

Based on Oil Exercise.xlsx + Oil Project with Reserve Based Loan.xlsm

Two workbooks from the upstream folder combined into one model. The first works through production-sharing terms: cost recovery, profit oil on a sliding scale or an R-factor, royalty, milestone bonuses and a tax holiday. The second finances a Nigerian field with a reserve-based loan whose borrowing base is the present value of remaining reserves. Design example: written in the full v0.5 language. The compiler builds the working core today, so this one doesn't compile yet. Source: examples/design/oil/.

Library
A. Featured Models / D. Upstream Oil (33 files): Production Payment, Nigeria Oil Examples
Fiscal terms
53 MMbbl reserves; profit share 55% → 10% on cumulative production, or 50% → 15% on the R-factor; royalty 2% → 14%; 25% tax after a 5-year holiday
Bonuses
Signing 2, commercial declaration 3, 25 MMbbl produced 5, 50 MMbbl produced 7
Field
Oil at USD 44/bbl with a hedge at 45, fixed cost 250 a year, variable USD 10/bbl (workbook units)
Debt
45% debt to capital, LIBOR 2% + 5%, 9-year tenor, PLCR 1.5x, LLCR 1.35x, reserves discounted at 8%
Rebuild shown
5 files, 116 lines

Where each sheet goes

Workbook sheetsRufineer
Assumptions, Production Curvesinputs.rfn and the Production, Sliding scale, R-factor and Royalty sheets
Cost Recovery Accounta balance with .available in psc.rfn
Profit Sharing, Sliding Scale, R Factor, Royaltybands in psc.rfn
Bonusesthree event lines
IncomeTaxpsc.rfn
Operating Analysis (hedged and unhedged)field.rfn with hedge
Borrowing Base, Financing Inputsrbl.rfn with pv_ahead and | sampled

Source 5 files shown, 116 lines

model.rfn
model "Upstream Oil: PSC and RBL" {
  currency  USD
  currency  NGN
  unit      kUSD = 1_000 USD
  unit      MMbbl = 1_000_000 bbl
  data      "oil_inputs.xlsx"
}

timeline {
  start          2020-01-01
  development    1m
  construction   3m
  operations     15y
  step           month until operations.start, then year
}

fx NGN/USD = ppp(450, local: inputs.macro.ngn_cpi, foreign: inputs.macro.us_cpi)

What this model needed from the language

  • Recovering up to a cap. The cost-recovery account is a balance that pays out min(available, cap × revenue). The same pattern covers tax losses and deferred fees.
  • Sliding scales and R-factors. bands reads a threshold table from the data workbook, so changing the fiscal terms changes no source.
  • Milestones. Bonuses at 25 and 50 MMbbl are events on cumulative production.
  • A borrowing base. pv_ahead gives the PV of remaining reserves in every period, and | sampled every 6m fixes it between redeterminations.
  • Unit-of-production depreciation and hedge from the standard library.