Skip to main content

Cahier des charges fonctionnel

Plateforme de gestion de contrats et sinistres — ktayl-solution IS

RéférenceCERT-1 / CdCF-v1.0
Date13 août 2026
AuteurAndrey-Vanlaurel Kanmegne Tabouguie
StatutDraft — soumis pour validation RNCP39583
Certification viséeRNCP39583 — Expert en Informatique et Système d'Information
Blocs couvertsBC01 · BC02 · BC03 · BC04

1. Objet du document

Ce cahier des charges fonctionnel (CdCF) définit les exigences fonctionnelles et non-fonctionnelles du système d'information ktayl-solution, une plateforme de gestion de contrats d'assurance et de sinistres déployée sur infrastructure bare-metal Kubernetes.

Le document constitue l'artefact de référence pour :

  • la conception et le développement des quatre microservices constituant le cœur métier ;
  • la validation des choix d'architecture vis-à-vis des contraintes réglementaires ACPR, GDPR et DORA ;
  • le cahier de recette liant les exigences aux cas de tests (L1–L4) ;
  • la démonstration des compétences BC01 à BC04 du référentiel RNCP39583.

2. Contexte et commanditaire

2.1 Contexte organisationnel

ktayl-solution est une organisation simulée d'assurance IARD et Vie opérant sous le régime prudentiel ACPR (Autorité de Contrôle Prudentiel et de Résolution). Elle couvre sept lignes de métier (LOB) : Auto, MRH, Santé, Prévoyance, Responsabilité Civile, Cyber-risque et Retraite collective.

Le système d'information existant repose sur un monolithe legacy Java EE, analogue aux systèmes de cœur assurance (type GERAS, Guidewire PolicyCenter, Alis) encore en production dans la majorité des assureurs français. Ce monolithe présente les caractéristiques typiques de la dette technique sectorielle :

  • cycle de déploiement mensuel (release figée) ;
  • absence d'API externe exploitable par des canaux digitaux ;
  • absence de traçabilité DORA Art. 9 sur les décisions métier ;
  • impossibilité d'intégrer des traitements IA sans extraction batch.

2.2 Enjeux stratégiques

EnjeuTraduction fonctionnelle
Modernisation SIMigration strangler-fig : les nouveaux parcours passent par les microservices ; le legacy reste en lecture seule
Conformité réglementaireACPR (SCR/MCR), DORA (Art. 9 traçabilité, Art. 11 RTO < 4h), GDPR, RGAA AA
Efficience opérationnelleAutomatisation du triage sinistre J+0 (actuellement 2–3h/dossier)
Time-to-marketPipeline GitOps dev → staging → prod en < 20 min

2.3 Portée de la certification

Ce projet constitue le support technique de la certification RNCP39583 — Expert en Informatique et Système d'Information (niveau 7, équivalent Master 2) de l'auteur. Il démontre les compétences requises par les quatre blocs de compétences :

BlocIntituléDémonstration principale
BC01Piloter un projet de développement logicielArchitecture, CdCF, plan de charge, gouvernance Scrumban/PRINCE2
BC02Concevoir et développer une solution logicielle4 microservices polyglots, tests L1–L4, OpenAPI, event sourcing
BC03Déployer et sécuriser une solution logicielleGitOps k8s, RBAC, Gatekeeper OPA, cosign SBOM, Vault secrets
BC04Optimiser et faire évoluer une solution logicielleObservabilité (Grafana/Loki/Tempo), VPA, canary Argo Rollouts, DORA metrics

3. Objectifs du projet

3.1 Objectif principal

Concevoir et déployer un système de gestion de contrats et sinistres d'assurance cloud-native, composé de quatre microservices indépendants, communiquant par événements NATS JetStream, et exposés via un portail unifié.

3.2 Objectifs secondaires

  1. Automatisation du triage sinistre : réduire le délai de première analyse de 2–3h à < 15 min via un assistant IA basé sur LangGraph.
  2. Traçabilité réglementaire complète : chaque décision métier (souscription, avenant, liquidation) est horodatée, signée et archivée.
  3. Accessibilité RGAA AA : le portail client doit passer un audit axe-core CI sans blocant.
  4. Résilience DORA : RTO < 4h démontré par test de basculement Velero en Game Day documenté.
  5. Interopérabilité ERPNext : synchronisation bidirectionnelle des données financières (primes, indemnités) via API REST.

3.3 Hors périmètre (v1.0)

  • Gestion actuarielle et calcul des réserves SCR/MCR (relevé du système actuariel externe)
  • Interfaçage avec le registre FICOBA (agrégation bancaire)
  • Module de réassurance (cession proportionnelle)
  • Application mobile native (iOS/Android)

4. Périmètre fonctionnel

Le projet couvre quatre domaines fonctionnels correspondant aux quatre microservices :

┌─────────────────────────────────────────────────────────────┐
│ ktayl-portal (BC) │
│ Next.js 14 — Authentik OIDC │
│ ┌──────────────┐ ┌──────────────────────────┐ │
│ │ Portail │ │ Portail courtier │ │
│ │ assuré │ │ (rôle: brokers) │ │
│ └──────────────┘ └──────────────────────────┘ │
└───────────────┬──────────────────────┬──────────────────────┘
│ REST │ REST
┌─────────▼──────┐ ┌──────────▼──────────┐
│ ktayl-policy- │ │ ktayl-claims- │
│ service (Go) │ │ service (Java 21) │
└─────────┬──────┘ └──────────┬───────────┘
│ NATS │ NATS
└──────────┬───────────┘
│ claim.created / policy.amended
┌────────▼───────────────┐
│ ktayl-ai-claims- │
│ assistant (Python) │
└────────────────────────┘

