- connection: création de l'engine centralisée dans _build_engine (source
unique de config) ; init_db réutilise reset_connection + get_engine au lieu
de dupliquer create_engine
- service: _normalize_amount garantit qu'un montant non numérique issu de
l'extraction (string, dict…) n'entre jamais en base dans une colonne Float ;
appliqué à solde_montant
- tests: couverture de _normalize_amount et du solde sous forme de string
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- sql_executor: remplace le filtre regex fragile par une autorisation SQLite
(set_authorizer) en complément de mode=ro ; rejette les instructions multiples
- uploads: lecture bornée des PDF (helper read_upload_limited, limite 20 Mo,
HTTP 413) branchée sur /extract et /save-with-pdf
- tests: suite pytest (54 tests) couvrant amounts, dates, storage, sql_executor,
uploads et DatabaseService.save_document ; pytest ajouté en dépendance dev
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>