Skip to content

Commit

Permalink
Resolve QA errors and other profile refinements.
Browse files Browse the repository at this point in the history
  • Loading branch information
drdavec committed Dec 27, 2024
1 parent 73da936 commit 2ec844b
Show file tree
Hide file tree
Showing 22 changed files with 169 additions and 103 deletions.
6 changes: 4 additions & 2 deletions FHIR-us-pco.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
<artifact id="Library/FHIRHelpers" key="Library-FHIRHelpers" name="FHIRHelpers"/>
<artifact id="ValueSet/gas-score-answers" key="ValueSet-gas-score-answers" name="Follow-Up GAS Score Answers"/>
<artifact id="Observation/pcoPROMScoreAnxietyExample" key="Observation-pcoPROMScoreAnxietyExample" name="GAD-7 PROM Follow-up Score"/>
<artifact id="Observation/pcoGASScoretBaselineExample" key="Observation-pcoGASScoretBaselineExample" name="GAS Baseline Score"/>
<artifact id="Observation/pcoGASScoreBaselineExample" key="Observation-pcoGASScoreBaselineExample" name="GAS Baseline Score"/>
<artifact id="Questionnaire/69737-5" key="Questionnaire-69737-5" name="Generalized anxiety disorder 7 item"/>
<artifact id="StructureDefinition/pco-goal-attainment-scaling" key="StructureDefinition-pco-goal-attainment-scaling" name="Goal Attainment Scaling"/>
<artifact id="ValueSet/goal-attainment-scaling-score" key="ValueSet-goal-attainment-scaling-score" name="Goal Attainment Scaling (GAS) Score"/>
Expand All @@ -45,14 +45,16 @@
<artifact id="Observation/pcoGASScorePatientFollowupExample" key="Observation-pcoGASScorePatientFollowupExample" name="Patient GAS Follow-up Score"/>
<artifact id="StructureDefinition/pco-prom-score-observation" key="StructureDefinition-pco-prom-score-observation" name="Patient-Reported Outcome Measure (PROM) score"/>
<artifact id="StructureDefinition/pco-care-plan" key="StructureDefinition-pco-care-plan" name="Person-Centered Care Plan"/>
<artifact id="ValueSet/pco-category-vs" key="ValueSet-pco-category-vs" name="Person-Centered Category Value Set"/>
<artifact id="StructureDefinition/pco-gas-goal-profile" key="StructureDefinition-pco-gas-goal-profile" name="Person-Centered GAS Goal"/>
<artifact id="StructureDefinition/pco-goal-profile" key="StructureDefinition-pco-goal-profile" name="Person-Centered Goal"/>
<artifact id="Measure/GoalFollowUpMeasure" key="Measure-GoalFollowUpMeasure" name="Person-Centered Goal Follow-Up"/>
<artifact id="Measure/GoalIdentificationMeasure" key="Measure-GoalIdentificationMeasure" name="Person-Centered Goal Identification"/>
<artifact id="ValueSet/pco-survey-category-vs" key="ValueSet-pco-survey-category-vs" name="Person-Centered Outcomes Survey Value Set"/>
<artifact id="StructureDefinition/pco-prom-goal-profile" key="StructureDefinition-pco-prom-goal-profile" name="Person-Centered PROM Goal"/>
<artifact id="Observation/pcoGASScorePractitionerFollowupExample" key="Observation-pcoGASScorePractitionerFollowupExample" name="Practitioner GAS Follow-up Score"/>
<artifact id="Practitioner/pcoPractitionerAnderson" key="Practitioner-pcoPractitionerAnderson" name="Primary Care Physician"/>
<artifact id="CodeSystem/va-whole-health" key="CodeSystem-va-whole-health" name="VA Whole Health Concepts"/>
<artifact id="CodeSystem/va-whole-health-example" key="CodeSystem-va-whole-health-example" name="VA Whole Health Concepts"/>
<artifact id="CodeSystem/wellbeing-concepts" key="CodeSystem-wellbeing-concepts" name="Well-Being Concepts"/>
<artifact id="ValueSet/wellbeing-domains-example-vs" key="ValueSet-wellbeing-domains-example-vs" name="Well-Being Domains Example"/>
<artifact id="ValueSet/wellbeing-priority-focus-vs" key="ValueSet-wellbeing-priority-focus-vs" name="Well-Being Priority Or Focus"/>
Expand Down
2 changes: 1 addition & 1 deletion _refresh.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/bin/bash
#DO NOT EDIT WITH WINDOWS
tooling_jar=tooling-cli-3.4.0.jar
tooling_jar=tooling-cli-3.6.0.jar
input_cache_path=./input-cache
ig_ini_path=$PWD/ig.ini

