Skip to content

Commit 31d0ffe

Browse files
Manage no info and missing data
1 parent 1d7b7e9 commit 31d0ffe

6 files changed

Lines changed: 211 additions & 3 deletions

File tree

input/fsh/RessourcesFHIRCorps/aliases.fsh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// Extensions
2+
Alias: $data-absent-reason = http://hl7.org/fhir/StructureDefinition/data-absent-reason
23
Alias: $ihe-ext-medication-productname = https://profiles.ihe.net/PHARM/MPD/StructureDefinition/ihe-ext-medication-productname
34
Alias: $ihe-ext-medication-classification = https://profiles.ihe.net/PHARM/MPD/StructureDefinition/ihe-ext-medication-classification
45
Alias: $ihe-ext-medication-characteristic = https://profiles.ihe.net/PHARM/MPD/StructureDefinition/ihe-ext-medication-characteristic
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
Instance: example-allergy-intolerance-data-absent-reason
2+
InstanceOf: FRAllergyIntoleranceDocument
3+
Title: "Example - AllergyIntolerance avec Data Absent Reason"
4+
Description: """Exemple illustrant l'usage de l'extension `data-absent-reason` sur les éléments
5+
obligatoires de la ressource AllergyIntolerance dont la valeur est inconnue ou
6+
temporairement indisponible.
7+
8+
Cas d'usage illustrés :
9+
- `code` (1..1) : l'agent allergique est inconnu → code `unknown`
10+
- `onsetPeriod.start` (1..1) : la date de début est temporairement indisponible → code `temp-unknown`
11+
- `reaction.manifestation` (1..*) : la manifestation clinique est inconnue → code `unknown`"""
12+
Usage: #example
13+
14+
// L'identifiant de l'entrée
15+
* identifier[+].system = "urn:ietf:rfc:3986"
16+
* identifier[=].value = "urn:uuid:7f0e9c1a-3b2d-4e5f-8a6b-1c2d3e4f5a6b"
17+
18+
// Statut clinique et de vérification
19+
* clinicalStatus = http://terminology.hl7.org/CodeSystem/allergyintolerance-clinical#active "Active"
20+
* verificationStatus = http://terminology.hl7.org/CodeSystem/allergyintolerance-verification#unconfirmed "Unconfirmed"
21+
22+
// Agent allergique (1..1)
23+
// L'agent allergique est inconnu → extension data-absent-reason avec code "unknown"
24+
* code.extension[+].url = $data-absent-reason
25+
* code.extension[=].valueCode = #unknown
26+
27+
// Patient
28+
* patient.reference = "Patient/exemple-patient"
29+
* patient.display = "Exemple Patient"
30+
31+
// Période d'apparition (onsetPeriod.start obligatoire 1..1)
32+
// La date de début est temporairement indisponible (patient inconscient au moment de la saisie)
33+
// → extension data-absent-reason avec code "temp-unknown"
34+
* onsetPeriod.start.extension[+].url = $data-absent-reason
35+
* onsetPeriod.start.extension[=].valueCode = #temp-unknown
36+
37+
// Réaction (reaction.manifestation obligatoire 1..*)
38+
// La manifestation clinique est inconnue → extension data-absent-reason avec code "unknown"
39+
* reaction[+].manifestation[+].extension[+].url = $data-absent-reason
40+
* reaction[=].manifestation[=].extension[=].valueCode = #unknown
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
Instance: example-procedure-data-absent-reason
2+
InstanceOf: FRProcedureDocument
3+
Title: "Example - Procedure avec Data Absent Reason"
4+
Description: """Exemple illustrant l'usage de l'extension `data-absent-reason` sur les éléments
5+
obligatoires de la ressource Procedure dont la valeur est inconnue ou temporairement indisponible.
6+
7+
Cas d'usage illustrés :
8+
- `code` (1..1 MS) : l'acte est inconnu → extension `data-absent-reason` avec code `unknown`
9+
(liaison extensible → l'extension peut se substituer au codage)
10+
- `performedDateTime` (MS) : la date de l'acte est temporairement indisponible → extension `data-absent-reason` avec code `temp-unknown`
11+
- `status` (1..1 required) : le statut est inconnu → code d'exception `unknown` du ValueSet `event-status`
12+
(liaison required → on utilise directement le code d'exception du ValueSet, pas l'extension)"""
13+
Usage: #example
14+
15+
// Identification
16+
* identifier[+].system = "urn:ietf:rfc:3986"
17+
* identifier[=].value = "urn:uuid:a1b2c3d4-e5f6-7890-abcd-ef1234567890"
18+
19+
// Statut (1..1, liaison required)
20+
// Le statut est inconnu → code d'exception "unknown" du ValueSet event-status
21+
// La liaison required interdit l'usage de data-absent-reason ; on utilise le code d'exception natif.
22+
* status = #unknown
23+
24+
// Patient
25+
* subject.reference = "Patient/exemple-patient"
26+
* subject.display = "Exemple Patient"
27+
28+
// Code de l'acte (1..1 MS, liaison extensible)
29+
// L'acte réalisé est inconnu → extension data-absent-reason avec code "unknown"
30+
// La liaison extensible autorise l'usage de data-absent-reason en l'absence de code applicable.
31+
* code.extension[+].url = $data-absent-reason
32+
* code.extension[=].valueCode = #unknown
33+
34+
// Date de l'acte (MS, performedDateTime)
35+
// La date est temporairement indisponible (ex : acte ancien non documenté) → code "temp-unknown"
36+
* performedDateTime.extension[+].url = $data-absent-reason
37+
* performedDateTime.extension[=].valueCode = #temp-unknown

