Skip to content

Commit

Permalink
feat(in1): Add policy_number field
Browse files Browse the repository at this point in the history
  Add support for index override in cell definition
  and add support for policy_number field in IN1 segments.

  Close #15
  • Loading branch information
NiklasMM committed Sep 5, 2018
1 parent bcf7cc1 commit ee8c475
Show file tree
Hide file tree
Showing 6 changed files with 44 additions and 10 deletions.
13 changes: 12 additions & 1 deletion hl7parser/hl7.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ def __str__(self):


class HL7Segment(object):

def __init__(self, segment, delimiters=None):
if delimiters is None:
self.delimiters = HL7Delimiters(*"|^~\&")
Expand All @@ -88,8 +89,18 @@ def __init__(self, segment, delimiters=None):

# iterate over predefined fields, remember index in `named_fields`
# and initialize fields
index_override_found = False
for index, definition in enumerate(self.field_definitions):
self.named_fields[definition[0]] = index
if definition[1]["index"] is not None:
definition_index = definition[1]["index"]
index_override_found = True
else:
if index_override_found:
raise Exception("Regular cell type after one with index override found")
definition_index = index
self.named_fields[definition[0]] = definition_index
while len(self.fields) != definition_index:
self.fields.append(data_types.HL7DataType("", self.delimiters))
self.fields.append(definition[1]["type"]("", self.delimiters))

# fill fields with initial content
Expand Down
5 changes: 3 additions & 2 deletions hl7parser/hl7_data_types.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,16 @@
from datetime import datetime


def make_cell_type(name, options=None):
def make_cell_type(name, options=None, index=None):
"""
helper method used to configure HL7DataType field maps. Provides some
sensible default values for HL7 data types.
"""
default_options = {
'required': False,
'repeats': False,
'type': HL7DataType
'type': HL7DataType,
'index': index,
}
if options is None:
options = {}
Expand Down
1 change: 1 addition & 0 deletions hl7parser/hl7_segments.py
Original file line number Diff line number Diff line change
Expand Up @@ -310,6 +310,7 @@
make_cell_type("plan_expiration_date", options={"type": HL7Datetime}),
make_cell_type("authorization_information"),
make_cell_type("plan_type", options={"type": HL7_CodedWithException}),
make_cell_type("policy_number", index=35)
# NOTE: standard defines more fields which can be added if needed in
# the future
]
Expand Down
19 changes: 18 additions & 1 deletion hl7parser/tests/test_hl7.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@
from __future__ import unicode_literals

import pytest
import mock

from hl7parser.hl7 import HL7Segment
from hl7parser.hl7_data_types import HL7DataType, HL7Datetime
from hl7parser.hl7_data_types import HL7DataType, HL7Datetime, make_cell_type


def test_hl7_segment_require_length():
Expand Down Expand Up @@ -45,3 +46,19 @@ def test_hl7_segment_field_assignment_error():

with pytest.raises(AttributeError):
segment.something


def test_invalid_segment_definition():
""" cell types with "index" definition must come at the end """

segment_maps = {
"foo": [
make_cell_type('foo'),
make_cell_type('bar', index=3),
make_cell_type('baz'),
]
}

with mock.patch("hl7parser.hl7.segment_maps", segment_maps):
with pytest.raises(Exception):
HL7Segment("foo|1|2|3")
15 changes: 9 additions & 6 deletions hl7parser/tests/test_parse.py
Original file line number Diff line number Diff line change
Expand Up @@ -264,15 +264,18 @@ def test_pv1_segment(self):
self.assertEqual(
unicode(segment.hospital_service), "SUR")


def test_in1_segment():
message_data = (
"IN1|1:1|BKK|108035612|mhplus BKK|^^Ludwigsburg^^71636^DEU|||||"
"BKK093^1^^OKOG^J^1||20090101|||5000^1|XX^XX^F^^^^L||1953XXXX|"
"XXXX 10&XXXXX&10^^XXXXX^^77704^DEU^L||H|1|||||||20180829100800+0100"
"||||||1|Y2401XXXXX|||||||W||S||||Y2401XXXXX"
"IN1|1:1|McDH||McDonalds Health||||||"
"|||||||||"
"||||||||||"
"||||||1|12345|||||||||||||"
)

in1 = HL7Segment(message_data)

assert str(in1.health_plan_id) == "BKK"
assert str(in1.insurance_company_name) == "mhplus BKK"
assert str(in1.health_plan_id) == "McDH"
assert str(in1.insurance_company_name) == "McDonalds Health"

assert str(in1.policy_number) == "12345"
1 change: 1 addition & 0 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,6 @@ envlist = py27
deps =
pytest
pytest-coverage
mock
commands =
pytest

0 comments on commit ee8c475

Please sign in to comment.