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
- É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).
- 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).
- 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.
- 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.
Description du problème
Les 112 ressources de mapping FSH du dossier
input/fsh/MappingLM_CDA_FHIR_Corps/(sections/etcomposantsElementaires/) 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 unIdcorrespondant : les Modèles Logiques réels sont nommés en anglais, et depuis la correction eld-20 (#5) leurIdest désormais identique à leurLogicalname en PascalCase (ex.FRLMMedicalDevicesAndImplants). Résultat : 112 références sur 112 (100 %) pointent vers desStructureDefinitioninexistantes 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/**/*.fshinput/fsh/MappingLM_CDA_FHIR_Corps/composantsElementaires/**/*.fshPreuve
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-...".Idde Modèle Logique actuellement présent dansinput/fsh/ModeleLogiqueMetier/**/*.fsh(tous les 112 Modèles Logiques ont désormais unIden PascalCase, identique auLogicalname — confirmé exhaustivement, aucune ne matchefr-lm-*).input/fsh/MappingLM_CDA_FHIR_Corps/sections/FRSectionMedicalDeviceLMCDAFHIR.fsh:9→.../StructureDefinition/fr-lm-dispositifs-medicauxinput/fsh/MappingLM_CDA_FHIR_Corps/sections/FRSectionLaboratoryChapterLMCDAFHIR.fsh:10→.../StructureDefinition/fr-lm-crbio-chapitreinput/fsh/MappingLM_CDA_FHIR_Corps/sections/FRSectionImagingComparisonLMCDAFHIR.fsh:10→.../StructureDefinition/fr-lm-comparaison-examens-imagerieinput/fsh/MappingLM_CDA_FHIR_Corps/composantsElementaires/FRConditionLMCDAFHIR.fsh:11→.../StructureDefinition/fr-lm-problemeinput/fsh/MappingLM_CDA_FHIR_Corps/composantsElementaires/FRDeviceUseStatementLMCDAFHIR.fsh:12→.../StructureDefinition/fr-lm-dispositif-medical-entree* group[=].element[+].code = #FRLMCRBIOChapitre.codedansFRSectionLaboratoryChapterLMCDAFHIR.fsh) référencent un nom de classeFRLMCRBIOChapitrequi n'a jamais existé dans l'historique Git de ce dépôt en tant qu'IdouLogicald'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 commitf43afccb("feat: migre le contenu métier depuis interop-IG-document-core"). Elles n'ont jamais été l'Idd'un Modèle Logique, ni dans ce dépôt ni dans le dépôt sourceinterop-IG-document-core: dans ce dernier (branchemain), les Modèles Logiques équivalents portent déjà desIdanglais 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'Idré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 conventionId=Logicalname en PascalCase, sans tiret, mais ne touche à aucun fichier deMappingLM_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'ancienIdkebab-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)
Title/Descriptiondu 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 ».group[+].source)sections/FRSectionMedicalDeviceLMCDAFHIR.fshfr-lm-dispositifs-medicauxFRLMMedicalDevicesAndImplantssections/FRSectionPrescriptionOfMedicalDevicesLMCDAFHIR.fshfr-lm-prescription-dispositifs-medicauxFRLMMedicalDevicePrescriptionssections/FRSectionImagingComparisonLMCDAFHIR.fshfr-lm-comparaison-examens-imagerieFRLMComparisonStudysections/FRSectionActiveProblemsLMCDAFHIR.fshfr-lm-problemes-actifsFRLMProblemssections/FRSectionAllergyIntoleranceLMCDAFHIR.fshfr-lm-allergies-et-hypersensibilitesFRLMAllergiesAndIntolerancessections/FRSectionAdvanceDirectiveLMCDAFHIR.fshfr-lm-directives-anticipeesFRLMAdvanceDirectivessections/FRSectionImmunizationsLMCDAFHIR.fshfr-lm-vaccinationsFRLMImmunisationssections/FRSectionVitalSignsLMCDAFHIR.fshfr-lm-signes-vitauxFRLMVitalSignssections/FRSectionSocialHistoryLMCDAFHIR.fshfr-lm-habitus-mode-de-vieFRLMSocialHistorysections/FRSectionLaboratoryChapterLMCDAFHIR.fshfr-lm-crbio-chapitreFRLMResultData(à confirmer)composantsElementaires/FRConditionLMCDAFHIR.fshfr-lm-problemeFRLMConditioncomposantsElementaires/FRAllergyIntoleranceLMCDAFHIR.fshfr-lm-allergie-ou-hypersensibiliteFRLMAllergyIntolerancecomposantsElementaires/FRAdvanceDirectiveLMCDAFHIR.fshfr-lm-directive-anticipeeFRLMAdvanceDirectivecomposantsElementaires/FRImmunizationLMCDAFHIR.fshfr-lm-vaccinationFRLMImmunisationcomposantsElementaires/FRProcedureLMCDAFHIR.fshfr-lm-acteFRLMProcedurecomposantsElementaires/FRDeviceUseStatementLMCDAFHIR.fshfr-lm-dispositif-medical-entreeFRLMDeviceUsecomposantsElementaires/FRDeviceRequestLMCDAFHIR.fshfr-lm-dispositif-medical-entreeFRLMDeviceUse(à confirmer, doublon avec la ligne précédente)composantsElementaires/FRLaboratoryResultsLMCDAFHIR.fshfr-lm-resultats-examens-biologie-medicaleFRLMResultatsExamensBiologieMedicalecomposantsElementaires/FRObservationMultiresistantMicroorganismsIdentificationLMCDAFHIR.fshfr-lm-identification-de-micro-organismes-multiresistantsFRLMMultidrugResistantMicroorganismIdentificationcomposantsElementaires/FRServiceRequestLMCDAFHIR.fshfr-lm-demande-examen-ou-suiviFRLMServiceRequestcomposantsElementaires/FRSpecimenLMCDAFHIR.fshfr-lm-prelevementFRLMSpecimen(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
input/fsh/MappingLM_CDA_FHIR_Corps/, la correspondance complète entre le slug français cassé et l'Idréel du Modèle Logique cible (relecture métier requise pour les cas ambigus commefr-lm-dispositif-medical-entreeutilisé identiquement parFRDeviceRequestLMCDAFHIR.fshetFRDeviceUseStatementLMCDAFHIR.fsh, etfr-lm-crbio-chapitre/fr-lm-crbio-sous-chapitredont la correspondance avec les Modèles Logiques actuels de la section laboratoire reste à confirmer).* group[+].source(et le cas échéant* group[+].targets'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=Logicalname, PascalCase, sans tiret).* group[=].element[+].code = #FRLMXxx...) utilisent encore d'anciens noms de classe obsolètes (commeFRLMCRBIOChapitre) et les aligner sur les noms de propriétés actuels des Modèles Logiques correspondants.group[+].source/targetde type.../StructureDefinition/FRLMxxxcorrespond bien à unIdde Modèle Logique existant dansinput/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 desIdde Logical Model FSH (qui déterminent lepathFHIR), mais de simples chaînes de caractères dans des instructionsgroup[+].source/targetd'unConceptMap/StructureMapd'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 desource/targetne 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.