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¶
Lib — actuariat_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).
Backend — persistance.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).
Front — WaterfallChart (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).