Aller au contenu

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 ».

\[\bar S_{12} = \frac{1}{m}\sum_{j=1}^{m} S^{(j)}, \qquad 1 \le m \le 12 \tag{P1}\]

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 : salaire est 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.

\[G(k) = \max\big(G_{\text{légal}}(k),\; G_{\text{conv}}(k)\big) \quad \forall k \tag{P2}\]

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).