From 527ea2e78a1448cecd5230cfdb6913b1ea75aa50 Mon Sep 17 00:00:00 2001 From: R0m1k3 Date: Tue, 11 Aug 2026 12:17:50 +0200 Subject: [PATCH] =?UTF-8?q?Ouvrir=20les=20r=C3=A9f=C3=A9rentiels=20au=20pa?= =?UTF-8?q?ram=C3=A9trage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Emplois, étiquettes et types d'absence vivaient en base sans écran : le seed les posait, et rien ne permettait ensuite d'en ajouter un. Ils s'éditent désormais depuis les réglages. Trois choix portent la conformité plutôt que le confort : - Archiver, jamais supprimer. Un emploi figure au registre du personnel, une étiquette colore des semaines closes, un type d'absence justifie des écritures de compteur. Supprimer l'un des trois rendrait illisible un dossier dont la conservation court encore. - Le code Silae manquant est signalé. Un type sans code fait échouer l'export de la période ; l'écran le dit avant l'échéance de paie plutôt qu'après. - La convention se réédite, elle ne se modifie pas. Chaque enregistrement crée une version datée : une paie de mars doit rester reproductible après un changement de seuil en juin. L'origine de chaque valeur — ordre public, convention, accord d'entreprise — est affichée, parce que les trois ne se corrigent pas de la même main. Les mutations de types d'absence passent par settings.agreement.manage : le catalogue §5 ne déclare pas de code dédié, et ces drapeaux relèvent du paramétrage légal. Inventer une capacité aurait créé un droit sans rien protéger de neuf. Co-Authored-By: Claude Opus 5 --- .../reglages/convention/AgreementForm.tsx | 187 +++++++++++ src/app/(app)/reglages/convention/page.tsx | 145 +++++++++ .../(app)/reglages/emplois/JobTitleForms.tsx | 67 ++++ src/app/(app)/reglages/emplois/page.tsx | 103 ++++++ .../(app)/reglages/etiquettes/LabelForms.tsx | 85 +++++ src/app/(app)/reglages/etiquettes/page.tsx | 125 +++++++ .../types-absence/AbsenceTypeForms.tsx | 156 +++++++++ src/app/(app)/reglages/types-absence/page.tsx | 149 +++++++++ src/components/shell/navigation.ts | 14 +- src/server/settings/absence-types.ts | 266 +++++++++++++++ src/server/settings/agreement.ts | 306 ++++++++++++++++++ src/server/settings/job-titles.ts | 208 ++++++++++++ src/server/settings/labels.ts | 230 +++++++++++++ 13 files changed, 2039 insertions(+), 2 deletions(-) create mode 100644 src/app/(app)/reglages/convention/AgreementForm.tsx create mode 100644 src/app/(app)/reglages/convention/page.tsx create mode 100644 src/app/(app)/reglages/emplois/JobTitleForms.tsx create mode 100644 src/app/(app)/reglages/emplois/page.tsx create mode 100644 src/app/(app)/reglages/etiquettes/LabelForms.tsx create mode 100644 src/app/(app)/reglages/etiquettes/page.tsx create mode 100644 src/app/(app)/reglages/types-absence/AbsenceTypeForms.tsx create mode 100644 src/app/(app)/reglages/types-absence/page.tsx create mode 100644 src/server/settings/absence-types.ts create mode 100644 src/server/settings/agreement.ts create mode 100644 src/server/settings/job-titles.ts create mode 100644 src/server/settings/labels.ts diff --git a/src/app/(app)/reglages/convention/AgreementForm.tsx b/src/app/(app)/reglages/convention/AgreementForm.tsx new file mode 100644 index 0000000..5bbc28a --- /dev/null +++ b/src/app/(app)/reglages/convention/AgreementForm.tsx @@ -0,0 +1,187 @@ +'use client'; + +import { useActionState } from 'react'; + +import { Field, FormError, SubmitButton } from '@/components/ui/Form'; +import { PersistentForm } from '@/components/ui/PersistentForm'; +import type { AgreementParameters } from '@/domain/compliance/parameters'; +import { + publishAgreementVersionAction, + type ActionState, +} from '@/server/settings/agreement'; + +const empty: ActionState = {}; + +function Group({ + title, + note, + children, +}: { + title: string; + note?: string; + children: React.ReactNode; +}) { + return ( +
+ + {title} + + {note ?

{note}

: null} +
{children}
+
+ ); +} + +function Area({ + label, + name, + defaultValue, + hint, +}: { + label: string; + name: string; + defaultValue: string; + hint: string; +}) { + return ( +