This wiki has undergone a migration to Confluence found Here
<meta name="googlebot" content="noindex">

Version 2 - FHIR Mapping Scenarios

From HL7Wiki
Jump to navigation Jump to search

During the FHIR Connectathon #9 in Paris the focus will be on the transformation from HL7v2 to FHIR. The testing scenarios shown below form the core of the "HL7v2 Mapping" test track. There are three test scenarios:

  1. ADT Query - mapping a v2 query and its response
  2. ADT - mapping a sequence of ADT events
  3. OUL - mapping a sequence of laboratory results messages

You may select one or more of these testing scenarios - whatever appeals to you most given your particular context. We encourage you to create generic mapping solutions, the test itself is however limited to the test messages supplied on this page.

Mapping HL7 version 2 to FHIR

One of the main use-cases for mapping will be to populate a FHIR Resource Repository using data derived from a HL7 version 2 message feeds. The FHIR Specification details some of the differences between HL7v2 and FHIR. This test track will focus on the most commonly used HL7v2 trigger events, i.e. ADT and ORU.

The wording below distinguishes between three kinds of actors:

  • FHIR Client: a software application that has the capability to create/assemble FHIR based requests.
  • FHIR Server: a software application with the capability to receive and process FHIR based requests. The server need not have a stiorage capability for FHIR resources.
    • A Messaging Enabled FHIR Server is a kind of FHIR server which supports the messaging interoperability paradigm. Note that none of the FHIR Servers currently available for testing falls into this category.
  • Transformation Agent: the software component that transforms HL7v2 to FHIR and/or vice versa. The role of Transformation Agent will be combined with that of a FHIR client and/or a FHIR Server.

ADT Query

Demographics and visit query according to IHE ITI specs (IHE ITI Volume 2a, section 3.22 "Patient Demographics and Visit Query").

  1. Test for Transformation Agent / FHIR Client:
    • Determine (e.g. by querying the FHIR server) the ID of a patient which has an active encounter on a particular FHIR server. Edit the HL7v2.5 query example to include that identifier.
    • Process/read a HL7v2.5 QBP^ZV1 query, send corresponding query to FHIR server, transform response to HL7 v2.5 RSP^ZV2.
    • Determine the ID of a patient which doesn't have an active encounter; edit the HL7v2.5 query example to include that identifier and retest the transformation/request process.
    • Determine the ID of a patient which doesn't exist; edit the HL7v2.5 query example to include that identifier and retest the transformation/request process.
  2. Notes:
    • We'll ignore any HL7 v2 extensions right now (notably Z-segments).
    • All QPD-3 options, as well as QPD-8 (as documented in the IHE specification) SHALL be supported.
    • See PDQm for the IHE PDQm proposal based on FHIR which may act as guidance.
  3. Example/test messages:
MSH|^~\&|SomeSystem||TransformationAgent||timestamp||QBP^ZV1^QBP_Q21|controlId|P|2.5
QPD|Q22^IHE PDQ Query^HL70471|queryId|@PID.5.1.1^Smith~@PID.8^F|||||
RCP|I||R|

Example notes: QPD-8 is left empty on purpose, returning patient-encounters for all identity domains.

ADT

Hl7v2.5 ADT messages: process a sequence comprised of A31, A01, A02, A08, A03 trigger events. The sequence A31-A01-A02 will contain 2 allergies, A08 drops one allergy (A08 and A03 only contain 2 allergies).

  1. Test for Transformation Agent / FHIR Client:
    • (easy option, assumes that the FHIR Server supports Messaging) - process/read this sequence of HL7v2.5 messages, transform each of them to a FHIR Message, send FHIR messages to FHIR Server.
    • (difficult option, assumes that the FHIR server only supports REST) - process/read this sequence of HL7v2.5 messages, transform each of them into a series of FHIR resources, query/update/delete resources on the FHIR Server.
      • The Transformation agent will have to detect that one allergy has been dropped from the message -compared to the previous message about the same patient and encounter-, and that an allergy has to be deleted.
      • A provenance resource SHOULD be created to document the fact that certain resources were sourced from a single message
  2. Test for Messaging Enabled FHIR server:
    • If the FHIR Server supports Messaging it should be able to detect 'information which has been removed from a snapshot'
      • Tt will have to detect that one allergy has been dropped from the message -compared to the previous message about the same patient and encounter-, and that an allergy has to be deleted
  3. Notes:
    • You SHOULD populate the text option in the generated resources
    • Patient, encounter and allergies SHALL be transformed into identified FHIR resources, other resources MAY be either contained or identified.
    • We'll ignore any HL7 v2 extensions right now (notably Z-segments)
    • Given that all messages (in this test scenario) are sent by one and the same source system the use of HL7v2 'update mode' and nulls can be ignored.
    • See David hay's blog for his reflections on this kind of mapping.
  4. Test messages:
    • In order to avoid too many identifier clashes when various systems would store translations of the message below, you should replace all items shown in Italics (e.g. controlID, NHS_Number, LocalPatId, VisitNumber, etc.) with your own identifiers.
