diff --git a/prisma/migrations/20260811160000_drop_sms/migration.sql b/prisma/migrations/20260811160000_drop_sms/migration.sql new file mode 100644 index 0000000..e1491e2 --- /dev/null +++ b/prisma/migrations/20260811160000_drop_sms/migration.sql @@ -0,0 +1,11 @@ +-- --------------------------------------------------------------------------- +-- Retrait de l'envoi des plannings par SMS. +-- +-- Le drapeau était un consentement recueilli pour un canal qui n'a jamais +-- existé : aucun envoi de SMS n'est branché, et il n'est pas prévu de l'être. +-- Un consentement conservé sans finalité est une donnée collectée sans base +-- légale — la minimisation impose de la supprimer, pas de la garder « au cas +-- où ». +-- --------------------------------------------------------------------------- + +ALTER TABLE "EmployeeProfile" DROP COLUMN IF EXISTS "smsSchedules"; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 07448d5..77484a8 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -603,10 +603,6 @@ model EmployeeProfile { landline String? personalEmail String? - /// Envoi des plannings par SMS. Un consentement, donc explicitement faux - /// par défaut : la charge de la preuve pèse sur l'employeur. - smsSchedules Boolean @default(false) - socialSecurityNumberEnc Bytes? ibanEnc Bytes? bicEnc Bytes? diff --git a/src/app/(app)/equipe/AddEmployeeForm.tsx b/src/app/(app)/equipe/AddEmployeeForm.tsx index 5d4b472..59d4d19 100644 --- a/src/app/(app)/equipe/AddEmployeeForm.tsx +++ b/src/app/(app)/equipe/AddEmployeeForm.tsx @@ -25,18 +25,35 @@ import type { const empty: ActionState = {}; +/** + * Les neuf types de contrat, par ordre alphabétique. + * + * Pas de « CDI en premier » : le classement par fréquence supposée fait chercher + * les huit autres, et se lit comme un défaut à accepter. L'ordre alphabétique + * ne privilégie rien et se parcourt sans réfléchir. + */ const CONTRACT_TYPES = [ - ['CDI', 'CDI'], - ['CDD', 'CDD'], ['APPRENTISSAGE', 'Apprentissage'], - ['STAGIAIRE', 'Stagiaire'], - ['SAISONNIER', 'Saisonnier'], - ['EXTRA', 'Extra'], - ['INTERIM', 'Intérim'], + ['CDD', 'CDD'], + ['CDI', 'CDI'], ['DIRIGEANT_ASSIMILE_SALARIE', 'Dirigeant assimilé salarié'], ['DIRIGEANT_NON_SALARIE', 'Dirigeant non salarié'], + ['EXTRA', 'Extra'], + ['INTERIM', 'Intérim'], + ['SAISONNIER', 'Saisonnier'], + ['STAGIAIRE', 'Stagiaire'], ] as const; +/** Marque d'obligation, annoncée aussi aux lecteurs d'écran. */ +function Required() { + return ( + + * + (requis) + + ); +} + const selectClass = 'h-9 min-w-0 rounded-2 border border-line-2 bg-surface px-2 text-sm text-ink-1 outline-none focus-visible:border-focus'; @@ -136,20 +153,6 @@ export function AddEmployeeForm({ /> - - @@ -186,9 +189,22 @@ export function AddEmployeeForm({ /> + {/* Aucune valeur par défaut : un type de contrat pré-rempli est + un type que personne n'a choisi, et il commande les règles de + durée comme la déclaration. */} + {/* L'équipe est **requise** avec un contrat. Le planning + s'ordonne par équipe : un salarié rattaché à l'établissement + mais à aucune équipe n'apparaît sur aucune grille, et rien ne + le signale avant la première semaine à couvrir. */}