From 37c370f493c3589f0c6fa3422da7298bd91ec4a1 Mon Sep 17 00:00:00 2001 From: David Carlson Date: Mon, 9 Dec 2024 16:30:11 -0700 Subject: [PATCH] Reorganize FSH files. Revise category valuesets. --- FHIR-us-pco.xml | 11 ++-- input/fsh/ComponentDefinitions.fsh | 4 +- input/fsh/GASExamples.fsh | 69 ++++++++++++++++++++ input/fsh/GASProfiles.fsh | 11 +++- input/fsh/GlobalAliasList.fsh | 32 ++++++++++ input/fsh/PCOCarePlanExamples.fsh | 4 +- input/fsh/PCOExamples.fsh | 69 +------------------- input/fsh/PCOProfiles.fsh | 95 ++++++++++++---------------- input/fsh/PCOTerminology.fsh | 21 ++++-- input/fsh/PCOTerminologyExamples.fsh | 17 ++--- input/fsh/PROMExamples.fsh | 8 +-- input/fsh/PROMProfiles.fsh | 27 ++++++++ input/fsh/WhatMatters.fsh | 45 ++++++++++--- input/fsh/WhatMattersExamples.fsh | 2 + 14 files changed, 247 insertions(+), 168 deletions(-) create mode 100644 input/fsh/GASExamples.fsh create mode 100644 input/fsh/GlobalAliasList.fsh create mode 100644 input/fsh/PROMProfiles.fsh diff --git a/FHIR-us-pco.xml b/FHIR-us-pco.xml index c0793770..ab86024e 100644 --- a/FHIR-us-pco.xml +++ b/FHIR-us-pco.xml @@ -10,7 +10,7 @@ - + @@ -20,6 +20,7 @@ + @@ -28,26 +29,28 @@ - - + + + - + + diff --git a/input/fsh/ComponentDefinitions.fsh b/input/fsh/ComponentDefinitions.fsh index def4c99a..6c531537 100644 --- a/input/fsh/ComponentDefinitions.fsh +++ b/input/fsh/ComponentDefinitions.fsh @@ -1,7 +1,5 @@ -Alias: $compliesWithProfile = http://hl7.org/fhir/StructureDefinition/structuredefinition-compliesWithProfile - -RuleSet: QuantityPercent +RuleSet: ValueQuantityPercent * value[x] only Quantity * valueQuantity 1..1 MS * valueQuantity = '%' "%" diff --git a/input/fsh/GASExamples.fsh b/input/fsh/GASExamples.fsh new file mode 100644 index 00000000..244367c8 --- /dev/null +++ b/input/fsh/GASExamples.fsh @@ -0,0 +1,69 @@ + +Instance: pcoGoalWalkDogExample +InstanceOf: PCOGoalAttainmentScaleProfile +Title: "Goal with GAS" +Description: "Person-centered goal with attainment scaling extensions" +Usage: #example +* lifecycleStatus = #active +* achievementStatus = $GoalAchievement#in-progress +* category[pcoCategory] = PCOCodes#person-centered "Person-Centered" +* category[domainCategory] = NCQAGoalDomains#physical-function "Physical Function" +* subject = Reference(pcoPatientJones) +* expressedBy = Reference(pcoPatientJones) +* startDate = "2024-04-03" +* target.dueDate = "2024-09-30" +* 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[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[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[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" +* extension[gas-scaling][4].extension[level].valueCoding = $LNC#gas-much-less-than-expected "Much less than expected" +* extension[gas-scaling][4].extension[text].valueString = "Unable to go outside with dog" + +Instance: pcoGASScoretBaselineExample +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" +* code = $LNC#68489 "Goal attainment scale" +* focus = Reference(pcoGoalWalkDogExample) +* valueCodeableConcept = $LNC#gas-less-than-expected "Less than expected" + +Instance: pcoGASScorePatientFollowupExample +InstanceOf: PCOGoalAttainmentScoreObservation +Title: "Patient GAS Follow-up Score" +Description: "Follow-up GAS score observation recorded by a Patient showing goal progress." +Usage: #example +* status = #final +* category[survey] = OBSCAT#survey "Survey" +* subject = Reference(pcoPatientJones) +* performer = Reference(pcoPatientJones) +* 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" + +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[survey] = OBSCAT#survey "Survey" +* 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" diff --git a/input/fsh/GASProfiles.fsh b/input/fsh/GASProfiles.fsh index ee1d3bd8..3e67ea82 100644 --- a/input/fsh/GASProfiles.fsh +++ b/input/fsh/GASProfiles.fsh @@ -26,13 +26,18 @@ Description: "Person-centered goal with goal attainment scaling." * measure = $LNC#68489 "Goal attainment scale" Profile: PCOGoalAttainmentScoreObservation -Parent: PCOProgressScoreObservation +Parent: USCoreSimpleObservationProfile Id: pco-gas-score-observation -Title: "PCO Goal Attainment Scaling (GAS) score" +Title: "Goal Attainment Scaling (GAS) score" Description: "The follow-up score indicates how a patient, caregiver, or practitioner rated progress on goal attainment scaling." +* insert PCOSurveyCategory +* effectiveDateTime 1..1 MS + * ^short = "When the score was assessed" * code from GoalAttainmentScalingScore (extensible) * ^short = "Code for Goal Attainment Scaling (GAS) score observation" +* focus 0..1 MS * focus only Reference(PCOGoalAttainmentScaleProfile) + * ^short = "The goal whose progress was scored" +* value[x] 1..1 MS * value[x] only CodeableConcept -* valueCodeableConcept 1..1 MS * valueCodeableConcept from GASScoreAnswers (required) diff --git a/input/fsh/GlobalAliasList.fsh b/input/fsh/GlobalAliasList.fsh new file mode 100644 index 00000000..8dd97fb1 --- /dev/null +++ b/input/fsh/GlobalAliasList.fsh @@ -0,0 +1,32 @@ +// Code Systems +// NOTE: use a code system (not value set) in instances +Alias: $LNC = http://loinc.org +Alias: $SCT = http://snomed.info/sct +Alias: CAT = http://terminology.hl7.org/CodeSystem/observation-category +Alias: UOM = http://unitsofmeasure.org +Alias: DAR = http://terminology.hl7.org/CodeSystem/data-absent-reason +Alias: Hl7FhirAdminGender = http://hl7.org/fhir/administrative-gender +Alias: NUCC = http://nucc.org/provider-taxonomy +Alias: USCORECAT = http://hl7.org/fhir/us/core/CodeSystem/us-core-category +Alias: OBSCAT = http://terminology.hl7.org/CodeSystem/observation-category + +// Value Sets +// NOTE: use a value set (not code system) when binding a field +Alias: LNCVS = http://hl7.org/fhir/ValueSet/observation-codes +Alias: CATVS = http://hl7.org/fhir/ValueSet/observation-category + +Alias: $compliesWithProfile = http://hl7.org/fhir/StructureDefinition/structuredefinition-compliesWithProfile + +Alias: $GoalAchievement = http://terminology.hl7.org/CodeSystem/goal-achievement + +// Misc +// Alias: USCorePatient = http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient +// Alias: USCoreEncounter = http://hl7.org/fhir/us/core/StructureDefinition/us-core-encounter +// Alias: USCoreLocation = http://hl7.org/fhir/us/core/StructureDefinition/us-core-location +// Alias: USCorePractitioner = http://hl7.org/fhir/us/core/StructureDefinition/us-core-practitioner +// Alias: USCorePractitionerRole = http://hl7.org/fhir/us/core/StructureDefinition/us-core-practitionerrole +// Alias: USCoreOrganization = http://hl7.org/fhir/us/core/StructureDefinition/us-core-organization +// Alias: USCoreQuestionnaireResponse = http://hl7.org/fhir/us/core/StructureDefinition/us-core-questionnaireresponse +// Alias: USCoreDocumentReference = http://hl7.org/fhir/us/core/StructureDefinition/us-core-documentreference +// Alias: USCoreDiagnosticReport = http://hl7.org/fhir/us/core/StructureDefinition/us-core-diagnosticreport-note +// Alias: $us-core-diagnosticreport-category = http://hl7.org/fhir/us/core/ValueSet/us-core-diagnosticreport-category diff --git a/input/fsh/PCOCarePlanExamples.fsh b/input/fsh/PCOCarePlanExamples.fsh index 83b42467..49794eed 100644 --- a/input/fsh/PCOCarePlanExamples.fsh +++ b/input/fsh/PCOCarePlanExamples.fsh @@ -10,8 +10,6 @@ Usage: #example * status = #active * intent = #plan * subject = Reference(pcoPatientJones) -* category[pcoCategory][0] = NCQAGoalDomains#physical-function "Physical Function" -* category[pcoCategory][1] = NCQAGoalDomains#independence "Independence" * goal = Reference(pcoGoalWalkDogExample) * activity[0].reference = Reference(pcoWalkOutsideActionStep) * activity[1].reference = Reference(pcoPhysicalTherapyReferral) @@ -47,7 +45,7 @@ Usage: #example * intent = #plan * subject = Reference(pcoPatientJones) * requester = Reference(pcoPractitionerAnderson) -* code.coding = $SNOMED#91251008 "Physical therapy procedure (regime/therapy)" +* code.coding = $SCT#91251008 "Physical therapy procedure (regime/therapy)" * extension[pertainsToGoal].valueReference = Reference(pcoGoalWalkDogExample) * authoredOn = "2024-02-22" * occurrenceTiming.repeat.boundsPeriod.start = "2024-03-01" diff --git a/input/fsh/PCOExamples.fsh b/input/fsh/PCOExamples.fsh index 818cb3a0..c160aec1 100644 --- a/input/fsh/PCOExamples.fsh +++ b/input/fsh/PCOExamples.fsh @@ -1,4 +1,3 @@ -Alias: $GoalAchievement = http://terminology.hl7.org/CodeSystem/goal-achievement Instance: pcoPatientJones InstanceOf: USCorePatientProfile @@ -48,74 +47,10 @@ Description: "Person-centered goal without attainment scaling or PROM" Usage: #example * lifecycleStatus = #active * achievementStatus = $GoalAchievement#in-progress -* category[pcoCategory] = NCQAGoalDomains#physical-function "Physical Function" +* category[pcoCategory] = PCOCodes#person-centered "Person-Centered" +* category[domainCategory] = NCQAGoalDomains#physical-function "Physical Function" * subject = Reference(pcoPatientJones) * expressedBy = Reference(pcoPatientJones) * startDate = "2024-02-15" * target.dueDate = "2024-06-30" * description.text = "Maintain pain level below 5 while walking" - -Instance: pcoGoalWalkDogExample -InstanceOf: PCOGoalAttainmentScaleProfile -Title: "Goal with GAS" -Description: "Person-centered goal with attainment scaling extensions" -Usage: #example -* lifecycleStatus = #active -* achievementStatus = $GoalAchievement#in-progress -* category[pcoCategory] = NCQAGoalDomains#physical-function "Physical Function" -* subject = Reference(pcoPatientJones) -* expressedBy = Reference(pcoPatientJones) -* startDate = "2024-04-03" -* target.dueDate = "2024-09-30" -* 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[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[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[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" -* extension[gas-scaling][4].extension[level].valueCoding = $LNC#gas-much-less-than-expected "Much less than expected" -* extension[gas-scaling][4].extension[text].valueString = "Unable to go outside with dog" - -Instance: pcoGASScoretBaselineExample -InstanceOf: PCOGoalAttainmentScoreObservation -Title: "GAS Baseline Score" -Description: "Baseline GAS score observation at start of goal." -Usage: #example -* status = #final -* subject = Reference(pcoPatientJones) -* performer = Reference(pcoPractitionerGonzalez) -* effectiveDateTime = "2024-04-03T10:15:00Z" -* code = $LNC#68489 "Goal attainment scale" -* focus = Reference(pcoGoalWalkDogExample) -* valueCodeableConcept = $LNC#gas-less-than-expected "Less than expected" - -Instance: pcoGASScorePatientFollowupExample -InstanceOf: PCOGoalAttainmentScoreObservation -Title: "Patient GAS Follow-up Score" -Description: "Follow-up GAS score observation recorded by a Patient showing goal progress." -Usage: #example -* status = #final -* subject = Reference(pcoPatientJones) -* performer = Reference(pcoPatientJones) -* 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" - -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 -* 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" diff --git a/input/fsh/PCOProfiles.fsh b/input/fsh/PCOProfiles.fsh index c6d0ae86..7ee76042 100644 --- a/input/fsh/PCOProfiles.fsh +++ b/input/fsh/PCOProfiles.fsh @@ -5,87 +5,70 @@ RuleSet: PCOCategory * ^slicing.discriminator.path = "$this" * ^slicing.rules = #open * category contains - pcoCategory 0..* MS + pcoCategory 1..1 MS * category[pcoCategory] from PCOCategoryValueSet (required) - * ^short = "Person-Centered Outcome category" + * ^short = "Person-Centered category" + +RuleSet: PCODomainCategory +* category + * ^slicing.discriminator.type = #pattern + * ^slicing.discriminator.path = "$this" + * ^slicing.rules = #open +* category contains + domainCategory 0..* MS +* category[domainCategory] from PCODomainCategoryValueSet (preferred) + * ^short = "Person-Centered Outcome domain category" // Include same binding description as in US Core profiles. -* category[pcoCategory] +* category[domainCategory] * ^binding.description = "Note that other codes are permitted, see [Required Bindings When Slicing by Value Sets](http://hl7.org/fhir/us/core/general-requirements.html#required-bindings-when-slicing-by-valuesets)" +RuleSet: PCOSurveyCategory +* category MS +* category ^slicing.discriminator.type = #pattern +* category ^slicing.discriminator.path = "$this" +* category ^slicing.rules = #open +* category ^requirements = "To identify that observation is derived from a questionnaire or other assessment instrument." +* category contains + survey 1..1 MS +* category[survey] from PCOSurveyCategoryVS +* category[survey] ^requirements = "Indicates the person-centered outcomes observation is of type survey" + 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 PCOCategory +* insert PCODomainCategory * expressedBy 0..1 MS * expressedBy only Reference(USCorePatientProfile or USCorePractitionerProfile or USCoreRelatedPersonProfile) * start[x] 1..1 MS * start[x] only date -* addresses 0..* MS - * ^short = "What Matters Assessment or Condition" -* addresses only Reference(WhatMattersAssessment or USCoreConditionProblemsHealthConcernsProfile) -// TODO: add a constraint that either category from PCOCategory or addresses WhatMattersAssessment SHALL be present +* addresses only Reference(Condition or Observation or RiskAssessment) +* addresses ^slicing.discriminator.type = #profile +* addresses ^slicing.discriminator.path = "resolve()" +* addresses ^slicing.rules = #open +* addresses contains SupportedAddresses 0..* MS +* addresses[SupportedAddresses] only Reference(WhatMattersAssessment or WhatMattersStatement) + * ^short = "What Matters Assessment or Statement" + * ^requirements = "When a goal addresses PCO what matters most observations, Goal.addresses should reference instances that comply with the PCO What Matters Assessment profiles. However, references to other instance types are also possible." -Profile: PCOGoalOutcomeMeasureProfile -Parent: PCOGoalProfile -Id: pco-prom-goal-profile -Title: "Person-Centered PROM Goal" -Description: "Person-centered goal with a Patient-Reported Outcome Measure (PROM) score target." -* target 1..1 - * measure 1..1 MS - * ^short = "Target score for evaluating PCO Goal using PROMs" - * measure from PROMTargetMeasures (extensible) - * detailQuantity 1..1 MS - * ^short = "Target value for the PROM score" +// TODO: add a constraint that either Goal.category from PCOCategory or Goal.addresses WhatMattersAssessment SHALL be present Profile: PCOCarePlan Parent: USCoreCarePlanProfile Id: pco-care-plan Title: "Person-Centered Care Plan" Description: "A person-centered care plan SHALL reference a person-centered goal and SHALL include action steps that support progress toward achievement of the plan's goals and desired outcomes. A plan SHOULD address the person's stated priorities for what matters most to them. Action steps may include both treatment procedures and self-care steps identified by the person." -* insert PCOCategory * goal 1..* MS -* goal only Reference(PCOGoalProfile) +* goal ^slicing.discriminator.type = #profile +* goal ^slicing.discriminator.path = "resolve()" +* goal ^slicing.rules = #open +* goal contains SupportedGoals 1..* MS +* goal[SupportedGoals] only Reference(PCOGoalProfile) * ^short = "Person-centered goals supported by this plan" * activity.detail 0..0 * ^short = "Removed in FHIR R5" * activity 1..* * activity.reference 1..1 MS * ^short = "Action steps for person-centered goals" - -Profile: PCOProgressScoreObservation -Parent: USCoreObservationScreeningAssessmentProfile -Id: pco-progress-score-observation -Title: "Person-Centered Progress Score" -Description: "A progress score observation for a person-centered goal." -* effectiveDateTime 1..1 MS - * ^short = "When the score was assessed" -* focus 0..1 MS -* focus only Reference(PCOGoalProfile) - * ^short = "The goal whose progress was scored" -/* -This slicing does not work. Always adds this to example instances: - { - "reference": "StructureDefinition/pco-goal" - } -*/ -// * focus -// * ^slicing.discriminator.type = #value -// * ^slicing.discriminator.path = "$this" -// * ^slicing.rules = #open -// * focus contains -// pcoGoal 1..1 MS -// * focus[pcoGoal] = only Reference(PCOGoal) -// * ^short = "Person-centered goal" - -Profile: PCOPatientReportedOutcomeScore -Parent: PCOProgressScoreObservation -Id: pco-prom-score -Title: "Patient-Reported Outcome Measure (PROM) score" -Description: "This observation records how a patient rated their own progress score using a PROM assessment." -* code from PROMTargetMeasures (extensible) - * ^short = "Code for PROM score observation" -* focus only Reference(PCOGoalOutcomeMeasureProfile) -* value[x] 1..1 MS -* value[x] only Quantity or integer diff --git a/input/fsh/PCOTerminology.fsh b/input/fsh/PCOTerminology.fsh index 1e4f7750..0285d7cf 100644 --- a/input/fsh/PCOTerminology.fsh +++ b/input/fsh/PCOTerminology.fsh @@ -1,14 +1,25 @@ -Alias: $LNC = http://loinc.org -Alias: $SNOMED = http://snomed.info/sct -Alias: $UCUM = http://unitsofmeasure.org - CodeSystem: PCOCodes -Id: pco +Id: pco-codes Title: "Codes for PCO" Description: "Codes to identify content associated with this IG" * ^caseSensitive = true * ^experimental = false * ^status = #active +* #person-centered "Person-Centered" * #person-centered-goal "Person-Centered Goal" * #pco-data-submission-bundle "PCO Bundle" * #pco-data-submission-standing-order "PCO Submission Standing Order" + +ValueSet: PCOCategoryValueSet +Title: "Person-Centered Category Value Set" +Id: pco-category-vs +Description: "Used to categorize resources as being Person-Centered" +* ^experimental = false +* PCOCodes#person-centered "Person-Centered" + +ValueSet: PCOSurveyCategoryVS +Title: "Person-Centered Outcomes Survey Value Set" +Id: pco-survey-category-vs +Description: "Used to indicate that all PCO observations of of type Survey" +* ^experimental = false +* OBSCAT#survey "Survey" diff --git a/input/fsh/PCOTerminologyExamples.fsh b/input/fsh/PCOTerminologyExamples.fsh index 8243a456..2756c711 100644 --- a/input/fsh/PCOTerminologyExamples.fsh +++ b/input/fsh/PCOTerminologyExamples.fsh @@ -34,10 +34,10 @@ Description: "NCQA goal domain codes used to identify the category for PCO resou * #emotional-and-mental-health "Emotional And Mental Health" "" -ValueSet: PCOCategoryValueSet -Id: pco-category-valueset -Title: "PCO Categories" -Description: "Example value set to identify the category for PCO resources." +ValueSet: PCODomainCategoryValueSet +Id: pco-domain-category-valueset +Title: "PCO Domain Categories" +Description: "Example value set to identify the domains category for PCO resources." * ^experimental = false // Cannot use "include codes" because cqframework -EnsureExecutableValueSet does not support this expansion // * include codes from system NCQAGoalDomains @@ -53,12 +53,3 @@ Description: "Example value set to identify the category for PCO resources." * NCQAGoalDomains#physical-function "Physical Function" * NCQAGoalDomains#social-functioning "Social Functioning" * NCQAGoalDomains#emotional-and-mental-health "Emotional And Mental Health" -* VAWholeHealth#body "Moving the Body" -* VAWholeHealth#mind "Power of the Mind" -* VAWholeHealth#nourishment "Food & Drink" -* VAWholeHealth#recharge "Recharge" -* VAWholeHealth#surroundings "Surroundings" -* VAWholeHealth#personal-development "Personal Development" -* VAWholeHealth#spirit-and-soul "Spirit & Soul" -* VAWholeHealth#relationships "Family, Friends & Co-Workers" -* VAWholeHealth#professional-care "Professional Care" \ No newline at end of file diff --git a/input/fsh/PROMExamples.fsh b/input/fsh/PROMExamples.fsh index 221120a5..5885e4fe 100644 --- a/input/fsh/PROMExamples.fsh +++ b/input/fsh/PROMExamples.fsh @@ -19,7 +19,8 @@ Description: "Person-centered goal with a PROM outcome target for GAD-7 score." Usage: #example * lifecycleStatus = #active * achievementStatus = $GoalAchievement#in-progress -* category[pcoCategory] = VAWholeHealth#mind "Power of the Mind" +* category[pcoCategory] = PCOCodes#person-centered "Person-Centered" +* category[domainCategory] = NCQAGoalDomains#emotional-and-mental-health "Emotional And Mental Health" * subject = Reference(pcoPatientLopez) * expressedBy = Reference(pcoPractitionerAnderson) * startDate = "2024-08-11" @@ -35,6 +36,7 @@ Title: "GAD-7 PROM Follow-up Score" Description: "Follow-up GAD-7 PROM score observation recorded by a Patient showing goal progress." Usage: #example * status = #final +* category[survey] = OBSCAT#survey "Survey" * subject = Reference(pcoPatientLopez) * performer = Reference(pcoPatientLopez) * effectiveDateTime = "2024-09-19T13:15:00Z" @@ -50,8 +52,6 @@ Usage: #example * status = #active * intent = #plan * subject = Reference(pcoPatientLopez) -* category[pcoCategory][0] = VAWholeHealth#mind "Power of the Mind" -* category[pcoCategory][1] = NCQAGoalDomains#emotional-and-mental-health "Emotional And Mental Health" * goal = Reference(pcoGoalAnxietyExample) * activity[0].reference = Reference(pcoMindfulnessSupportProgram) * period.start = "2024-08-11" @@ -66,7 +66,7 @@ Usage: #example * intent = #plan * subject = Reference(pcoPatientLopez) * requester = Reference(pcoPractitionerAnderson) -* code.coding = $SNOMED#1259023009 "Mindfulness Based Stress Reduction program (regime/therapy)" +* code.coding = $SCT#1259023009 "Mindfulness Based Stress Reduction program (regime/therapy)" * extension[pertainsToGoal].valueReference = Reference(pcoGoalAnxietyExample) * authoredOn = "2024-08-11" * occurrenceTiming.repeat.boundsPeriod.start = "2024-08-11" diff --git a/input/fsh/PROMProfiles.fsh b/input/fsh/PROMProfiles.fsh new file mode 100644 index 00000000..13b61084 --- /dev/null +++ b/input/fsh/PROMProfiles.fsh @@ -0,0 +1,27 @@ +Profile: PCOGoalOutcomeMeasureProfile +Parent: PCOGoalProfile +Id: pco-prom-goal-profile +Title: "Person-Centered PROM Goal" +Description: "Person-centered goal with a Patient-Reported Outcome Measure (PROM) score target." +* target 1..1 + * measure 1..1 MS + * ^short = "Target score for evaluating PCO Goal using PROMs" + * measure from PROMTargetMeasures (extensible) + * detailQuantity 1..1 MS + * ^short = "Target value for the PROM score" + +Profile: PCOPatientReportedOutcomeScore +Parent: USCoreSimpleObservationProfile +Id: pco-prom-score +Title: "Patient-Reported Outcome Measure (PROM) score" +Description: "This observation records how a patient's progress score is rated using a PROM assessment." +* insert PCOSurveyCategory +* effectiveDateTime 1..1 MS + * ^short = "When the score was assessed" +* code from PROMTargetMeasures (extensible) + * ^short = "Code for PROM score observation" +* focus 0..1 MS +* focus only Reference(PCOGoalOutcomeMeasureProfile) + * ^short = "The goal whose progress was scored" +* value[x] 1..1 MS +* value[x] only Quantity or integer diff --git a/input/fsh/WhatMatters.fsh b/input/fsh/WhatMatters.fsh index 748dbfaa..86ec3610 100644 --- a/input/fsh/WhatMatters.fsh +++ b/input/fsh/WhatMatters.fsh @@ -1,9 +1,34 @@ +Profile: WhatMattersFocusArea +Parent: USCoreSimpleObservationProfile +Id: pco-what-matters-focus-area +Title: "What Matters Focus Area" +Description: "Assessment observation for one aspect of What Matters Most to a person, with a boolean value indicating if this is a current priority." +* insert PCOSurveyCategory +// Must have preferred binding because parent profile has a preferred binding. +* code from WhatMattersFocusAreas (preferred) + * ^short = "Focus area for What Matters assessment" +* value[x] 1..1 MS +* value[x] only boolean + * ^short = "Indicates if focus area is a current priority" + +Profile: WhatMattersStatement +Parent: USCoreSimpleObservationProfile +Id: pco-what-matters-statement +Title: "What Matters Statement" +Description: "Assessment observation for one aspect of What Matters Most to a person, with a text statement about a focus area." +* insert PCOSurveyCategory +* code from WhatMattersFocusAreas (preferred) + * ^short = "Focus area for What Matters assessment" +* value[x] 1..1 MS +* value[x] only string + * ^short = "Description of what matters for this focus area" Profile: WhatMattersAssessment -Parent: USCoreObservationScreeningAssessmentProfile +Parent: USCoreSimpleObservationProfile Id: pco-what-matters-assessment Title: "What Matters Assessment" Description: "Assessment observation for one aspect of What Matters Most to a person, with component values rating where a person is now and where they would like to be in the future." +* insert PCOSurveyCategory * code from WhatMattersFocusAreas (preferred) * ^short = "Focus area for What Matters assessment" * component @@ -19,28 +44,28 @@ Description: "Assessment observation for one aspect of What Matters Most to a pe * component[nowRating] * code = WhatMattersRating#now-rating * ^short = "Where are you now?" - * insert ValueInteger + * insert RatingValueInteger * component[nowReasons] * code = WhatMattersRating#now-reasons * ^short = "What are the reasons you chose this number?" - * insert ValueString + * insert RatingValueString * component[futureRating] * code = WhatMattersRating#future-rating * ^short = "Where would you like to be?" - * insert ValueInteger + * insert RatingValueInteger * component[futureChanges] * code = WhatMattersRating#future-changes * ^short = "What changes could you make to help you get there?" - * insert ValueString + * insert RatingValueString -RuleSet: ValueInteger +RuleSet: RatingValueInteger +* value[x] 1..1 MS * value[x] only integer -* valueInteger 1..1 MS - * ^short = "Rating on scale of 1 (low) to 10 (high)" + * ^short = "Rating on scale from low to high" -RuleSet: ValueString +RuleSet: RatingValueString +* value[x] 1..1 MS * value[x] only string -* valueString 1..1 MS * ^short = "Reasons for your rating" CodeSystem: WhatMattersRating diff --git a/input/fsh/WhatMattersExamples.fsh b/input/fsh/WhatMattersExamples.fsh index 91d3c949..6b0764c4 100644 --- a/input/fsh/WhatMattersExamples.fsh +++ b/input/fsh/WhatMattersExamples.fsh @@ -5,6 +5,7 @@ Title: "What Matters: Moving the Body" Description: "What Matters assessment observation recorded by a Patient as preparation for creating PCO goals and CarePlan action steps." Usage: #example * status = #final +* category[survey] = OBSCAT#survey "Survey" * subject = Reference(pcoPatientJones) * performer = Reference(pcoPatientJones) * effectiveDateTime = "2024-03-27T15:10:00Z" @@ -18,6 +19,7 @@ InstanceOf: WhatMattersAssessment Title: "What Matters: Family & Friends" Description: "What Matters assessment observation recorded by a Patient as preparation for creating PCO goals and CarePlan action steps." Usage: #example +* category[survey] = OBSCAT#survey "Survey" * status = #final * subject = Reference(pcoPatientJones) * performer = Reference(pcoPatientJones)