Aller au contenu principal

ADR-0183 : Navin Enterprise Agent Gestion des Sinistres, couche produit d'assurance au-dessus du Control Plane

  • Statut : proposé le 2026-11-04, en attente de validation de l'utilisateur (voir « Points à valider »)
  • Date : 2026-11-04
  • Portée : nouveau projet navin-enterprise-assurance-sinistres/ (backend FastAPI navin_sinistres, workers, intégration Navin, pas de frontend propre : le socle frontend partagé de l'ADR-0180 porte l'interface), types additifs du modèle OpenFGA (deploy/policies/openfga/model.fga, type claims_instance et objets claim, settlement_version, payment_request, expert_mission, claim_closure, claim_document), paquet OPA eai.assurance_sinistres (deploy/policies/opa/assurance_sinistres.rego, clé eai.config.assurance_sinistres de data.json), contrats contracts/v1/assurance-sinistres-action-request.schema.json et contracts/v1/assurance-sinistres-copilot-event.schema.json, gabarit d'agent du Navin Manager préparé mais non publié (navin-assurance-sinistres-agent)
  • Documents liés : ADR-0101 (politique de licences), ADR-0103 (vLLM et LiteLLM), ADR-0108 (Opik), ADR-0166 (ClamAV et YARA-X), ADR-0173 (séparation du Manager et d'Enterprise), ADR-0174 (mémoire Mem0 et Cognee), ADR-0175 (Navin Enterprise RAG Agent), ADR-0176 (Banking Back-Office, implémentation de référence dont les modules génériques sont copiés), ADR-0180 (socle frontend des agents sectoriels), décision du 2026-11-04 (.navin/continuity/DECISIONS.md, un seul frontend, backend dérivé par copie), cahier des charges agent_uses_cases/01_Assurance_Gestion_des_Sinistres.md

Contexte​

Le client demande un agent de gestion des sinistres de bout en bout : déclaration et constitution du dossier, triage et segmentation, vérification des garanties à la date du fait générateur contre le système de gestion des polices, expertise et justificatifs, signaux de fraude, provisions et propositions d'indemnisation, ordres de paiement, recours et clôture, communications aux assurés, copilote IA pour le gestionnaire. Le cahier des charges impose que l'IA ne règle, ne paie, ne refuse, n'accepte et ne clôture jamais un sinistre : chaque effet passe par la passerelle d'actions avec un humain dans la boucle et la confirmation du système source.

La plateforme fournit déjà sous gouvernance : l'identité et le contexte tenant et projet, la passerelle d'outils avec décision OPA, les approbations avec séparation des tâches et clé d'idempotence, les délégations datées et révocables, l'analyse obligatoire des fichiers (quarantaine, ClamAV, YARA-X), la mémoire Mem0 et Cognee, les bases de connaissance et l'audit chaîné. Le produit UC-00 (ADR-0176) a montré comment une couche produit s'appuie sur ces briques : modules génériques (config, erreurs, i18n, authz, audit, jobs, worker, Control Plane client, session RLS, passerelle d'actions, connecteurs, observabilité, pipeline documentaire, runtime du copilote) copiés tels quels, modules métier propres au domaine.

Décision​

  1. Backend dérivé par copie : le paquet navin_sinistres reprend sans modification (hors nom de paquet) les modules génériques de navin_backoffice ; seuls les modules métier (sinistres, garanties, expertises, règlements, paiements, recours, clôtures, communications) et leur machine à états sont écrits pour ce produit. Aucun frontend : product.manifest.json décrit menus, entités, colonnes, actions d'écriture et invites du copilote au socle partagé de l'ADR-0180.
  2. Identité fixe : product_id assurance-sinistres, préfixe /api/v1/assurance-sinistres, ports de développement web 3473, API 8472, Redis 6393, schéma PostgreSQL sinistres, rôles navin_sinistres_app et navin_sinistres_worker sans BYPASSRLS.
  3. Projection, jamais référentiel : sinistres.policy_versions est une projection datée du système de gestion des polices (COMMENT ON TABLE) ; le moteur de garanties ne cite qu'une clause présente dans la version importée et conclut undetermined quand la version à la date du fait générateur manque.
  4. Argent : numeric(20, 6) et chaînes décimales partout, un flottant est refusé à la liaison ; une devise par ligne ; aucune somme entre devises ; ordre contractuel des opérations (dommage retenu, franchise, plafond, acomptes confirmés, déjà payé) enregistré dans chaque version de règlement avec calculation_ref.
  5. Paiements : payment_requests ne passe à confirmed ou partially_confirmed que sur relecture du système de paiement (external_payment_ref, confirmed_at, confirmed_amount obligatoires par contrainte) ; une réponse absente donne unknown_pending_confirmation, jamais un échec ni un succès local ; les acomptes ne sont déduits que s'ils sont confirmés (payment_allocations).
  6. Maker-checker en données : OPA eai.assurance_sinistres lit la matrice de délégation de la section 15 depuis data.json (opérations, rôles préparateurs et approbateurs, paliers par devise, quorum, urgence) ; OpenFGA porte can_approve ... but not maker et can_review ... but not uploader ; les contraintes approver_not_maker des tables doublent la règle. Le paquet expose decision.applies vrai pour ses seules actions.
  7. Signaux de fraude : des indicateurs horodatés qui ouvrent une revue humaine, jamais une décision ; ils ne sont jamais exposés au déclarant ni à l'expert.
  8. Documents : même pipeline que UC-00 (quarantaine, ClamAV et YARA-X obligatoires, Docling, revue manuelle quand l'extraction est ambiguë) ; une estimation visuelle n'est jamais retenue comme montant indemnisable (contrainte visual_estimate_never_retained).
  9. Copilote : runtime copié (SSE, Last-Event-ID, gouvernance injection, DLP, budget, chiffres) ; outils de lecture sous RLS, outils de préparation via la passerelle, outils à effet de bord après approbation par un autre humain que le propriétaire du run ; contrat d'événement dérivé de banking-copilot-event avec la même enveloppe.
  10. Connecteurs : contrats de capacités déclarés, bac à sable déterministe navin-sandbox refusé en mode production, jamais une confirmation simulée présentée comme celle de la source.

Conséquences​

  • Positives : réutilisation intégrale des briques gouvernées, isolation tenant par RLS sur toutes les tables, matrice de délégation modifiable sans redéploiement, traçabilité complète des calculs et des décisions.
  • Négatives : la copie des modules génériques crée une dette de synchronisation avec UC-00 (consignée dans KNOWN_LIMITATIONS.md) ; les connecteurs réels (gestion des polices, paiement, réseau d'experts) restent à configurer par le client ; le gabarit n'est pas publié tant que le pipeline d'artefacts n'a pas tourné.

Points à valider​

  • Paliers de montants et quorums par devise de eai.config.assurance_sinistres (valeurs de départ, à ajuster par le client).
  • Liste des branches activées par instance et règles par branche.
  • Délai de réconciliation des paiements unknown_pending_confirmation avant alerte.

Alternatives écartées​

  • Un frontend par produit : refusé par la décision du 2026-11-04.
  • Un statut paid posé localement à la soumission : refusé, seule la source confirme.
  • Un moteur de garanties à base de LLM : refusé, le moteur est déterministe et versionné, le LLM explique.

Plan de réalisation​

Sous-plan de la tâche t-806252bc (S1 audit et ADR, S2 contrats et politiques, S3 fondation, S4 et S5 modules métier, S6 machine à états, S7 documents, S8 copilote, S9 sécurité, S10 recette, S11 manifeste et gabarit, S12 docs).