Commit Graph

  • 8312cf25fc Checkpoint: Masse salariale enrichie : import Excel administrateur côté serveur, projections annuelles 2025-2027 importées du fichier de référence, réel 2026 exclusivement calculé sur les liasses archivées, conservation des montants de référence et des centimes, éditions limitées aux primes et évolutions de l'exercice courant/futur. 74 tests, TypeScript et build validés. main Manus 2026-08-31 11:04:30 +00:00
  • 28570234d0 Checkpoint: Ajout de la projection annuelle prévisionnel-réel dans Masse salariale : import contrôlé du fichier modèle 2025-2027, réel 2026 provenant uniquement des liasses Salaires, ajustements administrateur limités aux primes et évolutions de l'année courante/future, conservation des centimes, modèle de calcul testé et documentation. 72 tests, TypeScript et build validés. Manus 2026-08-31 10:58:02 +00:00
  • 5c9618b204 Checkpoint: Déploiements Budget SI finalisés : recette remise en service après redémarrage contrôlé et CI Gitea réussie ; production synchronisée depuis Gitea, migrations automatiques et compte administrateur initial validés ; portails et dashboards recette/production mis à jour. Les contrôles HTTPS administrateur et Salaires sont consignés. Manus 2026-08-30 15:53:25 +00:00
  • f759032793 Checkpoint: Correctif de première installation : après les migrations Drizzle, le serveur crée le compte administrateur Itinova requis avec mot de passe haché, sans doublon. Validation complète réussie : 62 tests, TypeScript et build. Manus 2026-08-30 09:54:50 +00:00
  • b2c8580382 Checkpoint: Correctif de production : le serveur exécute désormais les migrations Drizzle versionnées avant l'ouverture HTTP, ce qui initialise une base vide lors du premier déploiement. Test de régression ajouté. Validation complète réussie : 61 tests, TypeScript et build. Manus 2026-08-30 09:40:46 +00:00
  • 6447389cb8 Checkpoint: Préparation recette-production : manifeste Budget SI aligné avec le registre dashboard, visuel de portail sélectionné, et label Traefik paramétrable par BUDGET_SI_DOMAIN afin que la production réponde sur son URL dédiée. Vérification complète réussie : 60 tests, TypeScript et build. Manus 2026-08-30 09:07:15 +00:00
  • 7ee4e848d2 Checkpoint: Clôture Salaires : validation HTTPS administrateur réalisée après correction de la collision DNS MySQL. La page Salaires, les filtres, le statut d'extraction et l'ouverture du PDF via la route protégée sont vérifiés. Tous les contrôles projet sont tracés ; la version fonctionnelle eeac2de est déployée en recette via Gitea CI/CD. Manus 2026-08-30 08:59:05 +00:00
  • eeac2de481 Checkpoint: Correctif recette : DATABASE_URL cible désormais le conteneur MySQL unique itinova-budget-si-db, évitant la collision de l'alias Docker partagé db qui empêchait la connexion administrateur après recréation. Test de régression Compose ajouté. Validation complète réussie : 59 tests, TypeScript, build et format Compose. Manus 2026-08-29 23:54:15 +00:00
  • 0e59dac29f Checkpoint: Correctif UX Salaires : pendant le chargement de la sonde AES-256-GCM, l'interface affiche désormais une vérification neutre et désactive l'import au lieu d'afficher à tort une alerte de blocage. Test de régression ajouté. Validation complète réussie : 58 tests, TypeScript et build. Manus 2026-08-29 23:40:21 +00:00
  • 193f7ce32a Checkpoint: Ajout du secours de stockage réservé aux PDF de paie chiffrés : lorsque Forge est indisponible en recette, les octets AES-256-GCM sont stockés dans un volume hôte Docker persistant, jamais dans l'image ni la base. Import, réindexation et consultation passent par cette même abstraction, avec test de round-trip sans Forge. Compose transmet la clé AES et monte le volume dédié. Validation complète : 56 tests, TypeScript, build et format YAML. Manus 2026-08-29 23:19:21 +00:00
  • 7698e9f680 Checkpoint: Correctif d'environnement recette : docker-compose transmet désormais explicitement PAYROLL_ENCRYPTION_KEY au service applicatif. La clé AES est déjà configurée de façon sécurisée dans le fichier d'environnement recette, sans affichage de sa valeur. pnpm verify passe après cette correction : TypeScript, 55 tests et build. Manus 2026-08-29 23:02:19 +00:00
  • 558582d358 Checkpoint: Correctif CI de recette : le test d'état de chiffrement Salaires utilise désormais une clé AES-256 de test locale et restaure l'environnement, au lieu de dépendre du secret PAYROLL_ENCRYPTION_KEY non injecté dans le runner Gitea. La commande exacte de CI pnpm verify est validée localement : TypeScript, 55 tests et build passent. Manus 2026-08-29 22:52:03 +00:00
  • 82de3181df Checkpoint: Fenêtre administrateur Salaires finalisée : import multipart limité, chiffrement AES-256-GCM avant stockage persistant hors conteneur, métadonnées/index métier minimisés en base, consultation PDF déchiffrée côté serveur avec no-store, filtres année/mois et comparaison M-1 expliquée. Réindexation sûre des archives partielles sans écrasement du PDF. Validation réelle sur deux liasses mensuelles : index partiel signalé sans invention de données, comparaison affichée et lecture après redémarrage. 55 tests Vitest, TypeScript et build de production validés. Manus 2026-08-29 22:40:59 +00:00
  • 8a58f2c2bd Checkpoint: Déploiement recette validé de la Masse salariale, avec CI/CD Gitea et redéploiement Blue-Green du commit 0a00e70. Les wordmarks de connexion sont désormais intégrés à l'interface pour éviter les erreurs de ressources manus-storage sur la recette. Manus 2026-08-27 16:09:49 +00:00
  • 0a00e70a9f fix: rendre les wordmarks de connexion indépendants du stockage Manus 2026-08-27 16:02:12 +00:00
  • fe2a266d2d chore: tracer le rétablissement SSH recette Manus 2026-08-27 15:52:14 +00:00
  • 15d67924ca chore: tracer le déploiement recette masse salariale Manus 2026-08-27 13:34:51 +00:00
  • da407db4de Checkpoint: Ajout du module Masse salariale SANTINOVA : tables de salariés, rémunérations et évolutions manuelles sécurisées par rôle administrateur ; import contrôlé des bulletins 2025 et janvier–août 2026 ; écran tableau 2025–2027 ; tests d'autorisations, d'agrégats et des quatre états UI ; documentation des sources et de la politique d'import. Manus 2026-08-27 13:10:47 +00:00
  • 2f4b1f2e8e Checkpoint: Déploiement Gitea de recette validé : workflow CI rendu autonome vis-à-vis de GitHub (checkout Gitea interne), signature webhook corrigée, validation CI réussie et redéploiement Blue-Green terminé avec le commit ec597da. Manus 2026-08-27 11:11:10 +00:00
  • ec597da4a2 Merge remote-tracking branch 'recette-ci/main' Manus 2026-08-27 10:58:54 +00:00
  • 79411a6801 fix(ci): valider depuis Gitea interne Manus 2026-08-27 10:57:05 +00:00
  • c5ba703165 chore: déclencher le déploiement de recette Santinova CI 2026-08-27 12:39:50 +02:00
  • df208f2b02 chore: déclencher le déploiement de recette Santinova CI 2026-08-27 12:35:57 +02:00
  • 3b52527fd0 chore: tracer le déploiement de recette Manus 2026-08-27 10:26:54 +00:00
  • eec1c4e9f7 chore: synchroniser le CI Gitea et fiabiliser le build Docker Manus 2026-08-27 10:19:39 +00:00
  • 9a1b9f0ac6 Checkpoint: Correction de l'échec de build cloud : remplacement de l'installation globale flottante de pnpm par Corepack 0.31.0 et pnpm 10.4.1 verrouillé par packageManager, compatible avec pnpm-lock.yaml. Installation figée, TypeScript, 22 tests et build de production vérifiés localement. Manus 2026-08-27 09:51:28 +00:00
  • 06afee0d0b CI : workflow validate.yml, manifeste ci.required:true, garde VITEST, tests isolés Manus CI 2026-08-21 10:31:26 +00:00
  • 07b96c03c1 Checkpoint: Finalisation du suivi de l'audit : les trois évolutions futures restent documentées comme hors périmètre, sans développement ajouté. Manus 2026-08-17 20:51:21 +00:00
  • 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. Manus 2026-08-17 20:50:33 +00:00
  • 2422784aeb chore: versionner le manifeste de déploiement Manus 2026-08-17 22:35:47 +02:00
  • 81f57d9895 fix: deduplicate web network (Docker 29.4.0) manus-admin 2026-07-08 12:49:52 +02:00
  • e65d6209ac fix: move DB to web network (Docker 29.4.0 ICC bug) manus-admin 2026-07-08 12:45:25 +02:00
  • 31cdb257fb Checkpoint: Menu latéral : nom utilisateur déplacé tout en bas avec espace libre avant, ajout du menu Tableau de bord Finance sous OPEX (Charges), création de la page dédiée avec accès au dossier OneDrive Windows. Manus 2026-06-12 10:28:47 +00:00
  • 795869fab4 ci: test webhook recette Manus Deploy 2026-06-11 14:51:48 +00:00
  • 3e85d187d4 ci: test webhook déploiement automatique Manus Deploy 2026-06-11 14:47:35 +00:00
  • f6f512d234 fix: configurer Traefik (labels + réseau web) et supprimer nginx superflu Manus Deploy 2026-06-11 14:32:01 +00:00
  • d9ce6eb65e fix: copier node_modules complets depuis builder (vite requis au runtime) Manus Deploy 2026-06-11 14:26:33 +00:00
  • accfdab5e7 fix: inclure dossier patches dans le Dockerfile (stage runner) Manus Deploy 2026-06-11 14:20:16 +00:00
  • 8061887176 feat: ajout Dockerfile, docker-compose et nginx pour déploiement recette Manus Deploy 2026-06-11 14:18:26 +00:00
  • 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. Manus 2026-06-11 09:31:03 +00:00
  • 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. Manus 2026-06-11 09:17:27 +00:00
  • 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. Manus 2026-06-11 08:48:10 +00:00
  • 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. Manus 2026-06-11 08:06:09 +00:00
  • 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. Manus 2026-06-11 07:57:02 +00:00
  • 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. Manus 2026-06-11 07:24:34 +00:00
  • 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. Manus 2026-06-11 07:20:24 +00:00
  • 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 Manus 2026-06-11 06:24:31 +00:00
  • 7d4ac0721d Checkpoint: Seed des données OPEX depuis les fichiers JSON sources vers la base de données MySQL. 33 postes 2025 + 35 postes 2026 + 2030 montants établissements 2026 insérés. Script scripts/seed-opex.mjs créé pour réimport futur. La page DSI OPEX charge désormais les données depuis la BDD sans dépendre du localStorage. Manus 2026-06-10 13:11:32 +00:00
  • 7495e61b51 Checkpoint: Désactivation de trpc.inventaire.listMeta.useQuery dans ImportModal quand la modale est fermée ou sur /login (enabled: open && !isLoginPage). Supprime l'erreur [API Query Error] Please login (10001) sur la page de connexion. Manus 2026-06-10 12:59:22 +00:00
  • e7f5092263 Checkpoint: Correction du clignotement sur la page /login : (1) redirectToLoginIfUnauthorized dans main.tsx ne redirige plus si déjà sur /login, (2) ParametresContext désactive la requête parametres.get sur /login (enabled: !isLoginPage via useLocation). 0 erreur TypeScript. Manus 2026-06-10 12:57:48 +00:00
  • 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. Manus 2026-06-10 12:49:29 +00:00
  • caf95da1c1 Checkpoint: Migration complète vers authentification locale (JWT + bcrypt) : schéma DB (10 tables), routes tRPC (auth, users, etablissements, inventaire, capex, opex, parametres), page de login avec branding Itinova/Santinova, protection des routes, onglets Établissements et Utilisateurs branchés sur tRPC, import inventaire/établissements/utilisateurs via tRPC, 14 tests Vitest passants. Manus 2026-06-10 12:17:07 +00:00
  • 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. Manus 2026-06-10 11:40:54 +00:00
  • 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 Manus 2026-06-10 10:36:03 +00:00
  • 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 Manus 2026-06-10 10:15:03 +00:00
  • 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 Manus 2026-06-10 10:07:45 +00:00
  • 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. Manus 2026-06-10 09:59:08 +00:00
  • 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. Manus 2026-06-10 09:47:42 +00:00
  • 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. Manus 2026-06-10 09:43:30 +00:00
  • 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. Manus 2026-06-10 09:36:47 +00:00
  • 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. Manus 2026-06-10 09:32:51 +00:00
  • 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). Manus 2026-06-10 09:15:38 +00:00
  • 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). Manus 2026-06-10 09:13:06 +00:00
  • 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. Manus 2026-06-10 09:09:34 +00:00
  • 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. Manus 2026-06-10 09:08:19 +00:00
  • 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. Manus 2026-06-10 09:01:42 +00:00
  • 3145e9c84f Checkpoint: Inventaire PC distinct par année : clé budgetsi_inventaire_data_YYYY dans localStorage, ImportModal utilise l'année active (useAnnee), indicateur visuel des imports par année dans la modale, useBudgetData + Budget2027 + DsiCapex rechargent l'inventaire à chaque changement d'année Manus 2026-06-10 08:47:32 +00:00
  • 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. Manus 2026-06-10 08:01:54 +00:00
  • 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. Manus 2026-06-10 07:55:49 +00:00
  • 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. Manus 2026-06-10 07:43:25 +00:00
  • 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. Manus 2026-06-10 07:30:44 +00:00
  • 7c30c7b82b Checkpoint: Les 4 pages (Renouvellement PC, CAPEX-Construction, CAPEX-Synthèse, OPEX Charges) sont désormais directement accessibles sous ITINOVA sans sous-menus intermédiaires. Manus 2026-06-05 08:27:22 +00:00
  • e13cb21883 Checkpoint: Suppression complète de la dépendance à data_budget.json : l'inventaire est désormais exclusivement alimenté par l'import utilisateur (localStorage budgetsi_inventaire_data). useBudgetData lit depuis localStorage, Budget2027 et DsiCapex calculent le renouvellement depuis l'inventaire importé, les pages affichent un état vide avec invitation à importer si aucun inventaire n'est présent. L'import stocke les postes complets (fixes/portables avec âge calculé) par établissement, utilise la colonne Type de matériel en priorité, et émet un événement custom pour notifier toutes les pages en temps réel. Manus 2026-06-04 16:06:33 +00:00
  • af5d4fd703 Checkpoint: Ajout du support XLSX natif via la librairie SheetJS (xlsx). Un helper fileToRows() unifie la lecture CSV et XLSX : pour XLSX, lecture via arrayBuffer + XLSX.read + sheet_to_json ; pour CSV, détection du séparateur et split classique. Le parsing ISI-APP fonctionne désormais identiquement sur les deux formats. Les métadonnées d'import incluent le format détecté (isi-app ou classique). Manus 2026-06-04 15:10:48 +00:00
  • b917aeaa56 Checkpoint: Correction du bug d'affichage de la modale : déplacement du rendu hors de la sidebar (overflow:hidden) via un ImportModalContext + rendu au niveau racine dans App.tsx. Mise à jour du prompt par défaut avec les règles précises du format ISI-APP réel (code depuis libellé 8 car., nom depuis entité, type fixe/portable depuis libellé, vétusté depuis date mise en service ou date achat). Mise à jour du parsing handleInventaireFile pour utiliser ces règles avec comptage fixes/portables dans le résumé. Manus 2026-06-04 14:53:25 +00:00
  • e124a970a7 Checkpoint: Ajout d'un éditeur de prompt de processus d'import dans l'onglet "Inventaire postes" de la modale Imports & Données. Le prompt est affiché dans un bloc pliable/dépliable, modifiable via un textarea monospace (16 lignes), sauvegardable en localStorage (clé budgetsi_import_prompt), réinitialisable aux valeurs par défaut. Le prompt par défaut documente le format attendu, les colonnes obligatoires/optionnelles, les règles de traitement et le comportement attendu. Boutons Modifier / Enregistrer / Annuler / Réinitialiser par défaut. Manus 2026-06-04 14:38:48 +00:00
  • ade7471956 Checkpoint: Import inventaire ISI-APP enrichi : le fichier CSV est maintenant parsé pour extraire automatiquement les établissements uniques (code + nom) et les enregistrer dans budgetsi_etablissements. Fusion intelligente avec les établissements existants (sans écrasement). Message de résultat détaillé (nb lignes, nb établissements détectés, nb nouveaux/mis à jour). Accepte de nombreuses variantes de nommage de colonnes (code_etab, code_etablissement, nom_etab, etablissement…). Message d'erreur explicite avec affichage des en-têtes détectés si les colonnes sont introuvables. Manus 2026-06-04 14:28:26 +00:00
  • 4ff5228ac3 Checkpoint: Ajout du bouton "Imports & Données" au-dessus du bouton Paramètres dans la sidebar (icône Upload, couleur indigo). Création du composant ImportModal avec 3 onglets : Inventaire postes (ISI-APP), Établissements (import CSV), Utilisateurs (import CSV). Enrichissement de la page Paramètres avec 3 onglets : Paramètres (contenu existant), Établissements (CRUD + activer/désactiver), Utilisateurs (CRUD + rattachement multi-établissements par checkboxes). Manus 2026-06-04 14:11:08 +00:00
  • 6b81d689b1 Checkpoint: Les sous-menus (Établissements, DSI) restent ouverts indépendamment jusqu'à clic pour les refermer. Les menus principaux (Itinova, Santinova…) continuent de fonctionner en accordéon (un seul ouvert à la fois). Manus 2026-06-04 13:55:03 +00:00
  • 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. Manus 2026-06-04 13:53:53 +00:00
  • 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. Manus 2026-06-04 13:48:45 +00:00
  • 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. Manus 2026-06-04 13:39:48 +00:00
  • 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. Manus 2026-06-04 08:03:28 +00:00
  • 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. Manus 2026-06-03 16:12:34 +00:00
  • f9ea5dbba5 Checkpoint: Correction du layout de la sidebar : la nav utilise maintenant flex: 1 1 0 avec minHeight: 0 et overflowY: auto, et l'aside a height: 100vh avec overflow: hidden. Cela garantit que le bouton Paramètres reste toujours visible en bas, même quand les sous-menus Établissements ou DSI sont ouverts et que le contenu dépasse la hauteur de l'écran. Manus 2026-06-03 15:55:36 +00:00
  • 9734ae9e93 Checkpoint: Le bouton Paramètres en bas de sidebar a été restylisté : icône dans un carré arrondi bg-white/10, label en font-semibold tracking-wide, opacité text-white/70 (au lieu de text-white/50), état actif avec ring-1 ring-white/30 et indicateur point blanc. Bien plus visible qu'avant. Manus 2026-06-03 14:52:20 +00:00
  • 938a567cce Checkpoint: Ajout du champ anneeDefaut dans ParametresContext (avec persistance localStorage). Nouvelle section "Année d'ouverture par défaut" dans la page Paramètres avec sélecteur de boutons (2025-2030). AnneeContext mis à jour pour utiliser cette valeur au premier lancement (quand aucune session n'est mémorisée). La page Paramètres reste accessible via l'icône engrenage en bas de la sidebar. Manus 2026-06-03 14:48:16 +00:00
  • 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. Manus 2026-06-03 13:34:49 +00:00
  • 3c039142d6 Checkpoint: Suppression du rowSpan qui causait le bug des 2 premières lignes figées lors du scroll. Remplacement de toutes les mentions "2027" en dur dans l'en-tête du tableau par la variable dynamique {annee}. Le titre affiche désormais "CAPEX 2026" ou "CAPEX 2027" selon l'année sélectionnée. Manus 2026-06-03 13:24:26 +00:00
  • 9ea7a36a09 Checkpoint: hasDonnees dans DsiCapex prend désormais en compte les années avec inventaire importé (2026 et 2027), même si aucune saisie manuelle n'a été faite. La colonne Renouvellement Parc Info est pré-remplie par le calcul de vétusté pour ces années. Manus 2026-06-03 13:20:03 +00:00
  • 919ee72411 Checkpoint: Suppression du badge redondant "Exercice XXXX" du composant AnneeSelectorBar. L'année active est déjà mise en évidence par le bouton sélectionné dans le sélecteur. Le header de CAPEX-Construction est réorganisé pour que le sélecteur et les boutons Réinitialiser/Enregistrer soient sur la même ligne sans chevauchement. Manus 2026-06-03 13:13:16 +00:00
  • c5eac65098 Checkpoint: Renouvellement PC et CAPEX-Synthèse : KPIs, barre de filtres et tableau sont masqués pour les années sans données importées/saisies. Seul l'écran vide explicite s'affiche. Les années 2026-2027 restent pleinement fonctionnelles sur Renouvellement PC. CAPEX-Synthèse se vide dès qu'aucun budget n'a été saisi pour l'année sélectionnée. Manus 2026-06-03 10:15:25 +00:00
  • 0adfcba5d2 Checkpoint: Renouvellement PC affiche un état vide pour les années sans inventaire importé (hors 2026-2027). Construction Budget affiche la valeur de renouvellement de l'année N-1 dans les données historiques (depuis les saisies CAPEX N-1 ou l'enveloppe 2026 du fichier BP2027 en fallback). Titre du formulaire dynamique selon l'année. Manus 2026-06-03 10:04:55 +00:00
  • 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. Manus 2026-06-03 09:49:14 +00:00
  • 858f0dc4d9 Checkpoint: Sidebar refondée : application renommée Budget SI, menus accordéon avec couleurs distinctes (bleu Itinova, vert Santinova, violet Soins et Santé, orange St Exupéry), CAPEX-Synthèse déplacé dans Établissements, Construction BP 2027 renommé CAPEX-Construction. Manus 2026-06-03 09:41:47 +00:00
  • 1cdfbd1b12 Checkpoint: Page DSI CAPEX : tableau consolidé des investissements SI 2027 par établissement, au format du fichier Excel BP2027, avec 9 colonnes colorées, totaux par colonne, KPIs, filtres et tri. Manus 2026-06-02 21:06:15 +00:00
  • 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. Manus 2026-06-02 20:59:01 +00:00
  • 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. Manus 2026-06-02 20:50:23 +00:00
  • 73475b697d Checkpoint: Suppression du bloc "Renouvellement 2025" dans la section données historiques de la page Construction BP 2027. Seul le Renouvellement 2026 reste affiché. Manus 2026-04-06 15:47:22 -04:00
  • 9f357d9ae2 Checkpoint: Renommage du menu "Établissements" en "Renouvellement PC" dans la sidebar des 3 pages (Home, Paramètres, Budget2027) et dans le titre de la page principale. Manus 2026-04-06 15:35:53 -04:00