Skip to content

SOP-027 — Budget proposal & cross-rate maintenance

Guide

<!-- last-reviewed: 2026-06-01 · owner: Finance (Finance Director) -->

SOP-027 — Budget proposal & cross-rate maintenance

SOP · owner: Finance (Finance Director). Layer: SOP/Runbook (docs/canon.md). Schema lives in docs/financial-system.md — not restated. Track-first note (2026-06-01): finance/budgets.csv and finance/rates.csv now exist with frozen header rows (finance/). By Principal decision no hard budget caps are set yet — the org logs real actuals first and sets caps after ~1 month of data (review ~2026-07); see Track-first below. The cross-rate procedure is executable today (append a rate row); the budget-proposal procedure is executable today but most scopes will have no cap on file until the caps-setting review. This is deliberate, not missing.

Interface Contract

  • Inputs: budget/rate need ← from <requesting agent/unit> · trigger: spend requested
  • Inputs: budget approval ← from Principal · trigger: spend approved
  • Inputs: per-venture / per-agent P&L report ← from Financial Analyst · trigger: review requested
  • Outputs: budget proposal → to Principal · trigger: budget proposed
  • Outputs: approved cross-rate → to Financial Analyst · trigger: spend approved
  • Outputs: budget caps → to Financial Analyst · trigger: budget proposed
  • Outputs: approved budget + rate table → to Archivist · trigger: artifact approved
  • Outputs: schema/design change → to Documentarian · trigger: document changed
  • Handoff trigger (in): a new scope needs a budget, a new model/price requires a cross-rate row, or the Principal returns a budget decision
  • Handoff trigger (out): the budget is approved and recorded in finance/budgets.csv, or the rate row is appended to finance/rates.csv
  • Definition of Done before handoff:
    • [ ] Current actuals pulled to anchor the proposal in reality (no “reasonable” budgets)
    • [ ] Budget line recorded in finance/budgets.csv only after Principal approval
    • [ ] Rate change is a new append-only row in finance/rates.csv with effective_from + rationale note
    • [ ] AI Systems Director notified if a rate change materially affects cost-optimization
    • [ ] Open usd_equiv entries after the effective date recomputed (or flagged to the Analyst)
    • [ ] Files handed to the Archivist (0 drift)

spend requested and budget proposed are registered phrases (docs/handoff-triggers.md, Wave-1 block); spend approved, artifact approved, document changed already exist. The spend requested input declares a placeholder producer (<requesting agent/unit>), making it the declared fan-in sink for spend requests: it absorbs every unit’s spend requested → Finance Director (AI Systems, Engineering, any requesting unit) as matched (fan-in), not a dangling dependency (interface-contract-spec.md §3.1 R1).

Purpose

Set or revise a budget, and keep the cross-rate table current, so spend has an approved cap to check against (SOP-026 step 2) and AI usage converts to dollars accurately. Budgets are never self-approved; the rate table is append-only.

When to use

  • A scope (unit / venture / phase) needs a budget that does not exist.
  • A new model is released or Anthropic pricing changes (a cross-rate update).
  • An existing budget needs revising against actuals.

Track-first (Principal-approved 2026-06-01)

By Principal decision the org is in a track-first phase: stand up the ledgers and log real actuals (Vercel deploy credits per ADR-0009, AI token spend, Neon per ADR-0014) before setting hard caps. Consequence for this SOP:

  • Do not invent caps. Most scopes will have no cap line in finance/budgets.csv, and that is correct, not a gap. The only standing row is the materiality-threshold policy marker (scope org), which is not a spend cap — it is the escalation boundary used by SOP-026.
  • Caps come after ~1 month of data (review target ~2026-07). When that review runs, the budget-proposal procedure below applies normally: pull the accumulated actuals, draft specific actuals-anchored caps, get Principal approval, record.
  • Until then the spend-materiality threshold (SOP-026: one-time <$50, recurring <$20/mo) is the only active spend control; “burn vs. budget” reporting says “no cap on file — track-first phase” rather than fabricating a denominator.

The cross-rate procedure is fully active now — it does not wait on caps; a rate row is needed the moment any AI usage is logged so usd_equiv is computable.

Flow

flowchart LR
  N["Need:<br/>budget or rate"] --> T{"Which?"}
  T -->|budget| A["Pull actuals →<br/>draft cap + rationale"]
  A --> P["Principal approves"]
  P --> B["Record in<br/>budgets.csv"]
  T -->|rate| R["Append row to<br/>rates.csv (new effective_from)"]
  R --> RC["Recompute open<br/>usd_equiv entries"]
  classDef s fill:#1d4ed8,color:#fff,stroke:#1e3a8a
  classDef d fill:#0f766e,color:#fff,stroke:#134e4a
  class N,A,P,B,R,RC s
  class T d

Text fallback: a need arrives → is it a budget or a rate? Budget: pull actuals, draft a specific cap + rationale, get Principal approval, record in finance/budgets.csv. Rate: append a new row to finance/rates.csv with a new effective_from and a rationale note, then recompute open usd_equiv entries after that date.

Steps

Budget proposal:

  1. Understand the scope (unit / venture / phase) and the period.
  2. Pull current actuals for the scope to anchor the proposal in reality.
  3. Draft the budget line — money cap and AI cap with a specific rationale (“$50/mo on ~10M Sonnet tokens”), not “reasonable.”
  4. Present to the Principal for explicit approval (budgets are not self-approved).
  5. Record in finance/budgets.csv only after approval; hand off to the Archivist.

Cross-rate update:

  1. Identify the model, the new $/unit rate, the effective date, and the source (Anthropic pricing page, invoice).
  2. Append a new row to finance/rates.csv — never overwrite (historical rates reconcile past usage).
  3. Recompute any open usd_equiv entries that used the old rate and fall after the new effective date (assign to the Analyst).
  4. Note the rationale in the row’s note field (model update / price change / correction).
  5. Notify the AI Systems Director if the change materially affects their cost-optimization recommendations; hand off to the Archivist.

Roles / approvers

The Finance Director drafts and owns both procedures. Budgets require Principal approval. The Financial Analyst may pull actuals, draft a rate row, and perform recomputation — but the Finance Director approves the rate change (SOP-028 defers the approval here).

Guardrails

  • Budgets are never self-approved — Principal approval precedes any finance/budgets.csv write.
  • The rate table is append-only — a new rate is a new row, never an edit.
  • Specific or it is not a budget — actuals-anchored caps only.
  • Schema/design changes route through the Documentarian (one home: docs/financial-system.md).
  • Retention/immutability rules wait on Legal & Compliance — Finance does not define them.

See also: SOP-026 (spend approval) · SOP-028 (ledger upkeep) · docs/units/finance/charter.md · docs/financial-system.md.