# 11. Dépannage

## Méthode

1. Reproduire et noter l’heure exacte.
2. Identifier navigateur, frontend, backend, base, stockage, Graph ou SSO.
3. Collecter les logs autour de l’heure.
4. Vérifier la configuration effective dans le conteneur.
5. Faire un test minimal sans modifier les données.
6. Corriger sur une copie ou un environnement de test.

## SSO redirige vers `login?sso=failed`

Vérifier les logs backend du callback. Causes fréquentes : Redirect URI Azure différente, secret expiré, `FRONTEND_ORIGIN` faux, cookies HTTPS, domaine e-mail refusé, horloge serveur ou schéma MySQL incomplet.

Erreur connue :

```text
The column app_db.auth_users.signature_enabled does not exist
```

Ce n’est ni un problème de VPN ni une interdiction Entra : le client Prisma attend une colonne absente de la base. Comparer migrations et schéma réel, puis appliquer/baseliner correctement.

## Prisma P3005

La base est non vide et sans historique Prisma compatible. Ne pas la vider. Suivre le baseline contrôlé décrit dans le chapitre Base de données.

## Backend pointe vers la mauvaise base

```bash
docker compose exec backend printenv MYSQL_DATABASE
docker compose exec backend printenv DATABASE_URL
```

Après changement d’un `.env`, recréer le conteneur ; un simple redémarrage ne recharge pas toujours l’environnement.

## Modèles documentaires absents

```bash
docker compose exec backend printenv DOCUMENT_TEMPLATES_ROOT
docker compose exec backend sh -lc 'find /data/document-templates -maxdepth 3 -type f | head'
docker volume ls
```

Si MySQL contient les versions mais aucun fichier, restaurer l’archive du volume correspondant. Vérifier qu’un dossier enveloppe supplémentaire n’a pas été ajouté.

## Fiches de paie indisponibles

Vérifier `PAYSLIP_HOST_PATH`, le montage dans `docker compose config`, les droits de lecture, l’arborescence établissement/année et le nom `AAAA_MM-Paies ...pdf`. Un PDF scanné sans texte nécessite un OCR.

## `Illegal mix of collations`

Comparer les collations des colonnes jointes. Pendant une migration Access, convertir explicitement les expressions ou harmoniser les tables candidates. Ne modifier la collation de production qu’après analyse des index et comparaisons.

## `No database selected`

Le script SQL exécute une requête non qualifiée sans `USE <base>` et sans option de base au client MySQL. Ajouter la base candidate explicitement ; ne pas laisser un script de fusion dépendre de la base par défaut.

## `Can't reopen table` MySQL

MySQL ne permet pas certaines réutilisations d’une table temporaire dans la même requête. Remplacer par deux tables temporaires, une CTE compatible ou matérialiser le résultat intermédiaire. Relancer ensuite toute la validation.

## PowerShell et guillemets Docker

Les couches PowerShell, Docker, `sh -lc` et MySQL interprètent chacune les guillemets. Préférer soit des arguments directs à `docker compose exec`, soit copier un script `.sh` dans le conteneur. Éviter les commandes monolignes imbriquant SQL, `$()` et plusieurs niveaux de quotes.

## Import ESF et doublons

`APPEND` sur une table déjà partiellement chargée produit des doublons. Pour reconstruire une base brute dédiée, recréer la base ou utiliser `Overwrite Table` en comprenant que seule la base brute doit être ciblée. Ne jamais sélectionner la base RH Connect active comme destination ESF.

