Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@ fsh-generated/
input-cache/
root/
template/
.idea/
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,14 @@ All notable changes to the WellData FHIR profiles will be documented in this fil
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.1.2] - 2025-12-03

### Changed
- **WellDataObservation**: Extended `value[x]` to support additional data types:
- `dateTime`, `string`
- Previously only `CodeableConcept` and `Quantity` were allowed
- **Documentation**: Updated RDF example in dynamic-data.md to show all supported value types

## [0.1.1] - 2025-11-28

### Added
Expand Down
5 changes: 4 additions & 1 deletion input/fsh/profiles/WellDataObservation.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ Description: "Observation used in the WellData project to record observation fro
* effectiveDateTime 1..1 MS

// --- Value choices -----------------------------------------------------------
* value[x] only CodeableConcept or Quantity
* value[x] only CodeableConcept or Quantity or dateTime or string

* valueCodeableConcept 0..1 MS
* valueCodeableConcept.coding.system 1..1
Expand All @@ -48,6 +48,9 @@ Description: "Observation used in the WellData project to record observation fro
* valueQuantity.value 1..1
* valueQuantity.unit 1..1

* valueDateTime 0..1 MS
* valueString 0..1 MS

// --- Metadata for publication ------------------------------------------------
* ^publisher = "WellData Consortium"
* ^purpose = "Captures observations related to support needs expressed as coded concepts or quantitative measurements."
Expand Down
194 changes: 86 additions & 108 deletions input/pagecontent/dynamic-data.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
### Pod Organization
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).
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).

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.
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.

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.

Expand All @@ -21,7 +21,7 @@ Information that will be stored in the resource:
- BirthDate
- Address as a [FHIR datatype](https://build.fhir.org/datatypes.html#Address)
- Language as codeable concept in communication
- Email
- Email
- Tel

### Observation
Expand All @@ -41,128 +41,106 @@ Observations can contain all measured values about a patient. In our project we
| cholesterol_total | Totaal cholesterol | 77068002 (Snomed) | | x | | x |
| cholesterol_hdl | HDL cholesterol | 02737005 (Snomed) | | x | | x |
| cholesterol_ratio | Totaal / HDL cholesterol | 313811003 (Snomed) | | x | | x |
| stress | Stress ervaring | 68011-6 (Loinc) | x | | x | |
| daily_life | Dagelijks leven | 91621-3 (Loinc) | x | | | x |
| social_contact | Voldoening uit sociale contacten | 61581-5 (Loinc) | x | | x | x |
| physical_exercise | beweegminuten | 228450008 (Snomed) | x | x | | x |
| smoking | roken (ja/nee) | 63638-1 (Loinc) & 77176002 (Snomed) | x | x | | |
| smoking_cigarettes | Hoeveel sigaretten per dag roken | 63640-7 (Loinc) | x | x | | |
| alcohol | Alcohol drinken | 897148007 (Snomed) | x | x | | |
| alcohol_Frequency | How often do you have a drink containing alcohol | 68518-0 (Loinc) | x | x | | |
| alcohol_normalConsumption | How many standard drinks containing alcohol do you have on a typical day? | 68519-8 (Loinc) | x | x | | |
| alcohol_excessiveConsumption | How often do you have 6 or more drinks on 1 occasion? | 68520-6 (Loinc) | x | x | | |
| birthdate | geboortedatum (dd/mm/yyyy) | 184099003 (Snomed) | x | x | x | |
| postcode | postcode | 184099003 (Snomed) | x | x | x | |
| work | werksituatie | / | x | | x | |
| stress | Stress ervaring | 68011-6 (Loinc) | x | | x | |
| daily_life | Dagelijks leven | 91621-3 (Loinc) | x | | | x |
| social_contact | Voldoening uit sociale contacten | 61581-5 (Loinc) | x | | x | x |
| physical_exercise | beweegminuten | 228450008 (Snomed) | x | x | | x |
| smoking | roken (ja/nee) | 63638-1 (Loinc) & 77176002 (Snomed) | x | x | | |
| smoking_cigarettes | Hoeveel sigaretten per dag roken | 63640-7 (Loinc) | x | x | | |
| alcohol | Alcohol drinken | 897148007 (Snomed) | x | x | | |
| alcohol_Frequency | How often do you have a drink containing alcohol | 68518-0 (Loinc) | x | x | | |
| alcohol_normalConsumption | How many standard drinks containing alcohol do you have on a typical day? | 68519-8 (Loinc) | x | x | | |
| alcohol_excessiveConsumption | How often do you have 6 or more drinks on 1 occasion? | 68520-6 (Loinc) | x | x | | |
| birthdate | geboortedatum (dd/mm/yyyy) | 184099003 (Snomed) | x | x | x | |
| postcode | postcode | 184099003 (Snomed) | x | x | x | |
| work | werksituatie | / | x | | x | |

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)




