espace-paie-odentas/STAFF_DOCUMENTS_FEATURE.md

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 à 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