You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
srcDataSet.patient as srcPatient -> tgtBundle.entry as tgtPatientEntry, tgtPatientEntry.resource = create("Patient") as newPatient then {
25
26
srcPatient then patient(srcPatient, newPatient) "setPatient";
26
-
srcDataSet.sejour as srcSejour -> tgtBundle.entry as tgtEntry, tgtEntry.resource = create("Encounter") as newEncounter then {
27
+
srcPatient then setEntryRequestAndFullUrl(newPatient,tgtPatientEntry) "setRequestAndFullUrl";
28
+
srcDataSet.sejour as srcSejour where patientNi.reference = ('PatientCore/' + %srcPatient.patientNi.toString()) -> tgtBundle.entry as tgtEncounterEntry, tgtEncounterEntry.resource = create("Encounter") as newEncounter then {
27
29
srcSejour then encounter(srcSejour, newPatient, newEncounter) "setEncounter";
28
-
srcDataSet.biology as srcBiology where sejourNi.reference = ('SejourCore/' + %srcSejour.sejourNi.toString()) -> tgtBundle.entry as tgtEntry, tgtEntry.resource = create("Observation") as newObservation then {
29
-
srcBiology then observation(srcBiology, newPatient, newEncounter, newObservation) "setBiology";
30
+
srcSejour then setEntryRequestAndFullUrl(newEncounter,tgtEncounterEntry) "setRequestAndFullUrl";
31
+
srcDataSet.biology as srcBiology where sejourNi.reference = ('SejourCore/' + %srcSejour.sejourNi.toString()) -> tgtBundle.entry as tgtBiologyEntry, tgtBiologyEntry.resource = create("Observation") as newObservation then {
32
+
srcBiology then observationBiol(srcBiology, newPatient, newEncounter, newObservation) "setBiology";
33
+
srcBiology then setEntryRequestAndFullUrl(newObservation,tgtBiologyEntry) "setRequestAndFullUrl";
// srcPatient.name as srcPatientName -> tgtPatientName.family = srcPatientName "setName";
55
+
// srcPatient.firstName as srcPatientFirstName -> tgtPatientName.given = srcPatientFirstName "setFirstName";
56
+
// les trois lignes précédentes marchent dans matchbox mais génèrent une erreur au QA. La solution ci dessous marche dans matchbox et ne génère pas d'erreur au QA.
57
+
srcPatient.name as srcPatientName -> tgtPatientName.family = srcPatientName then {
58
+
srcPatient.firstName as srcPatientFirstName -> tgtPatientName.given = srcPatientFirstName,
srcSejour.sejourNi 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
srcSejour.sejourType as srcSejourType -> tgtEncounter.type = translate(srcSejourType, 'https://aphp.fr/ig/fhir/dm/ConceptMap/DpiEncounterType2SemanticLayerEncounterType', 'CodeableConcept') "setEncounterType";
59
67
srcPatient.id as patientId -> tgtEncounter.subject = create("Reference") as newSubject then setSubjectReference(patientId, newSubject) "setSubjectReference";
60
-
srcSejour.patientNi "patientNi";// fk vers le patient
68
+
srcSejour.patientNi "patientNi";// fk vers le patient à conserver pour la construction auto du périmètre final
61
69
srcSejour -> tgtEncounter.period = create("Period") as newActualPeriod then {
62
70
srcSejour.sejourStart as srcPeriodStart -> newActualPeriod.start = srcPeriodStart "setStart";
63
71
srcSejour.sejourEnd as srcPeriodEnd -> newActualPeriod.end = srcPeriodEnd "setEnd";
64
72
} "setPeriod";
65
73
}
66
74
67
75
group setEncounterMeta(source srcNi, target tgtMeta : FHIRMeta) {
srcBiology.biologyNi as srcNi -> tgtObservation.meta as tgtMeta then setBiologyMeta(srcNi, tgtMeta) "setMeta";
78
86
srcPatient.id as patientId -> tgtObservation.subject = create("Reference") as newSubject then setSubjectReference(patientId, newSubject) "setSubjectReference";
79
87
srcEncounter.id as encounterId -> tgtObservation.encounter = create("Reference") as newEncounter then setEncounterReference(encounterId, newEncounter) "setEncounterReference";
80
-
srcBiology.biologyDate as biologyDate -> tgtObservation.effective = biologyDate "setDate";
88
+
srcBiology.biologyDatePrel as biologyDatePrel -> tgtObservation.effective = biologyDatePrel "setDate";
81
89
srcBiology.biologyCode as biologyCode -> tgtObservation.code = cc('http://loinc.org', biologyCode) "setCode";
82
90
srcBiology.biologyValue -> tgtObservation.value = create('Quantity') as tgtObsQuantity then {
83
91
srcBiology.biologyValue as biologyValue -> tgtObsQuantity.value = biologyValue "setValue";
Copy file name to clipboardExpand all lines: input/pagecontent/glossary.md
+23-1Lines changed: 23 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -22,7 +22,7 @@ Par exemple, pour le questionnaire de représentation du modèle métier de l'us
22
22
23
23
##### Cas particulier des StructureDefinition
24
24
25
-
- id doit préciser à quel type il s’applique (c’est-à-dire son Base)
25
+
- id doit préciser à quel type il s'applique (c'est-à-dire son Base)
26
26
27
27
Par exemple pour le profil dédié au poids :
28
28
- id = name = DMObservationBodyWeight
@@ -33,6 +33,28 @@ Par exemple pour le profil dédié au poids :
33
33
Id est un UUID.
34
34
On pourra colliger les ressources afférentes à un cas d'usage dans un fichier dont le nom explicitera le cas d'usage.
35
35
36
+
#### NammingSystem
37
+
38
+
La plupart des ressources FHIR propose un attribut `identifier` qui permet de renseigner 0 à n identifiants métiers a une ressource. Ces identifiants permettent notamment de créer des liens logiques entre les ressources (via les attributs de type `reference` et leur attribut `identifier`).
39
+
40
+
Cet attribut `identifier` est particulièrement intéressant pour le lineage des ressources, lorsqu'il s'agit de créer une ressource FHIR à partir d'un objet déjà existant, dans un autre format, au sein du système d'information.
41
+
42
+
Cela impose néanmoins une gestion rigoureuse des namespace. On part sur le principe que les namespaces seront défini comme suit :
43
+
44
+
[base APHP]/[type de ressource FHIR]/[identifiant unique d'un processus de génération d'identifiant unique]
45
+
46
+
avec :
47
+
-[base APHP] = `https://aphp.fr/meta`
48
+
-[type de ressource FHIR] appartient au ValueSet [ResourceType](http://hl7.org/fhir/ValueSet/resource-types)
49
+
-[identifiant de processus] est à construire en interne, par exemple : `ipp` (il n'y a qu'un processus de création d'ipp à l'APHP : par le SIU Orbis), `ProduitChimioAVC` (il y a des médicament dans CHIMIO et dans d'autres outils, plusieurs CHIMIO et plusieurs 'type' de médicament dans chaque CHIMIO)
50
+
51
+
Plusieurs stratégies sont envisageable pour s'assurer de l'unicité des namespace _by design_ :
52
+
- mettre en oeuvre un registre interne des namespace : un serveur FHIR dans lequel chaque responsable de namespace enregistrerait une ressource NamingSystem pour chacun des namespace qu'il gère, en s'assurant qu'il n'existe pas déjà.
53
+
- fournir à chaque responsable de namespace un code unique qui serait inclus dans l'identifiant de processus du namespace
54
+
- consolider un codesystem contenant tous les namespace utiles, charge à chaque responsable de namespace d'enrichir ce CS en tant que de besoin.
55
+
56
+
Une difficulté réside dans le souhait, exprimé par des responsable de namespace, de ne pas publicisé, auprès de partenaires extérieurs, certains namespace.
57
+
36
58
#### uri des sources
37
59
On décide, pour chaque ressource FHIR intégrée dans le Hub de donnée, de préciser l'application source de cette ressource via l'attribut `meta.source`. Cet attribut attend une uri qui sera, autant que possible, créée selon la convention suivante :
0 commit comments