Commit Graph

37 Commits

Author SHA1 Message Date
Manus
615dd46059 Checkpoint: Audit de robustesse et maintenabilité : calcul dynamique des tendances OPEX par véritable année N-1, filtrage/validation centralisés des codes établissement, transactions d'import et d'écriture, contraintes uniques CAPEX/OPEX avec déduplication, suppression effective de postes OPEX, nettoyage des gabarits et scripts morts, chargement différé XLSX, documentation métier et 22 tests passants. 2026-08-17 20:50:33 +00:00
Manus
aa095eae08 Checkpoint: La colonne Code est maintenant cliquable dans la vue Établissements OPEX : clic pour trier par code croissant/décroissant. Le tri par code est aussi le tri par défaut (quand aucune autre colonne n'est sélectionnée). Les colonnes Établissement et Total restent triables comme avant. 2026-06-11 09:31:03 +00:00
Manus
f0737a290e Checkpoint: Quand l'utilisateur active le toggle "Tout manuel" pour un établissement dans l'onglet Clés de répartition, les montants calculés automatiquement (prorata) sont d'abord sauvegardés en BDD via la nouvelle procédure batchSetMontantsEtab, puis le flag modeManuel est activé. L'établissement part donc avec les valeurs précalculées comme base de saisie manuelle. 2026-06-11 09:17:27 +00:00
Manus
60fd2b891e Checkpoint: Suppression des 6 lignes parasites en BDD (Infogérance, Sécurité, Applicatifs HEP, Applicatifs SMR, Téléphonie, TOTAL) + filtre PARASITE_PATTERNS dans handleFileImport pour empêcher leur réinsertion lors d'un import Excel. 2026-06-11 08:48:10 +00:00
Manus
eb1684f04c Checkpoint: Quand un établissement est en mode tout manuel, toutes ses cellules (postes en calcul automatique inclus) sont désormais cliquables et éditables. Fond ambre pour distinguer visuellement le mode tout manuel du mode manuel poste par poste (bleu). Les cellules sans saisie affichent "cliquer" en ambre. 2026-06-11 08:06:09 +00:00
Manus
0e1cab9f6c Checkpoint: Bug corrigé : ajout contrainte UNIQUE (annee, etablissementCode) sur opex_bases_repartition + déduplication des lignes existantes — le clic ne crée plus de doublon. Nouvelle fonctionnalité : colonne "Tout manuel" (toggle) dans l'onglet Clés de répartition — quand activé pour un établissement, le calcul prorata est ignoré et seuls les montants saisis manuellement dans la vue Établissements sont utilisés. Badge ambre visible dans les deux vues. 2026-06-11 07:57:02 +00:00
Manus
cfeb5196db Checkpoint: Corrections des deux lacunes identifiées dans l'onglet "Clés de répartition" de DSI OPEX :
1. Loading/error state : ClesRepartitionView reçoit désormais isLoadingBases et isErrorBases depuis la requête trpc.opex.getBasesRepartition.useQuery(). Affiche un spinner pendant le chargement et un message d'erreur si la requête échoue (au lieu d'un tableau vide trompeur).
2. Import fichier amélioré : détection intelligente de la feuille (mots-clés OPEX/DSI/répartition/base, insensible aux accents), recherche de l'en-tête dans les 15 premières lignes, normalisation des accents pour la détection des colonnes, message d'erreur détaillé avec les colonnes détectées, toast informatif si plusieurs feuilles présentes.
14 tests Vitest passants. 0 erreur TypeScript.
2026-06-11 07:24:34 +00:00
Manus
841ff1bd09 Checkpoint: Ajout de l'onglet 'Clés de répartition' dans DSI OPEX : tableau éditable avec base de répartition standard et base /HEP par établissement, import fichier Excel/CSV, info année (OPEX N → base N-2). Calcul automatique du poste SAAS DUI Pôle HEP branché sur la colonne /HEP. Nouvelle table opex_bases_repartition avec colonne baseRepartitionHep. Seed 2026 : 64 établissements dont 19 HEP. 14 tests passants, 0 erreur TypeScript. 2026-06-11 07:20:24 +00:00
Manus
14a660892a Checkpoint: - Ajout table opex_bases_repartition (11e table) avec 58 bases de répartition 2026 seedées depuis le JSON source
- Ajout procédure tRPC opex.getBasesRepartition et opex.setBaseRepartition
- DsiOpex utilise maintenant les bases de répartition depuis la BDD (priorité BDD > JSON fallback pour 2025)
- Total en bas à droite de la vue établissements affiche totalGlobal (somme postes BDD = 1 257 678 €) au lieu de la somme des arrondis par établissement (1 259 641 €)
- 0 erreur TypeScript
2026-06-11 06:24:31 +00:00
Manus
020156d62c Checkpoint: Migration complète localStorage → BDD : useBudgetData, ParametresContext, Budget2027, DsiCapex, DsiOpex, ImportModal (indicateur inventaires + suppression double-écriture). Ajout procédures tRPC : inventaire.listMeta, inventaire.getStats, opex.initFromSource, opex.deleteAll, opex.cloneFromN1. 14 tests Vitest passants. 0 erreur TypeScript. 2026-06-10 12:49:29 +00:00
Manus
fe14ad99e1 Checkpoint: Ajout de libelle_court et libelle_detail dans data_opex.json et data_opex_2025.json pour tous les 35 postes. Les th du tableau Établissements affichent maintenant le nom court en gras (ex: LIFEN) et la description en dessous (ex: Plateforme eSanté Envois), sans le préfixe SAAS/Maintenance/etc. 2026-06-10 11:40:54 +00:00
Manus
d2e0137a03 Checkpoint: Les th des colonnes postes utilisaient bg-blue-50/60 et bg-emerald-50/60 (semi-transparents) — remplacés par rgb(239 246 255) et rgb(240 253 244) en style inline pour un fond entièrement opaque lors du scroll vertical 2026-06-10 10:36:03 +00:00
Manus
cb01e3a04a Checkpoint: Fond oklch solide appliqué directement sur chaque th de l'en-tête du tableau Postes — le fond du tr était ignoré par les th, causant la transparence lors du scroll vertical 2026-06-10 10:15:03 +00:00
Manus
ebf70ed3ad Checkpoint: Correction du scroll vertical de la vue Postes OPEX : suppression de overflow-auto du conteneur parent, scroll interne uniquement dans le tableau, en-tête sticky visible lors du défilement 2026-06-10 10:07:45 +00:00
Manus
ea88fa1af8 Checkpoint: Ajout de position sticky top:0 avec fond oklch opaque sur le tr d'en-tête du tableau vue Postes, et scroll vertical limité à calc(100vh - 340px) pour que l'en-tête reste visible lors du défilement. 2026-06-10 09:59:08 +00:00
Manus
954421088e Checkpoint: 1. Renommage de Prorata classe 6 en Prorata C 6 dans DsiOpex.tsx, data_opex.json et data_opex_2025.json. 2. Colonne Type déplacée en mode showDetails. 3. Colonne Ventilation (avec bouton bascule) affichée en mode normal (toujours visible). Ordre des colonnes : Catégorie → Facturation → Ventilation → [Type] → [Compte] → Budget N-1 → Prév. 2026-06-10 09:47:42 +00:00
Manus
1abd40cc1c Checkpoint: 1. Bouton cliquable dans la colonne Ventilation (vue Postes, onglet Détails) pour basculer Prorata classe 6 ↔ Manuel avec répercussion immédiate sur la vue Établissements. 2. Scroll vertical du tableau vue Établissements avec en-tête de colonnes sticky (top:0 sur tous les th). 3. Recalcul des montants par établissement utilise ligne.mode_ventilation en priorité (valeur modifiée par l'utilisateur) au lieu de la source JSON. 2026-06-10 09:43:30 +00:00
Manus
772dff3061 Checkpoint: Ajout de mode_ventilation dans buildLignesFromSource (copié depuis p.mode_ventilation du JSON). Enrichissement de loadOpexState pour fusionner mode_ventilation depuis la source JSON sur les lignes déjà sauvegardées dans localStorage (rétrocompatibilité). La colonne Ventilation affiche maintenant les vraies valeurs du fichier Excel source. 2026-06-10 09:36:47 +00:00
Manus
c762998f69 Checkpoint: Colonne Type réduite à 80px avec texte tronqué. Colonne Ventilation ajoutée dans le panneau showDetails (visible avec le bouton Voir détails), avec badge coloré vert=Prorata/bleu=Manuel. Ajout de mode_ventilation dans l'interface LigneOpex. 2026-06-10 09:32:51 +00:00
Manus
bd9b52d39a Checkpoint: Ajout de gardes défensives sur e.nom et e.code dans filteredEtabs et sortedEtabs : conversion explicite en string avant toLowerCase/localeCompare pour éviter le crash quand un établissement a un nom non-string (undefined, null, objet). 2026-06-10 09:15:38 +00:00
Manus
90938eb83c Checkpoint: Remplacement de toutes les valeurs hsl(var(--*)) invalides par des valeurs oklch solides directes (oklch(1 0 0) pour card, oklch(0.97 0.003 80) pour lignes alternées, oklch(0.94 0.005 80) pour muted). Ajout de isolation:isolate sur le conteneur overflow-x-auto. Position sticky en style inline avec zIndex explicite (30 pour thead, 20 pour tbody/tfoot). 2026-06-10 09:13:06 +00:00
Manus
6f118e41f7 Checkpoint: Remplacement des classes Tailwind bg-muted/40 et bg-card par des valeurs hsl CSS explicites en style inline sur toutes les cellules sticky right-0 (th en-tête, td corps, td pied). Largeur fixe 120px pour cohérence. Ombre portée gauche renforcée pour matérialiser la séparation. 2026-06-10 09:09:34 +00:00
Manus
9e8830e929 Checkpoint: Remplacement des min-w Tailwind par des width/minWidth/maxWidth explicites en style inline (Code=110px, Établissement=220px, left=110px) pour garantir la cohérence entre la largeur réelle et la position left des colonnes sticky. Ajout d'un title sur la cellule Établissement pour voir le nom complet en cas de troncature. 2026-06-10 09:08:19 +00:00
Manus
8de20ba62e Checkpoint: Remplacement de bg-inherit par des couleurs de fond explicites (hsl CSS vars) sur toutes les cellules sticky (Code, Établissement, Total) dans le tableau OPEX vue Établissements. Ajout de border-separate + border-spacing-0 sur le tableau et d'ombres portées pour matérialiser la séparation visuelle lors du scroll horizontal. 2026-06-10 09:01:42 +00:00
Manus
f64a7db3f3 Checkpoint: Les lignes Ventilation cout, Infogérance, Sécurité, Applicatifs PA, Applicatifs HEP, Applicatifs SMR, Téléphonie, Nouveautés, TOTAL étaient stockées comme de faux établissements dans la section etablissements de data_opex.json. Supprimées directement du JSON source. Le nombre d'établissements passe de 67 à 58 vrais établissements. 2026-06-10 08:01:54 +00:00
Manus
a0508893f1 Checkpoint: 1) Filtre automatique des lignes parasites (Ventilation cout, Infogérance, Sécurité, Applicatifs PA, etc.) lors du chargement depuis localStorage — purge et sauvegarde la version nettoyée. 2) Édition inline dans la vue Établissements : les cellules bleues (saisie manuelle) sont cliquables, affichent un input numérique autoFocus, sauvegardent via Enter/onBlur, annulent via Escape. Les overrides sont stockés dans opexState.montantsManuelEtab et intégrés dans le recalcul dynamique. Les cellules avec override saisi sont en gras. Les cellules vides affichent 'cliquer' en bleu clair. 2026-06-10 07:55:49 +00:00
Manus
eb236f4b8f Checkpoint: Suppression du bloc Répartition par catégorie en bas de la vue Postes (doublon des vignettes KPI). Refonte de la vue Établissements : tableau scrollable horizontalement avec tous les 35 postes en colonnes, code couleur vert (bordure emerald = calcul prorata automatique) / bleu (bordure bleue = saisie manuelle), colonnes Code et Établissement sticky à gauche, colonne Total sticky à droite, légende en haut du tableau. 2026-06-10 07:43:25 +00:00
Manus
fa30872300 Checkpoint: La vue Établissements de la page OPEX recalcule désormais dynamiquement les montants par établissement depuis les postes éditables (totalPostes × ratio_base_repartition), au lieu de lire les montants pré-calculés erronés du JSON source (qui étaient doublés). Le total des établissements est maintenant cohérent avec le total des postes. 2026-06-10 07:30:44 +00:00
Manus
da7921b435 Checkpoint: Ajout d'un bouton Supprimer (rouge) avec AlertDialog de confirmation à côté de Réinitialiser dans le header OPEX DSI. Disponible uniquement pour les prévisionnels non validés. Après confirmation, efface toutes les données de l'année et affiche l'écran vide avec les boutons Créer depuis N-1 / Ajouter manuellement. 2026-06-04 13:53:53 +00:00
Manus
1ce830d593 Checkpoint: OPEX DSI : ajout d'un écran vide dédié pour les années sans données, avec bouton "Créer depuis N-1" (copie toutes les lignes de l'année précédente avec confirmation AlertDialog) et bouton "Ajouter une ligne manuellement". La fonction handleCreateFromN1 clone les lignes N-1 avec budget_n1 = montant N-1 pour que les tendances soient calculables dès la création. 2026-06-04 13:48:45 +00:00
Manus
7e360ca113 Checkpoint: OPEX DSI : colonne Tendance ajoutée sur chaque ligne du tableau - pastille rouge+flèche montante (hausse > 2%), orange stable (< 2%), vert+flèche descendante (baisse), bleu "Nouveau" (pas de N-1). Pourcentage d'évolution affiché dans chaque pastille. 2026-06-04 13:39:48 +00:00
Manus
eac06d1ca2 Checkpoint: OPEX DSI : flèches de tendance colorées (rouge=hausse, orange=stable, vert=baisse) sur chaque vignette de catégorie, avec montant N-1 affiché. Données 2025 intégrées depuis le fichier Excel. Support multi-années 2025/2026 avec données sources distinctes. 2026-06-04 08:03:28 +00:00
Manus
2304724ba6 Checkpoint: Refonte complète de la page DSI OPEX : grille de vignettes dynamique pour toutes les catégories (App global, Infogérance, Sécurité, Téléphonie, App HEP, App SMR, Autre), montants éditables inline, boutons Modifier/Supprimer par ligne, modale d'ajout/édition complète, confirmation de suppression, persistance par année en localStorage, validation définitive avec verrouillage. 2026-06-03 16:12:34 +00:00
Manus
5cad041d95 Checkpoint: Refonte complète de DsiOpex.tsx : chaque montant prévisionnel est maintenant éditable via un champ numérique inline. Bouton Enregistrer (actif uniquement si modifications non sauvegardées). Bouton Valider avec AlertDialog de confirmation — une fois validé, l'OPEX est verrouillé définitivement (badge "Validé + date", icône cadenas, champs en lecture seule). Persistance par année en localStorage via getOpexStorageKey. Réinitialisation aux valeurs sources possible. Les KPIs et totaux se recalculent en temps réel à chaque modification. 2026-06-03 13:34:49 +00:00
Manus
787928c722 Checkpoint: Sélecteur d'année global (2025, 2026, 2027+) sur Renouvellement PC, CAPEX-Construction, CAPEX-Synthèse et DSI-OPEX. Données CAPEX isolées par année en localStorage. Titres dynamiques selon l'année sélectionnée. 2026-06-03 09:49:14 +00:00
Manus
808c5e4f95 Checkpoint: Page OPEX DSI complète avec tableau de 35 postes de charges, KPIs, filtres par catégorie, vue par poste et par établissement, sélecteur d'année 2026/2027, et graphique de répartition par catégorie. 2026-06-02 20:59:01 +00:00
Manus
751ac207c0 Checkpoint: Nouvelle navigation hiérarchique avec 4 menus principaux (Itinova, Santinova, Soins et Santé, St Exupéry), sous-menus dépliables (Établissements, DSI), sidebar partagée AppSidebar sur toutes les pages, et pages placeholder pour les sections à venir. 2026-06-02 20:50:23 +00:00