{
  "graine": 20261010,
  "taille": "reference",
  "total_anomalies": 247,
  "anomalies": [
    {
      "code": "A01",
      "table": "salaries",
      "lignes": 26,
      "anomalie": "lignes dupliquees a l identique, salarie_id compris",
      "regle_de_nettoyage": "dedoublonner sur salarie_id ; un identifiant est unique par definition"
    },
    {
      "code": "A02",
      "table": "salaries",
      "lignes": 16,
      "anomalie": "date_sortie anterieure a date_entree",
      "regle_de_nettoyage": "une periode negative n existe pas : ecarter la ligne ou retablir l ordre des deux dates"
    },
    {
      "code": "A03",
      "table": "salaries",
      "lignes": 34,
      "anomalie": "sexe code de plusieurs facons : f, Femme, FEMME, h, Homme, M",
      "regle_de_nettoyage": "normaliser sur un vocabulaire ferme AVANT tout regroupement ; sinon un meme groupe se compte en six categories"
    },
    {
      "code": "A04",
      "table": "salaries",
      "lignes": 22,
      "anomalie": "temps_travail ecrit en pourcentage (80,00) au lieu d une proportion (0,80)",
      "regle_de_nettoyage": "un taux depasse rarement 1 : tout ce qui est au-dessus est un pourcentage deguise"
    },
    {
      "code": "A05",
      "table": "remunerations",
      "lignes": 30,
      "anomalie": "salaire_brut_mensuel exprime en centimes au lieu d euros",
      "regle_de_nettoyage": "comparer au salaire de base du poste : un facteur 100 se voit, un contrôle de type non"
    },
    {
      "code": "A06",
      "table": "remunerations",
      "lignes": 21,
      "anomalie": "lignes de paie posterieures a la date de sortie du salarie",
      "regle_de_nettoyage": "rapprocher chaque paie de la periode de presence : la masse salariale et l effectif sont tous deux faux, sans qu aucune ligne soit invalide prise seule"
    },
    {
      "code": "A07",
      "table": "salaries",
      "lignes": 18,
      "anomalie": "poste_id absent du referentiel des postes",
      "regle_de_nettoyage": "jointure externe : un salarie sans poste n a pas de salaire de base, donc aucun ecart mesurable"
    },
    {
      "code": "A08",
      "table": "absences",
      "lignes": 14,
      "anomalie": "absence_id en double avec deux durees differentes : le total depend de la ligne gardee",
      "regle_de_nettoyage": "dedoublonner sur absence_id, et dire laquelle est retenue"
    },
    {
      "code": "A09",
      "table": "absences",
      "lignes": 20,
      "anomalie": "jours_ouvres a zero sur une absence datee",
      "regle_de_nettoyage": "zero jour ouvre est possible pour un week-end seul : verifier les dates avant de conclure a une erreur — et ne jamais diviser par la somme sans l avoir regardee"
    },
    {
      "code": "A10",
      "table": "absences",
      "lignes": 18,
      "anomalie": "absence situee hors de la periode de presence du salarie",
      "regle_de_nettoyage": "encadrer par les deux dates du salarie : un taux d absenteisme calcule sans cet encadrement depasse 100 % pour certains"
    },
    {
      "code": "A11",
      "table": "salaries",
      "lignes": 12,
      "anomalie": "date_naissance donnant un age a l entree inferieur a 16 ans ou superieur a 70",
      "regle_de_nettoyage": "borner avant de publier une pyramide des ages : une seule valeur a 101 ans deplace la moyenne et ecrase l echelle du graphique"
    },
    {
      "code": "A12",
      "table": "salaries",
      "lignes": 16,
      "anomalie": "etablissement_id vide",
      "regle_de_nettoyage": "une cellule vide n est pas un etablissement : decider explicitement — exclure, ou creer « non affecte », et le dire"
    }
  ]
}