5. Acteurs et rôles

5.1 Utilisateurs finaux

ActeurRôle AuthentikFonctions accessibles
AssurépolicyholdersConsulter contrats et sinistres, soumettre une déclaration (FNOL), télécharger attestations, contacter l'assistant IA
CourtierbrokersGérer portefeuille clients, soumettre demandes de souscription, suivre commissions, accéder aux rapports LOB
Gestionnaire sinistresadjustersInstruire dossiers, valider/rejeter l'analyse IA, saisir décisions de liquidation
SouscripteurunderwritersValider propositions de contrats, paramétrer règles de souscription
Administrateur ISplatform-adminsGérer utilisateurs, accéder aux logs d'audit, superviser pipelines batch

5.2 Systèmes externes

SystèmeTypeInteraction
ERPNextERP financier (on-cluster)Synchronisation primes, quittances, sinistres liquidés
DocusealSignature électroniqueSignature de contrats et règlements sinistres
Paperless-ngxDMSArchivage long terme des pièces justificatives
AuthentikIAM/OIDCSSO, gestion des rôles, M2M client credentials
NATS JetStreamMessage brokerTransport des événements inter-microservices
LiteLLM / vLLMInférence IAModèles LLM pour le triage et la génération de rapports
QdrantBase vectorielleRecherche sémantique sur documents de contrats

6. Besoins fonctionnels

6.1 Gestion des contrats (ktayl-policy-service)

BF-POL-01 — Souscription d'un nouveau contrat

Description : Un courtier ou un souscripteur peut créer un nouveau contrat à partir d'une proposition commerciale validée.

Entrées :

  • Identité de l'assuré (nom, SIREN/SIRET ou NIR selon LOB)
  • LOB et produit (ex. IARD-AUTO-RC)
  • Dates d'effet et d'échéance
  • Sommes assurées et franchises
  • Mode de paiement (SEPA, virement)

Traitement :

  1. Validation des règles de souscription (âge, zone géographique, antécédents)
  2. Calcul de la prime nette + taxes applicables (TSCA ou TVA selon produit)
  3. Génération d'un numéro de police unique (format : POL-AAAA-NNNNNN)
  4. Publication de l'événement policy.created sur NATS JetStream
  5. Déclenchement de la génération de l'attestation PDF (via Docuseal)

Sorties :

  • Contrat créé en base PostgreSQL (état DRAFT)
  • Événement NATS publié
  • Demande de signature électronique créée dans Docuseal

Règles métier :

  • Un contrat ne passe à l'état ACTIVE qu'après réception du webhook Docuseal confirmant la signature
  • La prime doit être supérieure à la prime minimale paramétrable par LOB
  • Le délai de rétractation de 14 jours est tracé (DORA Art. 9)

BF-POL-02 — Avenant (modification de contrat)

Description : Modification d'un contrat actif (changement de véhicule, modification des garanties, ajout de clause).

Types d'avenants supportés :

  • Changement d'objet assuré
  • Modification des garanties (extension, réduction)
  • Changement des coordonnées bancaires (SEPA)
  • Suspension temporaire (résidence secondaire)

Contraintes : Tout avenant déclenche un recalcul de prime (pro-rata temporis) et publie policy.amended.

BF-POL-03 — Renouvellement

Description : Renouvellement automatique à l'échéance anniversaire (J-60 : avis d'échéance, J-30 : relance, J-0 : renouvellement ou résiliation).

Batch : Spring Batch job PolicyRenewalJob exécuté quotidiennement à 06:00 UTC.

BF-POL-04 — Résiliation

Description : Résiliation à l'initiative de l'assuré (loi Hamon, loi Chatel) ou de l'assureur (non-paiement, aggravation du risque).

Motifs implémentés :

CodeMotifPréavis réglementaire
RES-HAMRésiliation loi Hamon (après 1 an)1 mois
RES-CHARésiliation loi ChatelÀ la date d'échéance
RES-IMPNon-paiement40 jours après mise en demeure
RES-RISAggravation du risque10 jours après notification

BF-POL-05 — Consultation du portefeuille (API)

Description : API REST permettant la consultation paginée des contrats d'un assuré ou d'un courtier.

Endpoints :

  • GET /policies — liste paginée, filtrable par LOB/statut/date
  • GET /policies/{id} — détail complet avec historique des avenants
  • GET /policies/{id}/documents — liste des pièces (attestation, conditions générales)

6.2 Gestion des sinistres (ktayl-claims-service)

BF-CLM-01 — Déclaration de sinistre (FNOL)

Description : Première déclaration de sinistre (First Notice of Loss) par un assuré ou un courtier.

Entrées :

  • Référence de la police (validation via appel à ktayl-policy-service)
  • Type d'événement (accident, incendie, vol, dégât des eaux, etc.)
  • Date et heure du sinistre
  • Description textuelle et pièces jointes (photos, PV de police, certificat médical)
  • Coordonnées du déclarant

