7.1 KiB
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 |
- 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 :
{
"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 à uploadermatricule: 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é Socialerib- RIBmedecine_travail- Attestation médecine du travailcontrat_travail- Contrat de travaildiplome- Diplômejustificatif- Justificatifautre- 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
S3Documentpour typer les documents - Ajout des états
documents,loadingDocumentsetisUploadModalOpen - Ajout de la fonction
fetchSalarieDocuments()qui appelle l'API - Mise à jour du
useEffectpour 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
UploadDocumentModalavec callback de rafraîchissement
🎨 Interface utilisateur
Card Documents - États possibles
- Chargement : Spinner animé
- 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
- Liste cliquable avec :
- Aucun document :
- Message explicatif
- Bouton "Ajouter un document"
Modale d'upload
La modale permet de :
- Sélectionner le type de document (dropdown avec 8 types)
- Uploader un fichier via :
- Drag & drop
- Clic pour ouvrir le sélecteur
- Voir le fichier sélectionné avec sa taille
- 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_REGIONAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_S3_BUCKET
✅ Tests recommandés
-
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
-
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é
-
Edge cases :
- Salarié sans matricule (code_salarie null)
- Upload pendant qu'un autre est en cours
- Fermeture de la modale pendant l'upload