MSH|^~\&|SomeSystem||TransformationAgent||20150501115930||ADT^A31|controlID|P|2.5
EVN|A31|20150501115930|
PID|1||NHS_Number^10^^NHS^NH~LocalPatId^^^TCPAS^MR||Kennedy^Ann^F^^Ms^^L||19280524^Y|F|||22 Stable Road^Whitstable^Kent^^CR5 1EL^^^^P||277543^PRN|||U||
PV1|1|N|
AL1|1|DA|1605^acetaminophen^L|MO|Muscle Pain~hair loss
AL1|2|DA|1558^Oxycodone^L|MO|Muscle Pain~hair loss
AL1|3|MA|2221^Peanuts^L|SV|Anaphylactic Shock 
MSH|^~\&|SomeSystem||TransformationAgent||20150502090000||ADT^A01|controlID|P|2.5
EVN|A01|20150502090000|
PID|1||NHS_Number^10^^NHS^NH~LocalPatId^^^TCPAS^MR||Kennedy^Ann^F^^Ms^^L||19280524^Y|F|||22 Stable Road^Whitstable^Kent^^CR5 1EL^^^^P||277543^PRN|||U||
NK1|1|Kennedy^Joe|FTH|||+44 201 12345678||
PV1||I|INT^0001^02^GENHOS||||0100^ANDERSON,CARL|0148^ADDISON,JAMES||SUR|||||||0148^ANDERSON,CARL|S|VisitNumber^^^GENHOS|A|||||||||||||||||||GENHOS|||||20150502090000|
AL1|1|DA|1605^acetaminophen^L|MO|Muscle Pain~hair loss
AL1|2|DA|1558^Oxycodone^L|MO|Muscle Pain~hair loss
AL1|3|MA|2221^Peanuts^L|SV|Anaphylactic Shock 
MSH|^~\&|SomeSystem||TransformationAgent||20150502103420||ADT^A02|controlID|P|2.5
EVN|A01|20150502103420|
PID|1||NHS_Number^10^^NHS^NH~LocalPatId^^^TCPAS^MR||Kennedy^Ann^F^^Ms^^L||19280524^Y|F|||22 Stable Road^Whitstable^Kent^^CR5 1EL^^^^P||277543^PRN|||U||
NK1|1|Kennedy^Joe|FTH|||+44 201 12345678||
PV1||I|SUR^0005^01^GENHOS|||INT^0001^02^GENHOS|0500^DVORAK,PETR|0148^ADDISON,JAMES||SUR|||||||0148^ANDERSON,CARL|S|VisitNumber^^^GENHOS|A|||||||||||||||||||GENHOS|||||20150502090000|
AL1|1|DA|1605^acetaminophen^L|MO|Muscle Pain~hair loss
AL1|2|DA|1558^Oxycodone^L|MO|Muscle Pain~hair loss
AL1|3|MA|2221^Peanuts^L|SV|Anaphylactic Shock 
MSH|^~\&|SomeSystem||TransformationAgent||20150502105810||ADT^A08|controlID|P|2.5
EVN|A08|20150502105810|
PID|1||NHS_Number^10^^NHS^NH~LocalPatId^^^TCPAS^MR||Kennedy^Ann^F^^Ms^^L||19280524^Y|F|||22 Stable Road^Whitstable^Kent^^CR5 1EL^^^^P||277543^PRN|||U||
NK1|1|Kennedy^Joseph|FTH|||+44 201 12345678||
PV1||I|SUR^0005^01^GENHOS|||INT^0001^02^GENHOS|0500^DVORAK,PETER|0148^ADDISON,JAMES||SUR|||||||0148^ANDERSON,CARL|S|VisitNumber^^^GENHOS|A|||||||||||||||||||GENHOS|||||20150502090000|
AL1|1|DA|1605^acetaminophen^L|MO|Muscle Pain~hair loss
AL1|2|MA|2221^Peanuts^L|SV|Anaphylactic Shock 
MSH|^~\&|SomeSystem||TransformationAgent||20150502100000||ADT^A03|controlID|P|2.5
EVN|A03|20150502100000|
PID|1||NHS_Number^10^^NHS^NH~LocalPatId^^^TCPAS^MR||Kennedy^Ann^F^^Ms^^L||19280524^Y|F|||22 Stable Road^Whitstable^Kent^^CR5 1EL^^^^P||277543^PRN|||U||
NK1|1|Kennedy^Joseph|FTH|||+44 201 12345678||
PV1||I|SUR^0005^01^GENHOS|||INT^0001^02^GENHOS|0500^DVORAK,PETER|0148^ADDISON,JAMES||SUR|||||||0148^ANDERSON,CARL|S|VisitNumber^^^GENHOS|A|||||||||||||||||||GENHOS|||||20150502090000|20150502100000|
AL1|1|DA|1605^acetaminophen^L|MO|Muscle Pain~hair loss
AL1|2|MA|2221^Peanuts^L|SV|Anaphylactic Shock