Traitement :

  1. Validation de l'existence et de l'activité de la police référencée
  2. Vérification de la couverture du type de sinistre
  3. Attribution d'un numéro de sinistre unique (SIN-AAAA-NNNNNN)
  4. Stockage des pièces jointes dans MinIO → déclenchement archivage Paperless-ngx
  5. Publication de claim.created sur NATS → déclenchement de l'assistant IA
  6. Notification au gestionnaire assigné (via Matrix/Element)

État initial : SUBMITTED

BF-CLM-02 — Machine à états du sinistre

DRAFT ──► SUBMITTED ──► UNDER_INVESTIGATION ──► PENDING_DOCUMENTS

├──► APPROVED ──► SETTLEMENT_PENDING ──► SETTLED ──► CLOSED

└──► REJECTED

Transitions autorisées :

DeVersActeurCondition
SUBMITTEDUNDER_INVESTIGATIONGestionnaireAutomatique après analyse IA
UNDER_INVESTIGATIONPENDING_DOCUMENTSGestionnairePièces manquantes identifiées
PENDING_DOCUMENTSUNDER_INVESTIGATIONSystèmeRéception des pièces requises
UNDER_INVESTIGATIONAPPROVEDGestionnaireAnalyse complète, couverture confirmée
UNDER_INVESTIGATIONREJECTEDGestionnaireExclusion de garantie ou fraude avérée
APPROVEDSETTLEMENT_PENDINGSystèmeAccord de l'assuré sur l'indemnité
SETTLEMENT_PENDINGSETTLEDSystèmeVirement effectué (ERPNext payment.created)
SETTLEDCLOSEDSystèmeDélai de recours expiré (90 jours)

Contraintes :

  • Toute transition est auditée : acteur, timestamp, motif (DORA Art. 9)
  • Délai de traitement maximal : 30 jours (Art. L113-5 Code des assurances)
  • Une alerte Alertmanager se déclenche si un sinistre reste UNDER_INVESTIGATION > 15 jours

BF-CLM-03 — Instruction du dossier

Description : Interface de travail du gestionnaire sinistres permettant de consulter l'analyse IA, saisir les décisions, demander des expertises.

Fonctions :

  • Consultation de l'analyse IA (résumé, score de fraude, clauses applicables)
  • Validation ou rejet de la recommandation IA
  • Saisie du montant d'indemnité proposé
  • Ajout de notes d'instruction (tracées)
  • Déclenchement d'une expertise (créé comme tâche Plane CE)

BF-CLM-04 — Rapport COREP batch (Spring Batch)

Description : Génération mensuelle du bordereau de règlements sinistres au format ACPR (COREP — Common Reporting).

Spécifications :

  • Fréquence : 1er jour ouvré du mois suivant, 02:00 UTC
  • Format de sortie : XML XBRL (schéma EIOPA S.19.01) + CSV de contrôle
  • Périmètre : tous sinistres SETTLED du mois précédent
  • Dépôt : MinIO bucket acpr-reports/ + notification Email via Stalwart

6.3 Assistant IA de triage (ktayl-ai-claims-assistant)

BF-AI-01 — Triage automatique à la réception FNOL

Description : Dès réception de claim.created sur NATS, l'assistant analyse le dossier et produit une recommandation structurée.

Workflow LangGraph :

claim.created (NATS)


[extract_fields]
Extraction structurée depuis PDF/photos
(via markitdown-proxy + Docling)


[validate_coverage]
Appel ktayl-policy-service : la police couvre-t-elle ce type de sinistre ?


[search_policy_clauses]
RAG Qdrant (collection: policy-docs)
Récupère top-5 clauses pertinentes


[score_fraud_risk]
Modèle scikit-learn : probabilité de fraude 0→1
Features : montant déclaré, délai déclaration, historique assuré, zone géo

├── [score > 0.7] ──► [human_interrupt]
│ Alerte gestionnaire + suspension

└── [score ≤ 0.7] ──► [generate_summary]
Résumé LLM (< 200 mots, français)
+ montant d'indemnité suggéré


[create_plane_task]
Tâche Plane CE pour le gestionnaire


[notify_adjuster]
Message Matrix avec résumé + lien dossier

Sortie :

  • Résumé structuré JSON (persisté en base, lisible depuis le portail gestionnaire)
  • Score de fraude (0–100)
  • Clauses contractuelles applicables (références + extraits)
  • Montant d'indemnité suggéré (basé sur barèmes configurés)
  • Tâche Plane CE créée

Performances cibles :

  • Temps de traitement total : < 15 min (contre 2–3h manuel)
  • Disponibilité : 99,5% (1 replica minimum, scalé par KEDA sur queue NATS)

BF-AI-02 — Interface de chat assistée (portail assuré)

Description : Widget de chat dans le portail assuré permettant de poser des questions sur son contrat et son sinistre.

Capacités :

  • Questions sur les garanties du contrat (RAG sur policy-docs)
  • Statut du sinistre en cours
  • Documents téléchargeables disponibles
  • Questions génériques sur les procédures (FAQ RAG)

