Aller au contenu

K1-bis — Cas-témoin avec rotation (oracle calculé à la main)

🎯 À retenir

K1-bis complète K1 en ajoutant une rotation constante : seule la probabilité de maintien change, et le produit de survie ne télescope plus. Il exerce ainsi le décrément combiné (décès + rotation) que K1 ne couvrait pas, en réutilisant à l'identique tout le reste.

🔒 Oracle scellé

La DBO calculée ici (pleine précision : 2 358 587,122796 FCFA) est l'oracle de référence K1-bis : source de vérité à reproduire, jamais à recalculer. Tout écart au-delà des seuils invalide l'implémentation, pas l'oracle, sauf erreur démontrée dans l'oracle lui-même.

Rôle. K1-bis complète K1 en exerçant ce que K1 n'exerce pas : le décrément combiné — équation (1) — c'est-à-dire l'agrégation décès + rotation et le produit de maintien qui en résulte. K1-bis reprend à l'identique toutes les hypothèses de K1 et n'ajoute qu'une seule chose : une rotation \(q^{(w)} = 3\,\%/\text{an}\) constante. Conséquence : tout est inchangé (attribution A2′ \(=0{,}80\), salaire projeté, prestation, actualisation) sauf le maintien \(_5p_{55}\), qui n'est plus le télescopage \(l_{60}/l_{55}\) mais un vrai produit \(\prod(1-q^{(d)}-q^{(w)})\). Oracle exécutable jumeau : k1bis_oracle.py (auto-vérifié). DBO attendue : \(|\Delta|\le 1\) FCFA et écart relatif \(\le 10^{-6}\) (mêmes seuils que K1, §8).

1. Hypothèses figées

Identiques à K1 (\(x=55\), \(k=25\), \(r=60\), \(n=5\), \(k_r=30\), \(S_0=100\,000\) FCFA/mois, \(g=2\,\%\), \(i=4\,\%\), \(\tau_{\text{cs}}=0\), pas de plafond, \(s^{\ast}=5\), grille back-loaded 0–5 : 0 | 5–15 : 1 | > 15 : 2 mois/an, mortalité CIMA H Code CIMA 2019 art. 338 p. 225), à une exception près :

Donnée Symbole K1 K1-bis
Rotation annuelle \(q^{(w)}\) \(0\) \(0{,}03\) (constante, TAUX_UNIQUE)
Invalidité \(q^{(\iota)}\) \(0\) \(0\)

Choix de conception. La rotation est constante (3 %/an) pour rester calculable à la main, mais comme \(q^{(d)}\) varie avec l'âge (table CIMA H), le décrément combiné \(q^{(\tau)}_{x}=q^{(d)}_{x}+q^{(w)}\) est distinct à chaque âge : le produit (2) ne télescope plus. C'est précisément ce qui force l'oracle — et le code — à dérouler (1) puis (2) sans le raccourci \(l_{x+n}/l_x\). K1-bis est un cas-témoin synthétique (la rotation à ces âges proches de la retraite est volontairement forte pour que l'effet morde sur l'audit).

2. Équations de référence (forme générale, pour auto-consistance)

Reproduites verbatim de moteur-dbo_formalisation_v2.md (mêmes numéros). Seules (1) et (2) sont activées différemment de K1 ; (3)–(6) et (A2′) sont rappelées en bloc.

(1) Décrément combiné (approximation additive) et survie sur un an : $\(q^{(\tau)}_x = \min\!\big(1,\; q^{(d)}_x + q^{(w)}_x + q^{(\iota)}_x\big), \qquad p^{(\tau)}_x = 1 - q^{(\tau)}_x \tag{1}\)$

(2) Probabilité de maintien sur \(n\) années :

\[ {}_n p_x^{(\tau)} = \prod_{s=0}^{n-1} p^{(\tau)}_{x+s} = \prod_{s=0}^{n-1}\big(1 - q^{(\tau)}_{x+s}\big) \tag{2}\]

(3) Projections : \(\;S_r = S_0\,(1+g)^{\,n}\), \(\;k_r = k + n\).

(4) Grille : \(\;G(\kappa) = \sum_j \big[\min(\kappa,\,b_j^{\sup}) - b_j^{\inf}\big]_+ \cdot \tau_j\).

(5) Prestation projetée : \(\;\text{PP} = G(k_r)\cdot S_r \cdot (1+\tau_{\text{cs}})\), puis \(\text{PP}\leftarrow\min(\text{PP},\text{plafond})\).

(6) DBO individuelle (PUC) : \(\;\text{DBO}_i = \text{PP}\cdot A(k,k_r)\cdot v^{\,n}\cdot {}_n p_x^{(\tau)}\).

(A2′) Attribution retenue (D-ATTRIB) : \(\;A(k,k_r) = \dfrac{[\,k - s^{\ast}\,]_+}{k_r - s^{\ast}}\).

3. Dérivation à la main, pas à pas

Les étapes ①–⑤ et ⑦ sont inchangées vis-à-vis de K1 ; seul ⑥ (le maintien) diffère.

① Grille — éq. (4) : \(\;G(25)=30\) mois, \(\;G(30)=40\) mois.

② Attribution — (A2′) : \(\;A=\dfrac{25-5}{30-5}=\dfrac{20}{25}=\mathbf{0{,}80}\).