input/fsh/RessourcesFHIRCorps/profils/FRAllergyIntoleranceDocument.fsh

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,6 @@ Description: "FRAllergyIntoleranceDocument est un profil utilisé pourdécrire u
1212
* type MS
1313
* type ^short = "Type d'allergie ou d'intolérance"
1414
* type from FRValueSetAllergyInoleranceTypeDocument (required)
15-
* type MS
16-
* type ^short = "Type d'allergie ou d'intolérance"
17-
* type from FRValueSetAllergyInoleranceTypeDocument (required)
1815
* code 1..1 MS
1916
* code ^short = "agent allergique"
2017
* code from FRValueSetAllergyCodeDocument (extensible)

input/pagecontent/ressourcesFHIR-struc-gen.md

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,132 @@ La norme FHIR permet d’indiquer de façon optionnelle le rattachement d'une se
152152
Chaque entrée d'un document peut avoir un **subject**. Si l'entrée ne contient pas de subject, l’entrée concerne la personne indiquée dans l'élément **Composition.section.focus** de la section. Si la section ne contient pas d'élément **Composition.section.focus**, la section concerne la personne indiquée dans l'élément **subject** du document.
153153
C’est le principe de propagation du contexte et qui part du document vers les sections, sous-sections, entrées et sous-entrées emboitées.
154154

