Case study · Taxation · VAT
GRA E-VAT
VAT monitoring platform for the Ghana Revenue Authority, capturing business transactions from web, API and on-premise channels.
- Deployment model
- Per-business VMs → portable installs
- Role
- Full-Stack Engineering · Deployments · Integrations
- Domain
- Taxation · VAT
Overview
E-VAT lets the revenue authority monitor business transactions so VAT can be assessed on declared inputs and outputs. Businesses without an ERP use a web application; businesses with online ERPs integrate through APIs; and businesses whose systems are offline or not reachable from the internet run E-VAT Local, an on-premise service with the same API capabilities that synchronizes with the central platform.
The problem
An early deployment approach provisioned an individual virtual machine for each business running the local service. That was expensive, slow to roll out and a poor fit for the range of environments businesses actually operate. The central platform also needed transaction data quickly, not in delayed batches.
My role
- Built invoicing and stock management — stock in, stock adjustments and stock transfers — for the business web application.
- Worked on the E-VAT Local web interface and local APIs.
- Contributed to the business-facing APIs.
- Deployed E-VAT Local on customer infrastructure, mainly IIS.
- Supported businesses integrating their ERPs with the platform.
Architecture
-
Businesses
- Web application Businesses without an ERP
- ERP integration Online ERPs
- E-VAT Local Docker · IIS · executable
-
Central platform
- Business APIs
- Core services Transaction store
-
Platform
- SQL Server
- Keycloak
Scale
- Deployment targets
- 3
- Docker, IIS and standalone executables.
- Business channels
- 3
- Web application, APIs and on-premise service.
Engineering challenges
Businesses run very different environments
Some businesses operate modern containerised infrastructure; others run Windows servers with IIS; some have a single machine. A deployment approach that assumed one environment would exclude many of them or require new infrastructure.
Offline and on-premise operation
Businesses whose ERPs are not reachable from the internet still need to record transactions locally, with the central platform receiving them promptly once they are recorded.
Stock and invoicing correctness
Invoices, stock-in, adjustments and transfers all affect a business’s declared position. Each operation has to be consistent with the others, because the resulting figures feed VAT assessment.
Approach
- Portable installation options. Instead of provisioning a virtual machine per business, the team moved to packaging the local service for Docker, IIS and as a standalone executable, so each business could run it on infrastructure it already had.
- Near-real-time synchronization. The local service pushes transactions to the central platform as they are recorded rather than relying on delayed batch uploads.
- Shared rules across channels. Web, API and local channels apply the same invoicing and stock rules so data is comparable regardless of how it was captured.
- Hands-on integration support. Working directly with businesses on ERP integrations and on-premise installs fed practical fixes back into the APIs and deployment packages.
Impact
No VM per business
Infrastructure requirement
Portable installation options replaced dedicated virtual machines.
Near real time
Synchronization
Local installations synchronize transactions with the central platform as they occur.
-
Broader adoption
Businesses could run the service within their existing environment instead of adopting new infrastructure.
Technologies
- C#
- .NET
- React
- Keycloak
- SQL Server
- Entity Framework
Lessons
- 01 Deployment is part of the architecture. Meeting customers in the environment they already run removed more friction than any feature.
- 02 An offline-capable component needs a clear synchronization contract with the centre — what is sent, when, and what happens on retry.
- 03 Integration support is engineering work. Sitting with businesses integrating their ERPs exposed API gaps early.