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.
59 lines
3.7 KiB
Markdown
59 lines
3.7 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é
|