Expand Down
4 changes: 2 additions & 2 deletions _updateCQFTooling.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@
r=releases
g=org.opencds.cqf
a=tooling-cli
v=3.4.0
v=3.6.0

dlurl='https://oss.sonatype.org/service/local/artifact/maven/redirect?r='${r}'&g='${g}'&a='${a}'&v='${v}''

echo ${dlurl}

input_cache_path=./input-cache/
tooling_jar=tooling-cli-3.4.0.jar
tooling_jar=tooling-cli-3.6.0.jar

set -e
if ! type "curl" > /dev/null; then
Expand Down
70 changes: 35 additions & 35 deletions _updatePublisher.sh
Original file line number Diff line number Diff line change
Expand Up @@ -95,38 +95,38 @@ else
echo cancelled publisher update
fi

if [[ $skipPrompts != true ]]; then
message="Update scripts? (enter 'y' or 'Y' to continue, any other key to cancel)?"
read -r -p "$message" response
fi

if [[ $skipPrompts == true ]] || [[ $response =~ ^[yY].*$ ]]; then
echo "Downloading most recent scripts "

curl -L $update_bat_url -o /tmp/_updatePublisher.new
cp /tmp/_updatePublisher.new _updatePublisher.bat
rm /tmp/_updatePublisher.new

curl -L $gen_bat_url -o /tmp/_genonce.new
cp /tmp/_genonce.new _genonce.bat
rm /tmp/_genonce.new

curl -L $gencont_bat_url -o /tmp/_gencontinuous.new
cp /tmp/_gencontinuous.new _gencontinuous.bat
rm /tmp/_gencontinuous.new

curl -L $gencont_sh_url -o /tmp/_gencontinuous.new
cp /tmp/_gencontinuous.new _gencontinuous.sh
chmod +x _gencontinuous.sh
rm /tmp/_gencontinuous.new

curl -L $gen_sh_url -o /tmp/_genonce.new
cp /tmp/_genonce.new _genonce.sh
chmod +x _genonce.sh
rm /tmp/_genonce.new

curl -L $update_sh_url -o /tmp/_updatePublisher.new
cp /tmp/_updatePublisher.new _updatePublisher.sh
chmod +x _updatePublisher.sh
rm /tmp/_updatePublisher.new
fi
# if [[ $skipPrompts != true ]]; then
# message="Update scripts? (enter 'y' or 'Y' to continue, any other key to cancel)?"
# read -r -p "$message" response
# fi

# if [[ $skipPrompts == true ]] || [[ $response =~ ^[yY].*$ ]]; then
# echo "Downloading most recent scripts "

# curl -L $update_bat_url -o /tmp/_updatePublisher.new
# cp /tmp/_updatePublisher.new _updatePublisher.bat
# rm /tmp/_updatePublisher.new

# curl -L $gen_bat_url -o /tmp/_genonce.new
# cp /tmp/_genonce.new _genonce.bat
# rm /tmp/_genonce.new

# curl -L $gencont_bat_url -o /tmp/_gencontinuous.new
# cp /tmp/_gencontinuous.new _gencontinuous.bat
# rm /tmp/_gencontinuous.new

# curl -L $gencont_sh_url -o /tmp/_gencontinuous.new
# cp /tmp/_gencontinuous.new _gencontinuous.sh
# chmod +x _gencontinuous.sh
# rm /tmp/_gencontinuous.new

# curl -L $gen_sh_url -o /tmp/_genonce.new
# cp /tmp/_genonce.new _genonce.sh
# chmod +x _genonce.sh
# rm /tmp/_genonce.new

