From 01aa80439612dceb9bd9790fab3d81f8f0ce73ff Mon Sep 17 00:00:00 2001 From: Renaud Date: Fri, 17 Oct 2025 14:31:43 +0200 Subject: [PATCH] =?UTF-8?q?Cong=C3=A9s=20Spectacles=20auto=20d=C3=A9clarat?= =?UTF-8?q?ion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FIX_CONGES_SPECTACLES_AUTO_DECLARATION.md | 108 +++++++++++++++ SYNC_NOTES_AUTO_DECLARATION_STAFF.md | 158 ++++++++++++++++++++++ app/api/auto-declaration/route.ts | 20 ++- app/auto-declaration/page.tsx | 17 ++- 4 files changed, 301 insertions(+), 2 deletions(-) create mode 100644 FIX_CONGES_SPECTACLES_AUTO_DECLARATION.md create mode 100644 SYNC_NOTES_AUTO_DECLARATION_STAFF.md diff --git a/FIX_CONGES_SPECTACLES_AUTO_DECLARATION.md b/FIX_CONGES_SPECTACLES_AUTO_DECLARATION.md new file mode 100644 index 0000000..9518940 --- /dev/null +++ b/FIX_CONGES_SPECTACLES_AUTO_DECLARATION.md @@ -0,0 +1,108 @@ +# Fix : Numéro Congés Spectacles - Page Auto-déclaration + +## Problème identifié + +Le champ "Numéro de Congés Spectacles" n'était **pas présent** dans le formulaire de la page d'auto-déclaration (`/auto-declaration`), alors que : +- ✅ Le champ existe dans la base de données (`salaries.conges_spectacles`) +- ✅ L'API backend gère correctement ce champ (`/api/auto-declaration/route.ts`) +- ✅ Le champ était pré-rempli depuis la base de données + +**Conséquence** : Les salariés ne pouvaient pas saisir ou modifier leur numéro de Congés Spectacles via l'auto-déclaration. + +## Solution appliquée + +### 1. Modification de l'interface FormData +Ajout du champ `conges_spectacles` dans l'interface TypeScript : + +```typescript +interface FormData { + // ... autres champs + // État civil + date_naissance: string; + lieu_naissance: string; + numero_secu: string; + conges_spectacles: string; // ← AJOUTÉ + // ... +} +``` + +### 2. Initialisation de l'état +Ajout de `conges_spectacles: ''` dans l'état initial du formulaire. + +### 3. Pré-remplissage depuis la base de données +Ajout de la ligne pour pré-remplir le champ depuis les données du salarié : + +```typescript +setFormData(prev => ({ + ...prev, + // ... + conges_spectacles: data.conges_spectacles || '', + // ... +})); +``` + +### 4. Envoi vers l'API +Ajout du champ dans les données envoyées lors de la sauvegarde : + +```typescript +const updateData = { + // ... + conges_spectacles: formData.conges_spectacles || null, + // ... +}; +``` + +### 5. Ajout du champ HTML dans le formulaire +Nouveau champ ajouté dans la section "État civil", après le numéro de Sécurité Sociale : + +```tsx +
+ Votre numéro de Congés Spectacles + setFormData(prev => ({ + ...prev, + conges_spectacles: e.target.value + }))} + className="w-full px-3 py-2 rounded-lg border bg-white text-sm" + placeholder="Numéro d'objet (si intermittent)" + /> +

+ Ce champ est facultatif. Il concerne uniquement les intermittents du spectacle. +