③ Salaire projeté — éq. (3) : \(\;S_r=100\,000\times1{,}02^{5}=110\,408{,}080320\) FCFA/mois.

④ Prestation projetée — éq. (5) : \(\;\text{PP}=40\times110\,408{,}080320=4\,416\,323{,}212800\) FCFA.

⑤ Actualisation : \(\;v^5=1{,}04^{-5}=0{,}8219271068\).

⑥ Maintien — décrément combiné, éq. (1) puis (2). Le cœur de K1-bis. On lit \(q^{(d)}_x = d_x/l_x\) dans la table CIMA H, on ajoute la rotation constante, puis on déroule le produit (il ne télescope plus) :

Âge \(x{+}s\) \(q^{(d)}_{x+s}=d/l\) \(q^{(\tau)}=q^{(d)}+0{,}03\) \(p^{(\tau)}=1-q^{(\tau)}\)
55 \(8\,066/860\,365=0{,}00937509\) \(0{,}03937509\) \(0{,}9606249092\)
56 \(8\,425/852\,299=0{,}00988503\) \(0{,}03988503\) \(0{,}9601149714\)
57 \(8\,941/843\,874=0{,}01059518\) \(0{,}04059518\) \(0{,}9594048164\)
58 \(9\,531/834\,933=0{,}01141529\) \(0{,}04141529\) \(0{,}9585847128\)
59 \(10\,282/825\,402=0{,}01245696\) \(0{,}04245696\) \(0{,}9575430396\)
\[ {}_{5}p_{55}^{(\tau)} = \prod_{s=0}^{4} p^{(\tau)}_{55+s} = 0{,}9606249092\times0{,}9601149714\times0{,}9594048164\times0{,}9585847128\times0{,}9575430396 = \mathbf{0{,}8122089718}\]

Rappel K1 (mortalité seule) : \(_5p_{55}=l_{60}/l_{55}=815\,120/860\,365=0{,}9474118543\). La rotation abaisse le maintien de \(0{,}9474\) à \(0{,}8122\).

⑦ DBO individuelle — éq. (6). $\(\text{DBO} = \text{PP}\cdot A\cdot v^5\cdot {}_{5}p_{55}^{(\tau)} = 4\,416\,323{,}212800 \times 0{,}80 \times 0{,}8219271068 \times 0{,}8122089718\)$

Décomposition : $\(4\,416\,323{,}2128 \xrightarrow{\times\,0{,}80} 3\,533\,058{,}570240 \xrightarrow{\times\,v^5} 2\,903\,916{,}608649 \xrightarrow{\times\,{}_5p_{55}^{(\tau)}} \boxed{2\,358\,587{,}122796}\)$

4. Valeurs attendues (l'oracle) et tolérances

Grandeur K1 (rappel) K1-bis
\(A\) (A2′) \(0{,}80\) \(0{,}80\) (inchangé)
\(S_r\) \(110\,408{,}080320\) \(110\,408{,}080320\) (inchangé)
\(\text{PP}\) \(4\,416\,323{,}212800\) \(4\,416\,323{,}212800\) (inchangé)
\(v^5\) \(0{,}8219271068\) \(0{,}8219271068\) (inchangé)
\(_5p_{55}^{(\tau)}\) \(0{,}9474118543\) \(0{,}8122089718\)
DBO (pleine précision) \(2\,751\,205{,}018849\) \(2\,358\,587{,}122796\) FCFA
DBO (arrondi FCFA) \(2\,751\,205\) \(2\,358\,587\) FCFA

Contrôle de cohérence inter-cas (puisque seul le maintien change) : $\(\text{DBO}_{\text{bis}} = \text{DBO}_{K1}\times\frac{{}_5p_{55}^{(\tau)}}{{}_5p_{55}^{K1}} = 2\,751\,205{,}018849\times\frac{0{,}8122089718}{0{,}9474118543} = 2\,358\,587{,}12 \;\checkmark\)$

Seuils K1-bis (réussite) : \(\;|\Delta_{\text{DBO}}| \le 1\) FCFA et \(\dfrac{|\Delta_{\text{DBO}}|}{\text{DBO}} \le 10^{-6}\).

5. Usage en Temps 3

Trois tests dans tests/test_engagements.py instancient ces hypothèses (identiques à K1 mais table_rotation = TAUX_UNIQUE 0,03) : test_K1bis_oracle_dbo (la cible DBO), test_K1bis_maintien_combine (\(_5p_{55}^{(\tau)}\) et briques inchangées), test_K1bis_rotation_reduit_strictement_la_dbo (cohérence inter-cas). Mesure réelle de l'implémentation : \(\text{DBO}=2\,358\,587{,}1227962\) FCFA (\(\Delta\approx 2{,}3\times10^{-7}\) FCFA, dans les seuils). K1-bis verrouille donc le chemin de code (1)→(2) — construire_table_composite + prob_maintien_service — que K1 laissait télescoper.

Ce que K1-bis n'exerce toujours pas : l'invalidité (\(q^{(\iota)}\)), le plafonnement, les charges sociales, une rotation dépendant de l'âge (table AGE plutôt que TAUX_UNIQUE). Ce sont d'autres faits/critères (F2, K3…). Comme pour K1, tout écart au-delà du seuil invalide l'implémentation, pas l'oracle — sauf erreur démontrée dans l'oracle.