🚀 En ligne : https://kbio-pilot.vercel.app — déploiement automatique à chaque push sur
main.
Plateforme interne de pilotage pour K'BIO (ingénierie & maintenance biomédicale, projets hospitaliers, appels d'offres, installations d'équipements médicaux, missions terrain, audits, chantiers, formations, gestion documentaire).
Remplace un outil de gestion de projet externe par un module interne simple, connecté et évolutif : les tâches sont reliées aux projets, phases, clients, équipements, interventions et documents.
Stack : React + Vite + TypeScript + Tailwind CSS v4 + Supabase (Postgres / Auth / Storage), React Router, Zustand, date-fns, lucide-react. Aucune intégration Asana / Notion.
- 🚪 Portail launcher (
/) : après connexion, page d'accueil type « écran d'applications » (sans sidebar) affichant uniquement les applications autorisées selon les permissions. Cartes : GMAO, Gestionnaire de tâches, Tableaux de bord, Dolibarr, Email/Drive KBIO, Administration, Espace client. Apps externes ouvertes via URL configurable (OAuth-ready). - 🔐 Authentification Supabase + RBAC par permissions (
src/lib/rbac.ts,access:*) au-dessus de 7 rôles :admin(Super Admin),direction,chef_projet(Responsable biomédical),technicien(Technicien biomédical),consultant(Administratif/Finance),client,invite. Permissions custom par utilisateur (profiles.extra_permissions). Routes gardées par permission (RequirePermission→AccessDenied), apps non autorisées invisibles et inaccessibles par URL. - 📊 Dashboard : KPI (projets actifs, tâches en retard / critiques, interventions ouvertes, alertes), projets par statut, prochaines échéances, avancement, activité récente.
- 🏥 Clients & contacts : fiches, projets liés.
- 📁 Projets : filtres (statut / pays / client / priorité), avancement %, détail complet (phases, tâches, documents, interventions).
- 🧩 Templates de projet : 6 modèles (Appel d'offres, Installation, Maintenance, Audit, Chantier, Formation). À la création, génération automatique des phases + tâches.
- ✅ Tâches connectées : vues Toutes / Mes tâches / En retard / Critiques, statuts, priorités, commentaires.
- 🩺 GMAO biomédicale : inventaire équipements (famille biomédicale, marque/modèle/n° série, criticité), fiche équipement, plan de maintenance préventive (périodicité → prochaine échéance, recalage auto), maintenance corrective, historique par équipement, pièces détachées, rapports d'intervention PDF, dashboard GMAO. Pages :
/gmao,/equipment,/equipment/:id,/interventions,/interventions/:id,/maintenance-plan. - 🔧 Interventions & 🖥️ Équipements biomédicaux.
- 📄 Documents (Supabase Storage).
- 💶 Finance (
/finance, rôles admin/direction/finance) : tables K'BIOquotes/invoices/payments, alimentées par la synchro Dolibarr (upsert surdolibarr_id). Données sensibles — RLS exclut technicien & client. - 🌐 Portail GMAO client standalone (
/portal) : espace séparé pour un utilisateur rôle Client rattaché à un client (profiles.client_id). Il consulte uniquement son parc, ses maintenances et interventions (borné par RLS) et peut soumettre une demande d'intervention. Rattachement géré par un admin dans Paramètres. - 🔔 Alertes + ⚡ Moteur d'automatisations interne (8 règles) avec exécution manuelle et journaux.
- 📤 Exports Excel (.xlsx) & PDF sur les listes (projets, tâches, clients, équipements, interventions) + rapports PDF (rapport de projet, rapport d'intervention). Libs chargées en dynamic import (hors bundle initial).
- ⚙️ Paramètres : profil & équipe.
- Tâche en retard → alerte « Tâche en retard ».
- Tâche critique sans responsable → alerte « Responsable manquant ».
- Projet sans activité depuis 7 jours → alerte « Projet sans activité ».
- Projet créé depuis un template → génération phases + tâches.
- Intervention terminée → proposition de rapport.
- Tâche passée à « Terminé » → entrée dans le journal d'activité.
- Toutes les tâches d'une phase terminées → phase « Terminée ».
- Toutes les phases terminées → proposition de clôturer le projet.
Les règles s'exécutent depuis Automatisations → « Exécuter les vérifications » (déclenchement manuel côté client pour le MVP ; déplaçable vers une Edge Function / cron ultérieurement).
git clone <repo> kbio-pilot
cd kbio-pilot
npm install-
Créez un projet sur supabase.com.
-
Appliquez les migrations (dossier
supabase/migrations/), dans l'ordre :0001_schema.sql— tables, contraintes, triggers, index0002_rls.sql— Row Level Security + fonctions de rôle0003_storage.sql— bucketdocuments(initial)0004_seed.sql— données de démonstration0006_gmao.sql— GMAO enrichie (familles, pièces, automatisations)0007_portal.sql— portail client (profiles.client_id)0008_roles.sql— rôleinvite,extra_permissions0009_dolibarr.sql— mapping Dolibarr + journaux sync0010_finance.sql— devis, factures, paiements0011_connections.sql— onboarding, connexions utilisateur0012_security_fixes.sql— obligatoire : anti-escalade profils, bucket privé, URLs signées0013_gmail_agents.sql— agents Gmail (import, extractions, mémos projet)
Via le SQL Editor du dashboard (copier/coller chaque fichier) ou avec la CLI :
supabase link --project-ref <ref> supabase db push
-
Sécurité Auth : désactivez l'inscription publique (Authentication → Providers → Email → Disable sign ups). Les utilisateurs sont créés par un admin. Un
profilesest créé automatiquement (rôletechnicien). Pour un accès complet :update public.profiles set role = 'admin' where email = 'vous@kbio.com';
Copiez .env.example vers .env :
VITE_SUPABASE_URL=https://xxxx.supabase.co
VITE_SUPABASE_ANON_KEY=eyJhbGci...npm run dev # http://localhost:5173
npm run build # build de production
npm run typecheck # vérification TypeScript
npm run lint # ESLint
npm run test # Vitest (RBAC, permissions, helpers)CI GitHub Actions : typecheck + lint + test + build sur chaque PR/push main.
src/
app/ RootBoot, ProtectedRoute, RequirePermission
components/ ui/, forms/, launcher/, DocumentLink, ErrorBoundary
config/ apps.ts (registre portail launcher)
data/ projectTemplates.ts
features/ auth, dashboard, clients, projects, tasks, documents,
equipment, interventions, gmao, portal, finance,
integrations, automations, alerts, settings, onboarding
hooks/ useAuth, useAsync, useEntities
integrations/ dolibarr/ (types + adapter)
layouts/ shells par application (pilotage, GMAO, portail…)
lib/ supabase, rbac, permissions, exporters
services/ couche d'accès Supabase (13 modules)
stores/ authStore (Zustand)
types/ enums.ts, entities.ts
routes/ createBrowserRouter
supabase/
migrations/ 0001 → 0012 (voir liste ci-dessus)
functions/ dolibarr/ (Edge Function)
config.toml dev local (signup désactivé)
- Services = seule couche qui parle à Supabase. Les composants passent par les
services/hooks, jamais directement parsupabase. Cela isole la base et prépare les adapters futurs. - Permissions : RLS = source de vérité (sécurité).
lib/permissions.tsne fait que masquer/afficher l'UI. - Types stricts (
strict: true), unions pour les statuts + dictionnaires de libellés FR.
| Module | Rôle |
|---|---|
GMAO KBIO (carte externe → VITE_GMAO_URL) |
Application GMAO complète (Next.js/Prisma) — inventaire hospitalier, PMS/PMC, multi-sites |
Module GMAO interne (/gmao, /equipment, /interventions) |
Pilotage léger intégré aux projets K'BIO — KPI, plan préventif, interventions liées aux chantiers |
Le portail client (/portal) consulte le parc via RLS, indépendamment de l'app GMAO externe.
Page Administration → Agent Gmail (/integrations/email) :
- Connecter Gmail (OAuth Google, lecture seule)
- Synchroniser & analyser — l'agent détecte tâches, mémos, nouveaux projets et AO
- Valider chaque proposition (Appliquer / Ignorer)
L'agent assigne automatiquement les tâches selon le sujet (finance → consultant, GMAO → technicien, AO → chef de projet).
Déploiement Edge Function :
supabase secrets set GOOGLE_CLIENT_ID=... GOOGLE_CLIENT_SECRET=...
supabase secrets set GMAIL_REDIRECT_URI=https://REF.supabase.co/functions/v1/gmail-agent
supabase functions deploy gmail-agent- Migration
0012: trigger anti-escalade surprofiles, bucketdocumentsprivé, URLs signées (1 h). - Inscription publique désactivée (
supabase/config.toml+ dashboard prod). - Dolibarr : clés API uniquement en secrets Edge Function ; rôles
admin,direction,consultant.
- Édition des clients / équipements / interventions (formulaires dédiés) et upload de documents depuis l'UI.
- Exécution des automatisations via Edge Function + cron (au lieu du déclenchement manuel).
- Finaliser l'intégration Dolibarr : déployer l'Edge Function
dolibarr+ secrets (supabase functions deploy dolibarrpuissupabase secrets set DOLIBARR_URL=… DOLIBARR_API_KEY=…). Architecture déjà en place (page/integrations/dolibarr, service, adapter, types, mapping + journal en DB) — la clé reste côté serveur uniquement. - Intégration Google Drive (documents) — adapter prévu, non implémenté.
- Notifications temps réel (Supabase Realtime) sur alertes et tâches.
Contraintes respectées : pas d'Asana, pas de Notion, pas d'API externe inventée. Dolibarr & Google Drive sont prévus via la couche
servicesmais non implémentés dans cette version.