Colorectal Cancer Screening and Management (CRCSM) Clinical Decision Support (CDS) Implementation Guide
0.1.0 - ci-build

Colorectal Cancer Screening and Management (CRCSM) Clinical Decision Support (CDS) Implementation Guide - Local Development build (v0.1.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions

Library: ScreeningIncompleteEvents

Official URL: http://cancerscreeningcds.github.io/crcsm-cds/Library/ScreeningIncompleteEvents Version: 0.1.0
Draft as of 2025-02-28 Computable Name: ScreeningIncompleteEvents
Id: ScreeningIncompleteEvents
Version: 0.1.0
Url: ScreeningIncompleteEvents
Status: draft
Type:

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

code: logic-library

Date: 2025-02-28 21:24:30+0000
Publisher: MITRE
Related Artifacts:

Dependencies

  • http://fhir.org/guides/cqf/common/Library/FHIR-ModelInfo|4.0.1
  • http://cancerscreeningcds.github.io/crcsm-cds/Library/FHIRHelpers|4.0.1
  • http://cancerscreeningcds.github.io/crcsm-cds/Library/DataElements|1.0.0
  • http://cancerscreeningcds.github.io/crcsm-cds/Library/CDSConnectCommonsforFHIRv401|1.0.0
  • http://cancerscreeningcds.github.io/crcsm-cds/Library/CSMCommonFunctions|1.0.0
  • http://cancerscreeningcds.github.io/crcsm-cds/Library/CRCSMCommonFunctions|1.0.0
  • http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1032.361
Parameters:
NameTypeMinMaxIn/Out
PatientPatient01Out
ColorectalCancerScreeningOrdersServiceRequest0*Out
ActiveColorectalCancerScreeningOrdersServiceRequest0*Out
CompletedColorectalCancerScreeningOrdersServiceRequest0*Out
CompletedOrdersWithoutDiagnosticReportServiceRequest0*Out
CompletedOrdersWithoutSubsequentReportServiceRequest0*Out
CompletedOrdersWithoutResultsServiceRequest0*Out
eve-pendingordersServiceRequest0*Out
ColorectalCancerScreeningOrderedProceduresProcedure0*Out
ColorectalCancerScreeningProceduresProcedure0*Out
CompletedColorectalCancerScreeningProceduresProcedure0*Out
CompletedProceduresWithoutDiagnosticReportProcedure0*Out
CompletedProceduresWithoutSubsequentReportProcedure0*Out
CompletedProceduresWithoutResultsProcedure0*Out
eve-pendingproceduresProcedure0*Out
Data Requirements:
TypeProfileMSCode Filter
Patient http://hl7.org/fhir/StructureDefinition/Patient
ServiceRequest http://hl7.org/fhir/StructureDefinition/ServiceRequest ;;; code filter:
path: code
value set: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1032.361
ServiceRequest http://hl7.org/fhir/StructureDefinition/ServiceRequest ;;;; code filter:
path: code
value set: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1032.361 code filter:
path: status

code: active

ServiceRequest http://hl7.org/fhir/StructureDefinition/ServiceRequest ;;;;; code filter:
path: code
value set: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1032.361 code filter:
path: status

code: completed

DiagnosticReport http://hl7.org/fhir/StructureDefinition/DiagnosticReport ;
Procedure http://hl7.org/fhir/StructureDefinition/Procedure ;;;;
Procedure http://hl7.org/fhir/StructureDefinition/Procedure ;;; code filter:
path: code
value set: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1032.361
Content: text/cql
library ScreeningIncompleteEvents version '1.0.0'

using FHIR version '4.0.1'
include FHIRHelpers  version '4.0.1' called FHIRHelpers

include DataElements version '1.0.0' called DataElements
include CDSConnectCommonsforFHIRv401 version '1.0.0' called C3F
include CSMCommonFunctions version '1.0.0' called Common
include CRCSMCommonFunctions version '1.0.0' called CRCSMCommonFunctions

valueset "Colorectal Screening Modalities": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1032.361'
//TODO: add additional valuesets like SNOMED CT and CPT, at a minimum.

context Patient

define "eve-pendingorders":
  ActiveColorectalCancerScreeningOrders union 
  CompletedOrdersWithoutResults

define "eve-pendingprocedures":
  CompletedProceduresWithoutResults

//TODO: consider searching path reports directly for abnormal findings (if they're absent from the colonoscopy report)
//define "eve-pendingpathology":
//  IncompleteColorectalBiopsyDiagnosticReports  

//------------------------------------------------------------------------------
// ORDERS
//------------------------------------------------------------------------------ 

define CompletedOrdersWithoutResults:
  if not exists DataElements.ColorectalCancerScreeningObservations
    then CompletedOrdersWithoutSubsequentReport
  else
    from CompletedOrdersWithoutSubsequentReport O,
      (DataElements.ColorectalCancerScreeningObservations) Obs
    where not Exists (Obs.basedOn B where B.reference = 'ServiceRequest/' + O.id)
    return O

define CompletedOrdersWithoutSubsequentReport:
  CompletedOrdersWithoutDiagnosticReport O
  let lastReportDate: LastReportDateByCode(O.code)
  where LastReportNotAfterOccurrenceDateTime(O.occurrence as FHIR.dateTime, lastReportDate)
    or LastReportNotAfterOccurrencePeriod(O.occurrence as FHIR.Period, lastReportDate)    

define CompletedOrdersWithoutDiagnosticReport:
  if not exists DataElements.ColorectalCancerScreeningDiagnosticReports
    then CompletedColorectalCancerScreeningOrders
  else
    from CompletedColorectalCancerScreeningOrders O,
      DataElements.ColorectalCancerScreeningDiagnosticReports DR
    where not Exists (DR.basedOn B where B.reference = 'ServiceRequest/' + O.id)
    return O

define CompletedColorectalCancerScreeningOrders:
  ColorectalCancerScreeningOrders O
    where O.status in {'completed'}

//TODO: Might need to modify logic to consider scenario where the active order with results after the order could be considered completed.
define ActiveColorectalCancerScreeningOrders:
  ColorectalCancerScreeningOrders O
    where O.status in {'active'}

define ColorectalCancerScreeningOrders:
  [ServiceRequest: "Colorectal Screening Modalities"] O
    where O.intent in {'order', 'original-order', 'reflex-order', 'filler-order', 'instance-order'}    

//------------------------------------------------------------------------------
// PROCEDURES
//------------------------------------------------------------------------------ 

define CompletedProceduresWithoutResults:
  if not exists DataElements.ColorectalCancerScreeningObservations 
    then CompletedProceduresWithoutSubsequentReport
  else
    from CompletedProceduresWithoutSubsequentReport P,
      (DataElements.ColorectalCancerScreeningObservations) Obs
    where not Exists (Obs.basedOn B where B.reference = 'Procedure/' + P.id)
    and not Exists( (Obs.basedOn) oB where AnyTrue((P.basedOn) pB return pB = oB ) )
    return P

define CompletedProceduresWithoutSubsequentReport:
  CompletedProceduresWithoutDiagnosticReport P
  let lastReportDate: LastReportDateByCode(P.code)
  where LastReportNotAfterOccurrenceDateTime(P.performed as FHIR.dateTime, lastReportDate)
    or LastReportNotAfterOccurrencePeriod(P.performed as FHIR.Period, lastReportDate)    

define CompletedProceduresWithoutDiagnosticReport:
  if not exists DataElements.ColorectalCancerScreeningDiagnosticReports
    then CompletedColorectalCancerScreeningProcedures
  else
    from CompletedColorectalCancerScreeningProcedures P,
      DataElements.ColorectalCancerScreeningDiagnosticReports DR
    where not Exists (DR.basedOn B where B.reference = 'Procedure/' + P.id)
    return P

define CompletedColorectalCancerScreeningProcedures:
  ColorectalCancerScreeningProcedures P
    where P.status in {'completed'}

define ColorectalCancerScreeningProcedures:
  ColorectalCancerScreeningOrderedProcedures union
  [Procedure] P
    where P.code in "Colorectal Screening Modalities"

define ColorectalCancerScreeningOrderedProcedures:
  from CompletedColorectalCancerScreeningOrders O,
    [Procedure] P
  where Exists (P.basedOn B where B.reference = 'ServiceRequest/' + O.id)
    return P

//------------------------------------------------------------------------------
// DIAGNOSTIC REPORTS
//------------------------------------------------------------------------------ 

//define IncompleteColorectalBiopsyDiagnosticReports:
//  [DiagnosticReport: DataElements."Biopsy Report"] DR where
//    DR.status in {'preliminary', 'registered', 'partial'}

//------------------------------------------------------------------------------
// Functions
//------------------------------------------------------------------------------ 

define function LastReportDateByCode(code FHIR.CodeableConcept):
  code C
  let lastReport: CRCSMCommonFunctions.MostRecentDiagnosticReportByCode(C),
  lastReportDate: Common.DiagnosticReportDate(lastReport)
  return lastReportDate

define function LastReportNotAfterOccurrenceDateTime(occurrence FHIR.dateTime, lastReportDate System.DateTime):
  lastReportDate is null 
    or (occurrence is not null and lastReportDate <= occurrence) 

define function LastReportNotAfterOccurrencePeriod(occurrence FHIR.Period, lastReportDate System.DateTime):
  lastReportDate is null
    or (occurrence is not null and lastReportDate before C3F.PeriodToInterval(occurrence))
Content: application/elm+xml
Encoded data (127160 characters)
Content: application/elm+json
Encoded data (237904 characters)