Publish Box goes here
Part 3: Hands-On Exercise
Purpose
The goal of this hands-on exercise is to provide experience working with the concepts and tools described in Part 1 and Part 2.
Premise
As a FHIR implementation modeler, author a FHIR Implementation Guide (IG) based on FHIR 4.0.1 for the fictitious use case scenario described in Part 2, and reproduced below for convenience:
Hypothetical problem:
The Obstructive Sleep Apnea Association (OSAA - a fictitious clinical organization based in the U.S.) is looking to evaluate the impact of obesity as a risk > for Obstructive Sleep Apnea (OSA). OSAA needs a way to ensure the relevant clinical data are collected in a standard, interoperable format from participating member sites.
Participants:
- OSAA
- Participating study sites
For the purposes of this course, we will assume the content of this IG is limited to Domain of Knowledge (i.e., the API for data exchange is out of scope).
Use case
The use case for this work is as follows:
OSAA has setup a small registry to collect EHR clinical data from healthcare organizations participating in this evaluation.
OSAA sites will submit the following required data to the central OSAA registry:
- Patient name, age, birth place
- Patient's managing practitioner name, and the practitioner(s) NPI identifier(s)
- A diagnosis of OSA, identified by one of the following ICD-10-CM codes:
G47.33
Obstructive sleep apnea (adult) (pediatric)
G47.30
Sleep apnea, unspecified
- Patient's body mass index (BMI)
- BMI calculated value
- Date when calculated
- The provider who performed the BMI calculation
Additionally, all participating sites may optionally submit:
- Date of OSA diagnosis
- Patient age at time of OSA diagnosis
Tasks
- Add remaining FHIR profiles based on the Resources Model from Part 2, aligning with with FHIR U.S. Core 3.2 profiles where possible:
- Practitioner profile (
OSAPractitioner
) (solution)
- OSA Condition profile (
OSACondition
) (solution)
- Create an example of
OSAPractitioner
(solution at bottom of this section of Part 2)
-
Edit the home page of the IG to answer the following question:
Were there any FHIR limitations in what is needed to create a representative model that addresses this use case? If yes, what were they and what changes or workarounds would you propose?
- Successfully build your IG locally with
_genonce
and attempt to resolve any errors on the output/qa.html
page.
Additional notes
- Don't overthink or expand the scope of the clinical use case. Just focus on the representation of clinical data requirements within the FHIR resource model with the information that is given.
- Assume that the data exchange is secure so PHI and PII in FHIR instances will not be an issue.
- There is no single answer. There could however be more optimal ways to represent models.
- Check the QA report (
output/qa.html
) as you build the IG with _genonce
to identify any FHIR validation issues that aren't caught by SUSHI.
- If you just want to quickly test how to represent and validate a contained construct in FSH without having to run the IG publisher, try it using FSHOnline
- Want to see more FSH examples? Go to FSHOnline and click on the "FSH Examples".
- Want to see how another IG's StructureDefinitions in JSON could be represented in FSH? Also try it using FSHOnline. Cut and paste your JSON into the right column and click on Convert to FSH to see the syntax.
- Try using some of the nice perks in the vscode-language-fsh extension to help navigate references between your authored FHIR constructs (profiles, value sets, extensions, etc.)
- Other neat VSCode extensions to help create a more authoring-friendly VSCode environment:
- Markdown Preview Github Styling - provides a basic dynamic rendering of your markdown page while you type (but note that embedded images won't be rendered in the preview due to the directory structure).
- Draw.io integration - integrates Draw.io/diagrams.net into VSCode so that you can create nice diagrams directly inside your IG authoring environment
- This Markdown guide may be helpful if you're new to Markdown.
Solution
In addition to the elements of the solution embedded in Part 2, the full solution hidden below (show solution).
Structural mapping
Profile Name |
FHIR element name / Path |
Use Case Data Element |
Comments |
OSAPatient |
Patient.name |
Patient name |
|
OSAPatient |
Patient.birthDate |
Patient birth date |
|
OSAPatient |
Patient.generalPractitioner |
Patient's primary care provider |
|
OSAPatient |
Patient.extension.patient-birthPlace |
Patient's birth place |
Found FHIR standard extension, [patient-birthPlace] |
OSAPractitioner |
Practitioner.name |
Practitioner name |
|
OSAPractitioner |
Practitioner.identifier.type |
Practitioner NPI |
Fix identifier type = NPI |
OSACondition |
Condition.code |
OSA diagnosis code |
Fix to OSADiagnosisVS containing provided ICD-10-CM codes |
OSACondition |
Condition.extension[AgeAtOSADiagnosis] |
OSA onset date |
|
OSACondition |
Condition.asserter |
managing provider who diagnosed OSA |
|
OSABodyMassIndex |
Observation.code |
Body Mass Index (BMI) |
Fix code to 39156-5 "Body mass index (BMI)" |
OSABodyMassIndex |
Observation.effectiveDateTime |
Body Mass Index (BMI) |
|
OSABodyMassIndex |
Observation.valueQuantity |
BMI measurement |
BMI Measurement |
Completed IG
Available here.