diff --git a/projects/coulomb-pricing/README.md b/projects/coulomb-pricing/README.md index 8644f1d..41880fb 100644 --- a/projects/coulomb-pricing/README.md +++ b/projects/coulomb-pricing/README.md @@ -22,10 +22,10 @@ computes all totals programmatically (`ledger.py` → `economics.py`). | Pricing models | `data/pricing-models.json` | | Membership | `data/membership.json` | -**Current reality:** infrastructure from January 2025 — domains **€6.75/mo** -(`coulomb.social` €3.75 + `coulomb.pro` €3.00) and coulombcore hosting -**€13.99/mo** (total **€20.74/mo**). Sole member payments from November 2025. -Customer cost-pass-through billing is not active. +**Current reality:** infrastructure from January 2025 — domains **€6.75/mo**, +coulombcore hosting **€13.99/mo** (from Jan 2025), railiance01 hosting +**€8.99/mo** (from Mar 2026). Sole member payments from November 2025. Customer +cost-pass-through billing is not active. ### Commands diff --git a/projects/coulomb-pricing/data/expense_records.json b/projects/coulomb-pricing/data/expense_records.json index 35fd32d..c034ca9 100644 --- a/projects/coulomb-pricing/data/expense_records.json +++ b/projects/coulomb-pricing/data/expense_records.json @@ -451,6 +451,16 @@ "currency": "EUR", "source": "invoice" }, + { + "id": "exp-hosting-railiance01-2026-03", + "period": "2026-03", + "vendor": "hosting.railiance01", + "description": "railiance01 virtual server hosting", + "cost_class": "infrastructure", + "amount": "8.99", + "currency": "EUR", + "source": "invoice" + }, { "id": "exp-domain-social-2026-04", "period": "2026-04", @@ -481,6 +491,16 @@ "currency": "EUR", "source": "invoice" }, + { + "id": "exp-hosting-railiance01-2026-04", + "period": "2026-04", + "vendor": "hosting.railiance01", + "description": "railiance01 virtual server hosting", + "cost_class": "infrastructure", + "amount": "8.99", + "currency": "EUR", + "source": "invoice" + }, { "id": "exp-domain-social-2026-05", "period": "2026-05", @@ -511,6 +531,16 @@ "currency": "EUR", "source": "invoice" }, + { + "id": "exp-hosting-railiance01-2026-05", + "period": "2026-05", + "vendor": "hosting.railiance01", + "description": "railiance01 virtual server hosting", + "cost_class": "infrastructure", + "amount": "8.99", + "currency": "EUR", + "source": "invoice" + }, { "id": "exp-domain-social-2026-06", "period": "2026-06", @@ -540,6 +570,16 @@ "amount": "13.99", "currency": "EUR", "source": "invoice" + }, + { + "id": "exp-hosting-railiance01-2026-06", + "period": "2026-06", + "vendor": "hosting.railiance01", + "description": "railiance01 virtual server hosting", + "cost_class": "infrastructure", + "amount": "8.99", + "currency": "EUR", + "source": "invoice" } ], "note": "Infrastructure expense ledger: domains and virtual server hosting. Totals computed by observatory/ledger.py." diff --git a/projects/coulomb-pricing/data/infrastructure/virtual_servers.json b/projects/coulomb-pricing/data/infrastructure/virtual_servers.json index 2f3f7c7..1260544 100644 --- a/projects/coulomb-pricing/data/infrastructure/virtual_servers.json +++ b/projects/coulomb-pricing/data/infrastructure/virtual_servers.json @@ -7,8 +7,13 @@ "monthly_eur": "13.99", "started": "2025-01", "description": "Virtual server hosting for coulombcore" + }, + { + "name": "railiance01", + "monthly_eur": "8.99", + "started": "2026-03", + "description": "Virtual server hosting for railiance01" } ], - "monthly_total_eur": "13.99", "note": "Reference catalog. Monthly expense rows live in expense_records.json." } \ No newline at end of file diff --git a/projects/coulomb-pricing/reports/economics-2026-06.md b/projects/coulomb-pricing/reports/economics-2026-06.md index ae81b90..da263bc 100644 --- a/projects/coulomb-pricing/reports/economics-2026-06.md +++ b/projects/coulomb-pricing/reports/economics-2026-06.md @@ -6,7 +6,7 @@ > Platform costs accrue to the operator. Customer cost-pass-through billing is > **not active** in MVP — members pay subscription only. All totals are computed -> programmatically from expense and payment record ledgers (54 expense +> programmatically from expense and payment record ledgers (58 expense > records). ## Key Metrics (current period) @@ -15,13 +15,13 @@ |--------|------:| | Active members | 1 | | Member payments (gross) | 8.99 EUR | -| Infrastructure cost | 20.74 EUR | +| Infrastructure cost | 29.73 EUR | | Payment processing cost | 0.38 EUR | -| Total platform cost | 21.12 EUR | -| Platform cost per member | 21.12 EUR | -| Period gross margin | -12.13 EUR | -| Period gross margin % | -134.9% | -| Period net liquidity | -12.13 EUR (burning) | +| Total platform cost | 30.11 EUR | +| Platform cost per member | 30.11 EUR | +| Period gross margin | -21.12 EUR | +| Period gross margin % | -234.9% | +| Period net liquidity | -21.12 EUR (burning) | _Period net liquidity = net member payments − infrastructure cost (processing fees already netted from payments)._ _Revenue source: manual_ @@ -32,11 +32,11 @@ _Revenue source: manual_ |--------|------:| | Initial budget | 1000.00 EUR | | Cumulative member payments (net) | 68.88 EUR | -| Cumulative infrastructure cost | 373.32 EUR | +| Cumulative infrastructure cost | 409.28 EUR | | Cumulative payment processing | 3.04 EUR | -| Cumulative total platform cost | 376.36 EUR | -| Cumulative net liquidity | -304.44 EUR (burning) | -| Remaining budget | 695.56 EUR (within budget) | +| Cumulative total platform cost | 412.32 EUR | +| Cumulative net liquidity | -340.40 EUR (burning) | +| Remaining budget | 659.60 EUR (within budget) | | Months tracked | 18 | ## Monthly History @@ -57,10 +57,10 @@ _Revenue source: manual_ | 2025-12 | 1 | 8.99 | 20.74 | 0.38 | 21.12 | -12.13 | | 2026-01 | 1 | 8.99 | 20.74 | 0.38 | 21.12 | -12.13 | | 2026-02 | 1 | 8.99 | 20.74 | 0.38 | 21.12 | -12.13 | -| 2026-03 | 1 | 8.99 | 20.74 | 0.38 | 21.12 | -12.13 | -| 2026-04 | 1 | 8.99 | 20.74 | 0.38 | 21.12 | -12.13 | -| 2026-05 | 1 | 8.99 | 20.74 | 0.38 | 21.12 | -12.13 | -| 2026-06 | 1 | 8.99 | 20.74 | 0.38 | 21.12 | -12.13 | +| 2026-03 | 1 | 8.99 | 29.73 | 0.38 | 30.11 | -21.12 | +| 2026-04 | 1 | 8.99 | 29.73 | 0.38 | 30.11 | -21.12 | +| 2026-05 | 1 | 8.99 | 29.73 | 0.38 | 30.11 | -21.12 | +| 2026-06 | 1 | 8.99 | 29.73 | 0.38 | 30.11 | -21.12 | ## Pricing Model Registry diff --git a/projects/coulomb-pricing/tests/test_economics.py b/projects/coulomb-pricing/tests/test_economics.py index 823fa73..c62a538 100644 --- a/projects/coulomb-pricing/tests/test_economics.py +++ b/projects/coulomb-pricing/tests/test_economics.py @@ -30,7 +30,9 @@ def test_infrastructure_aggregated_from_domain_expense_records() -> None: totals = aggregate_infrastructure_by_period(expenses, fx) assert totals["2025-01"] == Decimal("20.74") - assert totals["2026-06"] == Decimal("20.74") + assert totals["2026-02"] == Decimal("20.74") + assert totals["2026-03"] == Decimal("29.73") + assert totals["2026-06"] == Decimal("29.73") def test_monthly_ledger_starts_january_2025() -> None: @@ -43,7 +45,7 @@ def test_monthly_ledger_starts_january_2025() -> None: assert march.infrastructure_cost == Decimal("20.74") assert march.payment_processing_cost == Decimal("0.00") - assert june.infrastructure_cost == Decimal("20.74") + assert june.infrastructure_cost == Decimal("29.73") assert june.payment_processing_cost == Decimal("0.38") assert june.gross_revenue == Decimal("8.99") @@ -57,10 +59,10 @@ def test_build_snapshot_june_2026_domain_only_infrastructure() -> None: snapshot = build_snapshot("2026-06", product, models, members, payments, ledger) - assert snapshot.monthly_infrastructure_cost == Decimal("20.74") + assert snapshot.monthly_infrastructure_cost == Decimal("29.73") assert snapshot.monthly_payment_processing_cost == Decimal("0.38") - assert snapshot.monthly_total_platform_cost == Decimal("21.12") - assert snapshot.period_net_liquidity == Decimal("-12.13") + assert snapshot.monthly_total_platform_cost == Decimal("30.11") + assert snapshot.period_net_liquidity == Decimal("-21.12") assert snapshot.liquidity_status == "burning" @@ -71,12 +73,12 @@ def test_liquidity_summary_with_actual_domain_costs() -> None: summary = build_liquidity_summary(budget, payments, ledger, "2026-06") - assert summary.cumulative_infrastructure_cost == Decimal("373.32") + assert summary.cumulative_infrastructure_cost == Decimal("409.28") assert summary.cumulative_payment_processing_cost == Decimal("3.04") - assert summary.cumulative_total_platform_cost == Decimal("376.36") + assert summary.cumulative_total_platform_cost == Decimal("412.32") assert summary.cumulative_member_payments == Decimal("68.88") - assert summary.cumulative_net_liquidity == Decimal("-304.44") - assert summary.remaining_budget == Decimal("695.56") + assert summary.cumulative_net_liquidity == Decimal("-340.40") + assert summary.remaining_budget == Decimal("659.60") assert summary.liquidity_status == "burning" assert summary.months_tracked == 18 @@ -98,6 +100,6 @@ def test_dashboard_notes_expense_record_source() -> None: report = generate_dashboard(DATA_DIR, "2026-06") assert "expense and payment record ledgers" in report - assert "373.32" in report - assert "695.56" in report + assert "409.28" in report + assert "659.60" in report assert "coulomb.social" not in report # dashboard shows aggregates, not domain names \ No newline at end of file