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.

This commit is contained in:
Manus
2026-06-10 09:47:42 +00:00
parent 1abd40cc1c
commit 954421088e
3 changed files with 81 additions and 81 deletions

View File

@@ -8,7 +8,7 @@
"libelle": "SAAS AGEVAL Gestion de la qualité", "libelle": "SAAS AGEVAL Gestion de la qualité",
"detail": "Gestion qualité (procédures,FEI...)", "detail": "Gestion qualité (procédures,FEI...)",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "App global", "categorie": "App global",
"type": "SAAS", "type": "SAAS",
"compte": "613511", "compte": "613511",
@@ -21,7 +21,7 @@
"libelle": "SAAS OCTIME Gestion de temps", "libelle": "SAAS OCTIME Gestion de temps",
"detail": "GTA", "detail": "GTA",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "App global", "categorie": "App global",
"type": "SAAS", "type": "SAAS",
"compte": "613511", "compte": "613511",
@@ -60,7 +60,7 @@
"libelle": "SAAS ISI-APP Gestion de parc", "libelle": "SAAS ISI-APP Gestion de parc",
"detail": "Outil de pilotage SI du parc + Connexion AD + Module Santé", "detail": "Outil de pilotage SI du parc + Connexion AD + Module Santé",
"facturation": "Mensuelle", "facturation": "Mensuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "Infogérance", "categorie": "Infogérance",
"type": "SAAS", "type": "SAAS",
"compte": "613511", "compte": "613511",
@@ -73,7 +73,7 @@
"libelle": "SAAS DLD Gestion de la Conformité RGPD", "libelle": "SAAS DLD Gestion de la Conformité RGPD",
"detail": "RGPD", "detail": "RGPD",
"facturation": "Mensuelle", "facturation": "Mensuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "App global", "categorie": "App global",
"type": "SAAS", "type": "SAAS",
"compte": "613511", "compte": "613511",
@@ -86,7 +86,7 @@
"libelle": "SAAS Gestion signature électronique", "libelle": "SAAS Gestion signature électronique",
"detail": "DE électroniques", "detail": "DE électroniques",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "App global", "categorie": "App global",
"type": "SAAS", "type": "SAAS",
"compte": "613511", "compte": "613511",
@@ -112,7 +112,7 @@
"libelle": "Redevance SXS Gestion trésorerie SAGE", "libelle": "Redevance SXS Gestion trésorerie SAGE",
"detail": "Communications bancaires", "detail": "Communications bancaires",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "App global", "categorie": "App global",
"type": "SAAS", "type": "SAAS",
"compte": "613511", "compte": "613511",
@@ -138,7 +138,7 @@
"libelle": "SAAS LIFEN Plateforme E-Santé Réceptions", "libelle": "SAAS LIFEN Plateforme E-Santé Réceptions",
"detail": "SMR / outil d'intégration dans le DPI depuis le DMP et/ou la MSS", "detail": "SMR / outil d'intégration dans le DPI depuis le DMP et/ou la MSS",
"facturation": "Mensuelle", "facturation": "Mensuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "App SMR", "categorie": "App SMR",
"type": "SAAS", "type": "SAAS",
"compte": "613511", "compte": "613511",
@@ -151,7 +151,7 @@
"libelle": "SAAS NOVRH", "libelle": "SAAS NOVRH",
"detail": "SIRH : Maintenance et hébergement", "detail": "SIRH : Maintenance et hébergement",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "App global", "categorie": "App global",
"type": "SAAS", "type": "SAAS",
"compte": "613511", "compte": "613511",
@@ -164,7 +164,7 @@
"libelle": "SAAS NOVRH Assistance", "libelle": "SAAS NOVRH Assistance",
"detail": "SIRH : Assistance premium", "detail": "SIRH : Assistance premium",
"facturation": null, "facturation": null,
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "App global", "categorie": "App global",
"type": "Maintenance", "type": "Maintenance",
"compte": "615610", "compte": "615610",
@@ -177,7 +177,7 @@
"libelle": "Coffre fort numérique", "libelle": "Coffre fort numérique",
"detail": "SIRH : Coffe fort numérique", "detail": "SIRH : Coffe fort numérique",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "App global", "categorie": "App global",
"type": "SAAS", "type": "SAAS",
"compte": "613511", "compte": "613511",
@@ -190,7 +190,7 @@
"libelle": "SAAS DUI Pole HEP", "libelle": "SAAS DUI Pole HEP",
"detail": "Outil métier", "detail": "Outil métier",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "App HEP", "categorie": "App HEP",
"type": "SAAS", "type": "SAAS",
"compte": "613511", "compte": "613511",
@@ -203,7 +203,7 @@
"libelle": "SAAS DUI BON PASTEUR", "libelle": "SAAS DUI BON PASTEUR",
"detail": "Outil métier", "detail": "Outil métier",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "App HEP", "categorie": "App HEP",
"type": "SAAS", "type": "SAAS",
"compte": "613511", "compte": "613511",
@@ -229,7 +229,7 @@
"libelle": "Infrastructures Data Center + Liens Internet", "libelle": "Infrastructures Data Center + Liens Internet",
"detail": "DataCenter", "detail": "DataCenter",
"facturation": "Mensuelle", "facturation": "Mensuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "Infogérance", "categorie": "Infogérance",
"type": "Loc. Infra Data Center", "type": "Loc. Infra Data Center",
"compte": "613512", "compte": "613512",
@@ -242,7 +242,7 @@
"libelle": "Liens internet Siège Data Center", "libelle": "Liens internet Siège Data Center",
"detail": "DataCenter", "detail": "DataCenter",
"facturation": "Mensuelle", "facturation": "Mensuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "Infogérance", "categorie": "Infogérance",
"type": "Liens Internet", "type": "Liens Internet",
"compte": "626203", "compte": "626203",
@@ -255,7 +255,7 @@
"libelle": "Prestation TMA réglementaire", "libelle": "Prestation TMA réglementaire",
"detail": "Gestion du temps module TMA", "detail": "Gestion du temps module TMA",
"facturation": "Au fil de l'eau", "facturation": "Au fil de l'eau",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "App global", "categorie": "App global",
"type": "Prestation", "type": "Prestation",
"compte": "628400", "compte": "628400",
@@ -268,7 +268,7 @@
"libelle": "Maintenance applicatifs", "libelle": "Maintenance applicatifs",
"detail": "Compta-first, paye-fisrt, GAP-first...", "detail": "Compta-first, paye-fisrt, GAP-first...",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "App global", "categorie": "App global",
"type": "Maintenance", "type": "Maintenance",
"compte": "615610", "compte": "615610",
@@ -281,7 +281,7 @@
"libelle": "Maintenance FLEXICLOUD", "libelle": "Maintenance FLEXICLOUD",
"detail": "Connexions aux serveurs du DataCenter", "detail": "Connexions aux serveurs du DataCenter",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "Infogérance", "categorie": "Infogérance",
"type": "Maintenance", "type": "Maintenance",
"compte": "615610", "compte": "615610",
@@ -294,7 +294,7 @@
"libelle": "Abonnement Solution de télémaintenance", "libelle": "Abonnement Solution de télémaintenance",
"detail": "Prise de main distante pour équipe IT", "detail": "Prise de main distante pour équipe IT",
"facturation": "Annuelle Juin", "facturation": "Annuelle Juin",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "Infogérance", "categorie": "Infogérance",
"type": "Maintenance", "type": "Maintenance",
"compte": "615610", "compte": "615610",
@@ -307,7 +307,7 @@
"libelle": "Assistance technique Niveau 3", "libelle": "Assistance technique Niveau 3",
"detail": "Contrat de prestation 10 j + 20h assistnce premium", "detail": "Contrat de prestation 10 j + 20h assistnce premium",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "Infogérance", "categorie": "Infogérance",
"type": "Prestation", "type": "Prestation",
"compte": "628400", "compte": "628400",
@@ -333,7 +333,7 @@
"libelle": "Maintenance VEEAM", "libelle": "Maintenance VEEAM",
"detail": "DataCenter / Sauvegardes machines + Sauvegardes 0365", "detail": "DataCenter / Sauvegardes machines + Sauvegardes 0365",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "Infogérance", "categorie": "Infogérance",
"type": "Maintenance", "type": "Maintenance",
"compte": "615610", "compte": "615610",
@@ -346,7 +346,7 @@
"libelle": "Maintenance WATCHGUARD", "libelle": "Maintenance WATCHGUARD",
"detail": "Sécurité /Pare-feux", "detail": "Sécurité /Pare-feux",
"facturation": "Au fil de l'eau", "facturation": "Au fil de l'eau",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "Sécurité", "categorie": "Sécurité",
"type": "Maintenance", "type": "Maintenance",
"compte": "615610", "compte": "615610",
@@ -359,7 +359,7 @@
"libelle": "Maintenance EPDR WG", "libelle": "Maintenance EPDR WG",
"detail": "Sécurité / Anti-virus", "detail": "Sécurité / Anti-virus",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "Sécurité", "categorie": "Sécurité",
"type": "Maintenance", "type": "Maintenance",
"compte": "615610", "compte": "615610",
@@ -372,7 +372,7 @@
"libelle": "Maintenance DARKTRACE", "libelle": "Maintenance DARKTRACE",
"detail": "Sécurité / Inteligence artificielle surveillance réseau", "detail": "Sécurité / Inteligence artificielle surveillance réseau",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "Sécurité", "categorie": "Sécurité",
"type": "Maintenance", "type": "Maintenance",
"compte": "615610", "compte": "615610",
@@ -385,7 +385,7 @@
"libelle": "Maintenance DARKTRACE ANTIGENA", "libelle": "Maintenance DARKTRACE ANTIGENA",
"detail": "Sécurité / Inteligence artificielle surveillance réseau", "detail": "Sécurité / Inteligence artificielle surveillance réseau",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "Sécurité", "categorie": "Sécurité",
"type": "Maintenance", "type": "Maintenance",
"compte": "615610", "compte": "615610",
@@ -398,7 +398,7 @@
"libelle": "SAAS Protection mails DARKTRACE", "libelle": "SAAS Protection mails DARKTRACE",
"detail": "Sécurité / Inteligence artificielle surveillance réseau", "detail": "Sécurité / Inteligence artificielle surveillance réseau",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "Sécurité", "categorie": "Sécurité",
"type": "SAAS", "type": "SAAS",
"compte": "613511", "compte": "613511",
@@ -411,7 +411,7 @@
"libelle": "SIEM / SOC / NEOEDGE", "libelle": "SIEM / SOC / NEOEDGE",
"detail": "Sécurité / corrélation données logs. Annalyse tentatives d'intrusion", "detail": "Sécurité / corrélation données logs. Annalyse tentatives d'intrusion",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "Sécurité", "categorie": "Sécurité",
"type": "Prestation", "type": "Prestation",
"compte": "628400", "compte": "628400",
@@ -424,7 +424,7 @@
"libelle": "Budget Petit matériel et Autres dépenses", "libelle": "Budget Petit matériel et Autres dépenses",
"detail": "Divers matériels", "detail": "Divers matériels",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "Infogérance", "categorie": "Infogérance",
"type": "Petits matériels", "type": "Petits matériels",
"compte": "606241", "compte": "606241",
@@ -450,7 +450,7 @@
"libelle": "Maintenance GAMMEO", "libelle": "Maintenance GAMMEO",
"detail": "GMAO", "detail": "GMAO",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "App global", "categorie": "App global",
"type": "Maintenance", "type": "Maintenance",
"compte": "615610", "compte": "615610",