# curl -L $update_sh_url -o /tmp/_updatePublisher.new
# cp /tmp/_updatePublisher.new _updatePublisher.sh
# chmod +x _updatePublisher.sh
# rm /tmp/_updatePublisher.new
# fi
8 changes: 8 additions & 0 deletions input/_resources/terminology-settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"resourceType" : "Parameters",
"id" : "terminology-settings",
"parameter" : [{
"name" : "system-version",
"valueUri" : "http://snomed.info/sct|http://snomed.info/sct/731000124108"
}]
}
38 changes: 36 additions & 2 deletions input/fsh/BothersomeHealthConcern.fsh
Original file line number Diff line number Diff line change
@@ -1,27 +1,60 @@

RuleSet: BothersomeHealthConcernCategory
* category MS
* ^slicing.discriminator.type = #pattern
* ^slicing.discriminator.path = "$this"
* ^slicing.rules = #open
* category contains
bothersome 0..1 MS
* category[bothersome] = PCOCodes#bothersome-health-concern
* ^short = "Bothersome Health Concern category"

Profile: BothersomeHealthConcern
Parent: USCoreSimpleObservationProfile
Id: pco-bothersome-health-concern
Title: "Bothersome Health Concern"
Description: "Assessment observation about a bothersome symptom or health concern."
* extension contains
PertainsToGoalExtension named pertainsToGoal 0..1 MS
PertainsToGoalExtension named pertainsToGoal 0..1 MS
* extension[pertainsToGoal] ^short = "The goal that has this bothersome concern"
// Satisfies US Core required binding for category
* category[us-core] 1..1 MS
* category[us-core] = OBSCAT#survey
* insert BothersomeHealthConcernCategory

// Cannot override preferred binding with example binding; LOINC is preferred.
// If #other, then use text element for free-text
* code from BothersomeHealthConcernValueSet (preferred)
* ^short = "Type of bothersome concern"
* focus 0..* MS
* focus only Reference(Condition)
* focus only Reference(Condition or Observation)
* ^short = "Bothersome symptom or health concern"
* value[x] 1..1 MS
* value[x] only boolean
* ^short = "Indicates if the focus condition is currently bothersome"
* note 0..* MS

/*
Profile: MostBothersomeHealthConcern
Parent: USCoreSimpleObservationProfile
Id: pco-most-bothersome-health-concern
Title: "Most Bothersome Health Concern"
Description: "Assessment observation that selects one most bothersome symptom or health concern for a patient."
* extension contains
PertainsToGoalExtension named pertainsToGoal 0..1 MS
* extension[pertainsToGoal] ^short = "The goal that has this bothersome concern"
* category[us-core] 1..1 MS
* category[us-core] = OBSCAT#survey
* code from BothersomeHealthConcernValueSet (preferred)
* ^short = "Type of bothersome concern"
* derivedFrom 0..* MS
* derivedFrom only Reference(BothersomeHealthConcern)
* ^short = "Bothersome symptom or health concern"
* value[x] 1..1 MS
* value[x] only CodeableConcept or string or boolean
* valueCodeableConcept from BothersomeHealthConcernValueSet (preferred)
* ^short = "Indicates the symptom or health condition that is most bothersome"
*/

CodeSystem: BothersomeHealthConcernConcepts
Id: pco-bothersome-health-concern-concepts
Expand All @@ -30,6 +63,7 @@ Description: "Code system to identify bothersome symptoms or health concerns.."
* ^caseSensitive = true
* ^experimental = false
* ^status = #active
* insert PCOCodeSystemPublisher
* #other "Other"
* #muscle-weakness "Feeling muscle weakness"
* #pain "Feeling pain"
Expand Down
6 changes: 5 additions & 1 deletion input/fsh/CareTradeoff.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,9 @@ Description: "Assessment observation about a care trade-off that is helpful or b
* code from CareTradeOffValueSet (preferred)
* ^short = "Type of care trade-off"
* focus 0..* MS
* focus only Reference(MedicationRequest or Procedure)
* focus only Reference(MedicationRequest or Procedure or ServiceRequest)
* ^short = "The medication or procedure that has this trade-off"
* note 0..* MS

// TODO: how to specify text-entered medication name?