+
+``` + +## Fichiers modifiés + +- ✅ `/app/auto-declaration/page.tsx` - Ajout du champ dans le formulaire +- ℹ️ `/app/api/auto-declaration/route.ts` - Aucune modification (déjà fonctionnel) + +## Emplacement du champ + +Le champ a été placé dans la section **"État civil"**, juste après le numéro de Sécurité Sociale, car : +- Il concerne l'état administratif du salarié +- C'est un numéro d'identification professionnel (comme le NIR) +- Position logique pour les intermittents du spectacle + +## Caractéristiques du champ + +- **Type** : Input texte +- **Obligatoire** : Non (facultatif) +- **Public cible** : Intermittents du spectacle +- **Placeholder** : "Numéro d'objet (si intermittent)" +- **Aide** : Message explicatif précisant que c'est facultatif + +## Tests recommandés + +1. ✅ Vérifier que le champ s'affiche correctement +2. ✅ Tester la saisie d'un numéro Congés Spectacles +3. ✅ Vérifier la sauvegarde en base de données +4. ✅ Tester le pré-remplissage si un numéro existe déjà +5. ✅ Vérifier que le champ reste facultatif (pas d'erreur si vide) + +## Validation + +- Le champ n'a pas de validation spécifique (format libre) +- Il n'est pas obligatoire +- Accepte n'importe quel texte/format diff --git a/SYNC_NOTES_AUTO_DECLARATION_STAFF.md b/SYNC_NOTES_AUTO_DECLARATION_STAFF.md new file mode 100644 index 0000000..5a6ece4 --- /dev/null +++ b/SYNC_NOTES_AUTO_DECLARATION_STAFF.md @@ -0,0 +1,158 @@ +# Synchronisation des notes : Auto-déclaration → Staff/Salariés + +## Problème résolu + +Les notes saisies par les salariés dans le formulaire d'auto-déclaration n'étaient **pas visibles** dans la section "Notes" de la page staff/salaries. + +### Situation avant correction + +- ✅ Les notes étaient sauvegardées dans `justificatifs_personnels` (format JSON) +- ❌ Les notes n'étaient PAS enregistrées dans le champ `notes` +- ❌ Le staff ne pouvait pas voir ces notes dans l'interface staff/salaries + +**Conséquence** : Les informations importantes communiquées par les salariés restaient invisibles pour le staff. + +## Solution appliquée + +### Modifications dans `/app/api/auto-declaration/route.ts` + +La logique d'enregistrement des notes a été améliorée pour : + +1. **Récupérer les notes existantes** avant d'ajouter les nouvelles +2. **Ajouter la nouvelle note avec horodatage** au champ `notes` visible par le staff +3. **Préserver l'historique** dans `justificatifs_personnels` (format JSON) + +### Code modifié + +```typescript +if (updateData.notes) { + // Récupérer les notes existantes pour les préserver + const { data: currentSalarie } = await sb + .from('salaries') + .select('notes, justificatifs_personnels') + .eq('id', tokenData.salarie_id) + .single(); + + // Préparer la nouvelle note avec horodatage + const currentDate = new Date().toISOString().split('T')[0]; + const currentTime = new Date().toLocaleString('fr-FR'); + const newNote = `[${currentTime} - Auto-déclaration]\n${updateData.notes}`; + + // Ajouter aux notes existantes ou créer une nouvelle note + if (currentSalarie?.notes) { + dataToUpdate.notes = `${currentSalarie.notes}\n\n${newNote}`; + } else { + dataToUpdate.notes = newNote; + } + + // Également ajouter aux justificatifs personnels (format JSON) pour historique + const noteEntry = { + date: currentDate, + source: 'auto-declaration', + notes: updateData.notes + }; + + dataToUpdate.justificatifs_personnels = JSON.stringify([noteEntry]); +} +``` + +## Fonctionnement + +### 1. Horodatage automatique +Chaque note de l'auto-déclaration est précédée de : +``` +[17/10/2025 à 14:30:25 - Auto-déclaration] +``` + +### 2. Préservation des notes existantes +- Si le salarié avait déjà des notes (ajoutées par le staff), elles sont conservées +- La nouvelle note est ajoutée à la suite avec une double ligne de séparation (`\n\n`) + +### 3. Double sauvegarde +- **Champ `notes`** : Visible immédiatement par le staff sur staff/salaries +- **Champ `justificatifs_personnels`** : Historique structuré au format JSON + +## Format des notes + +### Exemple avec première note +``` +[17/10/2025 à 14:30:25 - Auto-déclaration] +Je suis disponible pour commencer le contrat dès le 20 octobre. +J'ai déjà travaillé sur des productions similaires. +``` + +### Exemple avec notes multiples +``` +[15/10/2025 à 10:00:00 - Staff] +Candidat intéressant pour le projet XYZ + +[17/10/2025 à 14:30:25 - Auto-déclaration] +Je suis disponible pour commencer le contrat dès le 20 octobre. +J'ai déjà travaillé sur des productions similaires. +``` + +## Avantages + +### ✅ Visibilité immédiate +- Les notes des salariés apparaissent instantanément dans l'interface staff +- Pas besoin de chercher dans les justificatifs personnels + +### ✅ Traçabilité +- Horodatage précis de chaque note +- Source clairement identifiée (Auto-déclaration vs Staff) +- Historique complet préservé + +### ✅ Communication améliorée +- Le staff peut voir les informations importantes des salariés +- Facilite le suivi et la coordination +- Évite les oublis ou pertes d'information + +## Interface utilisateur + +### Page auto-déclaration +Le salarié voit : +``` +Section "Notes" +┌─────────────────────────────────────────────┐ +│ Informations complémentaires │ +│ ┌─────────────────────────────────────────┐ │ +│ │ [Zone de texte libre] │ │ +│ │ │ │ +│ │ │ │ +│ └─────────────────────────────────────────┘ │ +│ Utilisez ce champ libre si vous devez │ +│ mentionner toutes les informations │ +│ complémentaires. │ +└─────────────────────────────────────────────┘ +``` + +### Page staff/salaries +Le staff voit la note dans le panneau latéral : +``` +Section "Notes" +┌─────────────────────────────────────────────┐ +│ [17/10/2025 à 14:30:25 - Auto-déclaration] │ +│ Je suis disponible pour commencer le │ +│ contrat dès le 20 octobre. │ +└─────────────────────────────────────────────┘ +``` + +## Tests recommandés + +1. ✅ Saisir une note sur l'auto-déclaration +2. ✅ Vérifier qu'elle apparaît dans staff/salaries +3. ✅ Vérifier l'horodatage et la source +4. ✅ Ajouter une deuxième note et vérifier la concaténation +5. ✅ Vérifier que les notes staff existantes sont préservées +6. ✅ Tester avec un salarié sans note existante +7. ✅ Tester avec un salarié ayant déjà des notes staff + +## Fichiers modifiés + +- ✅ `/app/api/auto-declaration/route.ts` - Logique d'enregistrement des notes + +## Rétrocompatibilité + +- ✅ Les anciennes notes (si existantes) sont préservées +- ✅ Le format JSON dans `justificatifs_personnels` reste fonctionnel +- ✅ Aucune migration de données nécessaire diff --git a/app/api/auto-declaration/route.ts b/app/api/auto-declaration/route.ts index 0f89d3f..070f2bc 100644 --- a/app/api/auto-declaration/route.ts +++ b/app/api/auto-declaration/route.ts @@ -148,8 +148,26 @@ export async function PATCH(request: NextRequest) { if (updateData.bic !== undefined) dataToUpdate.bic = updateData.bic; if (updateData.derniere_profession !== undefined) dataToUpdate.derniere_profession = updateData.derniere_profession; if (updateData.notes) { - // Ajouter les notes aux justificatifs personnels (format JSON) + // Récupérer les notes existantes pour les préserver + const { data: currentSalarie } = await sb + .from('salaries') + .select('notes, justificatifs_personnels') + .eq('id', tokenData.salarie_id) + .single(); + + // Préparer la nouvelle note avec horodatage const currentDate = new Date().toISOString().split('T')[0]; + const currentTime = new Date().toLocaleString('fr-FR'); + const newNote = `[${currentTime} - Auto-déclaration]\n${updateData.notes}`; + + // Ajouter aux notes existantes ou créer une nouvelle note + if (currentSalarie?.notes) { + dataToUpdate.notes = `${currentSalarie.notes}\n\n${newNote}`; + } else { + dataToUpdate.notes = newNote; + } + + // Également ajouter aux justificatifs personnels (format JSON) pour historique const noteEntry = { date: currentDate, source: 'auto-declaration', diff --git a/app/auto-declaration/page.tsx b/app/auto-declaration/page.tsx index 38f6069..1bb23c7 100644 --- a/app/auto-declaration/page.tsx +++ b/app/auto-declaration/page.tsx @@ -133,6 +133,7 @@ interface FormData { date_naissance: string; lieu_naissance: string; numero_secu: string; + conges_spectacles: string; // Bancaire iban: string; @@ -191,6 +192,7 @@ export default function AutoDeclarationPage() { date_naissance: '', lieu_naissance: '', numero_secu: '', + conges_spectacles: '', // Bancaire iban: '', @@ -240,6 +242,7 @@ export default function AutoDeclarationPage() { date_naissance: data.date_naissance || '', lieu_naissance: data.lieu_de_naissance || '', numero_secu: data.nir || '', + conges_spectacles: data.conges_spectacles || '', iban: data.iban || '', bic: data.bic || '', employeur: data.organizations?.name || '' @@ -425,6 +428,7 @@ export default function AutoDeclarationPage() { date_naissance: formData.date_naissance || null, lieu_de_naissance: formData.lieu_naissance || null, nir: formData.numero_secu || null, + conges_spectacles: formData.conges_spectacles || null, iban: formData.iban || null, bic: formData.bic || null, notes: formData.notes @@ -840,6 +844,17 @@ export default function AutoDeclarationPage() { />

Indiquez le NIR complet ou provisoire si pas encore définitif.

+ +
+ Votre numéro de Congés Spectacles + setFormData(prev => ({ ...prev, conges_spectacles: e.target.value }))} + className="w-full px-3 py-2 rounded-lg border bg-white text-sm" + placeholder="Numéro d'objet (si intermittent)" + /> +

Ce champ est facultatif. Il concerne uniquement les intermittents du spectacle.

+
{/* Section Coordonnées bancaires */} @@ -930,7 +945,7 @@ export default function AutoDeclarationPage() {