Skip to content

uwcirg/carl

Repository files navigation

CARL

Named after Carl Linnaeus, considered by some as the "father of modern taxonimy", this project embodies a condition classifier; a logic engine capable of acting on trigger events, querying an external FHIR store for state and generating conditions when appropriate, pushed back into the same external FHIR store.

Marker Conditions

"COPD" or "COPD, exacerbation" Condition

Patients found to have at least one condition from the CNICS COPD Value Set, are marked with Condition having code:

{
    system="https://cpro.cirg.washington.edu/groups",
    code="CNICS.COPD2021.11.001",
    display="COPD PRO group member",
}

Example FHIR Query to obtain FHIR Patients having said condition:

https://SERVER/fhir/Patient?_has:Condition:patient:code=CNICS.COPD2021.11.001

COPD With MedicationRequest

Patients qualifying for the COPD PRO group marker also found to have at least one MedicationRequest from the CNICS COPD Medication Value Set, are marked with Condition having code:

{
    system="https://cpro.cirg.washington.edu/groups",
    code="CNICS.COPDMED2022.03.001",
    display="COPD PRO group member with qualifying MedicationRequest",
}

Example FHIR Query to obtain FHIR Patients having said condition:

https://SERVER/fhir/Patient?_has:Condition:patient:code=CNICS.COPDMED2022.03.001

ValueSets

CNICS COPD Value Set

List of qualifying COPD and COPD exacerbation condition codings.

  • "system": "http://hl7.org/fhir/sid/icd-9-cm"
    • "code": "491"
    • "code": "491.0"
    • "code": "491.1"
    • "code": "491.2"
    • "code": "491.20"
    • "code": "491.21"
    • "code": "491.22"
    • "code": "491.8"
    • "code": "491.9"
    • "code": "492"
    • "code": "492.0"
    • "code": "492.8"
    • "code": "493.2"
    • "code": "493.20"
    • "code": "493.21"
    • "code": "493.22"
    • "code": "496"
  • "system": "http://hl7.org/fhir/sid/icd-10-cm"
    • "code": "J41.0"
    • "code": "J41.1"
    • "code": "J41.8"
    • "code": "J42"
    • "code": "J43.0"
    • "code": "J43.1"
    • "code": "J43.2"
    • "code": "J43.8"
    • "code": "J43.9"
    • "code": "J44.0"
    • "code": "J44.1"
    • "code": "J44.9"
  • "system": "https://cnics.cirg.washington.edu/diagnosis-name"
    • "code": "COPD"
    • "code": "COPD, exacerbation"

CNICS COPD Medication Value Set

List of qualifying COPD MedicationRequest codings.

  • "system": "https://cnics.cirg.washington.edu/medication-name"
    • "code": "IPRATROPIUM-INHALED"
    • "code": "ARFORMOTEROL"
    • "code": "FORMOTEROL"
    • "code": "OLODATEROL"
    • "code": "SALMETEROL"
    • "code": "ACLIDINIUM"
    • "code": "TIOTROPIUM"
    • "code": "UMECLIDINIUM"
    • "code": "FLUTICASONE FUROATE + UMECLIDINIUM + VILANTEROL"
    • "code": "ALBUTEROL + IPRATROPIUM"
    • "code": "IPRATROPIUM + FENOTEROL"
    • "code": "ACLIDINIUM + FORMOTEROL"
    • "code": "BUDESONIDE + FORMOTEROL"
    • "code": "FLUTICASONE + SALMETEROL"
    • "code": "FLUTICASONE + VILANTEROL"
    • "code": "MOMETASONE + FORMOTEROL"
    • "code": "OLODATEROL + TIOTROPIUM"
    • "code": "UMECLIDINIUM + VILANTEROL"
    • "code": "GLYCOPYRROLATE + FORMOTEROL FUMARATE"

How To Run

As a flask application, carl exposes HTTP routes as well as a number of command line interface entry points.

These instructions assume a docker-compose deployment. Simply eliminate the leading dc exec portion of each command if deployed outside a docker container.

To view available HTTP routes:

docker-compose exec carl flask routes

To view available CLI entry points:

docker-compose exec carl flask --help

Especially useful for debugging or testing, obtain any single Patient _id from the configured FHIR store, and process via:

curl -X PUT http://localhost:5000/classify/<Patient._id>/<site>

To process the entire set of Patient resources found in the configured FHIR store:

docker-compose run carl flask classify

To reset, that is remove conditions added from previous runs:

docker-compose run carl flask declassify

Complete example for site uw, captures both standard out and error to respective log files:

docker-compose run carl flask classify uw > /var/log/cnics_to_fhir/carl.out 2> /var/log/cnics_to_fhir/carl.err