{
  "nom": "rh",
  "titre": "Ressources humaines : effectif, remuneration, absences, departs",
  "origine": "donnees synthetiques",
  "licence": "libre de reutilisation — aucune donnee personnelle reelle",
  "graine": 20261010,
  "script": "outils/donnees/rh.py",
  "separateur": ";",
  "encodage": "UTF-8",
  "invariant": "aucune ligne de paie ni d absence hors de la periode de presence du salarie — c est ce qui rend l effectif, la masse salariale et le taux d absenteisme calculables, et le generateur refuse d ecrire si l invariant est rompu",
  "piege_pose": "un paradoxe de Simpson : 2 % d ecart salarial a poste comparable, et une repartition inegale des familles de metiers entre femmes et hommes. L ecart global qui en resulte est mesure dans resultats-reference.json, jamais annonce",
  "tables": {
    "postes": {
      "granularite": "une ligne par poste : une famille de metiers et un niveau",
      "cle": "poste_id",
      "colonnes": {
        "poste_id": "identifiant du poste — texte, unique",
        "intitule": "famille et niveau en clair",
        "famille": "Direction | Ingenierie | Commerce | Production | Support | Administration",
        "niveau": "niveau de 1 a 5 — entier",
        "salaire_base_mensuel": "salaire de base a temps plein, en euros",
        "statut": "cadre | non cadre"
      }
    },
    "etablissements": {
      "granularite": "une ligne par etablissement",
      "cle": "etablissement_id",
      "colonnes": {
        "etablissement_id": "identifiant — texte, unique",
        "libelle": "nom de l etablissement",
        "region": "region administrative",
        "effectif_cible": "effectif vise par la direction — entier, sert aux ecarts"
      }
    },
    "salaries": {
      "granularite": "une ligne par salarie",
      "cle": "salarie_id",
      "colonnes": {
        "salarie_id": "identifiant — texte, unique",
        "matricule": "numero de serie interne — texte, unique",
        "nom": "nom — synthetique, aucune personne reelle",
        "prenom": "prenom — synthetique",
        "sexe": "F | H",
        "date_naissance": "AAAA-MM-JJ — age a l entree toujours entre 16 et 70 ans",
        "date_entree": "premier jour de presence — AAAA-MM-JJ, parfois anterieur au debut de la periode observee",
        "date_sortie": "dernier jour de presence — AAAA-MM-JJ, VIDE si le salarie est toujours present ; une cellule vide est donc une information",
        "motif_sortie": "demission | fin de contrat | rupture conventionnelle | retraite | licenciement — VIDE si le salarie est present",
        "poste_id": "cle vers postes.poste_id",
        "etablissement_id": "cle vers etablissements.etablissement_id",
        "temps_travail": "PROPORTION et non pourcentage : 0,50 · 0,80 · 1,00"
      }
    },
    "remunerations": {
      "granularite": "une ligne par mois de presence et par salarie",
      "cle": "salarie_id + annee_mois",
      "colonnes": {
        "salarie_id": "cle vers salaries.salarie_id",
        "annee_mois": "mois de paie — AAAA-MM, toujours dans la periode de presence",
        "salaire_brut_mensuel": "brut du mois en euros, deja proportionne au temps de travail — pour comparer deux salaries, diviser par temps_travail",
        "prime": "prime du mois en euros, souvent nulle",
        "heures_payees": "heures payees — 151,67 a temps plein"
      }
    },
    "absences": {
      "granularite": "une ligne par absence",
      "cle": "absence_id",
      "colonnes": {
        "absence_id": "identifiant — texte, unique",
        "salarie_id": "cle vers salaries.salarie_id",
        "date_debut": "premier jour d absence — AAAA-MM-JJ",
        "date_fin": "dernier jour d absence — AAAA-MM-JJ",
        "motif": "maladie | conge paye | formation | sans solde | maternite ou paternite",
        "jours_ouvres": "jours ouvres couverts par l absence — entier strictement positif"
      }
    },
    "calendrier": {
      "granularite": "une ligne par jour de la periode, sans trou",
      "cle": "date",
      "colonnes": {
        "date": "jour — AAAA-MM-JJ",
        "annee": "annee sur quatre chiffres",
        "trimestre": "T1 a T4",
        "mois_numero": "numero du mois, 1 a 12",
        "mois_nom": "nom du mois en francais",
        "annee_mois": "AAAA-MM",
        "est_ouvre": "1 du lundi au vendredi, 0 le week-end",
        "jour_semaine": "1 pour lundi a 7 pour dimanche"
      }
    }
  }
}