Expand All @@ -34,6 +35,7 @@ Description: "Code system to identify care trade-off concepts."
* ^caseSensitive = true
* ^experimental = false
* ^status = #active
* insert PCOCodeSystemPublisher
* #medications "Medications"
* #self-care-tasks "Self-care tasks"
* #diet "Following a special diet"
Expand Down Expand Up @@ -63,8 +65,10 @@ Description: "Code system to identify care trade-off choices."
* ^caseSensitive = true
* ^experimental = false
* ^status = #active
* insert PCOCodeSystemPublisher
* #helpful "Helpful"
* #bothersome "Bothersome"
* #unspecified "Unspecified"

ValueSet: CareTradeOffChoicesValueSet
Id: pco-care-tradeoff-choices-valueset
Expand Down
17 changes: 9 additions & 8 deletions input/fsh/GASExamples.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@ Usage: #example
* addresses[0] = Reference(pcoWhatMattersBodyExample) "What Matters: Moving the Body"
* addresses[1] = Reference(pcoWhatMattersRelationshipsExample) "What Matters: Family & Friends"
* description.text = "Walk dog outside once a week"
* extension[gas-scaling][0].extension[level].valueCoding = $LNC#LA6113-0 "Much better than expected"
* extension[gas-scaling][0].extension[level].valueCoding = $LNC#LA6113-0 "2 or more"
* extension[gas-scaling][0].extension[text].valueString = "Walk dog outside three times a week"
* extension[gas-scaling][1].extension[level].valueCoding = $LNC#LA6112-2 "Better than expected"
* extension[gas-scaling][1].extension[level].valueCoding = $LNC#LA6112-2 "1"
* extension[gas-scaling][1].extension[text].valueString = "Walk dog outside twice a week"
* extension[gas-scaling][2].extension[level].valueCoding = $LNC#LA6111-4 "Expected outcome"
* extension[gas-scaling][2].extension[level].valueCoding = $LNC#LA6111-4 "0"
* extension[gas-scaling][2].extension[text].valueString = "Walk dog outside once a week"
* extension[gas-scaling][3].extension[level].valueCoding = $LNC#gas-less-than-expected "Less than expected"
* extension[gas-scaling][3].extension[text].valueString = "Does not walk dog but goes outside with dog"
Expand All @@ -42,13 +42,12 @@ Usage: #example
* description.text = "Walk dog outside once a week"
* target.measure = $LNC#68489 "Goal attainment scale"

Instance: pcoGASScoretBaselineExample
Instance: pcoGASScoreBaselineExample
InstanceOf: PCOGoalAttainmentScoreObservation
Title: "GAS Baseline Score"
Description: "Baseline GAS score observation at start of goal."
Usage: #example
* status = #final
// * category[survey] = OBSCAT#survey "Survey"
* subject = Reference(pcoPatientJones)
* performer = Reference(pcoPractitionerGonzalez)
* effectiveDateTime = "2024-04-03T10:15:00Z"
Expand All @@ -67,18 +66,20 @@ Usage: #example
* effectiveDateTime = "2024-05-10T10:15:00Z"
* code = $LNC#68491 "Patient follow-up goal attainment scaling score"
* focus = Reference(pcoGoalWalkDogExample)
* valueCodeableConcept = $LNC#LA6112-2 "Better than expected"
* valueCodeableConcept = $LNC#LA6112-2 "1"
* valueCodeableConcept.text = "Better than expected"

