Documentation du projet

PWA médicale pour la gestion des dossiers cliniques en RDC

À propos

Dhayaro est une application PWA (Progressive Web App) médicale conçue pour la gestion des dossiers cliniques dans les hôpitaux de la République Démocratique du Congo. Elle fonctionne en mode offline-first, permettant une utilisation continue même en l'absence de connexion internet.

Architecture

L'application suit une architecture moderne full-stack avec séparation claire des responsabilités.

Frontend: Next.js 15 (App Router) + React 19, Tailwind CSS v4 + shadcn/ui, Zustand (état global + auth), TanStack Query v5 (état serveur), TypeScript strict.

Backend: Next.js API Routes (serverless), Drizzle ORM + PostgreSQL (Neon), JWT auth (jose) + bcrypt, 33 endpoints RESTful, RBAC multi-rôle.

Structure du projet

src/
  app/
    (app)/           → routes authentifiées
    (auth)/          → routes publiques
    api/v1/          → 33 endpoints API
  views/             → composants page
  components/
    ui/              → shadcn/ui primitives
    layout/          → app-shell, sidebar, header
  hooks/             → TanStack Query hooks
  store/             → Zustand (app + auth)
  services/          → ApiClient
  lib/               → auth, db, schema, seed, utils
  types/             → interfaces TypeScript

Rôles utilisateur

RôleNiveauDescription
admin80Administrateur gestion utilisateurs, établissements, audit
specialist70Médecin Spécialiste valide diagnostics, examens labo
doctor60Médecin Généraliste consultations, prescriptions, diagnostics
pharmacist50Pharmacien dispensation des médicaments
laboratory50Laborantin examens de laboratoire, résultats
nurse40Infirmier(ère) triage, soins, hospitalisation
accountant35Comptable rapports financiers
archivist30Archiviste gestion des archives
receptionist25Réceptionniste accueil, file d'attente
patient10Patient accès à son propre dossier

Endpoints API

MéthodeEndpointDescription
POST/api/v1/auth/refreshRafraîchir token JWT
GET/api/v1/auth/meProfil utilisateur connecté
POST/api/v1/auth/patient-loginConnexion patient
GET/api/v1/patientsListe des patients
POST/api/v1/patientsCréer un patient
GET/PUT/api/v1/patients/[id]Détail / modifier patient
GET/api/v1/consultationsListe des consultations
POST/api/v1/consultationsCréer une consultation
GET/PUT/DELETE/api/v1/consultations/[id]Détail / modifier / annuler consultation
GET/api/v1/diagnosticsListe des diagnostics
POST/api/v1/diagnosticsPoser un diagnostic
GET/PUT/DELETE/api/v1/diagnostics/[id]Détail / modifier / supprimer diagnostic
GET/api/v1/treatmentsListe des traitements
POST/api/v1/treatmentsPrescrire un traitement
GET/PUT/DELETE/api/v1/treatments/[id]Détail / modifier / supprimer traitement
GET/api/v1/lab/examsListe des examens labo
POST/api/v1/lab/examsCréer un examen
GET/PUT/DELETE/api/v1/lab/exams/[id]Détail / modifier / supprimer examen
GET/api/v1/dashboard/statsStatisques tableau de bord
GET/api/v1/queueFile d'attente
POST/api/v1/queueAjouter à la file
GET/api/v1/usersListe des utilisateurs
POST/api/v1/usersCréer un utilisateur
GET/PUT/api/v1/users/[id]Détail / modifier utilisateur
GET/api/v1/documentsListe des documents
POST/api/v1/documentsCréer un document
GET/api/v1/notificationsListe des notifications
GET/api/v1/care-episodesÉpisodes de soins
GET/api/v1/settingsParamètres
POST/api/v1/sync/pullSync descente
POST/api/v1/sync/pushSync montée

Base de données

Schéma PostgreSQL avec 17 tables, UUIDs comme clés primaires, soft-delete via is_active, timestamps created_at / updated_at sur chaque table.

  • facilities
  • users
  • patients
  • consultations
  • diagnostics
  • treatments
  • prescriptions
  • lab_exams
  • lab_categories
  • care_episodes
  • episode_entities
  • clinical_cases
  • diseases
  • therapeutic_protocols
  • documents
  • notifications
  • queue_entries
  • help_images

Installation & développement

Prérequis

  • Node.js 20+
  • PostgreSQL (Neon en prod, local en dev)
  • npm ou yarn

Installation

git clone <repo>
cd dhayaro
npm install
cp .env.example .env
# Configurer DATABASE_URL dans .env
npm run dev

Commandes principales

npm run dev        → Développement local
npm run build      → Build production
npm run lint       → ESLint
npm run typecheck  → TypeScript strict

Comptes de test

RôleEmailMot de passe
Super Adminsuperadmin@dhayaro.cdadmin123
Réceptionnistereception@dhayaro.cddhayaro123
Médecin (Kabongo)dr.kabongo@dhayaro.cddoctor123
Infirmier (Mohamed)nurse.mohamed@dhayaro.cdnurse123
Laborantinlab.joseph@dhayaro.cddhayaro123
Pharmacienpharm.beatrice@dhayaro.cddhayaro123

Voir la liste complète sur la page Comptes de test.

Déploiement

Déployé sur Vercel (frontend statique + API routes comme serverless functions). Base de données PostgreSQL via Neon.

Variables d'environnement

DATABASE_URL=postgresql://...
JWT_SECRET=...
NEXT_PUBLIC_APP_URL=https://...

Conventions de code

  • TypeScript strict pas de ignoreBuildErrors
  • API snake_case frontend camelCase via transformKeys()
  • Fichiers en kebab-case, composants en PascalCase
  • Pas de commentaires dans le code sauf demande explicite
  • Zustand selecteurs : useStore((s) =&gt; s.field), jamais de destructuring
  • Token JWT stocké dans dhayaro_token (localStorage + cookie)
  • UI en français, code et commentaires en anglais
  • UUID comme clés primaires, soft-delete via is_active