Search code examples
pythonhl7hl7-v2

Error in parsing HL7 using hl7apy


i am using hl7apy to parse hl7 files in python and i am following this link. When i am using the sample.hl7 i am getting the desired result but when i am using my own hl7 file i am getting below error

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
  File "hl7apy/parser.py", line 82, in parse_message
    m.structure_by_name)
  File "hl7apy/parser.py", line 144, in parse_segments
    reference))
  File "hl7apy/parser.py", line 189, in parse_segment
    reference=reference)
  File "hl7apy/core.py", line 1564, in __init__
    validation_level, traversal_parent)
  File "hl7apy/core.py", line 632, in __init__
    self._find_structure(reference)
  File "hl7apy/core.py", line 808, in _find_structure
    structure = ElementFinder.get_structure(self, reference)
  File "hl7apy/core.py", line 524, in get_structure
    raise InvalidName(element.classname, element.name)
  hl7apy.exceptions.InvalidName: Invalid name for Segment: 

I dont understand what am i doing wrong.

EDIT : This is the sample that i am using.

MSH|^~\&|SQ|BIN|SMS|BIN|20121009151949||ORU^R01|120330003918|P|2.2
PID|1|K940462|T19022||TEIENT|JYSHEE|1957009|F|MR^^RM^MR^DR^MD^3216|7|0371 HOES LANE^0371 HOES LANE^NORTH CENTRE^FL^0854^INDIA^P^98|^UA^|(21)2-921|203960|ENG^ENGLISH^HL7096^ENG^ENGLISH^9CLAN|U|^HINU^|^^^T1M|05-1-900||||NW HAVEN||||PAS|NOTH CETRE|
PV1|1|I|BDE^BDE||||960^FALK,HENRY^^^MD|||MED|||||||960^FALK,HENRY^^^MD||22599|||||||||||||||||||||||||20160613102300||||
ORC|RE|10112|1705||D||^^^20103102300^216061102300||201208100924|PS||10084^BRUCE^PALTHROW|||201606310230|
OBR|1|10112|1705|1786-6^HEMOGOI A1C|||201606131300|201606131300||SGR||||201208056||1029^BONE,EAN|3-266-91|||||201280058||CH|F||R^^^2012070957|||||104^VRNEY,SCT|
OBX|1|NM|1856-6^LOINC^LN^HEMOGOI A1C^L||5.9|%|4.2-6.3||||F|||20160613|A^^L

Code : This is the code that i am using for parsing my hl7 files and same code i used while parsing the sample hl7 file mentioned in above link.

from hl7apy import parser
from hl7apy.exceptions import UnsupportedVersion

hl7 = open('ICD9.hl7', 'r').read()

try:
    m = parser.parse_message(hl7)
except UnsupportedVersion:
    m = parser.parse_message(hl7.replace("n", "r"))

Solution

  • You should show a message from your file here for a definitiv answer.

    But the most probable reason is, that the content of your file does not follow the HL7 rules. Are you sure that you use the correct segment delimiter (ASCII 13 or HEX 0D) ? Do you use non standard segment names?

    Just a check with Free Online HL7 Messages Validation gives these

    ID  ELEMENT_TYPE POSITION   LINE_NO VALIDATION ERROR
    1   Field        MSH.9.3    1       Component required
    2   Field        PID.7      2       Invalid date time format : '1957009'
    3   Component    PID.9.7    2       Invalid table entry value : '3216' for table Name Type
    4   Component    PID.9.7    2       Value '3216' length (4) exceed limit (1)
    5   Component    PID.11.6   2       Invalid table entry value : 'INDIA' for table Country Code
    6   Component    PID.11.6   2       Value 'INDIA' length (5) exceed limit (3)
    7   Field        PID.12     2       Field should not contain component(s)
    8   Component    PID.18.1   2       Field required but has no value.
    9   Field        ORC.5      4       Invalid table entry value : 'D' for table Order status
    10  Component    ORC.7.4    4       Invalid date time format : '20103102300'
    11  Component    ORC.7.5    4       Invalid date time format : '216061102300'
    12  Field        ORC.15     4       Invalid date time format : '201606310230'
    13  Field        OBR.14     5       Invalid date time format : '201208056'
    14  Field        OBR.22     5       Invalid date time format : '201280058'
    15  SubComponent OBR.27.1.1 5       Invalid numeric format : 'R'
    16  Component    OBR.27.4   5       Invalid date time format : '2012070957'
    17  Component    OBR.32.2   5       Invalid date time format : 'VRNEY,SCT'
    

    But this does not explain your error message. Are you sure, that you read the message file and parse the content?

    You have an error in your code. It should be

    hl7.replace("\n", "\r")
    

    if you want to replace the wrong segment delimiter.