View File

@@ -8,7 +8,7 @@
"libelle": "SAAS AGEVAL Gestion de la qualité", "libelle": "SAAS AGEVAL Gestion de la qualité",
"detail": "Gestion qualité (procédures,FEI...)", "detail": "Gestion qualité (procédures,FEI...)",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "App global", "categorie": "App global",
"type": "SAAS", "type": "SAAS",
"compte": "613511", "compte": "613511",
@@ -21,7 +21,7 @@
"libelle": "SAAS OCTIME Gestion de temps", "libelle": "SAAS OCTIME Gestion de temps",
"detail": "GTA", "detail": "GTA",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "App global", "categorie": "App global",
"type": "SAAS", "type": "SAAS",
"compte": "613511", "compte": "613511",
@@ -60,7 +60,7 @@
"libelle": "SAAS ISI-APP Gestion de parc", "libelle": "SAAS ISI-APP Gestion de parc",
"detail": "Outil de pilotage SI du parc + Connexion AD + Module Santé", "detail": "Outil de pilotage SI du parc + Connexion AD + Module Santé",
"facturation": "Mensuelle", "facturation": "Mensuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "Infogérance", "categorie": "Infogérance",
"type": "SAAS", "type": "SAAS",
"compte": "613511", "compte": "613511",
@@ -73,7 +73,7 @@
"libelle": "SAAS DLD Gestion de la Conformité RGPD", "libelle": "SAAS DLD Gestion de la Conformité RGPD",
"detail": "RGPD", "detail": "RGPD",
"facturation": "Mensuelle", "facturation": "Mensuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "App global", "categorie": "App global",
"type": "SAAS", "type": "SAAS",
"compte": "613511", "compte": "613511",
@@ -86,7 +86,7 @@
"libelle": "SAAS Gestion signature électronique", "libelle": "SAAS Gestion signature électronique",
"detail": "DE électroniques", "detail": "DE électroniques",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "App global", "categorie": "App global",
"type": "SAAS", "type": "SAAS",
"compte": "613511", "compte": "613511",
@@ -112,7 +112,7 @@
"libelle": "Redevance SXS Gestion trésorerie SAGE", "libelle": "Redevance SXS Gestion trésorerie SAGE",
"detail": "Communications bancaires", "detail": "Communications bancaires",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "App global", "categorie": "App global",
"type": "SAAS", "type": "SAAS",
"compte": "613511", "compte": "613511",
@@ -138,7 +138,7 @@
"libelle": "SAAS LIFEN Plateforme E-Santé Réceptions", "libelle": "SAAS LIFEN Plateforme E-Santé Réceptions",
"detail": "SMR / outil d'intégration dans le DPI depuis le DMP et/ou la MSS", "detail": "SMR / outil d'intégration dans le DPI depuis le DMP et/ou la MSS",
"facturation": "Mensuelle", "facturation": "Mensuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "New", "categorie": "New",
"type": "SAAS", "type": "SAAS",
"compte": "613511", "compte": "613511",
@@ -151,7 +151,7 @@
"libelle": "NOVRH", "libelle": "NOVRH",
"detail": "SIRH (année pleine)", "detail": "SIRH (année pleine)",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "App global", "categorie": "App global",
"type": "SAAS", "type": "SAAS",
"compte": "613511", "compte": "613511",
@@ -164,7 +164,7 @@
"libelle": "SAAS Protection mails DARKTRACE", "libelle": "SAAS Protection mails DARKTRACE",
"detail": "Sécurité", "detail": "Sécurité",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "New", "categorie": "New",
"type": "SAAS", "type": "SAAS",
"compte": "613511", "compte": "613511",
@@ -177,7 +177,7 @@
"libelle": "SAAS DUI Pole HEP", "libelle": "SAAS DUI Pole HEP",
"detail": "Outil métier", "detail": "Outil métier",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "App HEP", "categorie": "App HEP",
"type": "SAAS", "type": "SAAS",
"compte": "613511", "compte": "613511",
@@ -203,7 +203,7 @@
"libelle": "Infrastructures Data Center + Liens Internet", "libelle": "Infrastructures Data Center + Liens Internet",
"detail": "DataCenter", "detail": "DataCenter",
"facturation": "Mensuelle", "facturation": "Mensuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "Infogérance", "categorie": "Infogérance",
"type": "Loc. Infra Data Center", "type": "Loc. Infra Data Center",
"compte": "613512", "compte": "613512",
@@ -216,7 +216,7 @@
"libelle": "Liens internet Siège Data Center", "libelle": "Liens internet Siège Data Center",
"detail": "DataCenter", "detail": "DataCenter",
"facturation": "Mensuelle", "facturation": "Mensuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "Infogérance", "categorie": "Infogérance",
"type": "Liens Internet", "type": "Liens Internet",
"compte": "626203", "compte": "626203",
@@ -229,7 +229,7 @@
"libelle": "Abonnements Liaisons internet siège et Data Center", "libelle": "Abonnements Liaisons internet siège et Data Center",
"detail": "DataCenter", "detail": "DataCenter",
"facturation": "Mensuelle", "facturation": "Mensuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "Infogérance", "categorie": "Infogérance",
"type": "Liens Internet", "type": "Liens Internet",
"compte": "626203", "compte": "626203",
@@ -242,7 +242,7 @@
"libelle": "Prestation TMA réglementaire", "libelle": "Prestation TMA réglementaire",
"detail": "Gestion du temps module TMA", "detail": "Gestion du temps module TMA",
"facturation": "Au fil de l'eau", "facturation": "Au fil de l'eau",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "App global", "categorie": "App global",
"type": "Prestation", "type": "Prestation",
"compte": "628400", "compte": "628400",
@@ -268,7 +268,7 @@
"libelle": "Maintenance applicatifs", "libelle": "Maintenance applicatifs",
"detail": "Compta-first, paye-fisrt, GAP-first...", "detail": "Compta-first, paye-fisrt, GAP-first...",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "App global", "categorie": "App global",
"type": "Maintenance", "type": "Maintenance",
"compte": "615610", "compte": "615610",
@@ -294,7 +294,7 @@
"libelle": "Maintenance OSIDOC (A RESILIER)", "libelle": "Maintenance OSIDOC (A RESILIER)",
"detail": "Gestion des contrats", "detail": "Gestion des contrats",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "App global", "categorie": "App global",
"type": "Maintenance", "type": "Maintenance",
"compte": "615610", "compte": "615610",
@@ -307,7 +307,7 @@
"libelle": "Maintenance FLEXICLOUD", "libelle": "Maintenance FLEXICLOUD",
"detail": "Connexions aux serveurs du DataCenter", "detail": "Connexions aux serveurs du DataCenter",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "Infogérance", "categorie": "Infogérance",
"type": "Maintenance", "type": "Maintenance",
"compte": "615610", "compte": "615610",
@@ -320,7 +320,7 @@
"libelle": "Abonnement Solution de télémaintenance", "libelle": "Abonnement Solution de télémaintenance",
"detail": "Prise de main distante pour équipe IT", "detail": "Prise de main distante pour équipe IT",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "Infogérance", "categorie": "Infogérance",
"type": "Maintenance", "type": "Maintenance",
"compte": "615610", "compte": "615610",
@@ -333,7 +333,7 @@
"libelle": "Maintenance WATCHGUARD", "libelle": "Maintenance WATCHGUARD",
"detail": "Sécurité /Pare-feux renouvellement des pare-feux tous les 5 ans", "detail": "Sécurité /Pare-feux renouvellement des pare-feux tous les 5 ans",
"facturation": "Au fil de l'eau", "facturation": "Au fil de l'eau",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "Sécurité", "categorie": "Sécurité",
"type": "Maintenance", "type": "Maintenance",
"compte": "615610", "compte": "615610",
@@ -346,7 +346,7 @@
"libelle": "Maintenance EPDR WG", "libelle": "Maintenance EPDR WG",
"detail": "Sécurité / Anti-virus", "detail": "Sécurité / Anti-virus",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "Sécurité", "categorie": "Sécurité",
"type": "Maintenance", "type": "Maintenance",
"compte": "615610", "compte": "615610",
@@ -359,7 +359,7 @@
"libelle": "Maintenance VEEAM", "libelle": "Maintenance VEEAM",
"detail": "DataCenter / Sauvegardes machines + Sauvegardes 0365", "detail": "DataCenter / Sauvegardes machines + Sauvegardes 0365",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "Infogérance", "categorie": "Infogérance",
"type": "Maintenance", "type": "Maintenance",
"compte": "615610", "compte": "615610",
@@ -372,7 +372,7 @@
"libelle": "Maintenance DARKTRACE", "libelle": "Maintenance DARKTRACE",
"detail": "Sécurité / Inteligence artificielle surveillance réseau", "detail": "Sécurité / Inteligence artificielle surveillance réseau",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "Sécurité", "categorie": "Sécurité",
"type": "Maintenance", "type": "Maintenance",
"compte": "615610", "compte": "615610",
@@ -385,7 +385,7 @@
"libelle": "Maintenance DARKTRACE ANTIGENA", "libelle": "Maintenance DARKTRACE ANTIGENA",
"detail": "Sécurité / Inteligence artificielle surveillance réseau", "detail": "Sécurité / Inteligence artificielle surveillance réseau",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "Sécurité", "categorie": "Sécurité",
"type": "Maintenance", "type": "Maintenance",
"compte": "615610", "compte": "615610",
@@ -398,7 +398,7 @@
"libelle": "Budget Petit matériel et Autres dépenses", "libelle": "Budget Petit matériel et Autres dépenses",
"detail": "Divers matériels", "detail": "Divers matériels",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "Infogérance", "categorie": "Infogérance",
"type": "Petits matériels", "type": "Petits matériels",
"compte": null, "compte": null,
@@ -424,7 +424,7 @@
"libelle": "Maintenance GAMMEO", "libelle": "Maintenance GAMMEO",
"detail": "GMAO", "detail": "GMAO",
"facturation": "Annuelle", "facturation": "Annuelle",
"mode_ventilation": "Prorata classe 6", "mode_ventilation": "Prorata C 6",
"categorie": "New", "categorie": "New",
"type": "Maintenance", "type": "Maintenance",
"compte": null, "compte": null,

