Présentation du Projet
Annuaire de santé permettant la recherche géolocalisée d'établissements médicaux (hôpitaux, cliniques, centres de santé) et de praticiens (médecins généralistes, spécialistes, professionnels paramédicaux) en France. La plateforme agrège et structure des données officielles provenant des bases FINESS et CNAMTS pour offrir une expérience de recherche optimale.
Architecture Technique
Backend
- Framework : Django (architecture MVT)
- Base de données : SQLite en développement, PostgreSQL en production
- ORM : Django ORM avec migrations versionnées
- API REST : Django REST Framework pour l'autocomplétion et les endpoints AJAX
Frontend
- Framework CSS : Tailwind CSS via django-tailwind
- Interactivité : JavaScript vanilla ES6+ (pas de framework JS)
- Amélioration progressive : HTMX pour les interactions dynamiques
- Templating : Système de templates Django avec héritage
Infrastructure
- Serveur WSGI : Gunicorn
- Cache : Redis avec django-redis pour mise en cache des requêtes
- Tâches asynchrones : Celery avec Celery Beat pour l'importation automatique mensuelle des données
- Stockage fichiers : S3-compatible via django-storages et boto3
- Fichiers statiques : WhiteNoise avec compression et cache
- Monitoring : Prometheus via django-prometheus pour métriques de performance
Modèles de Données
Établissements FINESS
- Intégration complète du jeu de données FINESS (etalab_cs1100507)
- Champs normalisés : identifiants FINESS, raison sociale, adresse complète, coordonnées GPS, catégories d'établissement
- Classification automatique en 11 catégories générales (établissements de santé, soins de premier recours, hospitalisation à domicile, santé mentale, etc.)
- Nettoyage et standardisation automatique des codes postaux et noms de communes
- Système de slugs pour URLs SEO-friendly
- Indexation optimisée pour recherches géographiques
Praticiens CNAMTS
- Modèle basé sur la documentation CNAMTS (données ADELI)
- Informations complètes : identité, profession, spécialité, adresse, coordonnées GPS
- Classification en 12 catégories générales (médecins généralistes, spécialistes, chirurgie, paramédicaux, etc.)
- Gestion des conventions (secteur 1, secteur 2, secteur 3)
- Modèle séparé pour les horaires (HorairePraticien) avec gestion des jours, plages horaires, types de consultation
- Contraintes d'unicité pour éviter les doublons
- Indexation multi-champs pour performances de recherche
Fonctionnalités Principales
Recherche Avancée
- Recherche dual-mode : Établissements ou Praticiens avec interface radio adaptative
- Autocomplétion intelligente : API REST en temps réel pour localisation (villes, codes postaux) avec filtrage selon le type sélectionné
- Géolocalisation HTML5 : Détection automatique de position avec géocodage inverse (API BigDataCloud) et gestion d'erreurs complète
- Filtres par catégorie : 11 catégories pour établissements, 12 pour praticiens
- Recherche géographique flexible : Support de formats variés (code postal seul, ville seule, code postal + ville) avec parsing intelligent
- Pagination : 20 résultats par page avec navigation optimisée
Pages de Résultats
- Affichage structuré avec informations essentielles (nom, adresse, téléphone, catégorie)
- URLs SEO-friendly avec slugs pour catégories et localisations
- Breadcrumbs contextuels pour navigation
- Statistiques de résultats affichées
- Liens de proximité vers établissements/praticiens similaires
Pages de Détail
- Informations complètes de l'établissement ou praticien
- Affichage des horaires pour les praticiens (jours, heures, modalités de consultation)
- Coordonnées GPS intégrées pour navigation
- Sections de recommandations (praticiens proches pour établissements, établissements proches pour praticiens)
- Données structurées JSON-LD pour référencement
Pages de Navigation
- Guide des catégories : Documentation complète des 11 catégories d'établissements et 12 de praticiens avec descriptions détaillées
- Villes populaires : Classement dynamique des villes avec le plus d'établissements/praticiens
- Pages spécialisées : Index dédiés pour établissements et praticiens avec navigation simplifiée
Blog Intégré
- Système de blog complet avec catégories et tags
- Affichage des derniers articles sur la page d'accueil
- Métadonnées d'articles (auteur, date, temps de lecture, image à la une)
- Extraits et teasers pour navigation
FAQ Interactive
- Accordéon JavaScript pour questions/réponses
- Données structurées JSON-LD FAQPage pour référencement Google
- 6 questions fréquentes avec réponses détaillées
Aspects Techniques Avancés
Performance et Cache
- Mise en cache Redis pour requêtes fréquentes
- WhiteNoise avec compression et cache headers pour fichiers statiques
- Optimisation des requêtes ORM avec select_related et prefetch_related
- Indexation stratégique des champs de recherche
- Lazy loading et pagination pour grandes listes
SEO et Accessibilité
- Métadonnées Open Graph et Twitter Cards complètes
- Données structurées JSON-LD (FAQPage, Organization)
- URLs sémantiques et slugs SEO-friendly
- Sitemaps Django automatiques
- Balises sémantiques HTML5
- Alt text pour images
Sécurité
- Protection CSRF Django native
- Sanitization des entrées utilisateur
- Headers de sécurité configurés (HSTS, X-Frame-Options, etc.)
- Cookies sécurisés en production (HttpOnly, Secure, SameSite)
- Validation côté serveur et client
Automatisation
- Tâches Celery périodiques :
- Import automatique des données FINESS le 11 de chaque mois
- Import automatique des données praticiens le 10 de chaque mois
- Publication de contenu quotidienne à 23h
- Gestion des erreurs et logs structurés avec colorlog
- Nettoyage automatique des fichiers obsolètes via django-cleanup
Expérience Utilisateur
- Interface responsive avec Tailwind CSS (mobile-first)
- Transitions et animations fluides
- Feedback visuel immédiat (boutons géolocalisation avec états loading/success/error)
- Navigation au clavier complète (flèches, Enter, Escape pour autocomplétion)
- Messages d'erreur contextuels et informatifs
- Design cohérent avec palette de couleurs différenciée (bleu pour établissements, vert pour praticiens)
Déploiement et Configuration
- Configuration multi-environnement (développement/production)
- Variables d'environnement pour secrets et configuration
- Support Windows et Linux (détection automatique du système)
- Migrations de base de données versionnées
- Collecte et compression des fichiers statiques
- Configuration SSL/HTTPS en production
Stack Technologique Complet
- Django
- Django REST Framework
- Django Tailwind
- Gunicorn
- Celery
- Redis
- PostgreSQL / SQLite
- Boto3 / django-storages