<!-- 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 indocs/financial-system.md— not restated. Track-first note (2026-06-01):finance/budgets.csvandfinance/rates.csvnow 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 tofinance/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.csvonly after Principal approval - [ ] Rate change is a new append-only row in
finance/rates.csvwitheffective_from+ rationalenote - [ ] AI Systems Director notified if a rate change materially affects cost-optimization
- [ ] Open
usd_equiventries after the effective date recomputed (or flagged to the Analyst) - [ ] Files handed to the Archivist (0 drift)
spend requestedandbudget proposedare registered phrases (docs/handoff-triggers.md, Wave-1 block);spend approved,artifact approved,document changedalready exist. Thespend requestedinput declares a placeholder producer (<requesting agent/unit>), making it the declared fan-in sink for spend requests: it absorbs every unit’sspend requested → Finance Director(AI Systems, Engineering, any requesting unit) asmatched (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 themateriality-thresholdpolicy marker (scopeorg), 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:
- Understand the scope (unit / venture / phase) and the period.
- Pull current actuals for the scope to anchor the proposal in reality.
- Draft the budget line — money cap and AI cap with a specific rationale (“$50/mo on ~10M Sonnet tokens”), not “reasonable.”
- Present to the Principal for explicit approval (budgets are not self-approved).
- Record in
finance/budgets.csvonly after approval; hand off to the Archivist.
Cross-rate update:
- Identify the model, the new $/unit rate, the effective date, and the source (Anthropic pricing page, invoice).
- Append a new row to
finance/rates.csv— never overwrite (historical rates reconcile past usage). - Recompute any open
usd_equiventries that used the old rate and fall after the new effective date (assign to the Analyst). - Note the rationale in the row’s
notefield (model update / price change / correction). - 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.csvwrite. - 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.