View File

@@ -493,14 +493,14 @@ export default function DsiOpex() {
const CATEGORIES_FILTER = useMemo(() => ['Toutes', ...categoriesPresentes], [categoriesPresentes]); const CATEGORIES_FILTER = useMemo(() => ['Toutes', ...categoriesPresentes], [categoriesPresentes]);
// Basculer le mode de ventilation d'une ligne (Prorata classe 6 ↔ Manuel) // Basculer le mode de ventilation d'une ligne (Prorata C 6 ↔ Manuel)
const handleToggleVentilation = useCallback((id: string) => { const handleToggleVentilation = useCallback((id: string) => {
if (isValidated) return; if (isValidated) return;
setOpexState(prev => ({ setOpexState(prev => ({
...prev, ...prev,
lignes: prev.lignes.map(l => l.id === id ? { lignes: prev.lignes.map(l => l.id === id ? {
...l, ...l,
mode_ventilation: (l.mode_ventilation === 'Manuel') ? 'Prorata classe 6' : 'Manuel', mode_ventilation: (l.mode_ventilation === 'Manuel') ? 'Prorata C 6' : 'Manuel',
} : l), } : l),
})); }));
setIsDirty(true); setIsDirty(true);
@@ -1091,10 +1091,10 @@ export default function DsiOpex() {
<SortBtn col="libelle" label="Poste de charge" /> <SortBtn col="libelle" label="Poste de charge" />
</th> </th>
<th className="text-left px-4 py-3 font-medium text-muted-foreground hidden md:table-cell">Catégorie</th> <th className="text-left px-4 py-3 font-medium text-muted-foreground hidden md:table-cell">Catégorie</th>
<th className="text-left px-3 py-3 font-medium text-muted-foreground hidden lg:table-cell w-20 max-w-[80px]">Type</th>
<th className="text-left px-4 py-3 font-medium text-muted-foreground hidden xl:table-cell">Facturation</th> <th className="text-left px-4 py-3 font-medium text-muted-foreground hidden xl:table-cell">Facturation</th>
<th className="text-left px-4 py-3 font-medium text-muted-foreground hidden xl:table-cell">Ventilation</th>
{showDetails && <th className="text-left px-3 py-3 font-medium text-muted-foreground hidden lg:table-cell w-20 max-w-[80px]">Type</th>}
{showDetails && <th className="text-left px-4 py-3 font-medium text-muted-foreground hidden xl:table-cell">Compte</th>} {showDetails && <th className="text-left px-4 py-3 font-medium text-muted-foreground hidden xl:table-cell">Compte</th>}
{showDetails && <th className="text-left px-4 py-3 font-medium text-muted-foreground hidden xl:table-cell">Ventilation</th>}
<th className="text-right px-4 py-3 font-medium text-muted-foreground">Budget N-1</th> <th className="text-right px-4 py-3 font-medium text-muted-foreground">Budget N-1</th>
<th className="text-right px-4 py-3 font-medium text-muted-foreground" style={{ minWidth: '140px' }}> <th className="text-right px-4 py-3 font-medium text-muted-foreground" style={{ minWidth: '140px' }}>
<SortBtn col="montant" label={`Prév. ${annee}`} /> <SortBtn col="montant" label={`Prév. ${annee}`} />
@@ -1138,31 +1138,31 @@ export default function DsiOpex() {
{ligne.categorie} {ligne.categorie}
</span> </span>
</td> </td>
<td className="px-3 py-3 text-xs text-muted-foreground hidden lg:table-cell w-20 max-w-[80px] truncate" title={ligne.type || ''}>{ligne.type || ''}</td>
<td className="px-4 py-3 text-sm text-muted-foreground hidden xl:table-cell">{ligne.facturation || ''}</td> <td className="px-4 py-3 text-sm text-muted-foreground hidden xl:table-cell">{ligne.facturation || ''}</td>
{/* Ventilation — toujours visible (affichage normal) */}
<td className="px-4 py-3 text-xs hidden xl:table-cell">
{isValidated ? (
<span className={`inline-flex px-2 py-0.5 rounded-full text-xs font-medium ${
ligne.mode_ventilation === 'Manuel' ? 'bg-blue-100 text-blue-700' : 'bg-emerald-100 text-emerald-700'
}`}>{ligne.mode_ventilation === 'Manuel' ? 'Manuel' : 'Prorata C 6'}</span>
) : (
<button
onClick={() => handleToggleVentilation(ligne.id)}
title="Cliquer pour basculer Prorata C 6 ↔ Manuel"
className={`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium border transition-colors hover:opacity-80 cursor-pointer ${
ligne.mode_ventilation === 'Manuel'
? 'bg-blue-100 text-blue-700 border-blue-300 hover:bg-blue-200'
: 'bg-emerald-100 text-emerald-700 border-emerald-300 hover:bg-emerald-200'
}`}
>
{ligne.mode_ventilation === 'Manuel' ? '🔒' : '🔓'}
{ligne.mode_ventilation === 'Manuel' ? 'Manuel' : 'Prorata C 6'}
</button>
)}
</td>
{/* Type — visible uniquement en mode détails */}
{showDetails && <td className="px-3 py-3 text-xs text-muted-foreground hidden lg:table-cell w-20 max-w-[80px] truncate" title={ligne.type || ''}>{ligne.type || ''}</td>}
{showDetails && <td className="px-4 py-3 text-xs font-mono text-muted-foreground hidden xl:table-cell">{ligne.compte || ''}</td>} {showDetails && <td className="px-4 py-3 text-xs font-mono text-muted-foreground hidden xl:table-cell">{ligne.compte || ''}</td>}
{showDetails && (
<td className="px-4 py-3 text-xs hidden xl:table-cell">
{isValidated ? (
<span className={`inline-flex px-2 py-0.5 rounded-full text-xs font-medium ${
ligne.mode_ventilation === 'Manuel' ? 'bg-blue-100 text-blue-700' : 'bg-emerald-100 text-emerald-700'
}`}>{ligne.mode_ventilation || 'Prorata classe 6'}</span>
) : (
<button
onClick={() => handleToggleVentilation(ligne.id)}
title="Cliquer pour basculer Prorata ↔ Manuel"
className={`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium border transition-colors hover:opacity-80 cursor-pointer ${
ligne.mode_ventilation === 'Manuel'
? 'bg-blue-100 text-blue-700 border-blue-300 hover:bg-blue-200'
: 'bg-emerald-100 text-emerald-700 border-emerald-300 hover:bg-emerald-200'
}`}
>
{ligne.mode_ventilation === 'Manuel' ? '🔒' : '🔓'}
{ligne.mode_ventilation || 'Prorata classe 6'}
</button>
)}
</td>
)}
<td className="px-4 py-3 text-right text-sm text-muted-foreground tabular-nums"> <td className="px-4 py-3 text-right text-sm text-muted-foreground tabular-nums">
{formatNum(ligne.budget_n1)} {formatNum(ligne.budget_n1)}
</td> </td>
@@ -1327,7 +1327,7 @@ export default function DsiOpex() {
? 'text-blue-700 bg-blue-50/60 border-b-2 border-blue-400' ? 'text-blue-700 bg-blue-50/60 border-b-2 border-blue-400'
: 'text-emerald-700 bg-emerald-50/60 border-b-2 border-emerald-400' : 'text-emerald-700 bg-emerald-50/60 border-b-2 border-emerald-400'
}`} }`}
title={`${ligne.libelle} — ${isManuel ? 'Saisie manuelle' : 'Prorata classe 6'} — ${formatEuros(ligne.montant)}`} title={`${ligne.libelle} — ${isManuel ? 'Saisie manuelle' : 'Prorata C 6'} — ${formatEuros(ligne.montant)}`}
> >
<span className="block truncate max-w-[100px]" style={{ writingMode: 'horizontal-tb' }}> <span className="block truncate max-w-[100px]" style={{ writingMode: 'horizontal-tb' }}>
{ligne.libelle.length > 18 ? ligne.libelle.slice(0, 16) + '' : ligne.libelle} {ligne.libelle.length > 18 ? ligne.libelle.slice(0, 16) + '' : ligne.libelle}