Lab Results

HL7v2.5 Lab results: a sequence comprised of OUL temporary result, and OUL final result. Chem tests.

  1. Test for Transformation Agent / FHIR Client:
    • (easy option, assumes that the FHIR Server supports Messaging) - process/read this sequence of HL7v2.5 messages, transform each of them to a FHIR Message, send FHIR messages to FHIR Server.
    • (difficult option, assumes that the FHIR server only supports REST) - process/read this sequence of HL7v2.5 messages, transform each of them into a series of FHIR resources, query/update/delete resources on the FHIR Server.
      • This requires updating of existing resources, which is a challenge in that there are no unique resource.ids in HL7 v2.
      • A provenance resource SHOULD be created to document the fact that certain resources were sourced from a single message
  2. Notes:
    • The following policy applies: given that the Lab system isn't the 'master' when it comes to data OTHER than the actual results (ORC/OBR/OBX/SPM/SAC/..) all other data should be considered to be references (to e.g. patient/encounter) only. The Transformation Agent should (somehow) inform the server that certain resources should NOT be updated. See also [1] (blogpost)
    • Patient, encounter and order/observations related resources SHALL be identified FHIR resources, other resources MAY be either contained or identified.
    • You SHOULD populate the text option in the generated resources
    • We'll ignore any HL7 v2 extensions right now (notably Z-segments)
    • Given that all messages (in this test scenario) are sent by one and the same source system the use of HL7v2 'update mode' and nulls can be ignored.
  3. Test messages:
    • In order to avoid too many identifier clashes when various systems would store translations of the message below, you should replace all items shown in Italics (e.g. controlID, LocalPatientId, SpecimenId, PlacerOrderNumber, etc.) with your own identifiers.
