160 likes | 284 Views
Query Health Technical WG 2/2 /2012. Agenda. Administrative Reminders. None. HQMF++ Progress. HQMF HQMF++ models and schemas posted in the Google Code Repository Thanks to Keith for all the terrific work Issues being tracked in the Issue Tracker
E N D
Administrative Reminders • None
HQMF++ Progress • HQMF • HQMF++ models and schemas posted in the Google Code Repository • Thanks to Keith for all the terrific work • Issues being tracked in the Issue Tracker • Marc Hadley has been implementing a translator for the hQuery Gateway to convert HQMF++ to Java Script • Identified multiple items of interest for the HQMF++ improvement • Will be posting each item and discussion topic as a thread.
HQMF++ Progress • Marc’s Question: • (i) Code set identifier locationIn the dataCriteriaSection it seems like the valueSet code can be in one of three places depending on the type of entry: ./cda:*Criteria/cda:participant/cda:roleParticipant/cda:code/@valueSet (medication, rx) ./cda:*Criteria/cda:value/@valueSet (problem) ./cda:*Criteria/cda:code/@valueSet (everything else)Its not clear to me why you sometimes find the valueSet in code/@valueSet and other times in value/@valueSet. Its also not clear why, in the case of medication and rx, the valueSet id is nested inside the participant/roleParticipant element. • Keith’s Response: • Where the code goes depends on the representation of the information in the model. For example, the medication is a participant in a medication act, the code being on the substance administered, not describing the act performed, so it codes on the entity in the role. Similarly, the problem (or allergy) is what you observed (the result of a kind of observation) and goes in value, while observation/code is how you observed it. Encounters and procedures are actions, and the code for those goes in procedure/code or encounter/code.
HQMF++ Progress Marc’s Question: (ii)StratifierpreconditionsStratifier preconditions all use substanceAdministrationReference even when the thing they are referencing isn't a medication.(iii) Measure variables within the dataCriteriaSection (e.g. StartDate) don't have identifiers but all the other entries do. Keith’s Response: (ii)That's a copy/paste error. All of those should probably be ObservationReference, and I need an appropriate key/keyref pair in the schema to check conformance. I will fix that shortly.(iii) This is also an error, but this time due to the fact that I really didn't do a lot with these. They still need to be made into parameters on the Measure Description, rather than criteria in the population measure.
HQMF++ Progress Marc’s Question: (iv) the default conjunctions for each population criteria, IPP - AllTrueDENOM - AllTrueNUMER - AllTrueEXCL - AtLeastOneTrueKeith’s Response: (iv) – That is accurate
HQMF++ Progress Marc’s Question: (v) effectiveTime Many of these don't look right when compared to the corresponding NQF specification, e.g. the measure numerator looks for "Laboratory test result: HbA1c test, MOST RECENT value during the measurement period > 9.0%". The HQMF for this is: <entry> <localVariableName>HbA1C</localVariableName> <subsetCode code="RECENT"/> <observationCriteria> <id root="0" extension="HbA1C"/> <code valueSet="2.16.840.1.113883.3.464.1.72"/> <statusCode code="completed"/> <value xsi:type="IVL_PQ"> <low value="9" unit="%"/> </value> <definition> <observationReferencemoodCode="DEF"> <id root="0" extension="LabResults"/> </observationReference> </definition> </observationCriteria></entry> I'd expect to see an effectiveTime element in there to restrict the dates to the measurement period like this <effectiveTime> <low nullFlavor="DER"> <expression>StartDate</expression> </low> <high nullFlavor="DER"> <expression>EndDate</expression> </high> </effectiveTime> Keith’s Response: Marc’s change is correct and he will make changes to reflect that
HQMF++ Progress Marc’s Question: Another example is the exclusions which looks for "Diagnosis active: steroid induced diabetes <=2 years before or simultaneously to “measurement end date". The HQMF for this is: <entry> <localVariableName>HasSteroidInducedDiabetes</localVariableName> <observationCriteria> <id root="0" extension="HasSteroidInducedDiabetes"/> <effectiveTime> <low nullFlavor="DER"> <expression>StartDate</expression> </low> <high nullFlavor="DER"> <expression>EndDate</expression> </high> </effectiveTime> <value xsi:type="CD" valueSet="2.16.840.1.113883.3.464.1.113"/> <definition> <observationReferencemoodCode="DEF"> <id root="0" extension="Problem"/> </observationReference> </definition> </observationCriteria></entry> Here we have an effectiveDate but its start and end are only one year apart (StartDate=20100101, EndDate=20101231). Shouldn't the effectiveTime look like this instead: <effectiveTime> <low nullFlavor="DER"> <expression>StartDate.add(new PQ(-1,"a"))</expression> </low> <high nullFlavor="DER"> <expression>EndDate</expression> </high> </effectiveTime> Keith’s Response: Marc’s change is correct and he will make changes to reflect that
HQMF++ Progress Marc’s Question: The ones that are really confusing me though are, e.g., Medication dispensed: medications indicative of diabetes” <=2 years before or simultaneously to “measurement end date”; for which the HQMF is: <entry> <localVariableName>DiabetesMedSupplied</localVariableName> <supplyCriteria> <id root="0" extension="DiabetesMedSupplied"/> <effectiveTimexsi:type="IVL_TS"> <high nullFlavor="DER"> <expression>EndDate.add(new PQ(-2,"a"))</expression> </high> </effectiveTime> <participant typeCode="PRD"> <roleParticipantclassCode="THER"> <code valueSet="2.16.840.1.113883.3.464.1.94"/> </roleParticipant> </participant> <definition> <supplyReferencemoodCode="DEF"> <id root="0" extension="RX"/> </supplyReference> </definition> </supplyCriteria></entry> I think the measure is looking for meds dispensed (EndDate-2y <= date <= EndDate). I think the markup above specifies meds dispensed 2 years or more before the EndDate. IOW, I think the above should be: This one seems right <entry> <localVariableName>DiabetesMedSupplied</localVariableName> <supplyCriteria> <id root="0" extension="DiabetesMedSupplied"/> <effectiveTimexsi:type="IVL_TS"><low nullFlavor="DER"> <expression>EndDate.add(new PQ(-2,"a"))</expression> </low> <high nullFlavor="DER"> <expression>EndDate</expression> </high> </effectiveTime> <participant typeCode="PRD"> <roleParticipantclassCode="THER"> <code valueSet="2.16.840.1.113883.3.464.1.94"/> </roleParticipant> </participant> <definition> <supplyReferencemoodCode="DEF"> <id root="0" extension="RX"/> </supplyReference> </definition> </supplyCriteria></entry> Keith’s Response: Marc’s change is correct and he will make changes to reflect that
HQMF++ Progress Marc’s Question: (vi) Reference dates We have some age based criteria, e.g.: <entry> <localVariableName>ageBetween17and64</localVariableName> <observationCriteria> <id root="0" extension="ageBetween17and64"/> <code code="424144002" codeSystem="2.16.840.1.113883.6.96" displayName="Age"/> <value xsi:type="IVL_PQ"> <low value="17" unit="a"/> <high value="64" unit="a"/> </value> <definition> <observationReferencemoodCode="DEF"> <id root="0" extension="Demographics"/> </observationReference> </definition> </observationCriteria> </entry> However a patient's age depends on having a reference date on which the age is measured, we don't appear to have specified one here. I can see a couple of approaches to this: (a) We fix the reference date and define the value in our spec, e.g. we could use the end of the measurement period but that requires us always to specify an EndDate variable. (b) We use birthdate and dates instead, e.g. <entry> <localVariableName>ageBetween17and64</localVariableName> <observationCriteria> <id root="0" extension="ageBetween17and64"/> <code code="code_for_birthdate" codeSystem="2.16.840.1.113883.6.96" displayName="Birthdate"/> <value xsi:type="IVL_PQ"> <low nullFlavor="DER"> <expression>EndDate.add(new PQ(-64,"a"))</expression> </low> <high nullFlavor="DER"> <expression>EndDate.add(new PQ(-17,"a"))</expression> </high> </value> <definition> <observationReferencemoodCode="DEF"> <id root="0" extension="Demographics"/> </observationReference> </definition> </observationCriteria> </entry> Keith’s Response: Either solution works. Measure developers seem to like to work with age because it is easier to “think” about. I think we should punt the question to NQF and others for feedback. On codes, I have a set of codes for demographics from SNOMED.
HQMF++ Progress Marc’s Question: (vii) Cross references between data criteria.In the stage 1 measures there are quite a few instance of data criteria being filtered based on other data criteria. E.g. procedure DURING encounter. How would this be captured ? Something like this perhaps:<subsetCode code="DURING"> <observationReference> <id root="0" extension="SomeEncounterID"/> </observationReference></subsetCode> Keith’s Response: <entry> <obsevationCriteria> <code code="..." codeSystem="..."/> <temporallyRelatedInformationtypeCode='DURING'> <encounterReference> <id root="..." extension="..."/> </encounterReference> </temporallyRelatedInformation> </observationCriteria></entry> That's actually an more implementation independent way to handle timing constraints, rather than the JavaScript derived time constraints. That can be translated into appropriate JavaScript, SQL or other implementations.
HQMF++ Progress Marc’s Question: (viii) Operator precedence. For HbA1C data criteria, the HQMF is: <entry> <localVariableName>HbA1C</localVariableName> <subsetCode code="RECENT"/> <observationCriteria> <id root="0" extension="HbA1C"/> <code valueSet="2.16.840.1.113883.3.464.1.72"/> <statusCode code="completed"/> <value xsi:type="IVL_PQ"> <low value="9" unit="%"/> </value> <definition> <observationReferencemoodCode="DEF"> <id root="0" extension="LabResults"/> </observationReference> </definition> </observationCriteria> </entry>We have both a subset code (RECENT) and a value filtering step (result > 9%). Should this be translated to:hba1cGreaterThanNine(RECENT(allHba1cResults)), orRECENT(hba1cGreaterThanNine(allHba1cResults))The results could be quite different. Marc’s Latest Suggestion: <entry> <localVariableName>HbA1C</localVariableName> <observationCriteria> <id root="0" extension="HbA1C"/> <code valueSet="2.16.840.1.113883.3.464.1.72"/> <definition> <observationReferencemoodCode="DEF"> <id root="0" extension="LabResults"/> </observationReference> </definition> <subsetting> <statusCode code="completed"/> <value xsi:type="IVL_PQ"> <low value="9" unit="%"/> </value> <subsetCode code="RECENT"/> </subsetting> </observationCriteria></entry>Notice the new subsetting element that acts as a container for elements that describe addition constraints. The order of children here is significant, in the above you first reject any results whose status is not 'completed', you then reject any remaining results whose value is less than 9%, finally you reject all but the latest remaining result. If you want a different order of processing, you adjust the order of elements within the subsetting wrapper element. Keith’s Response: …
QRDA++ Specification Update • Srinivas Velamuri created slides to share with the team
RI Update • RI Repository Link: http://code.google.com/p/query-health • PopMedNet • Continuing to work on the Plug-in implementation based on initial design • http://wiki.siframework.org/Query+Health+Reference+Implementation • Staging site setup in the cloud owned by Lincoln Peak for testing plug-ins • Working with hQuery on integration • Posted Design Document for RESTful interfaces for hQuery/i2B2 integration • i2B2 • Design document in progress • Expect to be completed by Feb 20th . • hQuery • Changes to hQuery composer (Added code to talk to PopMedNet Portal) • Working on converting HQMF to Java Script for execution
Next Steps • Continue with the RI and Specification Activities • Soliciting volunteers who are experienced in R-MIM’s and XML/XSLT to help with some of the upcoming tasks • Volunteers who can represent queries using the proposed HQMF • Provide comments on the Proposed changes for HQMF • Soliciting volunteers for the QRDA Work stream • Soliciting volunteers to help with coding and integration tasks • Volunteers requiring access to the code repository • Please sign up for a google account at http://code.google.com • Project Repository - http://code.google.com/p/query-health/ • Sign up for the RI at http://wiki.siframework.org/Query+Health+Reference+Implementation