01 — The Challenge The ECA Financial Challenge
The OPI assessment reveals ECA’s financial management as its strongest area — yet still critically underdeveloped. Revenue diversification is non-existent.
OPI Assessment Findings
02 — Revenue Dashboard Live Revenue Tracking
A real-time view of budget versus actual across all six revenue streams. Dashboard updates instantly as payments are reconciled via SpacetimeDB WebSocket.
FY 2027 Revenue Dashboard
03 — Billing Automation Automated Billing Flows
Each revenue stream has a BPMN-driven billing workflow. Invoices are generated, sent, and reconciled automatically — staff intervene only on exceptions.
Annual membership renewal triggers invoice generation. Stripe handles payment collection. On settlement, the ledger is auto-reconciled and member status updated to “Active”.
When a compliance verification completes, the fee is calculated based on lot complexity. Invoice attaches to the certificate — no cert issued until payment clears.
Commission is only charged on confirmed deals. The CRM marks a deal as “Won”, the ERP calculates the 3% commission, and invoices the exporter automatically.
Auction premium (bid price minus reserve) incurs an 8% commission. Revenue split: ECA 70% / Embassy 30%. Both journal entries created atomically.
04 — Chart of Accounts Structured for ECA
A purpose-built chart of accounts maps every transaction to the right category. Revenue accounts mirror the six revenue streams; project accounts track B³ spending.
4200 Compliance Services
4300 Matchmaking Commission
4400 Academy Fees
4500 Event Revenue
4600 Coffee Digest Subs
7200 P2: Outsourcing
7300 P3: Rebranding
7400 P4: Digital Presence
7500 P5: Project Banking
post_move reducer in SpacetimeDB validates that journal entries balance to zero before posting. Out-of-balance entries are rejected at the database level.
05 — B³ Budget Tracking Budget vs Actual — B³ Projects
Each B³ strategy project has a dedicated budget code. Spending is tracked in real time against approved budgets with RAG status indicators.
| Project | Budget (ETB M) | Spent (ETB M) | Remaining | Status |
|---|---|---|---|---|
| P1: Lean Structure | 5.0 | 3.2 | 1.8 | On track |
| P2: Outsourcing | 8.0 | 4.5 | 3.5 | On track |
| P3: Rebranding | 3.0 | 1.8 | 1.2 | On track |
| P4: Digital Presence | 12.0 | 6.5 | 5.5 | Over budget |
| P5: Project Banking | 4.0 | 0.5 | 3.5 | Early stage |
P4 Alert: Digital Presence project is ETB 1.5M over pro-rata budget due to platform development costs exceeding estimates. Requires board review at Q2 meeting. Variance auto-flagged by the ERP system.
06 — Grant Management Development Finance Tracking
Grants from DFIs (Development Finance Institutions) have strict reporting requirements. Every expense tagged to a grant auto-generates funder reports.
07 — Reporting Auto-Generated Financial Reports
No more manual spreadsheets. Financial reports are generated from the live ledger data, formatted for each audience: board, auditors, funders, and management.
08 — Technical Architecture How Fermia Powers ERP
The ERP module runs on real Fermia accounting reducers — the same double-entry engine that passed 41 end-to-end tests. This is not a mock; it is production infrastructure.
Every transaction creates balanced journal entries via acct_reducers.rs. The post_move reducer validates debit/credit balance at the SpacetimeDB level — impossible to create unbalanced entries.
SpacetimeDB WebSocket subscriptions push every journal entry, payment, and reconciliation to the browser in real time. No polling, no stale data.
Membership payments, compliance fees, and event registrations flow through Stripe. Webhook callbacks trigger auto-reconciliation reducers.
When a Stripe payment settles, the ERP matches it to the open invoice, creates the receipt journal entry, and updates the member/order status — all in one atomic reducer call.
Financial data uses dedicated SpacetimeDB tables (Account, Journal, JournalEntry, Payment) — not OODB. This ensures referential integrity and compile-time type safety for critical financial operations.
The accounting engine has 41 reducers tested end-to-end: create invoices, post moves, create payments, reconcile, cancel — with verified double-entry balances.
09 — Data Architecture ERP Object Model
The accounting data flows through a chain of dedicated SpacetimeDB tables. Each entity is linked by typed references, forming an auditable financial graph.
Financial Object Chain
account_type
balance
journal_type
default_account_id
journal_id
status, total
debit, credit
move_id
partner_id
status
move_line_ids
reconciled_at
Each arrow is a typed foreign key reference. post_move atomically creates Postings and updates Account balances. reconcile_payment links Payments to JournalEntry lines.
Financial Clarity for Ethiopia’s Coffee Future
From a single revenue stream to six. From manual spreadsheets to a real-time ledger. From ad-hoc budgeting to automated B³ tracking.