MSH|^~\&|SomeSystem||TransformationAgent||201410060645||OUL^R22|182|T|2.5||
PID|1||LocalPatientId^^^AMC^PI||van den Berg-Meijer&&Meijer&van den&Berg^A^P^^^^L||19601012|F|||Prinsengracht 22&Prinsengracht&22^22^Amsterdam^^1200 PJ^^M||020 555366^PRN^PH|||M||
SPM|1|SpecimenID||BLD|||||||P||||||201410060535|201410060821||Y||||||1
OBR|1|PlacerOrderNumber|FillerOrderNumber|85027^Hemogram and platelet count, automated^CPT4||||||^COLLECT^JOHN|P|||||^URO^^^^DR||||||201410060644|||P|||||||&CYTO&JANE^201410060929
OBX|1|NM|11156-7^LEUKOCYTES^LN||||||||I|
OBX|2|NM|11273-0^ERYTHROCYTES^LN||4.06|tera.l-1||N|||P|||201410060627
OBX|3|NM|20509-6^HEMOGLOBIN^LN||||||||I|
OBX|4|NM|20570-8^HEMATOCRIT^LN||40.1|%||N|||P|||201410060830
OBX|5|NM|11125-2^PLATELETS^LN||221|giga.l-1||N|||F|||201410060830
OBR|2|PlacerOrderNumber2|FillerOrderNumber2|85009^Differential WBC Count, buffy coat^CPT4||||||^COLLECT^JOHN|P|||||^URO^^^^DR||||||201410060929|||P|||||||&CYTO&JANE^201410060929
OBX|1|NM|23761-0^NEUTROPHILS/100 LEUKOCYTES^LN||72|%||N|||P|||201410060627
OBX|2|NM|26450-7^EOSINOPHILS/100 LEUKOCYTES^LN||2|%||N|||P|||201410060627
OBX|3|NM|26478-8^LYMPHOCYTES/100 LEUKOCYTES^LN||20|%||N|||P|||201410060627
OBX|4|NM|26485-3^MONOCYTES/100 LEUKOCYTES^LN||6|%||N|||P|||201410060627
OBX|5|NM|30180-4^BASOPHILS/100 LEUKOCYTES^LN||0|%||N|||P|||201410060627

..and the final result (and yes, we did switch the order of the OBRs as well as the OBXs, to ensure you have no depencies on the segment sequence.)

MSH|^~\&|SomeSystem||TransformationAgent||201410060931||OUL^R22|ControlID|T|2.5|||||USA||EN
PID|1||LocalPatientId^^^AMC^PI||van den Berg-Meijer&&Meijer&van den&Berg^A^P^^^^L||19601012|F|||Prinsengracht 22&Prinsengracht&22^22^Amsterdam^^1200 PJ^^M||020 555366^PRN^PH|||M||
SPM|1|SpecimenID||BLD|||||||P||||||201410060535|201410060621||Y||||||1
OBR|1|PlacerOrderNumber2|FillerOrderNumber2|85009^Differential WBC Count, buffy coat^CPT4||||||^COLLECT^JOHN|P| ||||^URO^^^^DR|||||||201410060929|||F|||||||&CYTO&JANE^201410060929
OBX|1|NM|30180-4^BASOPHILS/100 LEUKOCYTES^LN||0|%||N|||F|||201410060830
OBX|2|NM|23761-0^NEUTROPHILS/100 LEUKOCYTES^LN||72|%||N|||F|||201410060830
OBX|3|NM|26450-7^EOSINOPHILS/100 LEUKOCYTES^LN||2|%||N|||F|||201410060830
OBX|4|NM|26478-8^LYMPHOCYTES/100 LEUKOCYTES^LN||20|%||N|||F|||201410060830
OBX|5|NM|26485-3^MONOCYTES/100 LEUKOCYTES^LN||6|%||N|||F|||201410060830
OBR|2|PlacerOrderNumber|FillerOrderNumber|85027^Hemogram and platelet count, automated^CPT4||||||^COLLECT^JOHN|P|| |||^URO^^^^DR|||||||201410060929|||F|||||||&CYTO&JANE^201410060929
OBX|1|NM|20509-6^HEMOGLOBIN^LN||13.4|g/l-1||N|||F|||201410060830
OBX|2|NM|11156-7^LEUKOCYTES^LN||8.2|giga.l-1||N|||F|||201410060830
OBX|3|NM|11273-0^ERYTHROCYTES^LN||4.08|tera.l-1||N|||F|||201410060830
OBX|4|NM|20570-8^HEMATOCRIT^LN||39.7|%||N|||F|||201410060830
OBX|5|NM|11125-2^PLATELETS^LN||220|giga.l-1||N|||F|||201410060830