Contraintes :

  • Le chat ne peut pas prendre de décisions engageantes (ex. ouvrir un sinistre) — redirige vers le formulaire FNOL
  • Toutes les conversations sont tracées dans Langfuse (rétention 90 jours)
  • Le modèle doit refuser les questions hors périmètre assurance

6.4 Portail client et courtier (ktayl-portal)

BF-POR-01 — Authentification et gestion de session

Description : Authentification centralisée via Authentik OIDC. Aucune gestion de mot de passe dans le portail.

Flux :

  1. L'utilisateur clique « Se connecter »
  2. Redirection vers Authentik (auth.devandre.sbs)
  3. Authentification (identifiant + TOTP ou WebAuthn)
  4. Retour avec id_token + access_token (PKCE)
  5. next-auth persiste la session (cookie httpOnly)
  6. Les routes sont protégées par middleware Next.js selon le groupe Authentik

Groupes et accès :

  • /my/* — groupe policyholders
  • /broker/* — groupe brokers
  • /admin/* — groupe platform-admins

BF-POR-02 — Tableau de bord assuré

Accès : /my/dashboard

WidgetSource de donnéesFréquence de rafraîchissement
Contrats actifsktayl-policy-serviceTemps réel (React Query)
Sinistres en coursktayl-claims-serviceTemps réel
Prochain prélèvementERPNext payment scheduleQuotidien
Documents récentsPaperless-ngx APIQuotidien

BF-POR-03 — Formulaire FNOL en ligne

Description : Formulaire guidé en 5 étapes permettant à un assuré de déclarer un sinistre.

Étapes :

  1. Sélection du contrat concerné
  2. Sélection du type d'événement et de la date
  3. Description textuelle (champ libre + validation longueur > 50 caractères)
  4. Téléversement des pièces jointes (PDF, images, max 10 Mo/fichier, 5 fichiers max)
  5. Récapitulatif + confirmation

Accessibilité : Chaque étape respecte RGAA AA — labels explicites, gestion du focus, messages d'erreur associés aux champs, pas de validation uniquement par couleur.

BF-POR-04 — Espace courtier

Accès : /broker/*

FonctionnalitéEndpoint consommé
Portefeuille clientsGET /policies?broker_id={id}
Soumission de propositionPOST /policies
Suivi commissionsERPNext CRM API
Rapports de productionktayl-policy-service analytics

BF-POR-05 — Téléchargement de documents

Description : Les assurés peuvent télécharger leurs documents (attestations, conditions générales, avis d'échéance).

Sources :

  • Attestations PDF : générées à la volée par ktayl-policy-service (Go + wkhtmltopdf)
  • Conditions générales : Paperless-ngx DMS (documents statiques indexés)
  • Correspondance : Paperless-ngx (documents entrants archivés)

7. Exigences non-fonctionnelles

7.1 Performance

MétriqueCibleMesure
Latence API p95 (hors IA)< 200 msGrafana / Tempo
Latence triage IA p95< 15 minLangfuse trace duration
Latence chargement portail (FCP)< 1,5 sLighthouse CI
Débit FNOL simultanés50 req/sk6 load test
Disponibilité (SLO)99,5% sur 30 joursGrafana SLO dashboard

7.2 Sécurité

ExigenceImplémentation
Authentification forteAuthentik OIDC + TOTP obligatoire pour adjusters et underwriters
Autorisation fineRBAC Kubernetes + groupe Authentik sur chaque route
SecretsVault (ESO) — aucun secret en clair dans Git
Chiffrement transitTLS 1.3 sur tous les endpoints internes et externes
Chiffrement reposLonghorn volume encryption (LUKS) pour les PVC PostgreSQL
AdmissionOPA Gatekeeper — 18 constraints actives (non-root, no-hostPath, etc.)
Supply chaincosign + SBOM sur chaque image (staging et prod)
DASTOWASP ZAP en CI sur PR → main
Audit logChaque action métier : acteur, timestamp, IP source, hash contenu

7.3 Résilience

ExigenceCibleMécanisme
RTO (DORA Art. 11)< 4 hVelero restore + Longhorn snapshots
RPO< 1 hBackup horaire Longhorn + kine SQLite
Disponibilité nœud1 nœud down tolerablePodDisruptionBudget + affinity rules
Dégradation gracieusePortail lisible sans IACircuit breaker Resilience4j (claims-service)

7.4 Observabilité

SignalOutilRétention
MétriquesPrometheus + Grafana15 jours
LogsLoki (OTel pipeline)30 jours
TracesTempo (OTLP)7 jours
Traces IALangfuse90 jours
AlertesAlertmanager → Stalwart mail + Matrix

Dashboards Grafana requis :

  • ktayl-claims-slo : taux d'erreur, latence, saturation par service
  • ktayl-ai-triage : durée moyenne de triage, score de fraude moyen, taux human_interrupt
  • ktayl-batch-corep : statut du batch mensuel, nombre de dossiers traités

7.5 Accessibilité (RGAA)

Le portail (ktayl-portal) doit satisfaire :

  • RGAA 4.1 Level AA : 50 critères applicables
  • WCAG 2.1 AA : conformité vérifiée par axe-core en CI (0 violations de niveau critique ou sérieux)
  • Lighthouse Accessibility : score ≥ 90 en CI sur chaque PR
  • Audit manuel NVDA/ChromeVox sur les parcours FNOL et consultation de contrat

8. Architecture générale

8.1 Vue d'ensemble

Internet ──► Cloudflare Tunnel ──► nginx-ingress (10.0.0.200)

┌─────────────────────────┼────────────────────────┐
│ │ │
ktayl-portal ktayl-policy-service ktayl-claims-service
(Next.js 14) (Go 1.23) (Java 21 / Spring Boot 3)
ns: portal ns: insurance ns: insurance
│ │ │
└─────────────────────────┴─────────────────────────┘
│ NATS JetStream
ktayl-ai-claims-assistant
(Python 3.12 / LangGraph)
ns: ai

8.2 Stack par microservice

ServiceLangageFrameworkDBMessaging
ktayl-policy-serviceGo 1.23net/http + pgxPostgreSQL 16NATS pub
ktayl-claims-serviceJava 21Spring Boot 3.3 + Spring BatchPostgreSQL 16NATS pub/sub
ktayl-ai-claims-assistantPython 3.12FastAPI + LangGraph— (stateless)NATS sub
ktayl-portalTypeScriptNext.js 14 App Router— (BFF only)

8.3 Justification des choix technologiques

Go pour le service de polices : langage natif de la plateforme (platform-demo, minicloud-plane) ; idéal pour un service REST haute fréquence (notation, avenant batch). Goroutines < JVM overhead pour ce profil de charge.

Java 21 pour le service sinistres : standard de l'industrie française (AXA, GMF, CNP). Spring Batch est la solution de référence pour les exports COREP. Les virtual threads (Project Loom) éliminent le besoin de WebFlux pour la concurrence. Démontre l'expertise sur le stack legacy modernisé.

Python pour l'assistant IA : seul écosystème natif pour LangGraph, LiteLLM, scikit-learn et bge-m3. Cohérence avec minicloud-agent et minicloud-crew-agent déjà en production.

Next.js 14 pour le portail : SSR nécessaire pour RGAA (accessibilité) et Core Web Vitals mobiles. App Router (React Server Components) réduit la surface JS côté client. Un seul codebase pour les vues assuré et courtier (route-level auth par groupe Authentik).


9. Modèle de données (vue logique)

9.1 Service de polices

Policy
├── id: UUID (PK)
├── policy_number: VARCHAR(20) UNIQUE -- POL-2027-000001
├── status: ENUM(DRAFT, ACTIVE, SUSPENDED, CANCELLED, EXPIRED)
├── lob: VARCHAR(20) -- IARD-AUTO, IARD-MRH, PREV-IND, ...
├── product_code: VARCHAR(30)
├── policyholder_id: UUID (FK → external: Authentik user ID)
├── broker_id: UUID (FK → ERPNext CRM contact)
├── effective_date: DATE
├── expiry_date: DATE
├── net_premium: DECIMAL(12,2)
├── tax_rate: DECIMAL(5,4)
├── total_premium: DECIMAL(12,2)
├── payment_schedule: JSONB
├── created_at: TIMESTAMPTZ
└── updated_at: TIMESTAMPTZ

PolicyEndorsement
├── id: UUID (PK)
├── policy_id: UUID (FK → Policy)
├── endorsement_type: ENUM
├── effective_date: DATE
├── changes: JSONB
├── premium_delta: DECIMAL(12,2)
└── created_at: TIMESTAMPTZ

AuditLog (append-only)
├── id: UUID (PK)
├── entity_type: VARCHAR(20)
├── entity_id: UUID
├── action: VARCHAR(50)
├── actor_id: VARCHAR(255)
├── ip_address: INET
├── payload_hash: VARCHAR(64) -- SHA-256
└── created_at: TIMESTAMPTZ

9.2 Service sinistres

Claim
├── id: UUID (PK)
├── claim_number: VARCHAR(20) UNIQUE -- SIN-2027-000001
├── policy_id: UUID (FK → policy-service, cross-service reference)
├── status: ENUM(DRAFT, SUBMITTED, UNDER_INVESTIGATION, ...)
├── event_type: VARCHAR(50)
├── event_date: TIMESTAMPTZ
├── declared_amount: DECIMAL(12,2)
├── settled_amount: DECIMAL(12,2)
├── fraud_score: DECIMAL(5,4)
├── ai_summary: TEXT
├── adjuster_id: VARCHAR(255)
├── created_at: TIMESTAMPTZ
└── updated_at: TIMESTAMPTZ

ClaimDocument
├── id: UUID (PK)
├── claim_id: UUID (FK → Claim)
├── document_type: VARCHAR(30)
├── minio_key: VARCHAR(500)
├── paperless_id: INTEGER
├── uploaded_at: TIMESTAMPTZ
└── uploaded_by: VARCHAR(255)

ClaimStatusHistory (append-only)
├── id: UUID (PK)
├── claim_id: UUID (FK → Claim)
├── from_status: ENUM
├── to_status: ENUM
├── actor_id: VARCHAR(255)
├── reason: TEXT
└── created_at: TIMESTAMPTZ

10. Intégrations

10.1 NATS JetStream

SubjectProducteurConsommateursPayload
policy.createdktayl-policy-servicektayl-portal, ERPNext webhookPolicyCreatedEvent
policy.amendedktayl-policy-serviceERPNext webhookPolicyAmendedEvent
policy.cancelledktayl-policy-serviceERPNext webhookPolicyCancelledEvent
claim.createdktayl-claims-servicektayl-ai-claims-assistantClaimCreatedEvent
claim.status_changedktayl-claims-servicektayl-portalClaimStatusChangedEvent
claim.settledktayl-claims-serviceERPNext webhookClaimSettledEvent

Configuration JetStream :

  • Stream : INSURANCE, retention limits, max age 30 jours
  • Consumer : durable, deliver policy all, ack policy explicit
  • Replay : enabled (pour rejeu en cas de panne du consommateur IA)

10.2 ERPNext

FluxDirectionMécanisme
Création de quittance primeclaims-service → ERPNextREST API POST /api/resource/Sales Invoice
Enregistrement de règlementERPNext → claims-serviceWebhook ERPNext payment_entry.after_insert
Fiche contact assuréktayl-portal → ERPNextREST API GET /api/resource/Customer

10.3 Docuseal

Flux signature de contrat :

  1. ktayl-policy-service POST /api/v1/submissions avec template Contrat de police
  2. Docuseal envoie email au souscripteur et au courtier
  3. Après signature, Docuseal appelle webhook POST /webhooks/docuseal/signed sur ktayl-policy-service
  4. ktayl-policy-service passe la police de DRAFT à ACTIVE

Authentification : API token Vault secret/platform/docuseal:api-token

10.4 Paperless-ngx

Archivage automatique de tout document signé ou généré :

  • ktayl-policy-service : attestations PDF → POST /api/documents/ avec tag policy
  • ktayl-claims-service : pièces jointes FNOL → POST /api/documents/ avec tag claim
  • Paperless assigne les correspondants automatiquement via son moteur de règles (correspondant = numéro de police)

11. Contraintes réglementaires

11.1 ACPR (Autorité de Contrôle Prudentiel et de Résolution)

ExigenceImplémentation
Conservation des données de gestion 10 ansLonghorn PVC + Velero off-site (Cloudflare R2), politique de rétention 10 ans
Traçabilité complète des décisions de souscriptionAuditLog append-only, signé par hash SHA-256
Reporting prudentiel (COREP S.19.01)Spring Batch ClaimsReportJob — XML XBRL mensuel
Délai de traitement sinistres (Art. L113-5)Alertmanager : alerte J+15 si UNDER_INVESTIGATION

11.2 RGPD (Règlement Général sur la Protection des Données)

ExigenceImplémentation
Minimisation des donnéesSeules les données nécessaires au contrat sont collectées (PIA documenté)
Droit à l'effacementProcédure de pseudonymisation (pas d'effacement physique — obligation ACPR prime)
Durée de conservationDonnées de contrat : 10 ans après expiration ; logs d'accès : 1 an
Transferts hors UEAucun (infrastructure on-premises FR, LLM local vLLM ou Azure OpenAI EU)
DPORôle de DPO fictif : administrateur IS

11.3 DORA (Digital Operational Resilience Act — EU 2022/2554)

ArticleExigenceImplémentation
Art. 9Traçabilité et classification des incidents TICAuditLog, Falco alerting, severity classification dans Alertmanager
Art. 11Tests de résilience opérationnelle numériqueGame Day documenté (PR chaos-mesh #phase81), RTO mesuré < 4h
Art. 17Gestion des prestataires TIC tiersOpenTofu registre (AWS SES, Azure OpenAI, Cloudflare) — budget €10/mois
Art. 25Tests de pénétration basés sur la menace (TLPT)OWASP ZAP CI + Kube-bench rapports dans le backlog

11.4 Factur-X / E-invoicing

Toutes les factures générées par ERPNext doivent être conformes à la Factur-X Minimum (profil CII/D16B) — obligation légale française à compter du 1er septembre 2026 pour les assujettis à la TVA.

Implémentation : générateur Python pure (apps/erpnext/erpnext/public/py/facturx_generator.py) — 5 assertions vérifiées en CI.


12. Plan de livraison prévisionnel

12.1 Jalons

JalonDate cibleLivrable
M0Août 2026CdCF finalisé + architecture validée (ce document)
M1Octobre 2026ktayl-policy-service v1.0 — CRUD polices + tests L1/L2
M2Novembre 2026ktayl-claims-service v1.0 — FNOL + machine à états + tests
M3Décembre 2026ktayl-ai-claims-assistant v1.0 — workflow LangGraph complet
M4Janvier 2027ktayl-portal v1.0 — portail assuré + audit RGAA
M5Février 2027Intégration complète + tests E2E + batch COREP
M6Mars 2027Performance tuning + chaos game day + documentation finale
SoutenanceAvril 2027Présentation RNCP39583

12.2 Plan de charge estimé

ServiceComplexitéEffort estimé
ktayl-policy-service (Go)Moyenne3 semaines
ktayl-claims-service (Java)Élevée (Spring Batch + COREP)5 semaines
ktayl-ai-claims-assistant (Python)Élevée (LangGraph + ML)4 semaines
ktayl-portal (Next.js)Moyenne (RGAA + SSR)3 semaines
Intégration & tests E2E2 semaines
Documentation & soutenance1 semaine
Total18 semaines

13. Critères d'acceptation

13.1 Critères fonctionnels (cahier de recette)

Réf.ScénarioRésultat attenduStatut
REC-POL-01Souscription contrat IARD-AUTO avec signature DocusealPolice ACTIVE, événement policy.created publié, attestation PDF généréeÀ valider
REC-POL-02Résiliation loi Hamon avant échéancePolice CANCELLED, remboursement pro-rata calculé, email de confirmationÀ valider
REC-CLM-01FNOL assuré — sinistre MRH dégât des eauxSinistre SUBMITTED, analyse IA déclenchée < 1 min, tâche Plane crééeÀ valider
REC-CLM-02Sinistre avec score de fraude > 0,7Workflow suspendu, alerte gestionnaire dans Matrix, statut UNDER_INVESTIGATIONÀ valider
REC-CLM-03Liquidation et virement ERPNextSinistre SETTLED, entrée de paiement ERPNext créée, document archivé PaperlessÀ valider
REC-AI-01Triage complet sur dossier test (PDF + 3 clauses)Résumé < 200 mots, montant suggéré dans ±10% du barème, < 15 minÀ valider
REC-POR-01FNOL via portail — parcours completSinistre créé, pièces uploadées, confirmation affichée, RGAA 0 violationÀ valider
REC-BATCH-01Batch COREP mensuelXML XBRL valide, 0 erreur de validation de schéma, déposé dans MinIOÀ valider

13.2 Critères de qualité logicielle

CritèreSeuilOutil
Couverture de tests (L1)≥ 80% sur code métierJaCoCo (Java) / go test -cover / pytest-cov
Tests d'intégration (L2)100% des endpoints RESTTestcontainers + Playwright
Lint / formatage0 erreurgolangci-lint, checkstyle, ruff, eslint + tsc
Vulnérabilités connues0 critiqueTrivy + Dependabot
Accessibilité0 violation axe-core niveau A/AAaxe-core CI + Lighthouse ≥ 90
Documentation API100% endpoints documentésOpenAPI (Swagger UI + Backstage)

13.3 Définition of Done (GOV-3, issue #149)

Chaque service est considéré « Done » lorsque :

  • OpenAPI spec publiée dans le portail API Backstage
  • Tests unitaires L1 ≥ seuil de couverture
  • Tests d'intégration L2 avec conteneurs réels
  • Pipeline GitOps complet : dev → staging → prod
  • Entrée Catalog Backstage (catalog-info.yaml)
  • Événements NATS documentés (JetStream subject + schéma JSON)
  • Secrets gérés via ESO/Vault (0 secret dans Git)
  • PVC Longhorn épinglé au nœud approprié (pour StatefulSets)
  • Dashboard Grafana ktayl-* déployé en ConfigMap

14. Annexes

14.1 Glossaire

TermeDéfinition
FNOLFirst Notice of Loss — première déclaration d'un sinistre par l'assuré
COREPCommon Reporting — cadre de reporting réglementaire prudentiel ACPR/EBA
LOBLine of Business — ligne de métier assurance (Auto, MRH, etc.)
TSCATaxe Spéciale sur les Conventions d'Assurance (remplace TVA pour l'assurance)
PCGPlan Comptable Général — référentiel comptable français
GERASSystème de gestion de sinistres legacy (core system de référence dans le secteur assurance)
Strangler FigPattern de modernisation progressive : les nouveaux appels passent par le nouveau système, le legacy reste en arrière-plan
M2MMachine-to-Machine — authentification inter-services sans utilisateur humain
BFFBackend For Frontend — couche d'agrégation côté serveur Next.js
RGAARéférentiel Général d'Amélioration de l'Accessibilité (standard français, base WCAG)
DORADigital Operational Resilience Act — règlement européen sur la résilience numérique
RTORecovery Time Objective — temps maximal de remise en service après incident
RPORecovery Point Objective — perte de données maximale acceptable

14.2 Références

DocumentLien
Platform Backloghttps://github.com/andrelair-platform/platform-backlog
Issue #198 — ktayl-claims-servicehttps://github.com/andrelair-platform/platform-backlog/issues/198
Issue #203 — ktayl-policy-servicehttps://github.com/andrelair-platform/platform-backlog/issues/203
Issue #200 — ktayl-ai-claims-assistanthttps://github.com/andrelair-platform/platform-backlog/issues/200
Issue #202 — ktayl-portalhttps://github.com/andrelair-platform/platform-backlog/issues/202
Architecture de productionProduction Stack Architecture
Catalogue des applications métierBusiness Applications Catalog
Stratégie de testsTesting Strategy
RNCP39583https://www.francecompetences.fr/recherche/rncp/39583/
ACPR COREPhttps://www.acpr.banque-france.fr/reglementation/reporting-prudentiel
DORA (EU 2022/2554)https://eur-lex.europa.eu/legal-content/FR/TXT/?uri=CELEX:32022R2554

15. Gouvernance du projet — RACI

Ce projet suit le standard de gouvernance de la plateforme. La section ci-dessous instancie la matrice RACI pour le périmètre CERT-1.

15.1 Mapping des rôles

Dans le contexte d'un projet de portfolio mené en solo, une seule personne remplit l'ensemble des rôles. Le tableau ci-dessous indique, pour chaque rôle entreprise standard, le « chapeau » porté à chaque phase.

CodeRôle entreprisePorté parPhase principale
STKStakeholder / CommanditaireAndrey-Vanlaurel Kanmegne TabouguieInitiation, validation finale
PMProduct ManagerAndrey-Vanlaurel Kanmegne TabouguieRoadmap, arbitrages scope
BABusiness AnalystAndrey-Vanlaurel Kanmegne TabouguieRédaction CdCF, exigences
UX/UIUX/UI DesignerAndrey-Vanlaurel Kanmegne TabouguieWireframes portail, maquettes
SASolution ArchitectAndrey-Vanlaurel Kanmegne TabouguieArchitecture microservices, choix techno
TLTech LeadAndrey-Vanlaurel Kanmegne TabouguieDécisions d'implémentation, revue de code
FEFrontend DeveloperAndrey-Vanlaurel Kanmegne TabouguiePortail Next.js 14
BEBackend DeveloperAndrey-Vanlaurel Kanmegne TabouguieServices Policy (Go), Claims (Java), IA (Python)
DBADatabase EngineerAndrey-Vanlaurel Kanmegne TabouguieSchémas PostgreSQL, migrations Flyway/Liquibase
DODevOps / Platform EngineerAndrey-Vanlaurel Kanmegne TabouguieCI/CD GitHub Actions, ArgoCD, k3s manifests
QAQA EngineerAndrey-Vanlaurel Kanmegne TabouguieTests L1–L4, Playwright E2E
SECSecurity EngineerAndrey-Vanlaurel Kanmegne TabouguieSAST, Gatekeeper OPA, cosign SBOM, secrets
SRESite Reliability EngineerAndrey-Vanlaurel Kanmegne TabouguiePrometheus, Grafana, alertes, runbooks

15.2 Matrice RACI

Légende : R = Responsable · A = Approbateur · C = Consulté · I = Informé · — = non impliqué

Activité / LivrableSTKPMBAUX/UISATLFEBEDBADOQASECSRE
Phase 1 — Initiation & Exigences
Définir les objectifs métier et le périmètreARCCII
Valider le budget et la charte projetR+ACII
Rédiger le cahier des charges fonctionnel (CdCF)CARCCCC
Définir les exigences non-fonctionnelles (ENF)CARCCCCCC
Identifier les contraintes réglementaires (ACPR/DORA/RGPD)CCRACC
Phase 2 — Architecture & Design
Concevoir l'architecture microservices et l'intégration NATSICCR+ACCCCCCC
Définir les parcours utilisateurs et les wireframes portailCCCR+ACC
Concevoir le modèle de données (Contrats, Sinistres)IICCACRC
Choisir les patterns d'architecture IA (LangGraph, RAG)ICCR+ACCC
Phase 3 — Développement
Développer ktayl-policy-service (Go 1.23)IICCARC
Développer ktayl-claims-service (Java 21 / Spring Boot)IICCARC
Développer ktayl-ai-claims-assistant (Python / LangGraph)IICCARC
Développer ktayl-portal (Next.js 14 / RGAA AA)IICCCARC
Implémenter le job COREP Spring Batch (reporting ACPR)IIRCARCC
Intégrations externes (ERPNext, Docuseal, Paperless-ngx)ICCCACRCC
Phase 4 — Infrastructure & CI/CD
Configurer les pipelines CI/CD (GitHub Actions + Harbor)IICARC
Rédiger les manifests Kustomize et applications ArgoCDIICCR+ACC
Configurer RBAC, NetworkPolicies, Gatekeeper OPAIICCRAC
Configurer ESO / Vault secretsIICCCRA
Phase 5 — Tests & Sécurité
Écrire les tests unitaires et d'intégration (L1/L2)IICACRCC
Écrire les tests E2E Playwright (L4)ICCCARCR
Audit SAST (golangci-lint, ruff, mypy, eslint + tsc)ICCCCCR+A
Revue sécurité (cosign SBOM, CVE scan, secrets)ICCCCCR+A
UAT — validation des critères d'acceptation (REC-*)CARCCCCCRC
Phase 6 — Mise en production & Opérations
Approuver la mise en productionR+ACCCCCCC
Déployer en production (ArgoCD sync main)IICCR+ACC
Configurer la supervision (Prometheus, Grafana, Loki)IICCRA
Configurer Argo Rollouts canary / BlueGreenIICARC
Rédiger les runbooks et la documentation techniqueICCCCARRCCRCC
Réponse aux incidents (SLO breach, RTO < 4h DORA)IICCCCCR+A

15.3 Rôles hors périmètre v1.0

RôleMotif d'exclusion
Data EngineerPas de pipeline ETL/data warehouse dans v1.0. Prévu phase IS-GAP-87 (Metabase BI).
Release ManagerRôle couvert par l'automatisation ArgoCD + GitHub Actions (merge PR → déploiement staging automatique).
Support / HelpdeskPas d'utilisateurs externes en v1.0 (environnement de démonstration). Rôle activé à la mise en service réelle.
Cloud ArchitectInfrastructure 100% on-premises (bare-metal k3s). Pas de composants cloud public hors SES + Lightsail TURN.
RGAA 4.1https://www.numerique.gouv.fr/publications/rgaa-accessibilite/