Comprendre et références · Comprendre

Le parcours de prescription guidé — principes et décisions

Ce document explique pourquoi le parcours de prescription est construit comme il l'est. Le mode d'emploi est dans Prescrire depuis un problème ; ici, les principes, les décisions structurantes, les limites connues et les suites.

Les principes

Le problème d'abord. L'indication porte toute l'information du parcours : c'est elle qui va chercher les recommandations, elle qui suit la ligne jusqu'à la prescription (reasonCode). La prescription sans problème reste possible — par un geste explicite.

La saisie structurée est la source unique. Tout ce qui précède (reco, suggestion BIM, poids) ne fait que pré-remplir la saisie en substance active ; tout ce qui suit (phrase, charge FHIR, plan, prises prévues) en dérive. Le serveur re-sanitise le brouillon et recompose tout à la validation : rien de ce que l'écran a calculé n'est cru sur parole.

L'absence d'annotation n'est jamais un fait. Un critère de reco non documenté est conditionnel, pas contredit ; une alternative sans intention se classe entre la 1ʳᵉ et la 2ᵉ (jamais dernière) ; une alternative sans type de traitement va dans « type non annoté », jamais dans « curatif » par défaut ; un contrôle ARP non réalisable est dit, jamais lu comme un feu vert. Cette règle est la réponse générale à l'annotation éparse des référentiels.

Le solveur propose et dit le geste, il ne décide jamais en silence. Pas de bascule de forme (comprimé ↔ buvable) : la forme est un choix de la ligne, et un échec dit ce qui est réalisable — y compris la forme sœur qui composerait la dose exacte. L'arrondi automatique d'une dose calculée est dit à l'écran ; une dose saisie à la main ne s'arrondit jamais.

Les dimensions ne se mélangent jamais. Une dose est en masse (mg), en activité (UI) ou en volume (mL) ; les forces des candidats portent leur dimension ; une dose en mg ne s'assemble qu'avec des forces en mg. Les masses sous le mg s'affichent en µg.

La prescription est au niveau du médicament clinique. Le plan s'étiquette au médicament clinique — le choix de la spécialité appartient à la dispensation. Exception : un médicament virtuel dérivé d'une spécialité (code posos « NV… ») est de la prescription en spécialité, son nom fait foi. La préférence de marque commune reste un critère de score interne (dispensation plausible), pas un affichage.

Les bornes ne sont pas des recommandations. Les natures BIM MAXIMAL/MINIMAL sont la matière des contrôles (ARP) — elles n'apparaissent jamais dans les posologies proposées.

Les décisions structurantes

Recommandations : registre local d'abord, dispositif CE en repli. Les fiches formelles (HAS angine, COFER polyarthrite…) sont annotées à la main dans domain/reco-register.ts — codes toujours vérifiés contre le référentiel, jamais de mémoire. Sans fiche, l'AORT getAlternatives prend le relais (level: NO_SEVERE_RISK : les contre-indications absolues sur les conditions sont écartées par le dispositif, les relatives et précautions remontent en notes ⚠). Le rendu est unifié : seule la source distingue les deux origines.

La bascule de ligne vit dans les critères. Le critère « déjà sous… » (treatment) éteint la 1ʳᵉ ligne quand le traitement est en cours et n'allume la 2ᵉ que dans ce cas ; retenir la 2ᵉ propose d'arrêter la ligne remplacée (coché par défaut), exécuté par le même circuit que l'arrêt manuel — aucune logique de bascule dédiée.

Molécule × voie pour les alternatives, forme sur la ligne. L'alternative se choisit par molécule et voie (« salbutamol — voie inhalée ») ; la famille de formes (chips) se choisit sur la ligne, et le solveur s'y tient. Le représentant (MV le mieux distribué commercialisé) porte les posologies BIM et le pivot du solveur — il n'est jamais affiché.

Les forces viennent du structuré, les étiquettes en repli. Ordre des sources : substance_base.strength, puis dosage_units (le champ le mieux rempli : quantité UCUM par unité de prise ou par mL, y compris [IU]), puis les étiquettes parsées (parseMass, parsePerDose, parseConcentration, parseActivity) — le référentiel est inégal, aucun canal ne suffit seul.

