Pourquoi une préparation ne sort pas ?
Checklist à dérouler dans l'ordre quand une préparation attendue n'apparaît pas dans les résultats d'un chemin. Les causes les plus fréquentes (et les plus silencieuses) sont en premier. Voir le moteur de recommandations pour le fonctionnement détaillé.
1. La préparation elle-même
-
availableest-il coché ? Une préparation indisponible en Suisse n'apparaît jamais, dans aucune liste. - L'indication est-elle correcte ? Elle doit valoir asthme, BPCO ou les deux - et correspondre au premier choix du chemin. Une indication undefined exclut la préparation de tout.
- A-t-elle des classes ? Dès qu'un sélecteur du chemin filtre par classes, une préparation sans aucune classe est écartée.
2. Les critères du sélecteur (choix par choix)
Pour chaque choix du chemin qui porte des sélecteurs, vérifier :
- Classes strictes - la cause n°1 des surprises : une préparation ayant une classe en trop (hors de la liste du sélecteur) est écartée, même si elle possède aussi les classes demandées.
- Monothérapie - si le sélecteur est marqué monothérapie, la préparation doit contenir toutes les classes du sélecteur, pas seulement une.
- Forme galénique - le sélecteur ne garde que sa forme (MDI, DPI, …).
- Codes ATC - liste blanche (
atc_codes_filter) ou liste noire (atc_codes_exclude). - Flags réserve / fond -
reserve_treatment_filteretbackground_treatment_filtercomparés aux champsreserve_treatment/background_treatmentde la préparation.
Astuce : le formulaire d'édition d'un sélecteur (/recommendations/selectors/) affiche en direct les préparations qui matchent - modifier un critère et observer la liste.
3. L'effet du chemin complet
- Éliminée à un choix précédent ? Les choix se cumulent en AND : il suffit d'un seul choix du chemin où la préparation ne matche aucun sélecteur pour qu'elle disparaisse définitivement. Vérifier chaque choix, pas seulement le dernier.
- Entre les deux pistes ? Préférée à une étape, alternative à une autre → elle ne tient aucune piste de bout en bout et ne sort nulle part. C'est voulu (voir moteur) - la réponse n'est pas « corriger un bug » mais ajuster les sélecteurs si les cliniciens veulent la voir apparaître.
- Attendue en alternative mais déjà en préféré ? L'affichage alternatif retire ce qui est déjà dans la liste préférée (dédoublonnage).
- Aucune alternative du tout ? Normal si aucun choix du chemin ne définit de sélecteur alternatif.
- Attendue en réserve ? Seuls les sélecteurs réserve du dernier choix comptent. Une préparation de réserve « perdue » se joue toujours sur la dernière question.
4. L'environnement
- Cache pas rafraîchi ? Le graphe de décision et la vue « tous les chemins » sont cachés 24 h par langue. Après une modification de sélecteur l'invalidation est automatique, mais au moindre doute : bouton « clear cache » sur ces pages, ou
python manage.py clear_decision_graph_cache. Les résultats de session ne sont pas cachés. - Bonne base de données ? (dev vs prod, fixtures à jour.)
Vérifier en direct (shell Django)
# just shell (ou: docker compose exec django /entrypoint python manage.py shell_plus)
from sad_pulm.preparations.models import Preparation
from sad_pulm.recommendations.models import QuestionChoice
p = Preparation.objects.get(name__icontains="relvar")
p.available, p.indication, list(p.classes.all())
# Tester un choix précis contre cette préparation :
choice = QuestionChoice.objects.get(id=<id>)
p.id in choice.get_selected_preparations(is_bpco=False, is_preferred=True) # piste préférée
p.id in choice.get_selected_preparations(is_bpco=False, is_preferred=False) # piste alternative