# 1. Vue d’ensemble

## Finalité

RH Connect remplace progressivement l’application Microsoft Access utilisée pour la gestion RH. Il centralise les salariés, contrats, avenants, absences, visites médicales, sanctions, alertes, documents, fiches de paie et demandes de procédure.

Le produit est une application Web interne. Les utilisateurs ouvrent le frontend ; toutes les données métier et tous les contrôles d’accès passent par le backend ; MySQL stocke les données structurées. Les modèles DOCX et les PDF mensuels de paie restent dans des stockages de fichiers séparés.

## Périmètre fonctionnel

| Domaine | Fonctionnement principal |
|---|---|
| Tableau de bord | Recherche salariés, alertes, anniversaires, disciplinaire, compteur de salariés actifs |
| État civil | Création et modification des salariés |
| Contrats | Contrats et avenants rattachés au `COS` du salarié |
| Absences | Saisie et suivi des périodes d’absence |
| Visites médicales | Historique et échéances de médecine du travail |
| Disciplinaire | Sanctions et demandes de procédure avec historique |
| Alertes | Alertes métier et campagnes d’e-mails automatisées |
| Documents | Modèles DOCX versionnés, génération DOCX/PDF, attestations et documents historiques |
| États RH | Six états imprimables dans la rubrique Documents |
| Fiches de paie | Extraction du bulletin d’un salarié depuis un PDF mensuel multi-salariés |
| Paramètres | Référentiels, utilisateurs, habilitations, signatures, destinataires et modèles |
| Documentation API | OpenAPI et Swagger, si activés |

L’envoi de SMS n’est pas implémenté.

## Stack technique

| Couche | Technologie | Port de développement |
|---|---|---:|
| Frontend | Next.js 16, React 19, TypeScript, TanStack Query | 3001 |
| Backend API | Next.js 16, TypeScript, Prisma 6 | 8000 |
| Données | MySQL 8 | 3306, lié à `127.0.0.1` |
| Proxy prod | Caddy | 80/443 |
| Conteneurs | Docker Compose | — |

## Repères dans le dépôt

| Emplacement | Rôle |
|---|---|
| `frontend/src/app` | Pages et routage du frontend |
| `frontend/src/components` | Composants et formulaires |
| `frontend/src/lib` | Client API, auth et utilitaires frontend |
| `backend/backend_envie2e/src/app/api` | Routes HTTP du backend |
| `backend/backend_envie2e/src/services` | Règles métier et accès aux données |
| `backend/backend_envie2e/src/validators` | Validation Zod des entrées |
| `backend/backend_envie2e/src/lib` | Auth, Prisma, SSO, autorisation, OpenAPI |
| `backend/backend_envie2e/prisma/schema.prisma` | Modèle de données de référence |
| `backend/backend_envie2e/prisma/migrations` | Historique des migrations Prisma |
| `docker-compose.yml` | Stack commune/dev |
| `docker-compose.prod.yml` | Surcharge de production et Caddy |
| `.env.production.example` | Inventaire commenté des variables prod |

## Identifiants métier à ne pas confondre

| Identifiant | Usage |
|---|---|
| `employes.id` | Clé interne MySQL/Prisma |
| `employes.COS` | Identifiant métier salarié, unique, utilisé par les URLs et plusieurs relations |
| `employes.Matricule` | Matricule lu dans les PDF de paie ; des doublons historiques peuvent exister entre établissements |
| `contrats.id` | Clé interne du contrat |
| `contrats.ID_Contrat` | Identifiant métier du contrat, unique, utilisé par les avenants |

Changer l’un de ces identifiants sans vérifier toutes les relations est une opération de migration, pas une simple correction d’écran.

## État de référence connu au 30 août 2026

La candidate de migration validée contenait 872 salariés, dont 174 actifs selon la règle courante. Les contrôles donnaient zéro COS nul ou dupliqué, zéro identifiant métier de contrat dupliqué, zéro contrat orphelin, zéro date de fin antérieure au début et zéro statut actif incohérent. Deux matricules dupliqués ont été acceptés car ils concernaient des établissements différents. Onze visites médicales historiques restaient sans salarié correspondant ; elles doivent être conservées comme anomalie connue tant qu’une décision métier n’est pas prise.

Ces nombres servent de point de comparaison, pas de constante : ils évoluent avec l’activité RH.