Ce que le solveur sait des contenants. Une seringue préremplie s'injecte entière (withdrawable: false) — le prélèvement partiel ne se propose que sur flacon/ampoule ; sans contenant ponctionnable, l'échec invite à arrondir. L'inhalé est une famille propre (force par bouffée) ; le gel buccal est un continu dosé au volume.

Les contrôles ARP au niveau EXPLICIT. Le niveau USUAL (servi par défaut) dérive ses bornes des posologies usuelles plates et ignore les contextes mg/kg — il produit de faux positifs pédiatriques. EXPLICIT porte les bornes RCP, pondérales comprises ; l'absence de données explicites est remontée et dite (astérisque).

Le codage des allergies suit le contrat du dispositif. L'écran d'allergie de getAlternatives ne lit que le SNOMED de la substance/excipient et posos::drug_classes pour les classes — le combobox allergène privilégie donc ces codages ; tout autre codage serait ignoré en silence.

La carte des modules

  • domain/recommendation.ts + domain/reco-register.ts — évaluation des recos formelles et leur matière annotée ; domain/drug-classes.ts les classes en dur.
  • domain/posology-entry.ts — le brouillon structuré (source unique) et ses trois projections (phrase, charge FHIR, entrée du solveur).
  • domain/administration-plan.ts — candidats, familles de formes, solveur de composition ; domain/schedule.ts — l'horaire des prises (occurrences, bornes).
  • infrastructure/drugs/specialties.ts — pivot BIM et parseurs de forces ; demo-specialties.ts — le jeu de démonstration ; clinical/alternatives.ts et clinical/arp.ts — les adapters AORT/ARP avec leurs pièges mesurés en commentaire.
  • application/ehr.ts — la façade applicative (guidance, plan, prescription guidée, bascules) ; les routes API ne font que sanitiser et déléguer.
  • components/PosologyLineEditor.tsx — la ligne (rendu) ; components/useAdministrationPlan.ts — le hook qui porte plan + contrôle ARP + arrondi automatique ; GuidancePanel, PosologyPicker, PrescribeDrawer — un composant par étage du parcours.

Les limites connues

  • Annotation éparse des référentiels (signalements en cours côté data) : intentions AORT absentes sur des 1ᵉʳˢ choix (statines), treatmentTypes manquants (béclométasone × asthme), graduation des seringues absente de la BIM, CI grossesse du méthotrexate annotée relative, lien indication-par-dosage aplati dans l'export bim-v2 de staging (la nuance vit dans dosage_context_modifiers, désormais lue), étiquette « alclometasone » erronée sur un composant de dosage_unit.
  • L'environnement interrogé est le staging (api.staging.posos.co) — des écarts de données avec la production sont possibles.
  • Alternatives : cap à 10 options, queue triée par ventes ATC (non spécifiques à l'indication) — des molécules pertinentes peuvent sortir du cap au profit de gros vendeurs toutes indications confondues.
  • Le picker BIM lit les posologies du seul représentant du groupe molécule × voie ; les schémas portés par d'autres médicaments cliniques de la même molécule (autres jeux de modifiers) ne sont pas affichés.
  • Un médicament multi-jeux-de-voies fait plusieurs options (ceftriaxone « IM / IV », « IV », « IM ») — data-fidèle mais redondant.
  • Horaire en heure locale du poste, plan borné à 60 prises, 48 h sans durée — un banc d'essai mono-fuseau, pas un moteur de planification.
  • Les seringues graduées sont traitées comme non ponctionnables faute de donnée — la purge d'excédent (geste RCP des HBPM curatives) n'est pas proposée.

Les suites envisagées

  1. Purge des seringues graduées : troisième étage du solveur injectable (plus petite seringue ≥ dose, « purger l'excédent avant injection »), en dernier recours et en le disant — bloqué par l'absence de donnée de graduation, jouable en libellé explicite.
  2. Picker multi-médicaments cliniques : agréger les posologies BIM de tous les MV du groupe molécule × voie, pas seulement du représentant.
  3. Fusion des jeux de voies chevauchants dans les alternatives (ceftriaxone en une ligne).
  4. Préférence de forme galénique homogène à force égale dans le solveur (éviter « 1 g effervescent + 500 mg sec » quand un assortiment homogène existe).
  5. Tri de la queue non annotée des alternatives par autre chose que les ventes ATC, ou cap relevé.
  6. Signalements data à instruire avec les équipes BIM/AORT/ARP (liste ci-dessus).