Application Django 5 pour le Ministère de la Santé de Djibouti permettant de suivre, vérifier et valider les primes de garde des hôpitaux publics, tout en éliminant les fraudes où l'administration ajouterait du personnel n'ayant pas réellement effectué de garde.
Taux officiels : 50 000 FDJ par garde pour les médecins, 28 000 FDJ par garde pour le personnel paramédical.
Le système matérialise la chaîne réelle de responsabilité :
Responsable de service → Administration de l'hôpital → Ministère de la Santé
(saisit le planning) (consolide les sources) (valide / rejette)
- Le responsable de service saisit le planning des gardes de son service pour un mois donné, puis le soumet. Le planning est alors verrouillé et devient une source officielle immuable.
- L'administration de l'hôpital crée une consolidation : ses lignes sont générées automatiquement à partir des plannings soumis. L'administration ne peut pas ajouter un agent absent des sources. Tout écart entre la valeur retenue et la source doit être justifié, et tout ajout hors source est signalé comme fraude potentielle.
- Le Ministère (Super Admin) examine l'écran de comparaison, voit les alertes, puis valide ou rejette la consolidation.
Chaque action sensible est inscrite dans un journal d'audit (« qui a fait quoi, quand, depuis quelle IP »).
| Rôle | Groupe Django | Périmètre |
|---|---|---|
| Responsable de service | ResponsableService |
Plannings de son service |
| Administrateur Hospitalier | AdminHopital |
Consolidations de son hôpital |
| Super Admin (Ministère) | SuperAdminMinistere ou is_superuser |
Tous les hôpitaux, validation, audit |
Le rattachement (hôpital / service) est porté par le modèle Profil.
# 1. Environnement virtuel
python3 -m venv .venv
source .venv/bin/activate # Windows : .venv\Scripts\activate
# 2. Dépendances
pip install -r requirements.txt
# 3. Base de données
python manage.py migrate
# 4. Données de démonstration (hôpital, services, personnels, comptes, fraude)
python manage.py seed_data
# 5. (Optionnel) Super-utilisateur supplémentaire
python manage.py createsuperuser
# 6. Lancer le serveur
python manage.py runserverApplication : http://127.0.0.1:8000/ · Administration : http://127.0.0.1:8000/admin/
| Variable | Rôle | Défaut |
|---|---|---|
GARDESYS_SECRET_KEY |
Clé secrète Django | clé de dev |
GARDESYS_DEBUG |
1 = debug, 0 = production |
1 |
GARDESYS_ALLOWED_HOSTS |
Hôtes autorisés (séparés par des virgules) | localhost,127.0.0.1,0.0.0.0 |
GARDESYS_CSRF_TRUSTED_ORIGINS |
Origines de confiance CSRF | — |
Après seed_data, tous les comptes ont le mot de passe demo1234 :
| Identifiant | Rôle |
|---|---|
ministere |
Super Admin — Ministère |
admin_hgp |
Administrateur Hospitalier (Hôpital Général Peltier) |
resp_urgences |
Responsable du service des Urgences |
resp_reanimation |
Responsable du service de Réanimation |
Le jeu de démonstration contient volontairement deux anomalies dans la consolidation pour illustrer la détection :
- un agent ajouté hors source (absent des plannings) → marqué Hors source ;
- un agent dont les gardes ont été gonflées au-delà du planning → marqué Écart.
- Connexion —
/connexion/ - Tableau de bord — adapté au rôle (
/) - Plannings de service — liste, création, saisie des lignes, soumission, preuves
- Écran de consolidation —
/consolidations/<id>/: tableau comparatif source vs retenu avec mise en évidence des écarts et fraudes - Validation Ministère —
/validation/: file d'attente, validation/rejet motivé - Rapports — export CSV et PDF nominatif (totaux en FDJ)
- Journal d'audit —
/audit/(Super Admin)
Hosgarde/
├── manage.py
├── requirements.txt
├── README.md
├── gardesys/ # Configuration du projet
│ ├── settings.py # Taux FDJ, langue fr, médias, rôles…
│ ├── urls.py # Auth + inclusion de core.urls
│ └── wsgi.py / asgi.py
├── core/ # Application métier
│ ├── models.py # Hopital, Service, Personnel, Planning,
│ │ # Consolidation, AuditLog, Profil…
│ ├── forms.py # Formulaires + formsets (Bootstrap)
│ ├── views.py # Vues (tableau de bord, plannings, consolidation…)
│ ├── urls.py # Routes de l'application
│ ├── roles.py # Groupes, contrôle d'accès, décorateur role_requis
│ ├── services.py # Audit, génération de consolidation, export CSV
│ ├── pdf.py # Génération du rapport PDF (reportlab)
│ ├── admin.py # Site d'administration
│ ├── signals.py # Création automatique du profil
│ ├── context_processors.py # Contexte global (ministère, taux, devise)
│ ├── templatetags/core_extras.py
│ └── management/commands/seed_data.py
├── templates/
│ ├── base.html
│ ├── registration/login.html
│ └── core/ # Tableaux de bord, plannings, consolidation…
├── static/
└── media/ # Preuves téléversées
- Plusieurs hôpitaux — le modèle est déjà multi-hôpital. Créez les hôpitaux,
services et personnels via
/admin/, puis rattachez chaque utilisateur à son hôpital/service via sonProfil. Le Super Admin voit automatiquement tous les hôpitaux ; chaque Admin Hôpital est confiné à son périmètre. - Nouveaux rôles / permissions — ajoutez un groupe dans
core/roles.pyet un vérificateur, puis protégez les vues avec@role_requis(...). - Modifier les taux —
TAUX_GARDE_MEDECIN/TAUX_GARDE_PARAMEDICALdansgardesys/settings.py. - Notifications, signatures électroniques, intégration paie — brancher sur les
événements d'audit ou les transitions de statut de
Consolidation. - Production — passer
GARDESYS_DEBUG=0, définirGARDESYS_SECRET_KEYetGARDESYS_ALLOWED_HOSTS, servir les fichiers statiques (collectstatic) et les médias derrière un serveur web, et migrer vers PostgreSQL si besoin.
- Django 5.2, base SQLite par défaut (aucune dépendance lourde).
- Bootstrap 5 + Bootstrap Icons (CDN), interface entièrement en français.
- Audit personnalisé (
AuditLog) — lecture seule, non modifiable depuis l'admin. - Verrouillage automatique des plannings soumis (sources immuables).
- Génération automatique de la consolidation depuis les sources + détection des écarts et des ajouts hors source.
- Exports CSV (UTF-8/Excel) et PDF (reportlab) avec totaux en FDJ.