Skip to content

Commit 4c8ecad

Browse files
committed
Improve Encounter + biology
1 parent 71a6e64 commit 4c8ecad

File tree

9 files changed

+93
-8
lines changed

9 files changed

+93
-8
lines changed

input/fml/usages/core/StructureMap-CorePhysical2FHIR.fml

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,19 @@ uses "https://aphp.fr/ig/fhir/dm/StructureDefinition/CoreMedicationPre" alias Me
1616
uses "http://hl7.org/fhir/StructureDefinition/Bundle" alias FHIRBundle as target
1717
uses "http://hl7.org/fhir/StructureDefinition/Patient" alias FHIRPatient as target
1818
uses "http://hl7.org/fhir/StructureDefinition/Encounter" alias FHIREncounter as target
19+
uses "http://hl7.org/fhir/StructureDefinition/Observation" alias FHIRObservation as target
1920

2021
group dataSet(source srcDataSet : DataSet, target tgtBundle : FHIRBundle) <<types>> {
2122
srcDataSet -> tgtBundle.id = uuid() "setId";
22-
srcDataSet.patient as srcPatient -> tgtBundle.entry as tgtEntry, tgtEntry.resource = create("Patient") as newPatient then patient(srcPatient, newPatient) "setPatient";
23-
srcDataSet.encounter as srcEncounter -> tgtBundle.entry as tgtEntry, tgtEntry.resource = create("Encounter") as newEncounter then encounter(srcEncounter, newEncounter) "setEncounter";
23+
srcDataSet.patient as srcPatient -> tgtBundle.entry as tgtEntry, tgtEntry.resource = create("Patient") as newPatient then {
24+
srcPatient then patient(srcPatient, newPatient) "setPatient";
25+
srcDataSet.encounter as srcEncounter -> tgtBundle.entry as tgtEntry, tgtEntry.resource = create("Encounter") as newEncounter then {
26+
srcEncounter then encounter(srcEncounter, newPatient, newEncounter) "setEncounter";
27+
srcDataSet.biology as srcBiology -> tgtBundle.entry as tgtEntry, tgtEntry.resource = create("Observation") as newObservation then {
28+
srcBiology where (%srcBiology.encounterNi = %srcEncounter.encounterNi) then observation(srcBiology, newPatient, newEncounter, newObservation) "setBiology";
29+
} "createObservation";
30+
} "createEncounter";
31+
} "createPatient";
2432
}
2533