Instance: pcoGASScorePractitionerFollowupExample
InstanceOf: PCOGoalAttainmentScoreObservation
Title: "Practitioner GAS Follow-up Score"
Description: "Follow-up GAS score observation recorded by a Practitioner showing goal progress."
Usage: #example
* status = #final
* category = OBSCAT#functional-status "Functional Status"
* category = USCORECAT#functional-status "Functional Status"
* subject = Reference(pcoPatientJones)
* performer = Reference(pcoPractitionerGonzalez)
* effectiveDateTime = "2024-05-22T10:15:00Z"
* code = $LNC#68490 "Practitioner follow-up goal attainment scaling score"
* focus = Reference(pcoGoalWalkDogExample)
* valueCodeableConcept = $LNC#LA6111-4 "Expected outcome"
* valueCodeableConcept = $LNC#LA6111-4 "0"
* valueCodeableConcept.text = "Expected outcome"
2 changes: 1 addition & 1 deletion input/fsh/GASProfiles.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ Id: pco-gas-score-observation
Title: "Goal Attainment Scaling (GAS) score"
Description: "The follow-up score indicates how a patient, caregiver, or practitioner rated progress on goal attainment scaling."
// Satisfies US Core required binding for category
* category[us-core] 1..1 MS
* category[us-core] 1..* MS
* category[us-core] = OBSCAT#survey
* effectiveDateTime 1..1 MS
* ^short = "When the score was assessed"
Expand Down
2 changes: 2 additions & 0 deletions input/fsh/GASTerminology.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ Id: goal-attainment-scaling-score
Title: "Goal Attainment Scaling (GAS) Score"
Description: "The score indicates how a patient, caregiver, or practitioner rated progress on goal attainment scaling."
* ^experimental = false
* insert LOINCCopyrightNotice
* $LNC#68489 "Goal attainment scale"
* $LNC#68490 "Practitioner follow-up goal attainment scaling score"
* $LNC#68491 "Patient follow-up goal attainment scaling score"
Expand All @@ -14,6 +15,7 @@ Id: gas-score-answers
Title: "Follow-Up GAS Score Answers"
Description: "The progress rating on goal attainment scaling."
* ^experimental = false
* insert LOINCCopyrightNotice
* $LNC#LA6113-0 "Much better than expected"
* $LNC#LA6112-2 "Better than expected"
* $LNC#LA6111-4 "Expected outcome"
Expand Down
1 change: 1 addition & 0 deletions input/fsh/PCOExamples.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ Description: "Person-centered goal without attainment scaling or PROM"
Usage: #example
* lifecycleStatus = #active
* achievementStatus = $GoalAchievement#in-progress
* category[pco-category] = PCOCodes#person-centered "Person-Centered"
* category[goal-domain] = PCOGoalDomains#physical-function "Physical Function"
* subject = Reference(pcoPatientJones)
* expressedBy = Reference(pcoPatientJones)
Expand Down
29 changes: 13 additions & 16 deletions input/fsh/PCOProfiles.fsh
Original file line number Diff line number Diff line change
@@ -1,26 +1,24 @@

RuleSet: PCOGoalCategory
RuleSet: PersonCenteredCategory
* category MS
* ^slicing.discriminator.type = #pattern
* ^slicing.discriminator.path = "$this"
* ^slicing.rules = #open
* category ^slicing.discriminator.type = #value
* category ^slicing.discriminator.path = "$this"
* category ^slicing.rules = #open
* category contains
pco-goal 1..1 MS
// * category[pco-goal] from PCOCategoryValueSet (required)
* category[pco-goal] = PCOCodes#person-centered-goal
* ^short = "Person-Centered Goal category"
pco-category 0..1 MS
* category[pco-category] from PCOCategoryValueSet (extensible)
* ^short = "Person-Centered category"

RuleSet: PCOGoalDomainCategory
RuleSet: GoalDomainCategory
* category MS
* ^slicing.discriminator.type = #pattern
* ^slicing.discriminator.path = "$this"
* ^slicing.rules = #open
* category ^slicing.discriminator.type = #value
* category ^slicing.discriminator.path = "$this"
* category ^slicing.rules = #open
* category contains
goal-domain 0..* MS
* category[goal-domain] from PCODomainCategoryValueSet (preferred)
* ^short = "Person-Centered Outcome domain category"

/*
RuleSet: PCOSurveyCategory
* category MS
* category ^slicing.discriminator.type = #pattern
Expand All @@ -34,15 +32,14 @@ RuleSet: PCOSurveyCategory
* category[survey] ^requirements = "Indicates the person-centered outcomes observation is of type survey"
* category[survey]
* ^binding.description = "Required by US Core"
*/

Profile: PCOGoalProfile
Parent: USCoreGoalProfile
Id: pco-goal-profile
Title: "Person-Centered Goal"
Description: "Person-centered goal focused on what matters most to an individual. A Person-centered goal SHALL include either a Person-Centered Outcome category, or address a What Matters assessment."
* insert PCOGoalCategory
* insert PCOGoalDomainCategory
* insert PersonCenteredCategory
* insert GoalDomainCategory
* expressedBy 0..1 MS
* expressedBy only Reference(USCorePatientProfile or USCorePractitionerProfile or USCoreRelatedPersonProfile)
* start[x] 1..1 MS
Expand Down
Loading

0 comments on commit 2ec844b

Please sign in to comment.