Ingestion RH réel v1 — salaire de référence, enveloppe de grilles, rapport de validation¶
Statut : formalisation ratifiée (Temps 1, arbitrages user du 2026-06-12).
Périmètre : la préparation des données entre le fichier client brut et le
moteur. Le moteur (actuariat_lib) ne change pas : il consomme une base
mensuelle par salarié (éq. (3) de la formalisation v2) et une grille_ifc —
tout ce qui suit produit ces entrées et trace comment.
Lève : la borne « S̄₁₂ approché par le salaire mensuel » documentée dans
multidecrements_v1.md (§ bornes restantes), et la borne « max(légal,
conventionnel) = préparation des données » de la note OHADA.
1. Registre des décisions (D-ING)¶
| # | Décision | Arbitrage |
|---|---|---|
| D-ING-1 | Salaires acceptés sous deux formats : colonne unique salaire (= S̄₁₂ déjà moyennée par le client, responsabilité documentée au rapport) ou colonnes mensuelles salaire_01…salaire_12 (S̄₁₂ calculée chez nous, tracée). Si les deux coexistent : les colonnes mensuelles priment, avertissement émis. |
user, 2026-06-12 |
| D-ING-2 | Moins de 12 mois de travail effectif : moyenne sur les m mois disponibles (m ≥ 1), aligné sur « travail effectif » de l'art. 90 ; ligne d'info au rapport. Cellule mensuelle vide = mois non effectif (exclu du dénominateur). | user, 2026-06-12 |
| D-ING-3 | Minimum légal obligatoire : enveloppe ligne à ligne G(k) = max(G_légal(k), G_conv(k)) construite à la préparation du jeu d'hypothèses — deux grilles peuvent se croiser. | user, 2026-06-12 |
| D-ING-4 | En-têtes de colonnes : synonymes normalisés (casse, accents, espaces ; lexique §4.1) avec avertissement « colonne X interprétée comme Y ». | user, 2026-06-12 |
| D-ING-5 | Le fichier brut est une pièce d'audit, jamais modifié ; corrections mineures = retraitements journalisés (client seul) sur photo dérivée ; erreurs structurelles = re-téléversement. | ADR-0007 §3 |
2. Le salaire de référence S̄₁₂ (art. 90, loi n° 022/2021)¶
Texte (vérifié verbatim, cf. d-attrib_exercice-annuel.md) : « vingt pour cent
de la moyenne mensuelle du salaire global des douze derniers mois de travail
effectif par année de présence continue ».
où les \(S^{(j)}\) sont les salaires globaux (base + primes + accessoires — la composition est de la responsabilité du client, rappelée dans le gabarit) des \(m\) derniers mois de travail effectif (cellules vides exclues, D-ING-2).
- Format colonne unique :
salaireest S̄₁₂ (déclaratif client, info au rapport). - Format mensuel : S̄₁₂ calculée par (P1), arrondie au franc, et la valeur et le m utilisés sont tracés au rapport de préparation.
- Le moteur reçoit S̄₁₂ comme
salaire— aucun changement d'API.
Cas-témoin P1-a (12 mois, à la main) : 8 mois à 100 000 + 4 mois à 130 000
→ S̄₁₂ = (800 000 + 520 000)/12 = 110 000,00 FCFA.
Cas-témoin P1-b (m < 12) : 3 mois effectifs [90 000 ; 100 000 ; 110 000]
→ S̄ = 100 000,00 FCFA, info MOIS_PARTIELS (m=3) émise.
3. L'enveloppe de grilles (minimum obligatoire)¶
L'art. 90 fait du barème légal un plancher par cas, pas une grille alternative : pour chaque ancienneté k, le droit ne peut être inférieur au légal.
Construite à la préparation du jeu (la grille_ifc du jeu devient
l'enveloppe) ; le moteur est inchangé. Le jeu porte la trace des deux grilles
sources et du fait qu'il est une enveloppe.
Cas-témoin P2 (croisement) : G_légal(k) = 0,20·k (linéaire art. 90) ; G_conv = 0,25·k plafonnée à 2,5 mois. → G(10) = max(2,0 ; 2,5) = 2,5 · G(15) = max(3,0 ; 2,5) = 3,0 — la convention gagne avant le croisement (k = 12,5), le légal après. Un choix « global » aurait été faux d'un côté ou de l'autre.
4. Lecture des fichiers réels¶
4.1 Formats et en-têtes¶
- CSV (inchangé : UTF-8/BOM,
,ou;, virgule décimale) et XLSX (première feuille, première ligne non vide = en-têtes, nombres natifs Excel). - Normalisation d'en-tête : minuscules, accents retirés, espaces/ponctuation réduits. Lexique des synonymes (D-ING-4) :
| Canonique | Reconnus (après normalisation) |
|---|---|
matricule |
matricule, mat, id, identifiant |
age |
age, age ans |
anciennete |
anciennete, anc, anciennete ans, presence |
salaire |
salaire, salaire mensuel, salaire global, salaire de reference, remuneration, sal |
salaire_MM |
salaire_01…salaire_12, sal_01…, m01…m12 |
Toute interprétation non triviale émet ENTETE_INTERPRETEE (avertissement).
4.2 Le rapport de validation (persisté, visible client)¶
Liste ordonnée d'anomalies {ligne, champ, gravite, code, message,
recommandation} + un statut de fichier. Gravités :
| Gravité | Effet | Codes |
|---|---|---|
| structurel | fichier refusé, re-téléversement obligatoire | COLONNE_MANQUANTE, FICHIER_ILLISIBLE, AUCUNE_LIGNE, TROP_VOLUMINEUX |
| bloquant | ligne invalide — la photo n'est pas calculable tant qu'il en reste ; retraitable in-app | MAT_VIDE, MAT_DUPLIQUE, NUM_INVALIDE, NEGATIF, SAL_NUL, AGE_HORS_PLAGE (\< 16 ou > 80), ANC_INCOHERENTE (k > âge − 16) |
| avertissement | calculable mais à vérifier | AGE_RETRAITE_DEPASSE (sera exclu F6), SAL_IMPLAUSIBLE (\< 80 000 ou > 50 000 000), ENTETE_INTERPRETEE, DOUBLE_FORMAT_SALAIRE |
| info | trace de préparation | MOIS_PARTIELS (m=…), S12_CALCULEE, S12_DECLARATIVE |
Chaque code porte une recommandation actionnable (« dédoublonnez le
matricule X », « vérifiez l'unité du salaire ligne 12 »…). Le statut du
document : refuse (structurel) · a_corriger (bloquants) · valide
(avertissements/infos seulement).
4.3 Retraitements (D-ING-5, ADR-0007)¶
Retraitement {document_id, matricule, champ, valeur_avant, valeur_apres,
acteur, created_at} — saisis par le client seul, applicables aux seuls
champs de lignes (jamais à la structure). La photo dérivée = lignes brutes
+ retraitements rejoués dans l'ordre ; chaque retraitement déclenche une
re-validation complète. Le Dossier calculable naît de la photo dérivée
quand il ne reste plus de bloquant. L'annexe « Retraitements des données » du
rapport livrable se génère de ce journal.
5. Critères d'épreuve (kill criteria)¶
| # | Critère | Seuil |
|---|---|---|
| KI-1 | Cas-témoins P1-a/P1-b reproduits par le code | exactitude au franc |
| KI-2 | Cas-témoin P2 : enveloppe reproduite aux deux côtés du croisement | exact |
| KI-3 | Fichier-témoin XLSX (erreurs connues de chaque code §4.2) → rapport attendu figé | égalité des codes ligne à ligne |
| KI-4 | S̄₁₂ mensuelle traverse la chaîne complète : XLSX → validation → retraitement d'un bloquant → dossier → DBO ; le même fichier en format « colonne unique » pré-moyennée donne la même DBO | écart = 0 |
| KI-5 | Le CSV « propre » d'avant (photo-rh 80) passe inchangé (rétrocompatibilité, aucun retraitement requis) | statut valide |
6. Bornes assumées (v1)¶
- La composition du « salaire global » (primes incluses ou non) reste déclarative client — nous ne contrôlons pas la paie.
- 12 mois calendaires consécutifs non vérifiables (pas de dates de paie au fichier) : « les m dernières colonnes renseignées » fait foi.
- La grille conventionnelle est saisie par l'actuaire au jeu (pas extraite d'un document) ; l'enveloppe est calculée, la source est citée à la main.
- Les retraitements ne créent ni ne suppriment de ligne (un salarié manquant = re-téléversement).