Files
itinova-budget-si/todo.md

129 lines
8.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Budget SI Itinova — TODO
## Migration vers base de données (tRPC + auth locale)
- [x] Schéma Drizzle complet (users, etablissements, inventaire, opex, capex, parametres_app)
- [x] Migration base de données (pnpm db:push — 10 tables créées)
- [x] Seed compte admin par défaut (admin / Itinova2027!)
- [x] Authentification locale JWT (bcrypt + cookie httpOnly)
- [x] Routes tRPC : auth.login, auth.me, auth.logout
- [x] Routes tRPC : users.list, users.create, users.update, users.delete, users.importBulk
- [x] Routes tRPC : etablissements.list, etablissements.upsert, etablissements.delete
- [x] Routes tRPC : parametres.get, parametres.set, parametres.setBulk
- [x] Routes tRPC : opex.getPostes, opex.upsertPoste, opex.getMontantsEtab, opex.setMontantEtab, opex.getValidated, opex.validate, opex.initFromSource, opex.cloneFromN1
- [x] Routes tRPC : inventaire.get, inventaire.import, inventaire.getStats, inventaire.listMeta
- [x] Routes tRPC : capex.get, capex.save
- [x] Page de connexion avec branding Itinova/Santinova
- [x] Protection des routes (ProtectedRoute dans App.tsx — useEffect)
- [x] Hook useAuth branché sur tRPC (auth.me)
- [x] Bouton déconnexion dans la sidebar
- [x] Page Paramètres — onglet Établissements branché sur tRPC
- [x] Page Paramètres — onglet Utilisateurs branché sur tRPC
- [x] ImportModal — import inventaire sauvegardé en BDD via tRPC (sans double-écriture localStorage)
- [x] ImportModal — import établissements sauvegardé en BDD via tRPC
- [x] ImportModal — import utilisateurs sauvegardé en BDD via tRPC
- [x] ImportModal — indicateur "État des inventaires par année" branché sur tRPC (inventaire.listMeta)
- [x] Tests Vitest (14 tests passent) : auth.logout, auth.me, auth.login, etablissements.list, users.list, parametres.get
## Migration des pages d'affichage vers BDD
- [x] useBudgetData — lit depuis tRPC (inventaire.getStats)
- [x] ParametresContext — lit/écrit depuis tRPC (parametres.get, parametres.setBulk)
- [x] Page Renouvellement PC (Home.tsx) — données inventaire depuis tRPC via useBudgetData
- [x] Page Budget 2027 — données CAPEX depuis tRPC (capex.get, capex.save) + inventaire depuis tRPC
- [x] Page DSI CAPEX — synthèse CAPEX depuis tRPC
- [x] Page DSI OPEX — données OPEX depuis tRPC (opex.*)
- [x] Pages Santinova, Soins Santé, St-Exupéry — pages "Coming Soon" (pas de données)
## Améliorations futures
- [x] Gestion des droits par établissement (userEtablissements) — évolution future, explicitement hors périmètre de cet audit
- [x] Export PDF/Excel des budgets — évolution future, explicitement hors périmètre de cet audit
- [x] Historique des modifications (audit log) — évolution future, explicitement hors périmètre de cet audit
## Onglet Clés de répartition dans DSI OPEX
- [x] Analyser le fichier source pour extraire les colonnes base_repartition et base_repartition_hep
- [x] Ajouter colonne base_repartition_hep dans la table opex_bases_repartition + migration
- [x] Routes tRPC : opex.getBasesRepartition (mise à jour), opex.setBaseRepartition (mise à jour avec hep), opex.importBasesRepartition
- [x] Seeder les données base_repartition_hep 2026 depuis le fichier source
- [x] Créer l'onglet "Clés de répartition" dans DsiOpex avec tableau éditable (base standard + /HEP)
- [x] Import fichier Excel/CSV dans l'onglet Clés de répartition
- [x] Afficher l'info "Année de la base = année OPEX - 2" dans l'onglet
- [x] Brancher le calcul du poste "DUI pôle HEP" sur base_repartition_hep
## Corrections de lacunes (post-checkpoint 841ff1bd)
- [x] Ajouter un vrai loading/error state pour l'onglet « Clés de répartition » basé sur la requête `opex.getBasesRepartition`
- [x] 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)
- [x] Bug : doublon de ligne dans le tableau Clés de répartition au clic (mutation setBaseRepartition provoque un double rendu)
- [x] 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)
- [x] 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)
- [x] Mode tout manuel : cellules des postes automatiques rendues éditables pour les établissements en mode manuel
- [x] Pré-remplissage des montants précalculés lors du passage en mode tout manuel (batchSetMontantsEtab)
- [x] Tri par code établissement dans la vue Établissements OPEX (colonne Code cliquable, tri par défaut)
## Évolutions menu et navigation (12/06/2026)
- [x] Menu latéral : afficher le nom de l'utilisateur connecté en dernier (tout en bas)
- [x] Menu latéral : ajouter un espace libre entre "Paramètres" et le nom de connexion
- [x] Menu latéral : ajouter "Tableau de bord Finance" sous "OPEX (charges)"
- [x] Créer la page Tableau de bord Finance avec accès au dossier Windows OneDrive
## Audit de robustesse et maintenabilité
- [x] Cartographier le code, les dépendances et les fichiers non utilisés
- [x] Corriger les tendances par catégorie OPEX pour comparer l'année affichée à sa vraie année N-1
- [x] Diagnostiquer le rendu dupliqué : une seule racine React active, les répétitions proviennent de la superposition de captures navigateur
- [x] Valider côté serveur les codes importés dans les bases OPEX et masquer les lignes non établissement existantes
- [x] Rendre effective la suppression d'un poste OPEX au lieu d'afficher une action indisponible
- [x] Nettoyer les fichiers techniques inutiles et le code mort identifié
- [x] Renforcer les contrôles d'entrée, les états d'erreur et les points fragiles prioritaires
- [x] Documenter les responsabilités et invariants des modules métier maintenus
- [x] Ajouter ou compléter les tests ciblant les régressions critiques
- [x] Vérifier TypeScript, tests, build et état de l'application avant checkpoint
## Correction du build de déploiement
- [x] Identifier la divergence de version pnpm entre le Dockerfile et le lockfile
- [x] Utiliser Corepack et la version pnpm verrouillée par le projet dans le Dockerfile
- [x] Vérifier TypeScript, les tests et le build avec Corepack et le lockfile figé
- [x] Sauvegarder un checkpoint contenant le Dockerfile corrigé
- [x] Relancer le déploiement depuis ce checkpoint afin de confirmer le build cloud
## Déploiement de recette via Gitea
- [x] Vérifier la version à pousser et la cible Gitea de recette
- [x] Pousser la version validée et déclencher le déploiement de recette
- [x] Vérifier l'application déployée sur l'URL de recette
- [x] Diagnostiquer et corriger le rejet de signature du webhook CI/CD
- [x] Constater l'échec du commit 3b52527 puis confirmer le redéploiement du correctif ec597da
- [x] Diagnostiquer et corriger le routage du webhook vers le déploiement Budget SI
- [x] Déclencher et valider le workflow CI requis avant le redéploiement
## Module Masse salariale Santinova
- [x] Analyser les bulletins 2025 et 2026 fournis et relever les champs fiables
- [x] Consolider les bulletins complémentaires de janvier à avril 2026 avec ceux de mai à août
- [x] Résoudre les bulletins multiples d'un même matricule sur une période par une règle métier documentée
- [x] Produire un jeu consolidé 2026 sans doublon par salarié et par année
- [x] Créer le schéma BDD sécurisé pour les salariés et leurs rémunérations annuelles
- [x] Restreindre le module Masse salariale aux administrateurs
- [x] Créer les procédures tRPC de consultation, import et modification de l'évolution salariale
- [x] Ajouter l'entrée de menu et la page Masse salariale avec tableau 20252027
- [x] Importer les données contrôlées depuis les bulletins de salaire
- [x] Tester le rendu réel des états d'interface : chargement, erreur, vide et affichage prêt
- [x] Ajouter des tests d'agrégation : totaux annuels, statut annuel/provisoire et absence de valeur fictive 2027
- [x] 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
- [x] Vérifier le projet Budget SI : aucun flux ou chemin d'export de factures BAP ou d'abonnement n'y est configuré
- [x] Annulé : demande posée dans une autre application
## Reprise du module Masse salariale
- [x] Finaliser les validations et la documentation du module Masse salariale