Skip to content

Les mappings CDA↔FHIR (MappingLM_CDA_FHIR_Corps) référencent des id de Modèles Logiques obsolètes (français, kebab-case) #6

Description

@nriss

Description du problème

Les 112 ressources de mapping FSH du dossier input/fsh/MappingLM_CDA_FHIR_Corps/ (sections/ et composantsElementaires/) référencent, dans leur instruction * group[+].source = ".../StructureDefinition/fr-lm-xxx", des identifiants en français et en kebab-case (ex. fr-lm-dispositifs-medicaux, fr-lm-crbio-chapitre, fr-lm-comparaison-examens-imagerie). Or, aucun Modèle Logique actuel du dépôt (input/fsh/ModeleLogiqueMetier/**/*.fsh) ne porte un Id correspondant : les Modèles Logiques réels sont nommés en anglais, et depuis la correction eld-20 (#5) leur Id est désormais identique à leur Logical name en PascalCase (ex. FRLMMedicalDevicesAndImplants). Résultat : 112 références sur 112 (100 %) pointent vers des StructureDefinition inexistantes dans l'IG. Cela ne casse aucune règle de validation FHIR (voir note en bas), mais rend inutilisable la traçabilité du mapping CDA → Modèle métier → FHIR pour l'ensemble des sections et composants élémentaires du corps de document.

Fichier•s concerné•s

  • input/fsh/MappingLM_CDA_FHIR_Corps/sections/**/*.fsh
  • input/fsh/MappingLM_CDA_FHIR_Corps/composantsElementaires/**/*.fsh

Preuve

  • 112 fichiers dans input/fsh/MappingLM_CDA_FHIR_Corps/{sections,composantsElementaires} contiennent chacun exactement une ligne * group[+].source = "https://interop.esante.gouv.fr/ig/document/core/StructureDefinition/fr-lm-...".
  • 112 / 112 (100 %) de ces références ne correspondent à aucun Id de Modèle Logique actuellement présent dans input/fsh/ModeleLogiqueMetier/**/*.fsh (tous les 112 Modèles Logiques ont désormais un Id en PascalCase, identique au Logical name — confirmé exhaustivement, aucune ne matche fr-lm-*).
  • Exemples concrets :
    • input/fsh/MappingLM_CDA_FHIR_Corps/sections/FRSectionMedicalDeviceLMCDAFHIR.fsh:9.../StructureDefinition/fr-lm-dispositifs-medicaux
    • input/fsh/MappingLM_CDA_FHIR_Corps/sections/FRSectionLaboratoryChapterLMCDAFHIR.fsh:10.../StructureDefinition/fr-lm-crbio-chapitre
    • input/fsh/MappingLM_CDA_FHIR_Corps/sections/FRSectionImagingComparisonLMCDAFHIR.fsh:10.../StructureDefinition/fr-lm-comparaison-examens-imagerie
    • input/fsh/MappingLM_CDA_FHIR_Corps/composantsElementaires/FRConditionLMCDAFHIR.fsh:11.../StructureDefinition/fr-lm-probleme
    • input/fsh/MappingLM_CDA_FHIR_Corps/composantsElementaires/FRDeviceUseStatementLMCDAFHIR.fsh:12.../StructureDefinition/fr-lm-dispositif-medical-entree
  • À l'intérieur même de ces fichiers, les codes d'éléments du mapping métier→CDA (ex. * group[=].element[+].code = #FRLMCRBIOChapitre.code dans FRSectionLaboratoryChapterLMCDAFHIR.fsh) référencent un nom de classe FRLMCRBIOChapitre qui n'a jamais existé dans l'historique Git de ce dépôt en tant qu'Id ou Logical d'un Modèle Logique — preuve supplémentaire que ces mappings ont été rédigés indépendamment du Modèle Logique réel.

Hypothèse sur la cause (avec preuves Git)

Deux phénomènes distincts se cumulent :

1. Les références étaient déjà en grande partie cassées avant toute correction eld-20 (~104 / 112, soit ~93 %).
git log --all -S"fr-lm-comparaison-examens-imagerie" (et testé sur plusieurs autres slugs français) montre que ces chaînes n'apparaissent, dans tout l'historique du dépôt, que dans les fichiers de mapping eux-mêmes — introduites intégralement par le commit f43afccb ("feat: migre le contenu métier depuis interop-IG-document-core"). Elles n'ont jamais été l'Id d'un Modèle Logique, ni dans ce dépôt ni dans le dépôt source interop-IG-document-core : dans ce dernier (branche main), les Modèles Logiques équivalents portent déjà des Id anglais en kebab-case (ex. fr-lm-medical-devices-and-implants, fr-lm-comparison-study, fr-lm-result-data). Tout indique que les mappings ont été générés/rédigés à partir d'un slug du libellé métier français (Title/Description de la section CDA) plutôt qu'à partir de l'Id réel du Modèle Logique cible.

2. La correction eld-20 (#5) a cassé les 8 dernières références qui étaient encore valides.
Le commit b5cd1d8d ("Corrige l'id des modèles logiques métier (eld-20)") a aligné les 112 Modèles Logiques sur la convention Id = Logical name en PascalCase, sans tiret, mais ne touche à aucun fichier de MappingLM_CDA_FHIR_Corps/. Or 8 références de mapping utilisaient un vocabulaire technique identique en français et en "anglais" (ex. fr-lm-batterie-examens-biologie-medicale, fr-lm-isolat-microbiologique, fr-lm-technique-imagerie, fr-lm-transfusion-de-produits-sanguins, fr-lm-resultats-examens-biologie-medicale, fr-lm-resultat-examens-biologie-element-clinique-pertinent, fr-lm-observation, fr-lm-addendum) et correspondaient donc, par coïncidence, exactement à l'ancien Id kebab-case du Modèle Logique — ces 8 références étaient donc valides juste avant #5 et sont désormais cassées elles aussi, portant le total à 112/112.

Table de correspondance proposée (échantillon de 20 fichiers sur 112)

⚠️ Cette table est une proposition établie par analyse heuristique (nom du fichier de mapping, Title/Description du Modèle Logique, vocabulaire commun) et doit être vérifiée par un relecteur métier avant toute correction, notamment pour les cas marqués « confiance modérée ».

Fichier de mapping Ligne id français cassé (group[+].source) Modèle Logique anglais actuel proposé Confiance
sections/FRSectionMedicalDeviceLMCDAFHIR.fsh 9 fr-lm-dispositifs-medicaux FRLMMedicalDevicesAndImplants Haute
sections/FRSectionPrescriptionOfMedicalDevicesLMCDAFHIR.fsh 9 fr-lm-prescription-dispositifs-medicaux FRLMMedicalDevicePrescriptions Haute
sections/FRSectionImagingComparisonLMCDAFHIR.fsh 10 fr-lm-comparaison-examens-imagerie FRLMComparisonStudy Haute
sections/FRSectionActiveProblemsLMCDAFHIR.fsh 9 fr-lm-problemes-actifs FRLMProblems Haute
sections/FRSectionAllergyIntoleranceLMCDAFHIR.fsh 10 fr-lm-allergies-et-hypersensibilites FRLMAllergiesAndIntolerances Haute
sections/FRSectionAdvanceDirectiveLMCDAFHIR.fsh 10 fr-lm-directives-anticipees FRLMAdvanceDirectives Haute
sections/FRSectionImmunizationsLMCDAFHIR.fsh 10 fr-lm-vaccinations FRLMImmunisations Haute
sections/FRSectionVitalSignsLMCDAFHIR.fsh 10 fr-lm-signes-vitaux FRLMVitalSigns Haute
sections/FRSectionSocialHistoryLMCDAFHIR.fsh 9 fr-lm-habitus-mode-de-vie FRLMSocialHistory Haute
sections/FRSectionLaboratoryChapterLMCDAFHIR.fsh 10 fr-lm-crbio-chapitre FRLMResultData (à confirmer) Modérée
composantsElementaires/FRConditionLMCDAFHIR.fsh 11 fr-lm-probleme FRLMCondition Haute
composantsElementaires/FRAllergyIntoleranceLMCDAFHIR.fsh 11 fr-lm-allergie-ou-hypersensibilite FRLMAllergyIntolerance Haute
composantsElementaires/FRAdvanceDirectiveLMCDAFHIR.fsh 11 fr-lm-directive-anticipee FRLMAdvanceDirective Haute
composantsElementaires/FRImmunizationLMCDAFHIR.fsh 9 fr-lm-vaccination FRLMImmunisation Haute
composantsElementaires/FRProcedureLMCDAFHIR.fsh 11 fr-lm-acte FRLMProcedure Haute
composantsElementaires/FRDeviceUseStatementLMCDAFHIR.fsh 12 fr-lm-dispositif-medical-entree FRLMDeviceUse Moyenne
composantsElementaires/FRDeviceRequestLMCDAFHIR.fsh 11 fr-lm-dispositif-medical-entree FRLMDeviceUse (à confirmer, doublon avec la ligne précédente) Moyenne
composantsElementaires/FRLaboratoryResultsLMCDAFHIR.fsh 10 fr-lm-resultats-examens-biologie-medicale FRLMResultatsExamensBiologieMedicale Haute
composantsElementaires/FRObservationMultiresistantMicroorganismsIdentificationLMCDAFHIR.fsh 10 fr-lm-identification-de-micro-organismes-multiresistants FRLMMultidrugResistantMicroorganismIdentification Haute
composantsElementaires/FRServiceRequestLMCDAFHIR.fsh 10 fr-lm-demande-examen-ou-suivi FRLMServiceRequest Haute
composantsElementaires/FRSpecimenLMCDAFHIR.fsh 10 fr-lm-prelevement FRLMSpecimen Haute

(Table limitée à 20 des 112 lignes cassées ; les 92 restantes suivent le même schéma et devront être traitées de façon systématique, cf. proposition ci-dessous.)

Solution proposée

  1. Établir, pour les 112 fichiers de input/fsh/MappingLM_CDA_FHIR_Corps/, la correspondance complète entre le slug français cassé et l'Id réel du Modèle Logique cible (relecture métier requise pour les cas ambigus comme fr-lm-dispositif-medical-entree utilisé identiquement par FRDeviceRequestLMCDAFHIR.fsh et FRDeviceUseStatementLMCDAFHIR.fsh, et fr-lm-crbio-chapitre/fr-lm-crbio-sous-chapitre dont la correspondance avec les Modèles Logiques actuels de la section laboratoire reste à confirmer).
  2. Mettre à jour, dans chaque fichier, * group[+].source (et le cas échéant * group[+].target s'il référence aussi un Modèle Logique métier) pour pointer vers .../StructureDefinition/{Id-actuel-PascalCase}, conformément à la convention issue de la correction eld-20 (Id = Logical name, PascalCase, sans tiret).
  3. Vérifier en parallèle si les codes d'éléments internes (* group[=].element[+].code = #FRLMXxx...) utilisent encore d'anciens noms de classe obsolètes (comme FRLMCRBIOChapitre) et les aligner sur les noms de propriétés actuels des Modèles Logiques correspondants.
  4. Envisager un contrôle automatisé (script CI ou test QA) qui vérifie que tout group[+].source/target de type .../StructureDefinition/FRLMxxx correspond bien à un Id de Modèle Logique existant dans input/fsh/ModeleLogiqueMetier/, afin d'éviter une régression similaire lors d'un futur renommage.

Note importante

Cette rupture de référence n'a aucun impact sur la contrainte de validation eld-20 : les id concernés ici ne sont pas des Id de Logical Model FSH (qui déterminent le path FHIR), mais de simples chaînes de caractères dans des instructions group[+].source/target d'un ConceptMap/StructureMap d'instance. Le générateur ne lèvera donc aucune erreur de validation FHIR sur ce point. En revanche, cela casse silencieusement la traçabilité du mapping CDA → Modèle métier → FHIR pour la quasi-totalité des sections et composants élémentaires du corps de document : les URLs de source/target ne résolvent vers aucune ressource publiée de l'IG, rendant le mapping inutilisable en l'état pour quiconque cherche à suivre la chaîne de transformation métier/CDA/FHIR.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions