Aller au contenu

ADR-0011 — Waterfall IAS 19 · roll-forward attendu (flavor A)

Statut : accepté (2026-06-15, arbitrages user). Contexte : le moteur sait calculer une DBO à une photo (éq. (6), Temps 3). Mais un actuaire ne publie pas une provision — il publie un mouvement : « voici la provision d'ouverture, voici ce qui l'a fait bouger sur l'exercice, voici la clôture ». C'est le pont de variation (waterfall) qu'IAS 19 §141 impose en annexe, et que la note d'étude docs/formalisation/d-attrib_exercice-annuel.md a déroulé au FCFA sur un employé tiré au sort (§8, lecture comptable ligne à ligne). Le Studio affichait la DBO et le tampon OHADA mais pas le pont — le « combien » sans le « pourquoi ».

🎯 À retenir

On livre le pont de variation IAS 19 §141 en flavor A (roll-forward attendu, volet P&L, une seule photo) où les réévaluations sont nulles par construction. Sous la convention IC′, le pont boucle exactement au FCFA. flavor B (deux photos, OCI) est différé, pas abandonné.

La question

Un pont de variation a deux lectures qui ne racontent pas la même histoire :

  • flavor A — roll-forward ATTENDU (volet compte de résultat) : `DBO_ouverture + CSR
  • IC′ − Prestations = DBO_clôture attendue`. Les réévaluations sont nulles par construction — on ne fait pas de seconde valorisation, on projette ce que la provision devrait devenir si tout se passe comme les hypothèses d'ouverture le prévoient. Une seule photo. C'est le P&L de l'exercice (CSR = charge de personnel, IC′ = charge financière), entièrement déterminé à l'ouverture (formalisation §6, pt 2).
  • flavor B — rapprochement RÉEL (volet OCI) : exige une deuxième photo (clôture re-valorisée), d'où sortent les réévaluations en résiduel, splittées expérience (DBO_t1·q_x) vs hypothèses (taux re-déterminé). C'est le mouvement OCI, et il réclame une seconde année de données + une double évaluation.

On livre A d'abord. A se calcule sur les données déjà présentes (une photo), raconte l'histoire que 90 % des lecteurs attendent (le compte de résultat), et B se greffe dessus sans le défaire. Démarrer par B aurait exigé une donnée qu'on n'a pas encore.

Décisions

# Décision Arbitrage
D-WF-1 flavor A d'abord — roll-forward attendu, volet P&L, une seule photo. flavor B (rapprochement à deux photos, OCI) est différé (Lot 2), pas abandonné : A est un sous-ensemble propre de B. user, 2026-06-15
D-WF-2 Réévaluations ≡ 0 par construction. La clôture affichée est la clôture attendue (DBO_0 + CSR + IC′), pas la DBO_t1 re-valorisée. Sous la convention IC′, E[Réév] = 0 exactement (formalisation §6) — le pont boucle au FCFA sans terme de réévaluation. découle de D-WF-1
D-WF-3 Convention IC′ (amendement D-IC, formalisation v2.1) : IC′ = (DBO_0 + CSR)·i, pas l'éq. (7) brute. L'éq. (7) laisse un résidu systématique CSR·i qui rend K2 (bouclage ≤ 1 FCFA) intenable par spécification. IC′ rend le bouclage exact. finding D-IC, acté avant Temps 3
D-WF-4 Maison = Studio. Le pont est calculé en parallèle de la DBO et du tampon OHADA (un seul Promise.all), et rendu sous la grille de stat-cards. On y ajoute la ligne de provision au bilan du dossier et l'écart de provisionnement (attendu − comptabilisé) — la décision que le pont sert vraiment. user, 2026-06-15
D-WF-5 Périmètre = retraite seule pour l'instant. Quand un jeu porte des décréments payants (multi = true), les prestations attendues de l'exercice (composante sorties) ne sont pas encore lues — un drapeau multi propage le manque jusqu'à l'UI plutôt que d'afficher un pont faussement complet. honnêteté de périmètre

Mécanique

Libactuariat_lib.engagements.dbo.roll_forward_attendu() réutilise dbo_population_puc(…, trace=True) (la trace par tête de l'éq. (6)), agrège CSR/IC′ depuis les facteurs de l'éq. (7) amendée, et boucle via la garde de l'éq. (8). Oracle = le cas-témoin temporel A2′ de la note (x=49, k=23, S0=385 000) reproduit au FCFA : DBO_0 = 8 375 023,64, CSR = 465 279,09, IC′ = 353 612,11, clôture attendue = 9 193 914,84 (3 tests K-WATERFALL ; abs = 1,0). La DBO_t1 réelle (9 256 620,16) n'est pas affichée — elle relève de B ; l'écart 9 256 620,16 − 9 193 914,84 = 62 705,31 est exactement l'expérience DBO_t1·q_x, ce que A laisse hors champ par construction (D-WF-2).

Backendpersistance.calculer_waterfall_jeu (genre mixte par partition additive H/F, comme la DBO) ; POST /api/dbo/dossier/waterfall (_get_scoped sur jeu + dossier, 404 hors-périmètre) renvoie le pont + provision_bilan du dossier (2 tests : oracle d'ouverture K1 + bouclage de la boucle ; cross-tenant 404).

FrontWaterfallChart (app/labo/Graphes.tsx) : barres flottantes Blue Note (Ouverture → +CSR → +IC′ → −Prestations → Clôture), taille px explicite (pas de viewBox étiré — leçon tornado), connecteurs, ligne de provision bilan (laiton/vert) et écart. Câblé dans StudioDbo (calcul en parallèle de DBO/OHADA). Route proxy app/api/dbo/dossier/waterfall/route.ts.

Conséquences

  • + Le Studio publie un mouvement, plus seulement un stock : la lecture IAS 19 §141 (annexe de variation) est servie, avec la décision d'audit en bout de chaîne (écart de provisionnement = attendu vs comptabilisé).
  • + Le pont boucle exactement (IC′, D-WF-3) — K2 tient comme théorème, pas comme approximation. L'oracle reproduit la note d'étude au FCFA.
  • −/assumé Périmètre retraite seule : sur un jeu multi, le drapeau signale que la composante sorties manque — on préfère un pont honnêtement incomplet à un pont faussement bouclé.

⚠️ Piège

Sur un jeu multi (décréments payants), le pont flavor A est honnêtement incomplet : la composante sorties n'est pas lue, le drapeau multi propage le manque jusqu'à l'UI. Ne pas lire ce pont comme un bouclage complet.

  • Reste (Lot 2) : sorties multi-décréments dans le pont + flavor B (rapprochement réel à deux photos, OCI, split expérience/hypothèses). A en est le socle, pas un cul-de-sac.

Voir mémoire projet « Waterfall IAS 19 ActuaryLab ». S'appuie sur la note docs/formalisation/d-attrib_exercice-annuel.md (§5–8, finding D-IC) et prolonge le Temps 3 du moteur (engagements/dbo).