207 lines
7.1 KiB
Markdown
207 lines
7.1 KiB
Markdown
# 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
|