Lecture
Process d'analyse - Simulation captive (réutilisable)
Objectif
Ce document sert de mode opératoire pour rejouer et analyser une simulation captive avec l'assistant, à partir de la base locale (captiva) et des scripts déjà créés dans src/db/ et ops/sql/.
Il permet de :
- reconstruire un jeu de simulation (portefeuille + sinistres + réassurance + S2),
- enrichir avec concentration CAT géographique,
- produire des runs ORSA comparatifs,
- exporter des livrables (JSON / CSV / pack comité Markdown),
- itérer sur les hypothèses avec l'assistant.
1. Pré-requis
- Base MySQL locale accessible (
.envconfiguré) - Schéma applicatif déjà présent (
src/db/migrate.js) - Scripts de simulation disponibles dans
src/db/ - Scripts SQL de support dans
ops/sql/
2. Vue d'ensemble du pipeline
Ordre recommandé :
- Créer les tables d'extension simulation
- Bootstrap scénario / run
- Générer portefeuille synthétique
- Générer sinistres + réserves
- Appliquer réassurance (QS)
- Enrichir CAT + XoL + Stop Loss
- Calculer concentration CAT géographique
- Recalculer S2 avec CAT géographique
- Générer ORSA (BASE/ADVERSE/SEVERE)
- Exporter les rapports (SQL / JSON / CSV / Markdown)
3. Scripts et rôle
Schémas SQL
ops/sql/simulation_schema_v1.sql- tables d'extension simulation (runs, primes, réserves, réassurance, S2, snapshots)
ops/sql/simulation_geo_cat_v2.sql- tables géographiques / concentration CAT
ops/sql/simulation_orsa_v1.sql- tables de sets ORSA et comparaison inter-runs
ops/sql/simulation_run_report_v1.sql- report SQL consolidé d'un
run_id
- report SQL consolidé d'un
Scripts Node (simulation)
src/db/populateSimulationV1.js- bootstrap scénario + run + paramètres de base
src/db/generateSimulationPortfolioV1.js- génère courtiers, clients, contrats, couvertures, primes, snapshots initiaux
src/db/generateSimulationClaimsV1.js- génère sinistres, paiements, réserves + met à jour snapshots et S2 placeholder
src/db/applySimulationReinsuranceV1.js- applique QS (primes + sinistres) + recalcul net/S2 placeholder
src/db/enhanceSimulationRunV2.js- ajoute CAT events Property + XoL + Stop Loss + recalcul net/S2
src/db/buildCatConcentrationV1.js- construit expositions géographiques Property + concentration CAT
src/db/recomputeS2FromGeoCatV1.js- recalcule
cat_exposureS2 depuis la concentration géographique
- recalcule
Scripts Node (ORSA / reporting)
src/db/seedOrsaStressParametersV1.js- injecte des profils de stress ORSA dans
simulation_parameters
- injecte des profils de stress ORSA dans
src/db/generateOrsaStressRunsV1.js- crée les runs ORSA (
BASE/ADVERSE/SEVERE) et la table de comparaison
- crée les runs ORSA (
src/db/exportOrsaSetReportV1.js- export JSON/CSV d'un set ORSA
src/db/exportOrsaCommitteePackV1.js- export pack comité ORSA en Markdown
4. Process standard (exécution complète)
A. Mise en place du schéma extension
mysql -h 127.0.0.1 -u captiva -p... captiva < ops/sql/simulation_schema_v1.sql
mysql -h 127.0.0.1 -u captiva -p... captiva < ops/sql/simulation_geo_cat_v2.sql
mysql -h 127.0.0.1 -u captiva -p... captiva < ops/sql/simulation_orsa_v1.sql
B. Bootstrap scénario
node src/db/populateSimulationV1.js --scenario SIM_CAPTIVE_2028_BASE --year 2028 --run bootstrap-v1
Résultat attendu :
simulation_scenariosalimentésimulation_runs(bootstrap)simulation_parameters(hypothèses initiales)
C. Génération portefeuille
node src/db/generateSimulationPortfolioV1.js --scenario SIM_CAPTIVE_2028_BASE --run portfolio-v1-full --seed 20280223
Résultat attendu (cible V1) :
- ~
1 100courtiers - ~
85 000clients - ~
250 000contrats GWP = 208 M€
D. Sinistres / réserves
node src/db/generateSimulationClaimsV1.js --scenario-id 1 --run-id 3 --snapshot-date 2028-12-31
Résultat :
sinistres,sinistre_lignes,reglementsclaim_reserve_snapshots- mise à jour
portfolio_*ets2_scr_*
E. Réassurance V1 (QS)
node src/db/applySimulationReinsuranceV1.js --scenario-id 1 --run-id 3 --snapshot-date 2028-12-31
Résultat :
reinsurance_treatiesreinsurance_premium_cessionsreinsurance_claim_cessions- mise à jour net + S2
F. Enrichissement V2 (CAT + XoL + Stop Loss)
node src/db/enhanceSimulationRunV2.js --scenario-id 1 --run-id 3 --snapshot-date 2028-12-31
Résultat :
cat_events- sinistres CAT Property supplémentaires
- traités
XOL/STOP_LOSS - recalcul net et S2
G. Concentration CAT géographique
node src/db/buildCatConcentrationV1.js --scenario-id 1 --run-id 3 --snapshot-date 2028-12-31
Résultat :
geo_zonescontract_geo_exposurescat_event_zone_impactscat_concentration_snapshots
H. Recalcul S2 depuis CAT géographique
node src/db/recomputeS2FromGeoCatV1.js --scenario-id 1 --run-id 3 --snapshot-date 2028-12-31
Résultat :
s2_scr_inputs_non_life.cat_exposureProperty recalculé via géographies2_scr_resultsmis à jour (methodology_version = v3-geo-cat-s2-placeholder)
I. ORSA (paramètres + runs + comparaison)
- Seed paramètres ORSA :
node src/db/seedOrsaStressParametersV1.js --scenario-id 1
- Générer set ORSA :
node src/db/generateOrsaStressRunsV1.js \
--scenario-id 1 \
--base-run-id 3 \
--snapshot-date 2028-12-31 \
--orsa-code ORSA_2028_SET2_PARAM \
--orsa-name "ORSA 2028 Parametrized"
Remarque :
- Par défaut, les runs ORSA dérivés sont maintenant isolés par
orsa-codedans le label de run. - Utiliser
--reuse-existing-runsseulement si on veut réutiliser des runs existants.
J. Exports / livrables
Report SQL run complet
mysql -h 127.0.0.1 -u captiva -p... captiva -e "SET @run_id := 3; SET @snapshot_date := '2028-12-31'; SOURCE ops/sql/simulation_run_report_v1.sql;"
Export ORSA JSON/CSV
node src/db/exportOrsaSetReportV1.js --orsa-set-id 2 --out-dir /tmp
Pack comité ORSA (Markdown)
node src/db/exportOrsaCommitteePackV1.js --orsa-set-id 2 --out-dir /tmp
5. Comment utiliser ce process avec l'assistant (workflow de collaboration)
Quand vous revenez pour une analyse, donner :
scenario_id/scenario_coderun_id(ouorsa_set_id)snapshot_date- objectif (ex. stress CAT, optimisation réassurance, comité, S2, ORSA)
Exemples de demandes utiles :
- "Compare le run 3 et le run ORSA adverse sur la branche Property"
- "Propose une optimisation de QS/XoL pour remonter le ratio de solvabilité > 35%"
- "Régénère un scénario severe avec CAT plus concentré sur PACA/OCC"
- "Prépare une synthèse comité avec focus PI/Medical capital intensive"
6. Checklist d'analyse (à suivre avec l'assistant)
Avant de conclure une analyse :
- Volumes conformes (
courtiers,clients,contrats,GWP) - Branches conformes (répartition GWP)
- Sinistres cohérents (paid / incurred / RBNS / IBNR)
- Réassurance cohérente (brut vs net, cessions par traité)
- CAT géographique cohérent (zones, exposition pondérée, HHI)
- S2 cohérent (cat exposure, SCR, MCR, ratio)
- ORSA comparatif lisible (BASE / ADVERSE / SEVERE + deltas)
7. Limites actuelles (important)
Cette base est très utile pour cadrage et simulation quasi réelle, mais ce n'est pas encore :
- un modèle actuariel réglementaire complet,
- un calcul SCR standard formula exact,
- un ORSA exhaustif au niveau sinistre individuel re-simulé sur tous les runs.
Actuellement :
- plusieurs modules sont des placeholders calibrés,
- l'ORSA V1 est agrégé (stress sur snapshots),
- les stress par branche détaillés restent à implémenter.
8. Prochaines améliorations possibles (backlog)
- Stress ORSA par branche (
motor/pi/medical/property) - ORSA semi-granulaire (recalcul branch snapshots piloté par paramètres)
- Génération multi-run automatisée (batch ORSA)
- Export HTML/PDF du pack comité
- Paramètres de concentration CAT par zone dans
simulation_parameters - Réassurance avancée (XoL multi-couches, reinstatements, aggregate XL)