# Correction des doublons d'alertes

Les doublons proviennent déjà de `prov_alertes.csv`. La requête Access semble
produire une même alerte pour plusieurs contrats historiques d'un salarié.

La correction fournie agit à deux niveaux :

1. `deduplicate_alertes.sql` sauvegarde puis nettoie les doublons déjà présents
   dans MySQL.
2. `import_csvs_to_mysql_dedup.py` dédoublonne `prov_alertes.csv` avant
   insertion et ignore également les alertes déjà présentes dans MySQL.

## 1. Copier les fichiers

Placez les deux fichiers à la racine du projet :

- `deduplicate_alertes.sql`
- `import_csvs_to_mysql_dedup.py`

## 2. Nettoyer la base existante

Depuis PowerShell, à la racine du projet :

```powershell
cmd /c "docker compose exec -T db mysql -uroot -prootpass app_db < deduplicate_alertes.sql"
```

Le script :

- crée `alertes_backup_before_dedup_20260723` ;
- affiche le nombre et le détail des lignes concernées ;
- conserve la ligne ayant le plus petit `id` ;
- supprime les autres occurrences ;
- vérifie qu'il ne reste plus de doublons selon la même règle.

La sauvegarde est conservée dans MySQL et permet une restauration si nécessaire.

## 3. Vérifier le cas de Michel BLOTTIAU

```powershell
docker compose exec db mysql -uroot -prootpass app_db -e "SELECT id,id_salarie,nom,prenom,contrat,libalerte,fait,dateajout FROM alertes WHERE id_salarie=184 AND libalerte LIKE '%06/04/2017%' ORDER BY id;"
```

Il ne doit rester qu'une seule occurrence de l'alerte.

## 4. Tester le nouvel importeur sans écrire

Le mode `--dry-run` permet de vérifier le dédoublonnage sans modifier MySQL :

```powershell
python .\import_csvs_to_mysql_dedup.py --only prov_alertes --dry-run
```

Le résumé indique :

- le nombre de lignes dans le CSV ;
- le nombre de doublons internes supprimés ;
- le nombre d'alertes déjà présentes dans MySQL et ignorées ;
- le nombre final de lignes qui seraient insérées.

## Règle de dédoublonnage

Deux alertes sont considérées identiques lorsqu'elles possèdent :

- le même salarié ;
- le même libellé ;
- le même statut `fait` ;
- la même date d'ajout.

Le contrat et la date d'embauche ne font pas partie de la clé, car ce sont les
jointures sur les contrats historiques qui provoquent actuellement la
multiplication des lignes.

La requête Access `prov_alertes` devra idéalement être corrigée ultérieurement,
mais son indisponibilité ne bloque pas la correction de RH Connect.
