# MANUS_HANDOFF — QueueMed v1.0.0 > Fichier de passation pour la continuité du développement. > Dernière mise à jour : 2026-02-27 — William MERI --- ## État actuel du projet **Version** : 1.0.0 **Statut** : Production-ready (fonctionnalités core complètes, Stripe à activer) **Tests** : 8/8 passent, 0 erreurs TypeScript **Checkpoint Manus** : `a63c623c` --- ## Ce qui est implémenté ### Backend (server/) - `routers.ts` — 20+ procédures tRPC : auth, clinics, queue, analytics - `db.ts` — Helpers Drizzle pour toutes les tables - `_core/index.ts` — Serveur Express + Socket.io intégré - Middleware `subscriptionProcedure` — Bloque les procédures si abonnement expiré - Rotation automatique du QR code (configurable par cabinet) - Procédure `analytics.exportCsv` — Export CSV des événements ### Frontend (client/src/) - `pages/Home.tsx` — Landing page cinématique (hero, features, how-it-works, témoignages, pricing, CTA) - `pages/Dashboard.tsx` — Tableau de bord médecin (KPIs, liste cabinets, actions rapides) - `pages/DoctorClinics.tsx` — Gestion des cabinets (CRUD, QR code, paramètres) - `pages/QueueManagement.tsx` — Gestion file temps réel (appel suivant, absent, retirer, imprimer ticket) - `pages/Analytics.tsx` — Graphiques affluence, export CSV, recommandations IA - `pages/PatientQueue.tsx` — Interface patient (position live, temps estimé, alertes) - `pages/DisplayScreen.tsx` — Écran d'affichage tablette (numéro animé, ticker, connexion status) - `pages/SubscriptionPage.tsx` — Page abonnement (plans, essai gratuit, blocage) - `pages/SubscriptionBlocked.tsx` — Page de blocage après expiration - `pages/PrintTicket.tsx` — Ticket imprimable pour patients sans smartphone ### Base de données (drizzle/schema.ts) ``` users, subscriptions, clinics, queueEntries, analyticsEvents ``` --- ## Ce qui reste à faire ### Priorité haute - [ ] **Intégration Stripe** — L'utilisateur doit fournir ses clés Stripe (STRIPE_SECRET_KEY, VITE_STRIPE_PUBLISHABLE_KEY, STRIPE_WEBHOOK_SECRET). Utiliser `webdev_add_feature stripe` une fois les clés configurées dans Settings → Payment. - [ ] **Notifications SMS** — Intégrer Twilio pour alerter les patients par SMS quand leur tour approche (alternative aux notifications push navigateur). ### Priorité moyenne - [ ] **Page `/subscription/plans`** — Checkout Stripe réel avec redirection vers portail client. - [ ] **Webhook Stripe** — Route `/api/stripe/webhook` pour gérer `checkout.session.completed`, `invoice.paid`, `customer.subscription.deleted`. - [ ] **Tests supplémentaires** — Couvrir les procédures queue.callNext, queue.markAbsent, analytics.get. ### Priorité basse - [ ] **Mode multi-praticiens** — Plusieurs médecins par cabinet (table `clinicMembers`). - [ ] **Rapports PDF** — Export PDF hebdomadaire automatique. - [ ] **Application mobile** — React Native avec les mêmes APIs tRPC. --- ## Informations techniques importantes ### Socket.io Le serveur Socket.io est initialisé dans `server/_core/index.ts` et exposé globalement via `(global as any).__socketIo`. Les procédures tRPC l'utilisent via `getIo()` dans `routers.ts`. Rooms Socket.io : - `clinic:{clinicId}` — Médecin + écran d'affichage - `patient:{patientToken}` — Patient individuel - `display:{clinicId}` — Écran d'affichage uniquement ### QR Code anti-triche Le token QR est stocké dans `clinics.qrToken`. La rotation est déclenchée par `rotateQrToken()` dans `db.ts`. La fréquence est configurable via `clinics.qrRotationMinutes` (0 = pas de rotation). ### Abonnement - Essai gratuit : 30 jours à partir de la première connexion - Statuts : `trial` → `active` → `expired` / `canceled` - Le middleware `subscriptionProcedure` vérifie `isSubscriptionActive()` avant chaque opération sensible ### Design system - Thème : dark, palette teal (#0d9488) + orange (#f97316) - Classes utilitaires custom : `.gradient-text`, `.glass-card`, `.glow-teal`, `.text-glow-teal`, `.queue-number`, `.animate-ticker` - Police display : Inter (Google Fonts) --- ## Commandes utiles ```bash pnpm dev # Démarrer le serveur de développement pnpm test # Exécuter les tests Vitest pnpm db:push # Pousser les migrations Drizzle pnpm build # Build de production npx tsc --noEmit # Vérifier les types TypeScript ``` --- ## Contacts et ressources - **Auteur** : William MERI - **Dépôt GitHub** : https://github.com/Tarzzan/queue-med - **Documentation Stripe** : https://stripe.com/docs/billing/subscriptions - **Documentation Socket.io** : https://socket.io/docs/v4/