AI-powered procurement integrity investigator for Nigeria public procurement data (TNGIMPACT AI Summit '26 Hackathon)
# Procurement Integrity Investigator
An AI-assisted screening tool for African public procurement data, built for
the TNGIMPACT AI Summit '26 Hackathon (Other African Solution track).
It helps auditors, oversight bodies, and investigative journalists find
procurement cases that deserve **human review** — it never claims a company
or contract is corrupt. It surfaces risk indicators, unusual patterns, and
open questions, and every AI-generated claim is independently re-verified
against the source data before it's shown.
## How it works
```
Nigeria BPP OCDS procurement data (real, official, ~17.6k tender-stage cases)
|
Data ingestion / normalization (DuckDB)
|
Deterministic risk analysis (9 explainable indicators, full dataset)
|
Transparent risk scoring (sum of triggered indicator points, capped at 100)
|
Top-N highest-risk cases (default 20, configurable)
|
Parallel LLM investigation (3 specialist analysts, each with bounded tools)
|
Deterministic evidence verification (recomputes every numeric claim)
|
Final case synthesis (verified findings only, hedged "requires review" language)
|
Dashboard (FastAPI + vanilla JS)
```
The core principle: **cheap deterministic analysis runs over the whole
dataset; expensive LLM calls only run on a small, already-prioritized
shortlist**, and the LLM's own text is never treated as authoritative — it's
checked against the database before it reaches the report.
## Data source
Nigeria: Bureau of Public Procurement (BPP), via the Nigeria Open
Contracting Portal (NOCOPO), sourced from the Open Contracting Data
Registry. See
`data/raw/SOURCE.md` for exact download details, and
`docs/INDICATORS.md` for how the dataset's actual
schema shaped which risk indicators were implemented.
## Setup
```bash
python -m venv .venv
.venv\Scripts\pip install -r requirements.txt # Windows
# source .venv/bin/activate && pip install -r requirements.txt # macOS/Linux
```
If `data/raw/nigeria_bpp_full.jsonl.gz` isn't already present, download …