An example of each observation can be found below:
Find a mock observation RDF below, it contains different types of fhir:value objects for tutorial purposes. Use only one fhir:value per observation in practice.

```
# Use your pod root below.
@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> .
@prefix fhir: <http://hl7.org/fhir/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

# Cholesterol Ratio
_:obs_chol_ratio a fhir:Observation ;
fhir:code [
fhir:system [ fhir:v "http://snomed.info/sct" ] ;
fhir:code [ fhir:v "313811003" ] ;
fhir:display [ fhir:v "Cholesterol/HDL ratio" ]
] ;
fhir:valueQuantity [
fhir:value [ fhir:v "4.5"^^xsd:decimal ]
] .

# Total Cholesterol
_:obs_chol_total a fhir:Observation ;
fhir:code [
fhir:system [ fhir:v "http://snomed.info/sct" ] ;
fhir:code [ fhir:v "77068002" ] ;
fhir:display [ fhir:v "Total Cholesterol" ] ] ;
fhir:valueQuantity [
fhir:value [ fhir:v "190"^^xsd:decimal ] ;
fhir:unit [ fhir:v "mg/dL" ]
] .

# HDL Cholesterol
_:obs_chol_hdl a fhir:Observation ;
fhir:code [
fhir:system [ fhir:v "http://snomed.info/sct" ] ;
fhir:code [ fhir:v "102737005" ] ;
fhir:display [ fhir:v "HDL Cholesterol" ]
] ;
fhir:valueQuantity [
fhir:value [ fhir:v "50"^^xsd:decimal ] ;
fhir:unit [ fhir:v "mg/dL" ]
] .

# Length (Height)
_:obs_length a fhir:Observation ;
fhir:code [
fhir:system [ fhir:v "http://snomed.info/sct" ] ;
fhir:code [ fhir:v "50373000" ] ;
fhir:display [ fhir:v "Body height" ]
] ;
fhir:valueQuantity [
fhir:value [ fhir:v "175"^^xsd:decimal ] ;
fhir:unit [ fhir:v "cm" ]
] .

# Weight
_:obs_weight a fhir:Observation ;
fhir:code [
fhir:system [ fhir:v "http://snomed.info/sct" ] ;
fhir:code [ fhir:v "27113001" ] ;
fhir:display [ fhir:v "Body weight" ]
] ;
fhir:valueQuantity [
fhir:value [ fhir:v "70"^^xsd:decimal ] ;
fhir:unit [ fhir:v "kg" ]
] .

# BMI
_:obs_bmi a fhir:Observation ;
fhir:code [
fhir:system [ fhir:v "http://snomed.info/sct" ] ;
fhir:code [ fhir:v "60621009" ] ;
fhir:display [ fhir:v "Body Mass Index (BMI)" ]

# Mock observation with different fhir:value types.
<> a fhir:Observation ;
fhir:text [ fhir:v "Observatie - Total Cholesterol" ] ;
fhir:issued [
a fhir:instant ; # Data type here is optional
fhir:v "2025-10-14T08:28:56.623Z"^^xsd:dateTime
] ;
fhir:valueQuantity [
fhir:value [ fhir:v "22.9"^^xsd:decimal ] ;
fhir:unit [ fhir:v "kg/m²" ]
] .

# Waist Circumference
_:obs_waist a fhir:Observation ;
fhir:code [
fhir:system [ fhir:v "http://snomed.info/sct" ] ;
fhir:code [ fhir:v "276361009" ] ;
fhir:display [ fhir:v "Waist Circumference" ]
fhir:status [ fhir:v "final"] ; # Optional, possible values:
# registered | specimen-in-process |
# preliminary | final | amended |
# corrected | appended | cancelled |
# entered-in-error | unknown |
# cannot-be-obtained
fhir:effective [ # Optional, in case we know when the measurement was made.
a fhir:dateTime ;
fhir:v "2013-04-02T10:30:10+01:00"^^xsd:dateTime
] ;
fhir:valueQuantity [
fhir:value [ fhir:v "85"^^xsd:decimal ] ;
fhir:unit [ fhir:v "cm" ]
] .

# Systolic Blood Pressure (SBP)
_:obs_sbp a fhir:Observation ;
fhir:code [
fhir:system [ fhir:v "http://snomed.info/sct" ] ;
fhir:code [ fhir:v "271649006" ] ;
fhir:display [ fhir:v "Systolic blood pressure" ]
a fhir:CodeableConcept ; # Data type here is optional
fhir:coding ( [
a fhir:Coding ; # Data type here is optional
fhir:system [ fhir:v "http://snomed.info/sct" ] ;
fhir:code [ fhir:v "77068002" ] ;
fhir:display [ fhir:v "Total Cholesterol" ] .
] )
] ;
fhir:valueQuantity [
fhir:value [ fhir:v "120"^^xsd:decimal ] ;
fhir:unit [ fhir:v "mmHg" ]
] .
fhir:category ( [
fhir:text [ fhir:v "Vragenlijst" ] ;
fhir:coding ( [
a fhir:Coding ; # Data type here is optional
fhir:code [ fhir:v "survey"^^xsd:string ] ;
fhir:system [ fhir:v "http://terminology.hl7.org/CodeSystem/observation-category"^^xsd:anyURI ]
] )
] ) ;
fhir:subject ( [
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> ;
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 ] ;
fhir:type [ fhir:v "Patient"^^xsd:anyURI ]
] ) ;
fhir:performer ( [
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> ;
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 ] ;
fhir:type [ fhir:v "Patient"^^xsd:anyURI ]
] ) ;
fhir:derivedFrom ( [
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> ;
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 ] ;
fhir:type [ fhir:v "QuestionnaireResponse"^^xsd:anyURI ]
] ) ;
fhir:value [ # Cardinality 0..1.
a fhir:Quantity ; # Example Quantity value.
fhir:value [ fhir:v "190"^^xsd:decimal ] ;
fhir:unit [ fhir:v "mg/dL" ] # Example unit, unit not mandatory when code from terminology does not require it.
] . # Value can be of different types, only one value is allowed
fhir:value [ # Cardinality 0..1.
fhir:coding ( [ # Example coding value, "A little of time"
fhir:code [ fhir:v "91621-3" ] ;
fhir:system [ fhir:v "https://loinc.org/LA14732-4"^^xsd:anyURI ] ;
fhir:display [ fhir:v "A little of time" ]
] )
] . # Value can be of different types, only one value is allowed
fhir:value [ # Cardinality 0..1.
a fhir:dateTime ; # Example dateTime value, e.g. a birthDate.
fhir:v "1990-10-05T08:28:56.623Z"^^xsd:dateTime
] . # Value can be of different types, only one value is allowed
fhir:value [ # Cardinality 0..1.
a fhir:string ; # Example string value.
fhir:v "Often"^^xsd:string
] . # Value can be of different types, only one value is allowed
```

### QuestionnaireResponse

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:
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:

`<user pod>/weare/https%3A%2F%2Fwww.hl7.org%2Ffhir%2FQuestionnaireResponse/<uuid>.ttl`
2 changes: 1 addition & 1 deletion sushi-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ name: welldata-implementation-guide
title: WellData Implementation Guide
# description: Example Implementation Guide for getting started with SUSHI
status: draft # draft | active | retired | unknown
version: 0.1.1
version: 0.1.2
fhirVersion: 4.0.1
FSHOnly: false
applyExtensionMetadataToRoot: false
Expand Down