155+
#### Gestion des sections vides : section.emptyReason
156+
157+
En FHIR, l'élément `section.emptyReason` permet d'indiquer la raison pour laquelle une section est vide, c'est-à-dire qu'elle ne contient aucune entrée structurée. Son utilisation est conditionnée par le caractère obligatoire de la section dans le modèle de document.
158+
159+
##### Sections obligatoires
160+
161+
Pour les sections obligatoires (ex : Allergies et intolérances, Problèmes, Traitements), lorsqu'aucune entrée structurée n'est fournie, l'élément `section.emptyReason` **DOIT** être renseigné avec une valeur issue du JDV [`list-empty-reason`](http://hl7.org/fhir/ValueSet/list-empty-reason).
162+
163+
| Code | Libellé | Définition |
164+
|------|---------|------------|
165+
| `nilknown` | Pas d'élément connu | Constatation clinique d'un professionnel de santé concluant, après investigation, à l'absence d'éléments connus pour cette donnée. **Cette valeur ne peut pas être fournie par défaut par un SIS en l'absence d'informations.** <br><br>Exemples :<br>- *Allergies* : le patient ou son représentant a déclaré n'avoir connaissance d'aucune allergie.<br>- *Médicaments* : le patient déclare ne prendre aucun médicament.<br>- *Diagnostics / problèmes* : le patient déclare qu'aucun événement connu ne doit être enregistré. |
166+
| `notasked` | Non demandé | Aucune investigation n'a été menée pour déterminer s'il existe des éléments pour cette liste. |
167+
| `withheld` | Non divulgué | Aucune information n'est fournie pour des raisons de confidentialité. Cela ne signifie pas nécessairement que le contenu est sensible ; il peut s'agir d'une décision personnelle du patient. |
168+
| `unavailable` | Indisponible | L'information est indisponible au moment de la production du document (ex : patient inconscient). |
169+
| `notstarted` | Non démarré | Les actions permettant d'obtenir cette information n'ont pas encore démarré. |
170+
| `closed` | Fermé | Cette liste est désormais fermée ou n'est plus pertinente ni utile. |
171+
172+
##### Sections facultatives
173+
174+
Lorsqu'aucune donnée n'est disponible pour une section facultative, **le producteur ne doit pas créer la section**. L'élément `section.emptyReason` ne s'applique pas aux sections facultatives absentes.
175+
176+
> **En résumé** : `section.emptyReason` s'applique uniquement aux **sections obligatoires vides**. Pour les sections facultatives, l'absence de données se traduit simplement par l'absence de la section dans le document.
177+
178+
---
179+
180+
### Gestion de l'absence de données au niveau des éléments
181+
182+
En FHIR, l'absence d'une valeur dans un élément structuré doit être gérée de manière explicite lorsque cela est requis. Les règles diffèrent selon la cardinalité de l'élément et selon que la donnée est codée ou non.
183+
184+
#### Données optionnelles
185+
186+
*(cardinalité `0..1` ou `0..*`)*
187+
188+
Si l'information n'est pas disponible, quelle que soit la raison, **ne pas créer l'élément**. L'absence de l'élément dans la ressource est suffisante pour exprimer l'indisponibilité.
189+
190+
#### Données obligatoires
191+
192+
*(cardinalité `1..1` ou `1..*`)*
193+
194+
Si l'information n'est pas disponible, **le motif de l'absence DOIT être précisé** via les mécanismes décrits ci-dessous.
195+
196+
##### Données obligatoires non codées
197+
198+
Utiliser l'extension [**Data Absent Reason**](http://hl7.org/fhir/StructureDefinition/data-absent-reason) avec :
199+
200+
* `"url"` : `"http://hl7.org/fhir/StructureDefinition/data-absent-reason"`
201+
* `"valueCode"` : valeur issue du ValueSet [data-absent-reason](https://hl7.org/fhir/R4/valueset-data-absent-reason.html)
202+
203+
Le ValueSet [data-absent-reason](https://hl7.org/fhir/R4/valueset-data-absent-reason.html) contient les valeurs suivantes :
204+
205+
| Lvl | Code | Libellé | Définition |
206+
|-----|------|---------|------------|
207+
| 0 | `unknown` | Inconnu | Valeur inconnue. |
208+
| 1 | `asked-unknown` | Demandé - inconnu | Valeur demandée mais non connue. |
209+
| 1 | `temp-unknown` | Temporairement indisponible | Temporairement indisponible (mais pourrait ultérieurement être connue). |
210+
| 1 | `not-asked` | Non demandé | Valeur non demandée. |
211+
| 1 | `asked-declined` | Demandé - refus de réponse | Valeur demandée / refus de réponse. |
212+
| 0 | `masked` | Masqué | Valeur non disponible pour des raisons de sécurité, de confidentialité ou autres. |
213+
| 0 | `not-applicable` | Non applicable | Pas de valeur appropriée pour cet élément (par exemple, la date des dernières règles pour un homme). |
214+
| 0 | `unsupported` | Non supporté | Le système source ne gère pas cet élément. |
215+
| 0 | `as-text` | Voir narratif | Valeur fournie dans la partie narrative. |
216+
| 0 | `error` | Erreur | Valeur indisponible due à une erreur système ou de processus. |
217+
| 1 | `not-a-number` | Non numérique | La valeur numérique est indéfinie ou non représentable en raison d'une erreur de traitement des nombres à virgule flottante. |
218+
| 1 | `negative-infinity` | Borne inférieure infinie | La valeur numérique est excessivement basse et non représentable. |
219+
| 1 | `positive-infinity` | Borne supérieure infinie | La valeur numérique est excessivement élevée et non représentable. |
220+
| 0 | `not-performed` | Non effectué | La valeur n'est pas disponible car la procédure d'observation n'a pas été effectuée. |
221+
| 0 | `not-permitted` | Non autorisé | Cette valeur n'est pas autorisée dans ce contexte (par exemple, en raison des profils ou des types de données de base). |
222+
223+
**Exemple** : dans une ressource `Procedure`, lorsque la date d'exécution (`performed[x]`) est inconnue :
224+
225+
```json
226+
{
227+
"resourceType": "Procedure",
228+
...
229+
"_performedDateTime": {
230+
"extension": [
231+
{
232+
"url": "http://hl7.org/fhir/StructureDefinition/data-absent-reason",
233+
"valueCode": "unknown"
234+
}
235+
]
236+
},
237+
...
238+
}
239+
```
240+
---
241+
242+
> **Exemples complets** :
243+
>
244+
> - L'instance [example-allergy-intolerance-data-absent-reason](AllergyIntolerance-example-allergy-intolerance-data-absent-reason.html) illustre l'usage de l'extension `data-absent-reason` sur les éléments obligatoires du profil [FRAllergyIntoleranceDocument](StructureDefinition-fr-allergie-intolerance-document.html) lorsque la valeur est inconnue ou temporairement indisponible.
245+
> - L'instance [example-procedure-data-absent-reason](Procedure-example-procedure-data-absent-reason.html) illustre les deux cas de figure sur le profil [FRProcedureDocument](StructureDefinition-fr-procedure-document.html) : extension `data-absent-reason` pour les liaisons non obligatoires (`code`, `performedDateTime`), et code d'exception natif (`unknown`) pour la liaison `required` (`status`).
246+
247+
---
248+
249+
##### Données obligatoires codées
250+
251+
###### Liaison terminologique non obligatoire (`example`, `preferred` ou `extensible`)
252+
253+
Si l'information n'est pas connue et qu'il existe dans la terminologie ou le ValueSet associé **un code d'exception spécifique**, utiliser ce code en priorité.
254+
255+
> Exemple : code SNOMED CT `1287211007`*"No information available"*.
256+
257+
Dans les autres cas, utiliser l'extension [**Data Absent Reason**](http://hl7.org/fhir/StructureDefinition/data-absent-reason) avec la syntaxe suivante :
258+
259+
```json
260+
{
261+
"resourceType": "Observation",
262+
...
263+
"code": {
264+
"coding": [
265+
{
266+
"system": "http://terminology.hl7.org/CodeSystem/data-absent-reason",
267+
"code": "masked"
268+
}
269+
]
270+
},
271+
...
272+
}
273+
```
274+
275+
###### Liaison terminologique obligatoire (`required`)
276+
277+
Si l'information n'est pas connue, **utiliser un code d'exception spécifique existant** dans la terminologie ou le ValueSet associé à la donnée. L'extension `data-absent-reason` ne peut pas être utilisée en substitution d'une valeur requise.
278+
279+
Dans les autres cas, utiliser l'extension [**Data Absent Reason**](http://hl7.org/fhir/StructureDefinition/data-absent-reason)
280+
155281
### Conformité des documents FHIR
156282

157283
Les documents au format FHIR définis dans le CI-SIS doivent être conformes :

sushi-config.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -721,6 +721,13 @@ groups:
721721
- FRPatientWithNonHumanSubjectLMCDAFHIR
722722
- FRNonHumanSubjectLMCDAFHIR
723723

724+
Exemples Data Absent Reason:
725+
name: Exemples - Gestion de l'absence de données (Data Absent Reason)
726+
description: Instances d'exemple illustrant l'usage de l'extension data-absent-reason sur les éléments obligatoires des profils FHIR corps du document.
727+
resources:
728+
- example-allergy-intolerance-data-absent-reason
729+
- example-procedure-data-absent-reason
730+
724731
resources:
725732
Binary/BIO-CR-BIO-2024.01-Microbiologie-V1:
726733
name: BIO-CR-BIO_2024.01_Microbiologie_V1

0 commit comments

Comments
 (0)