v0.1.0 - Read-only by construction
First public release.
erp-report-engine produces autonomous weekly HTML reports straight from the SQL database behind an ERP — with the security model as the headline feature:
- Read-only by construction: one guarded code path to the database; single-statement SELECT/WITH only; comments, EXEC, SELECT INTO and 14 write/DDL keywords rejected before any connection. 8 injection attempts covered by tests.
- Full SQL audit trail shipped inside every report (statement, parameters, rows, timing).
- Semantic profiles: YAML contracts mapping ERP schemas to canonical entities —
generic(demo) andlogo_tiger(Logo Tiger / GO on MSSQL) included. - Self-auditing extraction: data-quality gate (duplicates, bad dates, negative totals, ship-before-order) + independent COUNT(*) source reconciliation.
- Honest KPIs: ISO-week revenue / orders / on-time% / stock-cover vs an 8-week baseline; the current partial week is never plotted.
- Driver-attributed findings and run-state memory ("3rd consecutive weekly decline").
- Secrets via environment variables only — the loader refuses config files with embedded passwords.
Quickstart (no ERP needed): python -m erp_report_engine init-demo && python -m erp_report_engine run -c config.demo.yaml