Client implementation guidelines
This Implementation guide aims to outline the requirements and interactions needed in the use case where a wellness application needs to send patient generated data from a device to KotiDigi platform.
Assumptions
- Client only interacts with a single URI using a Direct FHIR RESTful Write
- Pre-Coordination with Client App is needed for acceptance of patient supplied data within the approved context of the user’s permissions
Functional Requirements
- Client SHALL be able to create FHIR resources on a Server
- Client SHOULD be able to fetch and query for the FHIR resources it has created via the Server’s FHIR API
- Kotidigi platform assumes that all Resources submitted from clients have a Patient reference. At the moment Patient is referenced by finnish social security number, in the near future we plan to transfer to pseudonymized reference with a Kotidigi generated Patient identifier
Example workflow
Use Case Categories Covered by KotiDigi platform API
Some use case categories and FHIR resource types expected to be covered by this approach:
- Vitals (e.g. : Weight, Blood Pressure) --> Observation
- Activity (e.g. Steps,Sleep) --> Observation
- At home diagnostics (Blood Glucose, Covid 19 Test) --> Observation
- non-FHIR Documents (e.g. photos) --> DocumentReference
- Assessments(e.g. patient reported Outcomes) --> QuestionnaireResponse/Observation
Example interactions
Observations can be added to Kotidigi with simple HTTP POST operations in FHIR standard Observation format, see https://www.hl7.org/fhir/observation.html for details.
Example Observations for Kotidigi releted concepts can be fould here: https://simplifier.net/kotidigi/~resources?category=Example&exampletype=Observation
Example request:
POST https://sandbox.kotidigi.fi/api/ecosystem/Observation
Content-Type: application/fhir+json; charset=UTF-8
Authorization: Basic ZXhhbXBsZTplaW5lLWdyb3NzZS1zcGVsYW5k
"resourceType": "Observation",
"status": "final",
"category": [
{
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/observation-category",
"code": "vital-signs"
}
]
}
],
"code": {
"coding": [
{
"system": "http://loinc.org",
"code": "29463-7",
"display": "Body weight with reference range and interpretation"
},
{
"system": "http://snomed.info/sct",
"code": "27113001",
"display": "Body weight (observable entity)"
}
]
},
"subject": {
"identifier": {
"system": "urn:oid:1.2.246.21",
"value": "010101-123N"
}
},
"effectiveDateTime": "2022-05-17T11:46:00+02:00",
"device": {
"extension": [
{
"url": "DeviceVersion",
"valueString": "Withings"
},
{
"url": "lastSyncTime",
"valueDateTime": "2022-04-01"
}
]
},
"valueQuantity": {
"value": 95,
"unit": "kg",
"system": "http://unitsofmeasure.org",
"code": "kg"
},
"interpretation": [
{
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation",
"code": "N",
"display": "Normal"
}
]
}
],
"referenceRange": [
{
"low": {
"value": 55,
"unit": "kg",
"system": "http://unitsofmeasure.org",
"code": "kg"
},
"high": {
"value": 150,
"unit": "kg",
"system": "http://unitsofmeasure.org",
"code": "kg"
},
"appliesTo": [
{
"coding": [
{
"system": "http://snomed.info/sct",
"code": "248153007",
"display": "Male"
}
],
"text": "Normal range"
}
],
"age": {
"low": {
"value": 15,
"unit": "years",
"system": "http://unitsofmeasure.org",
"code": "a"
},
"high": {
"value": 100,
"unit": "years",
"system": "http://unitsofmeasure.org",
"code": "a"
}
},
"text": "Age"
}
]
}