Files
itinova-budget-si/todo.md
Manus 0a00e70a9f
All checks were successful
Validation applicative / TypeScript, tests et build (push) Successful in 1m35s
fix: rendre les wordmarks de connexion indépendants du stockage
2026-08-27 16:02:12 +00:00

9.5 KiB
Raw Blame History

Budget SI Itinova — TODO

Migration vers base de données (tRPC + auth locale)

  • Schéma Drizzle complet (users, etablissements, inventaire, opex, capex, parametres_app)
  • Migration base de données (pnpm db:push — 10 tables créées)
  • Seed compte admin par défaut (admin / Itinova2027!)
  • Authentification locale JWT (bcrypt + cookie httpOnly)
  • Routes tRPC : auth.login, auth.me, auth.logout
  • Routes tRPC : users.list, users.create, users.update, users.delete, users.importBulk
  • Routes tRPC : etablissements.list, etablissements.upsert, etablissements.delete
  • Routes tRPC : parametres.get, parametres.set, parametres.setBulk
  • Routes tRPC : opex.getPostes, opex.upsertPoste, opex.getMontantsEtab, opex.setMontantEtab, opex.getValidated, opex.validate, opex.initFromSource, opex.cloneFromN1
  • Routes tRPC : inventaire.get, inventaire.import, inventaire.getStats, inventaire.listMeta
  • Routes tRPC : capex.get, capex.save
  • Page de connexion avec branding Itinova/Santinova
  • Protection des routes (ProtectedRoute dans App.tsx — useEffect)
  • Hook useAuth branché sur tRPC (auth.me)
  • Bouton déconnexion dans la sidebar
  • Page Paramètres — onglet Établissements branché sur tRPC
  • Page Paramètres — onglet Utilisateurs branché sur tRPC
  • ImportModal — import inventaire sauvegardé en BDD via tRPC (sans double-écriture localStorage)
  • ImportModal — import établissements sauvegardé en BDD via tRPC
  • ImportModal — import utilisateurs sauvegardé en BDD via tRPC
  • ImportModal — indicateur "État des inventaires par année" branché sur tRPC (inventaire.listMeta)
  • Tests Vitest (14 tests passent) : auth.logout, auth.me, auth.login, etablissements.list, users.list, parametres.get

Migration des pages d'affichage vers BDD

  • useBudgetData — lit depuis tRPC (inventaire.getStats)
  • ParametresContext — lit/écrit depuis tRPC (parametres.get, parametres.setBulk)
  • Page Renouvellement PC (Home.tsx) — données inventaire depuis tRPC via useBudgetData
  • Page Budget 2027 — données CAPEX depuis tRPC (capex.get, capex.save) + inventaire depuis tRPC
  • Page DSI CAPEX — synthèse CAPEX depuis tRPC
  • Page DSI OPEX — données OPEX depuis tRPC (opex.*)
  • Pages Santinova, Soins Santé, St-Exupéry — pages "Coming Soon" (pas de données)

Améliorations futures

  • Gestion des droits par établissement (userEtablissements) — évolution future, explicitement hors périmètre de cet audit
  • Export PDF/Excel des budgets — évolution future, explicitement hors périmètre de cet audit
  • Historique des modifications (audit log) — évolution future, explicitement hors périmètre de cet audit

Onglet Clés de répartition dans DSI OPEX

  • Analyser le fichier source pour extraire les colonnes base_repartition et base_repartition_hep
  • Ajouter colonne base_repartition_hep dans la table opex_bases_repartition + migration
  • Routes tRPC : opex.getBasesRepartition (mise à jour), opex.setBaseRepartition (mise à jour avec hep), opex.importBasesRepartition
  • Seeder les données base_repartition_hep 2026 depuis le fichier source
  • Créer l'onglet "Clés de répartition" dans DsiOpex avec tableau éditable (base standard + /HEP)
  • Import fichier Excel/CSV dans l'onglet Clés de répartition
  • Afficher l'info "Année de la base = année OPEX - 2" dans l'onglet
  • Brancher le calcul du poste "DUI pôle HEP" sur base_repartition_hep

Corrections de lacunes (post-checkpoint 841ff1bd)

  • Ajouter un vrai loading/error state pour l'onglet « Clés de répartition » basé sur la requête opex.getBasesRepartition
  • Rendre l'import des clés de répartition compatible avec le classeur source réel : détection intelligente de la bonne feuille (mots-clés OPEX/DSI/répartition/base), normalisation des accents, validation des colonnes attendues avec message d'erreur détaillé

Bugs et nouvelles fonctionnalités (post-checkpoint cfeb5196)

  • Bug : doublon de ligne dans le tableau Clés de répartition au clic (mutation setBaseRepartition provoque un double rendu)
  • Fonctionnalité : mode "tout manuel" par établissement dans l'onglet Clés de répartition (toutes les colonnes OPEX de cet établissement saisies manuellement, ignorant le calcul prorata)

