# Feature: Affichage et gestion des documents salariés dans Staff ## 📝 Description Cette fonctionnalité permet au staff de : - Visualiser les documents up## 📦 Types de documents supportés | Type | Label affiché | |------|---------------| | `piece_identite` | Pièce d'identité | | `attestation_secu` | Attestation Sécurité Sociale | | `rib` | RIB | | `medecine_travail` | Médecine du travail | | `contrat_travail` | Contrat de travail *(nouveau - staff uniquement)* | | `diplome` | Diplôme *(nouveau - staff uniquement)* | | `justificatif` | Justificatif *(nouveau - staff uniquement)* | | `autre` | Autre document |r les salariés via la page d'auto-déclaration - Télécharger ces documents - **Uploader manuellement des documents pour un salarié** Le tout accessible directement depuis l'interface `/staff/salaries`. ## 🔧 Fichiers modifiés/créés ### 1. `/app/api/staff/salaries/documents/route.ts` (NOUVEAU) API qui récupère les documents d'un salarié depuis S3. **Fonctionnalités :** - Récupère tous les fichiers stockés dans S3 pour un matricule donné - Génère des URLs pré-signées valides 1 heure pour le téléchargement sécurisé - Détecte automatiquement le type de document (CNI, RIB, etc.) basé sur le nom du fichier - Retourne les métadonnées (nom, type, taille, date de modification) **Endpoint :** `GET /api/staff/salaries/documents?matricule={code_salarie}` **Réponse :** ```json { "documents": [ { "key": "justif-salaries/MAT001/piece-identite-1234567890.pdf", "name": "piece-identite-1234567890.pdf", "type": "Pièce d'identité", "size": 245678, "lastModified": "2025-10-12T10:30:00Z", "downloadUrl": "https://odentas-docs.s3.eu-west-3.amazonaws.com/..." } ], "count": 1, "matricule": "MAT001" } ``` ### 2. `/app/api/staff/salaries/documents/upload/route.ts` (NOUVEAU) API qui permet au staff d'uploader des documents pour un salarié. **Fonctionnalités :** - Upload de fichiers (PDF, JPG, PNG) jusqu'à 10MB - Vérification de l'existence du salarié - Stockage dans S3 sous `justif-salaries/{matricule}/` - Métadonnées incluant `uploaded-by: 'staff'` pour tracer l'origine **Endpoint :** `POST /api/staff/salaries/documents/upload` **Body (FormData) :** - `file`: Le fichier à uploader - `matricule`: Code salarié - `type`: Type de document (piece_identite, rib, etc.) **Types de documents supportés :** - `piece_identite` - Pièce d'identité - `attestation_secu` - Attestation Sécurité Sociale - `rib` - RIB - `medecine_travail` - Attestation médecine du travail - `contrat_travail` - Contrat de travail - `diplome` - Diplôme - `justificatif` - Justificatif - `autre` - Autre document ### 3. `/components/staff/UploadDocumentModal.tsx` (NOUVEAU) Composant modal pour uploader des documents. **Fonctionnalités :** - Sélection du type de document via dropdown - Upload par drag & drop ou clic - Validation du type et de la taille de fichier - Prévisualisation du fichier sélectionné - Feedback visuel pendant l'upload - Messages de succès/erreur avec toast ### 4. `/components/staff/SalariesGridSimple.tsx` (MODIFIÉ) Composant principal de la page staff/salaries. **Modifications :** - Ajout du type `S3Document` pour typer les documents - Ajout des états `documents`, `loadingDocuments` et `isUploadModalOpen` - Ajout de la fonction `fetchSalarieDocuments()` qui appelle l'API - Mise à jour du `useEffect` pour charger les documents lors de la sélection d'un salarié - Refonte complète de la Card "Documents" pour afficher : - Un loader pendant le chargement - La liste des documents avec icône de téléchargement - Le type, la date et la taille de chaque document - Un message si aucun document n'est disponible - **Un bouton "Ajouter un document" pour upload manuel** - Intégration de `UploadDocumentModal` avec callback de rafraîchissement ## 🎨 Interface utilisateur ### Card Documents - États possibles 1. **Chargement** : Spinner animé 2. **Documents disponibles** : - Liste cliquable avec : - Icône de téléchargement - Type de document (Pièce d'identité, RIB, etc.) - Date d'upload et taille en Ko - Fond bleu clair au hover - Bouton "Ajouter un document" en bas 3. **Aucun document** : - Message explicatif - Bouton "Ajouter un document" ### Modale d'upload La modale permet de : 1. Sélectionner le type de document (dropdown avec 8 types) 2. Uploader un fichier via : - Drag & drop - Clic pour ouvrir le sélecteur 3. Voir le fichier sélectionné avec sa taille 4. Valider ou annuler l'upload ### Exemple d'affichage ``` 📄 Documents ──────────────────────── 3 documents disponibles [⬇️] Pièce d'identité 12/10/2025 • 245.7 Ko [⬇️] Attestation Sécurité Sociale 12/10/2025 • 189.2 Ko [⬇️] RIB 12/10/2025 • 102.3 Ko [+ Ajouter un document] ``` ## 🔒 Sécurité - Les URLs de téléchargement sont pré-signées et expirent après 1 heure - L'accès aux APIs est réservé au staff (vérification via `createSbServiceRole()`) - Les fichiers sont stockés de manière isolée par matricule sur S3 - Les uploads par le staff sont tracés via la métadonnée `uploaded-by: 'staff'` - Validation du type de fichier et de la taille (max 10MB) - Vérification de l'existence du salarié avant upload ## 🔗 Intégration La feature s'intègre avec le système d'auto-déclaration existant : - Les salariés uploadent leurs documents via `/auto-declaration` - **Le staff peut aussi uploader des documents manuellement via `/staff/salaries`** - Les documents sont stockés dans S3 sous `justif-salaries/{matricule}/` - Le staff peut les visualiser et télécharger via `/staff/salaries` - Tous les documents (auto-déclaration + staff) sont mélangés dans la même liste ## 📦 Types de documents supportés | Type | Label affiché | |------|---------------| | `piece-identite` | Pièce d'identité | | `attestation-secu` | Attestation Sécurité Sociale | | `rib` | RIB | | `medecine-travail` | Médecine du travail | | `autre` | Autre document | ## 🚀 Déploiement Aucune configuration supplémentaire requise. La feature utilise les variables d'environnement AWS S3 existantes : - `AWS_REGION` - `AWS_ACCESS_KEY_ID` - `AWS_SECRET_ACCESS_KEY` - `AWS_S3_BUCKET` ## ✅ Tests recommandés 1. **Visualisation :** - Sélectionner un salarié qui a uploadé des documents - Vérifier que les documents s'affichent correctement - Cliquer sur un document pour le télécharger - Vérifier qu'un salarié sans document affiche le bon message 2. **Upload manuel par le staff :** - Cliquer sur "Ajouter un document" - Sélectionner un type de document - Tester le drag & drop d'un fichier valide - Tester l'upload avec un fichier trop volumineux (>10MB) - Tester avec un type de fichier invalide (.txt, .doc) - Vérifier que le document apparaît immédiatement après l'upload - Vérifier qu'on peut télécharger le document uploadé 3. **Edge cases :** - Salarié sans matricule (code_salarie null) - Upload pendant qu'un autre est en cours - Fermeture de la modale pendant l'upload