92 lines
6.1 KiB
Markdown
92 lines
6.1 KiB
Markdown
# 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
|
|
|
|
- [ ] Gestion des droits par établissement (userEtablissements)
|
|
- [ ] Export PDF/Excel des budgets
|
|
- [ ] Historique des modifications (audit log)
|
|
|
|
## 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
|