generated from coulomb/repo-seed
Refactor economics to expense-record ledger with correct Bubble cost
Replace pre-aggregated costs.json with expense_records.json (48 line-item records) and payment_records.json. All monthly and cumulative totals are computed deterministically in observatory/ledger.py. Correct Bubble.io to $32/mo (since Feb 2025) — infrastructure €69.44/mo not €72.20.
This commit is contained in:
489
projects/coulomb-pricing/data/expense_records.json
Normal file
489
projects/coulomb-pricing/data/expense_records.json
Normal file
@@ -0,0 +1,489 @@
|
||||
{
|
||||
"version": 1,
|
||||
"fx_rates": {
|
||||
"USD/EUR": "0.92"
|
||||
},
|
||||
"records": [
|
||||
{
|
||||
"id": "exp-bubble-2025-03",
|
||||
"period": "2025-03",
|
||||
"vendor": "bubble.io",
|
||||
"description": "Bubble.io Personal plan ($32/mo since Feb 2025)",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "32.00",
|
||||
"currency": "USD",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-domains-2025-03",
|
||||
"period": "2025-03",
|
||||
"vendor": "domains",
|
||||
"description": "Domain registrations",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "15.00",
|
||||
"currency": "EUR",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-overhead-2025-03",
|
||||
"period": "2025-03",
|
||||
"vendor": "operational-overhead",
|
||||
"description": "Operational overhead",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "25.00",
|
||||
"currency": "EUR",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-bubble-2025-04",
|
||||
"period": "2025-04",
|
||||
"vendor": "bubble.io",
|
||||
"description": "Bubble.io Personal plan ($32/mo since Feb 2025)",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "32.00",
|
||||
"currency": "USD",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-domains-2025-04",
|
||||
"period": "2025-04",
|
||||
"vendor": "domains",
|
||||
"description": "Domain registrations",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "15.00",
|
||||
"currency": "EUR",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-overhead-2025-04",
|
||||
"period": "2025-04",
|
||||
"vendor": "operational-overhead",
|
||||
"description": "Operational overhead",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "25.00",
|
||||
"currency": "EUR",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-bubble-2025-05",
|
||||
"period": "2025-05",
|
||||
"vendor": "bubble.io",
|
||||
"description": "Bubble.io Personal plan ($32/mo since Feb 2025)",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "32.00",
|
||||
"currency": "USD",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-domains-2025-05",
|
||||
"period": "2025-05",
|
||||
"vendor": "domains",
|
||||
"description": "Domain registrations",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "15.00",
|
||||
"currency": "EUR",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-overhead-2025-05",
|
||||
"period": "2025-05",
|
||||
"vendor": "operational-overhead",
|
||||
"description": "Operational overhead",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "25.00",
|
||||
"currency": "EUR",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-bubble-2025-06",
|
||||
"period": "2025-06",
|
||||
"vendor": "bubble.io",
|
||||
"description": "Bubble.io Personal plan ($32/mo since Feb 2025)",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "32.00",
|
||||
"currency": "USD",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-domains-2025-06",
|
||||
"period": "2025-06",
|
||||
"vendor": "domains",
|
||||
"description": "Domain registrations",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "15.00",
|
||||
"currency": "EUR",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-overhead-2025-06",
|
||||
"period": "2025-06",
|
||||
"vendor": "operational-overhead",
|
||||
"description": "Operational overhead",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "25.00",
|
||||
"currency": "EUR",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-bubble-2025-07",
|
||||
"period": "2025-07",
|
||||
"vendor": "bubble.io",
|
||||
"description": "Bubble.io Personal plan ($32/mo since Feb 2025)",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "32.00",
|
||||
"currency": "USD",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-domains-2025-07",
|
||||
"period": "2025-07",
|
||||
"vendor": "domains",
|
||||
"description": "Domain registrations",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "15.00",
|
||||
"currency": "EUR",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-overhead-2025-07",
|
||||
"period": "2025-07",
|
||||
"vendor": "operational-overhead",
|
||||
"description": "Operational overhead",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "25.00",
|
||||
"currency": "EUR",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-bubble-2025-08",
|
||||
"period": "2025-08",
|
||||
"vendor": "bubble.io",
|
||||
"description": "Bubble.io Personal plan ($32/mo since Feb 2025)",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "32.00",
|
||||
"currency": "USD",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-domains-2025-08",
|
||||
"period": "2025-08",
|
||||
"vendor": "domains",
|
||||
"description": "Domain registrations",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "15.00",
|
||||
"currency": "EUR",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-overhead-2025-08",
|
||||
"period": "2025-08",
|
||||
"vendor": "operational-overhead",
|
||||
"description": "Operational overhead",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "25.00",
|
||||
"currency": "EUR",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-bubble-2025-09",
|
||||
"period": "2025-09",
|
||||
"vendor": "bubble.io",
|
||||
"description": "Bubble.io Personal plan ($32/mo since Feb 2025)",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "32.00",
|
||||
"currency": "USD",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-domains-2025-09",
|
||||
"period": "2025-09",
|
||||
"vendor": "domains",
|
||||
"description": "Domain registrations",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "15.00",
|
||||
"currency": "EUR",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-overhead-2025-09",
|
||||
"period": "2025-09",
|
||||
"vendor": "operational-overhead",
|
||||
"description": "Operational overhead",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "25.00",
|
||||
"currency": "EUR",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-bubble-2025-10",
|
||||
"period": "2025-10",
|
||||
"vendor": "bubble.io",
|
||||
"description": "Bubble.io Personal plan ($32/mo since Feb 2025)",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "32.00",
|
||||
"currency": "USD",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-domains-2025-10",
|
||||
"period": "2025-10",
|
||||
"vendor": "domains",
|
||||
"description": "Domain registrations",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "15.00",
|
||||
"currency": "EUR",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-overhead-2025-10",
|
||||
"period": "2025-10",
|
||||
"vendor": "operational-overhead",
|
||||
"description": "Operational overhead",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "25.00",
|
||||
"currency": "EUR",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-bubble-2025-11",
|
||||
"period": "2025-11",
|
||||
"vendor": "bubble.io",
|
||||
"description": "Bubble.io Personal plan ($32/mo since Feb 2025)",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "32.00",
|
||||
"currency": "USD",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-domains-2025-11",
|
||||
"period": "2025-11",
|
||||
"vendor": "domains",
|
||||
"description": "Domain registrations",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "15.00",
|
||||
"currency": "EUR",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-overhead-2025-11",
|
||||
"period": "2025-11",
|
||||
"vendor": "operational-overhead",
|
||||
"description": "Operational overhead",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "25.00",
|
||||
"currency": "EUR",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-bubble-2025-12",
|
||||
"period": "2025-12",
|
||||
"vendor": "bubble.io",
|
||||
"description": "Bubble.io Personal plan ($32/mo since Feb 2025)",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "32.00",
|
||||
"currency": "USD",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-domains-2025-12",
|
||||
"period": "2025-12",
|
||||
"vendor": "domains",
|
||||
"description": "Domain registrations",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "15.00",
|
||||
"currency": "EUR",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-overhead-2025-12",
|
||||
"period": "2025-12",
|
||||
"vendor": "operational-overhead",
|
||||
"description": "Operational overhead",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "25.00",
|
||||
"currency": "EUR",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-bubble-2026-01",
|
||||
"period": "2026-01",
|
||||
"vendor": "bubble.io",
|
||||
"description": "Bubble.io Personal plan ($32/mo since Feb 2025)",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "32.00",
|
||||
"currency": "USD",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-domains-2026-01",
|
||||
"period": "2026-01",
|
||||
"vendor": "domains",
|
||||
"description": "Domain registrations",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "15.00",
|
||||
"currency": "EUR",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-overhead-2026-01",
|
||||
"period": "2026-01",
|
||||
"vendor": "operational-overhead",
|
||||
"description": "Operational overhead",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "25.00",
|
||||
"currency": "EUR",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-bubble-2026-02",
|
||||
"period": "2026-02",
|
||||
"vendor": "bubble.io",
|
||||
"description": "Bubble.io Personal plan ($32/mo since Feb 2025)",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "32.00",
|
||||
"currency": "USD",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-domains-2026-02",
|
||||
"period": "2026-02",
|
||||
"vendor": "domains",
|
||||
"description": "Domain registrations",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "15.00",
|
||||
"currency": "EUR",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-overhead-2026-02",
|
||||
"period": "2026-02",
|
||||
"vendor": "operational-overhead",
|
||||
"description": "Operational overhead",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "25.00",
|
||||
"currency": "EUR",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-bubble-2026-03",
|
||||
"period": "2026-03",
|
||||
"vendor": "bubble.io",
|
||||
"description": "Bubble.io Personal plan ($32/mo since Feb 2025)",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "32.00",
|
||||
"currency": "USD",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-domains-2026-03",
|
||||
"period": "2026-03",
|
||||
"vendor": "domains",
|
||||
"description": "Domain registrations",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "15.00",
|
||||
"currency": "EUR",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-overhead-2026-03",
|
||||
"period": "2026-03",
|
||||
"vendor": "operational-overhead",
|
||||
"description": "Operational overhead",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "25.00",
|
||||
"currency": "EUR",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-bubble-2026-04",
|
||||
"period": "2026-04",
|
||||
"vendor": "bubble.io",
|
||||
"description": "Bubble.io Personal plan ($32/mo since Feb 2025)",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "32.00",
|
||||
"currency": "USD",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-domains-2026-04",
|
||||
"period": "2026-04",
|
||||
"vendor": "domains",
|
||||
"description": "Domain registrations",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "15.00",
|
||||
"currency": "EUR",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-overhead-2026-04",
|
||||
"period": "2026-04",
|
||||
"vendor": "operational-overhead",
|
||||
"description": "Operational overhead",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "25.00",
|
||||
"currency": "EUR",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-bubble-2026-05",
|
||||
"period": "2026-05",
|
||||
"vendor": "bubble.io",
|
||||
"description": "Bubble.io Personal plan ($32/mo since Feb 2025)",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "32.00",
|
||||
"currency": "USD",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-domains-2026-05",
|
||||
"period": "2026-05",
|
||||
"vendor": "domains",
|
||||
"description": "Domain registrations",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "15.00",
|
||||
"currency": "EUR",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-overhead-2026-05",
|
||||
"period": "2026-05",
|
||||
"vendor": "operational-overhead",
|
||||
"description": "Operational overhead",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "25.00",
|
||||
"currency": "EUR",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-bubble-2026-06",
|
||||
"period": "2026-06",
|
||||
"vendor": "bubble.io",
|
||||
"description": "Bubble.io Personal plan ($32/mo since Feb 2025)",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "32.00",
|
||||
"currency": "USD",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-domains-2026-06",
|
||||
"period": "2026-06",
|
||||
"vendor": "domains",
|
||||
"description": "Domain registrations",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "15.00",
|
||||
"currency": "EUR",
|
||||
"source": "manual"
|
||||
},
|
||||
{
|
||||
"id": "exp-overhead-2026-06",
|
||||
"period": "2026-06",
|
||||
"vendor": "operational-overhead",
|
||||
"description": "Operational overhead",
|
||||
"cost_class": "infrastructure",
|
||||
"amount": "25.00",
|
||||
"currency": "EUR",
|
||||
"source": "manual"
|
||||
}
|
||||
],
|
||||
"note": "Source-of-truth expense ledger. Aggregations are computed by observatory/ledger.py \u2014 never hand-edited totals."
|
||||
}
|
||||
Reference in New Issue
Block a user