Corrections (post-checkpoint eb1684f0)

  • Bug : lignes parasites (catégories Infogérance, Sécurité, TOTAL, etc.) dans la vue Établissements OPEX — suppression en BDD + filtre anti-parasites dans l'import

Améliorations (post-checkpoint 60fd2b89)

  • Mode tout manuel : cellules des postes automatiques rendues éditables pour les établissements en mode manuel
  • Pré-remplissage des montants précalculés lors du passage en mode tout manuel (batchSetMontantsEtab)
  • Tri par code établissement dans la vue Établissements OPEX (colonne Code cliquable, tri par défaut)

Évolutions menu et navigation (12/06/2026)

  • Menu latéral : afficher le nom de l'utilisateur connecté en dernier (tout en bas)
  • Menu latéral : ajouter un espace libre entre "Paramètres" et le nom de connexion
  • Menu latéral : ajouter "Tableau de bord Finance" sous "OPEX (charges)"
  • Créer la page Tableau de bord Finance avec accès au dossier Windows OneDrive

Audit de robustesse et maintenabilité

  • Cartographier le code, les dépendances et les fichiers non utilisés
  • Corriger les tendances par catégorie OPEX pour comparer l'année affichée à sa vraie année N-1
  • Diagnostiquer le rendu dupliqué : une seule racine React active, les répétitions proviennent de la superposition de captures navigateur
  • Valider côté serveur les codes importés dans les bases OPEX et masquer les lignes non établissement existantes
  • Rendre effective la suppression d'un poste OPEX au lieu d'afficher une action indisponible
  • Nettoyer les fichiers techniques inutiles et le code mort identifié
  • Renforcer les contrôles d'entrée, les états d'erreur et les points fragiles prioritaires
  • Documenter les responsabilités et invariants des modules métier maintenus
  • Ajouter ou compléter les tests ciblant les régressions critiques
  • Vérifier TypeScript, tests, build et état de l'application avant checkpoint

Correction du build de déploiement

  • Identifier la divergence de version pnpm entre le Dockerfile et le lockfile
  • Utiliser Corepack et la version pnpm verrouillée par le projet dans le Dockerfile
  • Vérifier TypeScript, les tests et le build avec Corepack et le lockfile figé
  • Sauvegarder un checkpoint contenant le Dockerfile corrigé
  • Relancer le déploiement depuis ce checkpoint afin de confirmer le build cloud

Déploiement de recette via Gitea

  • Vérifier la version à pousser et la cible Gitea de recette
  • Pousser la version validée et déclencher le déploiement de recette
  • Vérifier l'application déployée sur l'URL de recette
  • Diagnostiquer et corriger le rejet de signature du webhook CI/CD
  • Constater l'échec du commit 3b52527 puis confirmer le redéploiement du correctif ec597da
  • Diagnostiquer et corriger le routage du webhook vers le déploiement Budget SI
  • Déclencher et valider le workflow CI requis avant le redéploiement

Module Masse salariale Santinova

  • Analyser les bulletins 2025 et 2026 fournis et relever les champs fiables
  • Consolider les bulletins complémentaires de janvier à avril 2026 avec ceux de mai à août
  • Résoudre les bulletins multiples d'un même matricule sur une période par une règle métier documentée
  • Produire un jeu consolidé 2026 sans doublon par salarié et par année
  • Créer le schéma BDD sécurisé pour les salariés et leurs rémunérations annuelles
  • Restreindre le module Masse salariale aux administrateurs
  • Créer les procédures tRPC de consultation, import et modification de l'évolution salariale
  • Ajouter l'entrée de menu et la page Masse salariale avec tableau 20252027
  • Importer les données contrôlées depuis les bulletins de salaire
  • Tester le rendu réel des états d'interface : chargement, erreur, vide et affichage prêt
  • Ajouter des tests d'agrégation : totaux annuels, statut annuel/provisoire et absence de valeur fictive 2027
  • Documenter que l'import de bulletins est un import initial contrôlé hors interface, et prévoir son extension future

Vérification des exportations de factures

  • Vérifier le projet Budget SI : aucun flux ou chemin d'export de factures BAP ou d'abonnement n'y est configuré
  • Annulé : demande posée dans une autre application

Reprise du module Masse salariale

  • Finaliser les validations et la documentation du module Masse salariale

Déploiement de recette — Masse salariale

  • Vérifier le commit local et la branche Gitea de recette
  • Pousser la version Masse salariale vers Gitea et déclencher la CI/CD
  • Vérifier le déploiement et l'accès HTTPS de recette
  • Rétablir l'authentification SSH administrateur vers le serveur de recette
  • Vérifier la réception du webhook et la validation CI du commit fe2a266
  • Confirmer le commit réellement déployé après le redéploiement Blue-Green
  • Identifier les logos de stockage indisponibles sur la recette

Correctif de fiabilité des logos de recette

  • Remplacer les logos de stockage indisponibles par des wordmarks sans dépendance externe
  • Publier le correctif de wordmarks sur Gitea recette
  • Vérifier visuellement la page de connexion de recette après publication