Lean local stack for AFIP invoice ingestion, AI extraction, human review, export, and KPI dashboards.
- FastAPI + SQLAlchemy + SQLite
- Prefect local server + worker
- React + Vite + Tailwind (single-page tab UI)
- Nginx reverse proxy
- Grafana sidecar (Prometheus endpoint + SQLite datasource)
- Copy env file:
cp .env.example .env-
Keep
SURUS_MOCK_MODE=truefor local testing without external API. -
Start services:
docker compose up --build- Open:
- App:
http://localhost - FastAPI docs:
http://localhost/api/docs - Prefect UI:
http://localhost:4200 - Grafana:
http://localhost:3001
POST /api/invoicesGET /api/artifacts/{invoice_id}/imageGET /api/review/pendingGET /api/review/{invoice_id}GET /api/review/{invoice_id}/anchorsPOST /api/review/{invoice_id}/anchors/recomputePUT /api/review/{invoice_id}/approvePUT /api/review/{invoice_id}/rejectGET /api/export/approvedGET /api/export/approved/{invoice_id}GET /api/export/approved.csvGET /api/data/extractedGET /api/metrics/latestGET /api/metrics/historyPOST /api/metrics/computeGET /api/invoices/recentGET /api/invoices/{invoice_id}GET /api/referencesGET /metrics
pip install -r backend/requirements.txt
pytest -q- Main app DB:
/data/invoices.db - Uploaded artifacts:
/data/artifacts - Export CSVs can be generated from
/api/export/approved.csv - Dashboard references loaded from
/data/references.json - Review anchors provider behavior (including
REVIEW_ANCHORS_PROVIDER=surus) is documented inbackend/review_anchors/README.md
- Open DBeaver and create a new connection.
- Choose
SQLite. - Set database file path to your local project file:
./data/invoices.db. - Connect and inspect tables (
invoices,extracted_data,approved_data,logs,metrics_snapshots).
Example query:
SELECT i.id, i.status, e.extracted_at, e.moneda, e.importe_bruto
FROM invoices i
LEFT JOIN extracted_data e ON e.invoice_id = i.id
ORDER BY i.received_at DESC
LIMIT 50;