Perspecta and BPM+
Background
As part of the past two HIMMS conference in conjunction with the VHA , Perspecta implemented as part of their Health Concourse Product exemplar implementation of BPM+ technologies.
Models (PIMS)
Diabetes Model
<< insert description >>
CKD Model
<< insert description >>
Operationalization
The initial models attempted to follow the BPM+ methodology resulting in a platform/clinically independent model. The operationalization process was to modify and extend the models to execute within the Health Concourse environment.
Information Integration for Blood Pressure
Process Data Model Integration "Patterns" (draft)
For the Diabetes, we followed the Black Box Integration Pattern for Process Data for operationalizing the information requirements.
Step one
The initial model leveraged a BPM data item structure which was not natively supported by Redhat. Redhat leverages java structures for process data definitions although future versions were supposed to support data items.
The resulting POJO was a Patient based container with the elements needed to complete the processing-for simplicity the following is a snippet
/* * Patient is more of a container concept then an actual domain patient * in fact the name is probable more confusing in some ways * / public class Patient { public java.lang.String patientID; public java.lang.String patientName; public java.lang.String patientGender; public java.lang.String patientDOB; public java.util.List<CodedElement> conditions = new ArrayList<CodedElement>(); public java.lang.String comorbidityStatus = "ABSENT"; public java.lang.String microvascularComplications = "ABSENT"; public java.util.List<CodedElement> medications = new ArrayList<CodedElement>();; public Integer bloodSugar; public double hbA1cRangeHigh; public double hbA1cRangeLow; public java.lang.String hba1cStatus; public double latestHBA1C; public java.lang.Boolean severeStatus; }
Step 2 –Transformation
The next step is to provide transformation services from native content to the process information. In the case of Health Concourse , the native content is FHIR. We leveraged the MDMI services to provide a transformation from FHIR to pojo
The process query resulted in the following text
<?xml version="1.0" encoding="UTF-8"?> <Bundle> <entry> <resource> <Observation xmlns="http://hl7.org/fhir"> <id value="M5883308" /> <meta> <versionId value="1-5883307" /> <lastUpdated value="2018-12-07T15:42:54" /> <tag> <code value="Cerner" /> <display value="Cerner" /> </tag> <tag> <system value="http://hl7.org/fhir/us/core/StructureDefinition/us-core-observation" /> <code value="NA" /> <display value="Not Applicable" /> </tag> <tag> <system value="http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-observation" /> <code value="N" /> <display value="Not Compliant" /> </tag> <tag> <system value="http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation" /> <code value="N" /> <display value="Not Compliant" /> </tag> </meta> <text> <status value="generated" /> </text> <status value="final" /> <category> <coding> <system value="http://hl7.org/fhir/observation-category" /> <code value="laboratory" /> <display value="Laboratory" /> </coding> <text value="Laboratory" /> </category> <code> <coding> <system value="http://loinc.org" /> <code value="2345-7" /> </coding> <text value="Glucose Lvl" /> </code> <context> <reference value="Encounter/2787906" /> </context> <effectiveDateTime value="2016-02-08T15:24:00.000Z" /> <issued value="2016-02-08T16:14:07.000Z" /> <valueQuantity> <value value="76" /> <unit value="mg/dL" /> <system value="http://unitsofmeasure.org" /> <code value="mg/dL" /> </valueQuantity> <interpretation> <coding> <system value="http://hl7.org/fhir/v2/0078" /> <code value="N" /> <display value="Normal" /> </coding> </interpretation> <referenceRange> <low> <value value="30" /> <unit value="mg/dL" /> <system value="http://unitsofmeasure.org" /> <code value="mg/dL" /> </low> <high> <value value="90" /> <unit value="mg/dL" /> <system value="http://unitsofmeasure.org" /> <code value="mg/dL" /> </high> <text value="30-90 mg/dL" /> </referenceRange> </Observation> </resource> </entry> </Bundle>
The result after transformation is
{ "bloodSugar": 76.0 }
which is the parsed as base JSON processing available in redhat services.
Below is the GUI representation of the process running
<< insert links to artifacts (running ?) >>
Information Integration for CKD
Under the health concourse platform was developed a Knowledge Service, which by design hosted several types of knowledge services. In the case of Hypertension, the knowledge services leveraged were a set of CDS hooks implementations returning specific status on the patient.
An example of one of these statuses was “Does patient have an urgent or emergent condition?”
The possible responses were true/false/need more information
The need more information was returned if the Knowledge Service needed additional information to return an appropriate result. The UI developed was responsible for processing such needs for additional information
The following is the example response where the OperationOutcome in this case the response was false.
{ "resourceType": "GuidanceResponse""GuidanceResponse", "id": "HC-000-e8cc6b73-cdb3-4e21-a464-cc01b7c8fbe4", "contained": [ { "resourceType": "OperationOutcome", "id": "1", "issue": [ { "severity": "information", "code": "informational", "location": [ "Condition/ORG-1003-hc-cond-izzy-hf-1/_history/1" ] } ] }, { "resourceType": "Parameters", "id": "2", "parameter": [ { "name": "transformed-result", "valueBoolean": false } ] }, { "resourceType": "RequestGroup", "id": "3", "status": "completed", "intent": "proposal" } ], "extension": [ { "url": "http://perspecta.com/healthconcourse/guidance-module-canonical", "valueString": "https://fhir-admin.demo-staging2.openplatform.healthcare/Library/ORG-Motive-HIMSSCKDIdUrgentCareDR2|1" }, { "url": "http://perspecta.com/fhir/km/StructureDefinition/guidance-moduleset", "valueString": "patient-id:HC-000-1045module-id:[ORG-Motive-HIMSSCKDIdUrgentCareDR2]" } ], "status": "success", "subject": { "id": "HC-000-1045", "reference": "Patient/HC-000-1045" }, "occurrenceDateTime": "2020-08-18T21:26:11+00:00", "reasonCodeableConcept": { "text": "Stale Guidance encountered when checking for stale period. Generated at 2020-08-18T21:26:06+00:00." }, "evaluationMessage": [ { "reference": "#1" } ], "outputParameters": { "reference": "#2" }, "result": { "reference": "#3" } }