2634
group patient(source srcPatient : PatientTable, target tgtPatient : FHIRPatient) {
@@ -42,13 +50,38 @@ group setHumainName(source srcPatient : PatientTable, target tgtPatientName) {
4250
srcPatient.firstName as srcPatientFirstName -> tgtPatientName.given = srcPatientFirstName "setFirstName";
4351
}
4452

45-
group encounter(source srcEncounter : EncounterTable, target tgtEncounter : FHIREncounter) {
53+
group encounter(source srcEncounter : EncounterTable, source srcPatient : FHIRPatient, target tgtEncounter : FHIREncounter) {
4654
srcEncounter -> tgtEncounter.id = uuid() "setId";
4755
srcEncounter.encounterNi as srcNi -> tgtEncounter.meta as tgtMeta then setEncounterMeta(srcNi, tgtMeta) "setMeta"; // copie la valeur du champ patientNi de la table Patient dans l'élément id de la ressource FHIR Patient
48-
srcEncounter.encounterType as srcEncounterType -> tgtEncounter.type = translate(srcEncounterType, 'https://aphp.fr/ig/fhir/dm/ConceptMap/DpiEncounterType2SemanticLayerEncounterType') "setEncounterType";
49-
srcEncounter.patientNi "patientDBId"; // fk vers le patient
56+
srcEncounter -> tgtEncounter.status = c('http://hl7.org/fhir/encounter-status', 'completed') "setStatus";
57+
srcEncounter.encounterType as srcEncounterType -> tgtEncounter.type = translate(srcEncounterType, 'https://aphp.fr/ig/fhir/dm/ConceptMap/DpiEncounterType2SemanticLayerEncounterType', 'CodeableConcept') "setEncounterType";
58+
srcPatient.id as patientId -> tgtEncounter.subject = create("Reference") as newSubject then setSubjectReference(patientId, newSubject) "setSubjectReference";
59+
srcEncounter.patientNi "patientNi";// fk vers le patient
60+
srcEncounter -> tgtEncounter.period = create("Period") as newActualPeriod then {
61+
srcEncounter.encounterStart as srcPeriodStart -> newActualPeriod.start = srcPeriodStart "setStart";
62+
srcEncounter.encounterEnd as srcPeriodEnd -> newActualPeriod.end = srcPeriodEnd "setEnd";
63+
} "setPeriod";
5064
}
5165

5266
group setEncounterMeta(source srcNi, target tgtMeta) {
5367
srcNi -> tgtMeta.source = ('https://aphp.fr/fhir/Endpoint/dpi/EncounterTable' + '/' + srcNi.toString()) "setSource";
5468
}
69+
70+
group setSubjectReference(source srcPatientId , target newSubject) {
71+
srcPatientId -> newSubject.reference = ('Patient/' + %srcPatientId.toString()) "setReference";
72+
}
73+
74+
group observation(source srcBiology : BiologyTable, source srcPatient : FHIRPatient, source srcEncounter : FHIREncounter, target tgtObservation : FHIRObservation) {
75+
srcBiology -> tgtObservation.id = uuid() "setId";
76+
srcBiology.biologyNi as srcNi -> tgtObservation.meta as tgtMeta then setBiologyMeta(srcNi, tgtMeta) "setMeta";
77+
srcPatient.id as patientId -> tgtObservation.subject = create("Reference") as newSubject then setSubjectReference(patientId, newSubject) "setSubjectReference";
78+
srcEncounter.id as encounterId -> tgtObservation.encounter = create("Reference") as newEncounter then setEncounterReference(encounterId, newEncounter) "setEncounterReference";
79+
}
80+
81+
group setBiologyMeta(source srcNi, target tgtMeta) {
82+
srcNi -> tgtMeta.source = ('https://aphp.fr/fhir/Endpoint/dpi/BiologyTable' + '/' + srcNi.toString()) "setSource";
83+
}
84+
85+
group setEncounterReference(source srcEncounterId, target newEncounter) {
86+
srcEncounterId -> newEncounter.reference = ('Encounter/' + %srcEncounterId.toString()) "setReference";
87+
}

input/fsh/applications/dpi/logicals/StructureDefinition-CoreBiology.fsh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,7 @@ Table CORE.BIOLOGY (DDL)
1212
* dateCreat 1..1 date "DATE_CREAT"
1313
* dateModif 1..1 date "DATE_MODIF"
1414
* dateRemove 0..1 date "DATE_REMOVE"
15+
* biologyCode 0..1 string "null"
16+
* biologyValue 0..1 decimal "null"
17+
* biologyUnit 0..1 string "null"
18+
* biologyDate 0..1 date "null"

input/fsh/applications/dpi/logicals/StructureDefinition-CoreEncounter.fsh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,8 @@ Table CORE.ENCOUNTER (DDL)
99
* encounterNi 1..1 integer "ENCOUNTER_NI"
1010
* patientNi 1..1 Reference(CorePatient) "PATIENT_NI"
1111
* encounterType 1..1 string "ENCOUNTER_TYPE"
12+
* dateCreat 1..1 date "null"
13+
* dateModif 1..1 date "null"
14+
* dateRemove 0..1 date "null"
15+
* encounterStart 0..1 date "null"
16+
* encounterEnd 0..1 date "null"

input/images-source/core-map.plantuml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,17 @@ entity CORE.ENCOUNTER {
2020
* {field} ENCOUNTER_NI NUMBER (38, 0) NOT NULL
2121
* {field} PATIENT_NI NUMBER (38, 0) NOT NULL
2222
* {field} ENCOUNTER_TYPE VARCHAR2 (50) NOT NULL
23+
* {field} ENCOUNTER_START DATE NULL
24+
* {field} ENCOUNTER_END DATE NULL
25+
}
26+
27+
entity CORE.BIOLOGY {
28+
* {field} BIOLOGY_NI NUMBER (38, 0) NOT NULL
2329
}
2430

2531

2632

2733
CORE.ENCOUNTER }o..o| CORE.PATIENT
2834

35+
2936
@enduml

input/images-source/core-mpd.plantuml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ entity CORE.ENCOUNTER {
2121
* {field} ENCOUNTER_NI NUMBER (38, 0) NOT NULL
2222
* {field} PATIENT_NI NUMBER (38, 0) NOT NULL
2323
* {field} ENCOUNTER_TYPE VARCHAR2 (50) NOT NULL
24+
* {field} DATE_CREAT DATE NOT NULL
25+
* {field} DATE_MODIF DATE NOT NULL
26+
* {field} DATE_REMOVE DATE NULL
27+
* {field} ENCOUNTER_START DATE NULL
28+
* {field} ENCOUNTER_END DATE NULL
2429
}
2530

2631
entity CORE.BIOLOGY {
@@ -30,6 +35,10 @@ entity CORE.BIOLOGY {
3035
* {field} DATE_CREAT DATE NOT NULL
3136
* {field} DATE_MODIF DATE NOT NULL
3237
* {field} DATE_REMOVE DATE NULL
38+
* {field} BIOLOGY_DATE DATE NULL
39+
* {field} BIOLOGY_CODE VARCHAR2 (50) NULL
40+
* {field} BIOLOGY_VALUE NUMBER (4, 2) NULL
41+
* {field} BIOLOGY_UNIT VARCHAR2 (10) NULL
3342
}
3443

3544
entity CORE.CLINICAL {

input/sql/applications/dpi/CORE.BIOLOGY.sql

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ CREATE TABLE CORE.BIOLOGY (
1111
DATE_CREAT DATE NOT NULL,
1212
DATE_MODIF DATE NOT NULL,
1313
DATE_REMOVE DATE NULL,
14+
BIOLOGY_DATE DATE NULL,
15+
BIOLOGY_CODE VARCHAR2(50),
16+
BIOLOGY_VALUE NUMBER(4,2),
17+
BIOLOGY_UNIT VARCHAR2(10),
1418
CONSTRAINT PK_BIOLOGY PRIMARY KEY (BIOLOGY_NI),
1519
CONSTRAINT SYS_C00109590 CHECK ("BIOLOGY_NI" IS NOT NULL),
1620
CONSTRAINT SYS_C00109591 CHECK ("DATE_CREAT" IS NOT NULL),

input/sql/applications/dpi/CORE.ENCOUNTER.sql

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@ CREATE TABLE CORE.ENCOUNTER (
88
ENCOUNTER_NI NUMBER(38,0) NOT NULL,
99
PATIENT_NI NUMBER(38,0) NOT NULL,
1010
ENCOUNTER_TYPE VARCHAR2(50) NOT NULL,
11+
DATE_CREAT DATE NOT NULL,
12+
DATE_MODIF DATE NOT NULL,
13+
DATE_REMOVE DATE NULL,
14+
ENCOUNTER_START DATE NULL,
15+
ENCOUNTER_END DATE NULL,
1116
CONSTRAINT PK_ENCOUNTER PRIMARY KEY (ENCOUNTER_NI),
1217
CONSTRAINT SYS_C00109590 CHECK ("ENCOUNTER_NI" IS NOT NULL),
1318
CONSTRAINT SYS_C00109591 CHECK ("ENCOUNTER_TYPE" IS NOT NULL),

input/test-map/usages/core/CoreDataSet-test.json

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,29 @@
1111
"encounter": [{
1212
"encounterNi": 1,
1313
"patientNi": 1,
14-
"encounterType": "1"
14+
"encounterType": "1",
15+
"dateCreat": "2025-02-04",
16+
"dateModif": "2025-02-04",
17+
"encounterStart": "2025-02-04",
18+
"encounterEnd": "2025-02-05"
1519
},
1620
{
1721
"encounterNi": 2,
1822
"patientNi": 1,
19-
"encounterType": "1"
23+
"encounterType": "1",
24+
"dateCreat": "2025-02-04",
25+
"dateModif": "2025-02-04",
26+
"encounterStart": "2025-03-04"
27+
}],
28+
"biology": [{
29+
"biologyNi": 1,
30+
"encounterNi": 1,
31+
"patientNi": 1,
32+
"dateCreat": "2025-02-04",
33+
"dateModif": "2025-02-04",
34+
"biologyDate": "2025-02-04",
35+
"biologyCode": "29463-7",
36+
"biologyValue": "45.5",
37+
"biologyUnit": "kg"
2038
}]
2139
}

sushi-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
id: aphp.fhir.fr.dm
22
canonical: https://aphp.fr/ig/fhir/dm
33
name: DM
4-
title: Guide d'implémentation pour le Data Management
4+
title: Data Management with FHIR
55
description: "Ce guide d'implémentation décrit: (i) le processus d'alimentation d'un hub de données de santé, (ii) les cas d'usages traités et, in fine, (iii) la liste des données présentes dans le hub de données de santé d'un SIH."
66
status: draft
77
version: 0.1.0

0 commit comments

Comments
 (0)