Skip to content

Commit 76f54aa

Browse files
Finalize RDF FHIR Observation example
1 parent 9a49cf8 commit 76f54aa

2 files changed

Lines changed: 106 additions & 127 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@ fsh-generated/
66
input-cache/
77
root/
88
template/
9+
.idea/

input/pagecontent/dynamic-data.md

Lines changed: 105 additions & 127 deletions
Original file line numberDiff line numberDiff line change
@@ -1,168 +1,146 @@
11
### Pod Organization
2-
Data that is stored in Solid pods is organized in containers and resources. Access can be granted to containers and resources. But in order to find data back and not to share too much information to an application, we propose an organisation structure of data in the pod as follows. The structure follows the resources definitions from [FHIR](https://www.hl7.org/fhir/resourcelist.html).
2+
Data that is stored in Solid pods is organized in containers and resources. Access can be granted to containers and resources. But in order to find data back and not to share too much information to an application, we propose an organisation structure of data in the pod as follows. The structure follows the resources definitions from [FHIR](https://www.hl7.org/fhir/resourcelist.html).
33

4-
For instance if an application is looking for a specific questionnaireResponse, the application should only be given access to the container where all questionnaireResponses are stored.
4+
For instance if an application is looking for a specific questionnaireResponse, the application should only be given access to the container where all questionnaireResponses are stored.
55

6-
To also include information about the resource in the container that is used to store resources, we propose to include the namespace of the FHIR resource as URL encoded.
6+
To also include information about the resource in the container that is used to store resources, we propose to include
7+
the namespace of the FHIR resource as URL encoded.
78

89
All information in Welldata will be placed under the following root container of We Are:
910

1011
`<user pod>/weare/`
1112

12-
1313
### Patient
1414

15-
Information about the patient that fits in the FHIR resource [patient](https://www.hl7.org/fhir/patient.html) must be stored at the following location:
15+
Information about the patient that fits in the FHIR resource [patient](https://www.hl7.org/fhir/patient.html) must be
16+
stored at the following location:
1617

1718
`<user pod>/weare/https%3A%2F%2Fwww.hl7.org%2Ffhir%2FPatient/<uuid>.ttl`
1819

1920
Information that will be stored in the resource:
21+
2022
- Gender
2123
- BirthDate
2224
- Address as a [FHIR datatype](https://build.fhir.org/datatypes.html#Address)
2325
- Language as codeable concept in communication
24-
- Email
26+
- Email
2527
- Tel
2628

2729
### Observation
28-
Observations are stored in the pod at the following location as a [FHIR resource](https://www.hl7.org/fhir/observation.html)
30+
31+
Observations are stored in the pod at the following location as
32+
a [FHIR resource](https://www.hl7.org/fhir/observation.html)
2933

3034
`<user pod>/weare/https%3A%2F%2Fwww.hl7.org%2Ffhir%2FObservation/<uuid>.ttl`
3135

32-
Observations can contain all measured values about a patient. In our project we cover the following observations with the according SNOMED-CT or Loinc codes:
36+
Observations can contain all measured values about a patient. In our project we cover the following observations with
37+
the according SNOMED-CT or Loinc codes:
3338

34-
| Name | Description | CODE | Intake vragenlijst | GGDM | Zipster | Selfcare |
39+
| Name | Description | CODE | Intake vragenlijst | GGDM | Zipster | Selfcare |
3540
| -------- | -------- | -------- | -------- | -------- | -------- | -------- |
36-
| physical_limitation | aanwezigheid fysieke beperking | 32572006 (Snomed) | x | | x | |
37-
| length | Lengte (cm) | 50373000 (Snomed) | x | x | | x |
38-
| weight | Gewicht (kg) | 27113001 (Snomed) | x | x | | x |
39-
| Waist_circumference | Buikomtrek (cm) | 276361009 (Snomed) | | x | | x |
40-
| SBP | Systolische bloeddruk (mmHg) | 271649006 (Snomed) | | x | | x |
41-
| cholesterol_total | Totaal cholesterol | 77068002 (Snomed) | | x | | x |
42-
| cholesterol_hdl | HDL cholesterol | 02737005 (Snomed) | | x | | x |
43-
| cholesterol_ratio | Totaal / HDL cholesterol | 313811003 (Snomed) | | x | | x |
44-
| stress | Stress ervaring | 68011-6 (Loinc) | x | | x | |
45-
| daily_life | Dagelijks leven | 91621-3 (Loinc) | x | | | x |
46-
| social_contact | Voldoening uit sociale contacten | 61581-5 (Loinc) | x | | x | x |
47-
| physical_exercise | beweegminuten | 228450008 (Snomed) | x | x | | x |
48-
| smoking | roken (ja/nee) | 63638-1 (Loinc) & 77176002 (Snomed) | x | x | | |
49-
| smoking_cigarettes | Hoeveel sigaretten per dag roken | 63640-7 (Loinc) | x | x | | |
50-
| alcohol | Alcohol drinken | 897148007 (Snomed) | x | x | | |
51-
| alcohol_Frequency | How often do you have a drink containing alcohol | 68518-0 (Loinc) | x | x | | |
52-
| alcohol_normalConsumption | How many standard drinks containing alcohol do you have on a typical day? | 68519-8 (Loinc) | x | x | | |
53-
| alcohol_excessiveConsumption | How often do you have 6 or more drinks on 1 occasion? | 68520-6 (Loinc) | x | x | | |
54-
| birthdate | geboortedatum (dd/mm/yyyy) | 184099003 (Snomed) | x | x | x | |
55-
| postcode | postcode | 184099003 (Snomed) | x | x | x | |
56-
| work | werksituatie | / | x | | x | |
57-
58-
More information can be found in the sharepoint excel: [Appendix 3. Alignering basis-set met parameters in project applicaties](https://vitoresearch.sharepoint.com/:x:/r/sites/21309-mydata4ourhealth2/Shared%20Documents/General/01%20Werkpakketten/WP3/A.3.1/Deliverables%2031-05-2025/Appendix%203.%20Alignering%20basis-set%20met%20parameters%20in%20project%20applicaties.xlsx?d=w12efbd9a8b924a709fa4dca1e92a1b84&csf=1&web=1&e=gslaTs)
59-
60-
61-
62-
63-
An example of each observation can be found below:
41+
| physical_limitation | aanwezigheid fysieke beperking | 32572006 (Snomed) | x | | x | |
42+
| length | Lengte (cm) | 50373000 (Snomed) | x | x | | x |
43+
| weight | Gewicht (kg) | 27113001 (Snomed) | x | x | | x |
44+
| Waist_circumference | Buikomtrek (cm) | 276361009 (Snomed) | | x | | x |
45+
| SBP | Systolische bloeddruk (mmHg) | 271649006 (Snomed) | | x | | x |
46+
| cholesterol_total | Totaal cholesterol | 77068002 (Snomed) | | x | | x |
47+
| cholesterol_hdl | HDL cholesterol | 02737005 (Snomed) | | x | | x |
48+
| cholesterol_ratio | Totaal / HDL cholesterol | 313811003 (Snomed) | | x | | x |
49+
| stress | Stress ervaring | 68011-6 (Loinc) | x | | x | |
50+
| daily_life | Dagelijks leven | 91621-3 (Loinc) | x | | | x |
51+
| social_contact | Voldoening uit sociale contacten | 61581-5 (Loinc) | x | | x | x |
52+
| physical_exercise | beweegminuten | 228450008 (Snomed) | x | x | | x |
53+
| smoking | roken (ja/nee) | 63638-1 (Loinc) & 77176002 (Snomed) | x | x | | |
54+
| smoking_cigarettes | Hoeveel sigaretten per dag roken | 63640-7 (Loinc) | x | x | | |
55+
| alcohol | Alcohol drinken | 897148007 (Snomed) | x | x | | |
56+
| alcohol_Frequency | How often do you have a drink containing alcohol | 68518-0 (Loinc) | x | x | | |
57+
| alcohol_normalConsumption | How many standard drinks containing alcohol do you have on a typical day? | 68519-8 (Loinc) | x | x | | |
58+
| alcohol_excessiveConsumption | How often do you have 6 or more drinks on 1 occasion? | 68520-6 (Loinc) | x | x | | |
59+
| birthdate | geboortedatum (dd/mm/yyyy) | 184099003 (Snomed) | x | x | x | |
60+
| postcode | postcode | 184099003 (Snomed) | x | x | x | |
61+
| work | werksituatie | / | x | | x | |
62+
63+
More information can be found in the sharepoint
64+
excel: [Appendix 3. Alignering basis-set met parameters in project applicaties](https://vitoresearch.sharepoint.com/:x:/r/sites/21309-mydata4ourhealth2/Shared%20Documents/General/01%20Werkpakketten/WP3/A.3.1/Deliverables%2031-05-2025/Appendix%203.%20Alignering%20basis-set%20met%20parameters%20in%20project%20applicaties.xlsx?d=w12efbd9a8b924a709fa4dca1e92a1b84&csf=1&web=1&e=gslaTs)
65+
66+
An example of each type of observation can be found below:
6467

6568
```
69+
# Use your pod root below.
70+
@base <https://storage.sandbox-pod.datanutsbedrijf.be/a96561f7-3b6a-4631-9e6e-ad19f47e0f81/weare/http%3A%2F%2Fhl7.org%2Ffhir%2FObservation/84cc49e7-b022-4c6c-8122-f7d14e2bc658> .
6671
@prefix fhir: <http://hl7.org/fhir/> .
6772
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
68-
69-
# Cholesterol Ratio
70-
_:obs_chol_ratio a fhir:Observation ;
71-
fhir:code [
72-
fhir:system [ fhir:v "http://snomed.info/sct" ] ;
73-
fhir:code [ fhir:v "313811003" ] ;
74-
fhir:display [ fhir:v "Cholesterol/HDL ratio" ]
75-
] ;
76-
fhir:valueQuantity [
77-
fhir:value [ fhir:v "4.5"^^xsd:decimal ]
78-
] .
79-
80-
# Total Cholesterol
81-
_:obs_chol_total a fhir:Observation ;
82-
fhir:code [
83-
fhir:system [ fhir:v "http://snomed.info/sct" ] ;
84-
fhir:code [ fhir:v "77068002" ] ;
85-
fhir:display [ fhir:v "Total Cholesterol" ] ] ;
86-
fhir:valueQuantity [
87-
fhir:value [ fhir:v "190"^^xsd:decimal ] ;
88-
fhir:unit [ fhir:v "mg/dL" ]
89-
] .
90-
91-
# HDL Cholesterol
92-
_:obs_chol_hdl a fhir:Observation ;
93-
fhir:code [
94-
fhir:system [ fhir:v "http://snomed.info/sct" ] ;
95-
fhir:code [ fhir:v "102737005" ] ;
96-
fhir:display [ fhir:v "HDL Cholesterol" ]
97-
] ;
98-
fhir:valueQuantity [
99-
fhir:value [ fhir:v "50"^^xsd:decimal ] ;
100-
fhir:unit [ fhir:v "mg/dL" ]
101-
] .
102-
103-
# Length (Height)
104-
_:obs_length a fhir:Observation ;
105-
fhir:code [
106-
fhir:system [ fhir:v "http://snomed.info/sct" ] ;
107-
fhir:code [ fhir:v "50373000" ] ;
108-
fhir:display [ fhir:v "Body height" ]
109-
] ;
110-
fhir:valueQuantity [
111-
fhir:value [ fhir:v "175"^^xsd:decimal ] ;
112-
fhir:unit [ fhir:v "cm" ]
113-
] .
114-
115-
# Weight
116-
_:obs_weight a fhir:Observation ;
117-
fhir:code [
118-
fhir:system [ fhir:v "http://snomed.info/sct" ] ;
119-
fhir:code [ fhir:v "27113001" ] ;
120-
fhir:display [ fhir:v "Body weight" ]
121-
] ;
122-
fhir:valueQuantity [
123-
fhir:value [ fhir:v "70"^^xsd:decimal ] ;
124-
fhir:unit [ fhir:v "kg" ]
125-
] .
126-
127-
# BMI
128-
_:obs_bmi a fhir:Observation ;
129-
fhir:code [
130-
fhir:system [ fhir:v "http://snomed.info/sct" ] ;
131-
fhir:code [ fhir:v "60621009" ] ;
132-
fhir:display [ fhir:v "Body Mass Index (BMI)" ]
73+
74+
# Mock observation with different fhir:value types.
75+
<> a fhir:Observation ;
76+
fhir:text [ fhir:v "Observatie - Total Cholesterol" ] ;
77+
fhir:issued [
78+
a fhir:instant ; # Data type here is optional
79+
fhir:v "2025-10-14T08:28:56.623Z"^^xsd:dateTime
13380
] ;
134-
fhir:valueQuantity [
135-
fhir:value [ fhir:v "22.9"^^xsd:decimal ] ;
136-
fhir:unit [ fhir:v "kg/m²" ]
137-
] .
138-
139-
# Waist Circumference
140-
_:obs_waist a fhir:Observation ;
141-
fhir:code [
142-
fhir:system [ fhir:v "http://snomed.info/sct" ] ;
143-
fhir:code [ fhir:v "276361009" ] ;
144-
fhir:display [ fhir:v "Waist Circumference" ]
81+
fhir:status [ fhir:v "final"] ; # Optional, possible values:
82+
# registered | specimen-in-process |
83+
# preliminary | final | amended |
84+
# corrected | appended | cancelled |
85+
# entered-in-error | unknown |
86+
# cannot-be-obtained
87+
fhir:effective [ # Optional, in case we know when the measurement was made.
88+
a fhir:dateTime ;
89+
fhir:v "2013-04-02T10:30:10+01:00"^^xsd:dateTime
14590
] ;
146-
fhir:valueQuantity [
147-
fhir:value [ fhir:v "85"^^xsd:decimal ] ;
148-
fhir:unit [ fhir:v "cm" ]
149-
] .
150-
151-
# Systolic Blood Pressure (SBP)
152-
_:obs_sbp a fhir:Observation ;
15391
fhir:code [
154-
fhir:system [ fhir:v "http://snomed.info/sct" ] ;
155-
fhir:code [ fhir:v "271649006" ] ;
156-
fhir:display [ fhir:v "Systolic blood pressure" ]
92+
a fhir:CodeableConcept ; # Data type here is optional
93+
fhir:coding ( [
94+
a fhir:Coding ; # Data type here is optional
95+
fhir:system [ fhir:v "http://snomed.info/sct" ] ;
96+
fhir:code [ fhir:v "77068002" ] ;
97+
fhir:display [ fhir:v "Total Cholesterol" ] .
98+
] )
15799
] ;
158-
fhir:valueQuantity [
159-
fhir:value [ fhir:v "120"^^xsd:decimal ] ;
160-
fhir:unit [ fhir:v "mmHg" ]
100+
fhir:category ( [
101+
fhir:text [ fhir:v "Vragenlijst" ] ;
102+
fhir:coding ( [
103+
a fhir:Coding ; # Data type here is optional
104+
fhir:code [ fhir:v "survey"^^xsd:string ] ;
105+
fhir:system [ fhir:v "http://terminology.hl7.org/CodeSystem/observation-category"^^xsd:anyURI ]
106+
] )
107+
] ) ;
108+
fhir:subject ( [
109+
fhir:link <https://storage.sandbox-pod.datanutsbedrijf.be/a96561f7-3b6a-4631-9e6e-ad19f47e0f81/weare/http%3A%2F%2Fhl7.org%2Ffhir%2FPatient/2917eab8-bf6a-416d-8890-0fb0f22b15c0> ;
110+
fhir:reference [ fhir:v "https://storage.sandbox-pod.datanutsbedrijf.be/a96561f7-3b6a-4631-9e6e-ad19f47e0f81/weare/http%3A%2F%2Fhl7.org%2Ffhir%2FPatient/2917eab8-bf6a-416d-8890-0fb0f22b15c0"^^xsd:string ] ;
111+
fhir:type [ fhir:v "Patient"^^xsd:anyURI ]
112+
] ) ;
113+
fhir:performer ( [
114+
fhir:link <https://storage.sandbox-pod.datanutsbedrijf.be/a96561f7-3b6a-4631-9e6e-ad19f47e0f81/weare/http%3A%2F%2Fhl7.org%2Ffhir%2FPatient/2917eab8-bf6a-416d-8890-0fb0f22b15c0> ;
115+
fhir:reference [ fhir:v "https://storage.sandbox-pod.datanutsbedrijf.be/a96561f7-3b6a-4631-9e6e-ad19f47e0f81/weare/http%3A%2F%2Fhl7.org%2Ffhir%2FPatient/2917eab8-bf6a-416d-8890-0fb0f22b15c0"^^xsd:string ] ;
116+
fhir:type [ fhir:v "Patient"^^xsd:anyURI ]
117+
] ) ;
118+
fhir:derivedFrom ( [
119+
fhir:link <https://storage.sandbox-pod.datanutsbedrijf.be/a96561f7-3b6a-4631-9e6e-ad19f47e0f81/weare/http%3A%2F%2Fhl7.org%2Ffhir%2FQuestionnaireResponse/c75cc7d1-7c42-46f4-a425-e40cdaf8dae2> ;
120+
fhir:reference [ fhir:v "https://storage.sandbox-pod.datanutsbedrijf.be/a96561f7-3b6a-4631-9e6e-ad19f47e0f81/weare/http%3A%2F%2Fhl7.org%2Ffhir%2FQuestionnaireResponse/c75cc7d1-7c42-46f4-a425-e40cdaf8dae2"^^xsd:string ] ;
121+
fhir:type [ fhir:v "QuestionnaireResponse"^^xsd:anyURI ]
122+
] ) ;
123+
fhir:value [ # Cardinality 0..1.
124+
a fhir:Quantity ; # Example Quantity value.
125+
fhir:value [ fhir:v "190"^^xsd:decimal ] ;
126+
fhir:unit [ fhir:v "mg/dL" ] # Example unit, unit not mandatory when code from terminology does not require it.
127+
] . # Value can be of different types, only one value is allowed
128+
fhir:value [ # Cardinality 0..1.
129+
fhir:coding ( [ # Example coding value, "A little of time"
130+
fhir:code [ fhir:v "91621-3" ] ;
131+
fhir:system [ fhir:v "https://loinc.org/LA14732-4"^^xsd:anyURI ] ;
132+
fhir:display [ fhir:v "{{value}}" ]
133+
] )
134+
] . # Value can be of different types, only one value is allowed
135+
fhir:value [ # Cardinality 0..1.
136+
a fhir:dateTime ; # Example dateTime value, e.g. a birthDate.
137+
fhir:v "1990-10-05T08:28:56.623Z"^^xsd:dateTime
161138
] .
162139
```
163140

164141
### QuestionnaireResponse
165142

166-
A resource of the type QuestionnaireResponse is stored as a [FHIR resource](https://www.hl7.org/fhir/questionnaireresponse.html) at the following location in the users's pod:
143+
A resource of the type QuestionnaireResponse is stored as
144+
a [FHIR resource](https://www.hl7.org/fhir/questionnaireresponse.html) at the following location in the users's pod:
167145

168146
`<user pod>/weare/https%3A%2F%2Fwww.hl7.org%2Ffhir%2FQuestionnaireResponse/<uuid>.ttl`

0 commit comments

Comments
 (0)