Enerxia: Oil & Gas ERP Built for Angola
Oil & Gas ยท Enterprise ERP ยท AngolaEnerxia is the ERP Wise Hustlers built, runs and maintains for the Angolan oil and gas sector. Thirty-three business domains share one approvals engine, one numbering service, one unit-of-measure conversion and one audit log โ and every Angolan regulatory rule is dated configuration, never code.
Operators and oilfield service companies in Angola run production, procurement and compliance on spreadsheets stitched together by email. That holds until an auditor asks who approved a supplier's bank-detail change, which version of the VAT rule was in force when an invoice was issued, or how a barrel measured in a tank became a line in the production report filed with the ANPG. Imported ERPs answer none of this: the rules that matter in Angola โ IVA and AGT withholding, ANPG local-content scoring, SAF-T export, production-sharing cost recovery โ are not the rules of Lisbon or Houston, and they change on an effective date.
Core Pain Points Addressed:
- โ No provenance โ nobody could say who approved a change, or under which version of a rule a document was computed.
- โ Imported ERPs speak Lisbon and Houston โ IVA/AGT withholding, ANPG local-content scoring and PSC cost recovery had to be bolted on in spreadsheets.
- โ Rules hardcoded in software โ a tax change meant a release, and reissuing an old invoice silently recalculated it under today's law.
- โ Deletable history โ transactional rows could be edited or removed, so an audit trail was only as good as the last person's intentions.
- โ Floating-point money in a Kwanza and multi-currency world โ rates, rate sources and rate dates were lost between the transaction and the ledger.
In-house product (Wise Hustlers)
Oil & Gas ยท Energy Operations
33 Domains ยท 258 Models ยท 134 Screens
Next.js 15, React 19, Node.js & PostgreSQL 16
From the Well to the Tax Return, One Data Model
Most operators and service providers in Angola run production, procurement and compliance on spreadsheets joined together by email. That works until somebody asks: who approved this change to the supplier's bank details? Which version of the VAT rule was in force when this invoice was issued? How does this barrel, measured in the tank, become a line in the production report filed with the ANPG?
A spreadsheet cannot answer any of those. Enerxia can โ every mutation is audited, every rule is effective-dated, and transactional records are cancelled, voided or reversed rather than deleted. The system was built from that requirement rather than from a set of screens: a business rule lives in the domain layer and nowhere else, and a rule duplicated in a component is treated as a defect.
Enerxia is in production, in pilot, with two companies and thirty-six users, and its audit log has passed sixty-six thousand events. We do not present it as a product the Angolan sector has adopted, because it has not. What is true is more useful: the system exists, it runs, we maintain it, and it can be opened and walked through module by module.
Six Business Blocks, One Engine
Corporate
Finance, tax, HR, expenses, documents, training and time โ the company-wide records everything else posts into.
Supply Chain
Procurement, suppliers, contracts, inventory, MRO, logistics and sales, sharing one approvals engine with dated thresholds.
Assets & Operations
Assets, maintenance, quality and fleet โ what keeps the equipment turning, tied to the projects and contracts that pay for it.
Oil & Gas
Upstream, well cost, production and hydrocarbon accounting, including production-sharing cost recovery and profit oil.
Safety & Environment
HSE, incidents, permits to work, the Angolan local-content regime and regulatory reporting as first-class domains.
Platform
Identity, RBAC, workflow, notifications, master data, reporting and the append-only audit log that every other block writes to.
The Traceability Spine
Every module must preserve this chain. A feature that breaks a link is incomplete, however well its screens work โ it is what lets you answer, months later, how a barrel in a tank became a line on a tax filing.
Business โ asset, project or contract
Every record is scoped to a company and branch by the repository layer; there is no query path that skips the scope.
Operation โ material, service or people
Wells, runs, jobs and shifts consume materials and services and involve people โ each linked, never free-text.
Transaction โ approval
Purchase orders, invoices and adjustments pass through one approvals engine whose thresholds are effective-dated configuration.
Accounting โ compliance
Journals carry decimal amounts with transaction currency, base currency, rate, rate source and rate date; IVA/AGT, local content and SAF-T read from the same entries.
Reporting โ audit
Internal reports, ANPG filings and the SAF-T file come from one source, and every mutation behind them sits in an append-only log with a correlation id.
Angolan Regulatory Engineering
01. Rules are dated configuration, not code
IVA, withholding, local-content thresholds and approval limits carry effective_from and effective_to. An invoice issued in March is calculated with March's rule even after the rule changes in June, and reissuing an old document does not recalculate it under today's law.
02. Nothing transactional is deleted
Cancel, void, reverse or version it โ delete is not an available operation. The audit table is append-only, and the application's database role holds no UPDATE or DELETE permission on it, so the separation is enforced by Postgres rather than by good intentions.
03. ANPG local content as a domain
The local-content regime and supplier scoring live in their own domain, so a supplier's qualification is calculated and auditable instead of argued in a meeting.
04. SAF-T from the same ledger
The standard accounting file is exported from the entries that feed internal reporting โ one source, not two โ so the tax authority and the board see the same numbers.
05. Production sharing modelled, not approximated
Cost recovery and profit oil sit in the upstream domain, tied to production accounting and well cost rather than reconstructed in a spreadsheet at quarter end.
06. Unknown regulatory facts stay blocked
A rule the team does not know is left configurable, empty and blocked โ never guessed. It is an explicit project rule, and it is why the system can be defended in an audit.
07. Technical equivalence is an engineer's call
The MRO domain never infers automatically that two parts are interchangeable; a human decides, and that decision is recorded.
Technology Stack
Deliberately boring, because an industrial ERP is read for ten years and written for two.
Next.js 15 + React 19
Portuguese-first UI with an English second version. Screens validate for usability only; every business rule is enforced below the UI.
Node.js API
Authentication, RBAC authorisation, validation, idempotency keys, audit and rate limiting on every request before it reaches a domain service.
Domain Layer
Unit, integration, permission, negative and end-to-end suites โ nothing is complete without test evidence.
PostgreSQL 16
Constraints, transactions and an append-only audit table are part of the design. Decimal money everywhere โ never floating point.
Production, in Pilot
Real figures from the running system โ no projections.
Enerxia runs at enerxia.wise-hustlers.com behind a login. Walkthroughs are given module by module on real data, by an engineer who built it.
Database Entity Schema
// Enerxia โ the traceability spine, simplified (PostgreSQL 16, 258 models across 33 domains)
company / branch -- every row is scoped; the repository injects it, no bypass
โโ asset | project | contract
โ โโ operation -- well, run, job, shift
โ โโ material | service | people
โ โโ transaction
โ โโ approval -- one approvals engine, thresholds are dated config
โ โโ accounting -- journal, tax lines, multi-currency (decimal, never float)
โ โโ compliance -- IVA/AGT, local content, SAF-T, PSC cost recovery
โ โโ reporting
โโ audit_log -- append-only; app role has no UPDATE/DELETE
regulatory_rule {
id uuid
domain text -- tax | localcontent | approval | psc
key text
value jsonb
effective_from date
effective_to date -- a March invoice is computed with March's rule
}
money {
amount numeric
currency char(3) -- transaction currency
base_amount numeric
base_currency char(3) -- AOA
rate numeric
rate_source text
rate_date date
}Infrastructure Network Topology
+-----------------------------------------------------------------------+
| UI โ Next.js 15 ยท React 19 |
| 134 screens ยท Portuguese-first, English second |
+-----------------------------------------------------------------------+
|
v
+-----------------------------------------------------------------------+
| API โ /api/v1/* |
| authn ยท authz (RBAC) ยท validation ยท idempotency ยท audit ยท rate limit |
+-----------------------------------------------------------------------+
|
v
+-----------------------------------------------------------------------+
| Domain โ src/domain/** (33) |
| every business rule lives here; a rule duplicated in UI is a defect |
+-----------------------------------------------------------------------+
|
v
+-----------------------------------------------------------------------+
| Repository โ company & branch scope injected |
+-----------------------------------------------------------------------+
|
v
+-----------------------------------------------------------------------+
| PostgreSQL 16 โ constraints ยท transactions ยท append-only audit |
+-----------------------------------------------------------------------+Let's Pressure-Test It
Book a free call and tell us what you're building. Worst case, you leave with honest feedback and a clearer plan. Best case, you leave with a team that ships.
