### Révision IA (Ollama): scoring, corrections et avis #### Objectif Fournir une évaluation automatique de la fiabilité des extractions (score), proposer des corrections potentielles (champ, valeur, confiance) et un avis court, en s’appuyant sur un LLM local accessible via Ollama. #### Composants et endpoints - Backend: - Appel automatique après chaque extraction: intégration du résultat de révision dans `status.review` et `metadata.quality.ollamaScore`. - Endpoint manuel: `POST /api/folders/:folderHash/files/:fileHash/review` (pas de payload requis). Retourne `{ success, review }`. - Format attendu du LLM (réponse stricte JSON): `{ "score": number (0..1), "corrections": Array<{ path, value, confidence }>, "avis": string }`. - Frontend: - Bouton “Révision IA” par document (état completed): déclenche l’endpoint manuel puis rafraîchit la liste. - Affichage: Chip `IA: x.xx` (tooltip = `avis` si présent). Chip `Corrections: N` ouvrant un dialogue listant les corrections. #### Calcul des scores et arbitrage - Base OCR: confiance Tesseract/pdf-parse normalisée. - Boost annuaire de noms (`backend/data/names/firstnames_all.csv`, `lastnames_all.csv`): +0.05 si prénom trouvé, +0.05 si nom trouvé (après normalisation), agrégé au score. - Ensembles de règles NER (CNI/MRZ, adresses, entités) influent indirectement via `identities` et `cniNumbers` (poids renforcés). - Score global côté backend (avant Ollama): plafonné à 0.99, agrège OCR, présence d’identités, CNI, boost annuaire. - Révision Ollama: si `review.score` est supérieur au `globalConfidence`, le backend rehausse `metadata.quality.globalConfidence` à ce score et persiste le résultat. #### Suggestions de qualité - `needsReupload`: déclenché si confiance OCR < 0.75, ou si CNI sans NOM/PRÉNOM. - `needsAddressConfirmation`: déclenché si une adresse est détectée; confirmation côté UI via dialogue et endpoint `confirm-address`. #### Dépendances et configuration - Ollama: service HTTP local sur `http://localhost:11434`. Modèle configurable via `OLLAMA_MODEL` (défaut `llama3.1`). Timeout 8s. - Aucune dépendance Node additionnelle (utilisation d’`http` natif). #### Données persistées - Cache fichier par document: `cache//.json`. - Champs ajoutés/modifiés: - `metadata.quality.ollamaScore: number` (0..1) - `status.review: { score, corrections[], avis }` - `metadata.quality.globalConfidence: number` (peut être rehaussé par Ollama) #### UI et interactions - Liste des documents: - Chip “IA: x.xx” si présent (tooltip: `avis`). - Chip “Corrections: N” si `status.review.corrections` non vide. Clic: ouvre un dialogue listant `{ path, value, confidence }`. - Bouton “Révision IA”: relance la révision et rafraîchit l’item. #### Tests manuels (checklist) - Vérifier qu’un upload image/PDF completed affiche le Chip `IA: x.xx` et/ou `Corrections: N` si présents. - Cliquer “Révision IA”: confirmer que la liste se rafraîchit et que `status.review` est renseigné. - Ouvrir le dialogue des corrections et vérifier l’affichage des champs. - Confirmer/infirmer une adresse détectée et vérifier la mise à jour côté backend et disparition du flag. #### Journal des décisions - Choix du JSON strict pour la sortie LLM afin de faciliter l’exploitation et éviter les parsings fragiles. - Utilisation d’`http` natif côté Node pour éviter l’ajout de dépendances.