Person-Centered Outcomes (PCO) Implementation Guide
1.0.0 - STU 1 United States of America flag

Person-Centered Outcomes (PCO) Implementation Guide, published by HL7 International / Patient Care. This guide is not an authorized publication; it is the continuous build for version 1.0.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/HL7/pco-ig/ and changes regularly. See the Directory of published versions

Library: PCOCommon

Official URL: http://hl7.org/fhir/us/pco/Library/PCOCommon Version: 1.0.0
Standards status: Draft Maturity Level: 2 Computable Name: PCOCommon

Shared CQL expressions for all Person-Centered Outcome libraries.

Id: PCOCommon
Version: 1.0.0
Url: PCOCommon
Status: draft
Type:

system: http://terminology.hl7.org/CodeSystem/library-type

code: logic-library

Date: 2025-08-26 15:38:43+0000
Publisher: HL7 International / Patient Care
Description:

Shared CQL expressions for all Person-Centered Outcome libraries.

Jurisdiction: US
Related Artifacts:

Dependencies

Parameters:
NameTypeMinMaxIn/Out
Measurement PeriodPeriod01In
PatientPatient01Out
Data Requirements:
TypeProfileMSCode Filter
Patient http://hl7.org/fhir/StructureDefinition/Patient ;
Condition http://hl7.org/fhir/StructureDefinition/Condition ;
Observation http://hl7.org/fhir/StructureDefinition/Observation ;
Goal http://hl7.org/fhir/StructureDefinition/Goal ;;;;
CarePlan http://hl7.org/fhir/StructureDefinition/CarePlan ;
Practitioner http://hl7.org/fhir/StructureDefinition/Practitioner ;
RelatedPerson http://hl7.org/fhir/StructureDefinition/RelatedPerson ;
Content: text/cql
library PCOCommon version '0.1.0'

using FHIR version '4.0.1'

include hl7.fhir.uv.cql.FHIRCommon version '2.0.0'
include hl7.fhir.uv.cql.FHIRHelpers version '4.0.1'

parameter "Measurement Period" Interval<DateTime>

context Patient

define function SortAscending(observations List<Observation>):
  observations O
    sort by Coalesce(
      (effective as FHIR.dateTime).value,
      (effective as FHIR.instant).value,
      (effective as FHIR.Period)."end".value,
      (effective as FHIR.Period)."start".value) ascending

// Returns Date from the first Goal target that has a due date.
define fluent function dueDate(goal Goal):
  First(goal.target target
    // TODO if due is Duration, add that quantity to startDate
      let due:(target.due as FHIR.date).value
      where due is not null
      return due
  )

// Returns a list of Conditions that this Goal addresses.
define fluent function addressesConditions(goal Goal):
  flatten( goal.addresses GA
      return [Condition] cond
        where GA.references(cond.id)
  )

// Returns a list of Observations that this Goal addresses.
define fluent function addressesObservations(goal Goal):
  flatten( goal.addresses GA
      return [Observation] obs
        where GA.references(obs.id)
  )

// Returns a list of Goals that address this Observation
define fluent function addressedByGoals(obs Observation):
  [Goal] goal
    where exists ( goal.addresses GA
        where GA.references(obs.id)
    )

// Returns a list of CarePlan that support this Goal.
define fluent function carePlans(goal Goal):
  [CarePlan] carePlan
    where exists ( carePlan.goal goalRef
        where goalRef.references(goal.id)
    )

/**
Use this function to resolve Patient resource from a list of references, e.g. from Goal.expressedBy or Observation.performer
Returns null if a Patient resource is not included in the reference list.
*/
define fluent function resolvePatients(references List<Reference>):
  flatten( references ref
    return [Patient] resource
        where ref.references(resource.id)
  )

/**
Use this function to resolve Pracitioner resource from a list of references, e.g. from Goal.expressedBy or Observation.performer
Returns null if a Pracitioner resource is not included in the reference list.
*/
define fluent function resolvePractitioners(references List<Reference>):
  flatten( references ref
    return [Practitioner] resource
        where ref.references(resource.id)
  )

/**
Use this function to resolve RelatedPerson resource from a list of references, e.g. from Goal.expressedBy or Observation.performer
Returns null if a RelatedPerson resource is not included in the reference list.
*/
define fluent function resolveRelatedPersons(references List<Reference>):
  flatten( references ref
    return [RelatedPerson] resource
        where ref.references(resource.id)
  )

/**
Use this function to resolve Goal resource from a list of references, e.g. from CarePlan.goal
Returns null if a Goal resource is not included in the reference list.
*/
define fluent function resolveGoals(references List<Reference>):
  flatten( references ref
    return [Goal] resource
        where ref.references(resource.id)
  )
Content: application/elm+xml
Encoded data (81604 characters)
Content: application/elm+json
Encoded data (152736 characters)