Module Gnumed.business.gmHL7
Some HL7 handling.
Functions
def format_hl7_file(filename, skip_empty_fields=True, eol='\n ', return_filename=False, fix_hl7=True)-
Expand source code
def format_hl7_file(filename, skip_empty_fields=True, eol='\n ', return_filename=False, fix_hl7=True): if fix_hl7: fixed_name = __fix_malformed_hl7_file(filename) hl7_file = open(fixed_name, mode = 'rt', encoding = 'utf-8-sig', newline = '') # read universal but pass on untranslated source = '%s (<- %s)' % (fixed_name, filename) else: hl7_file = open(filename, mode = 'rt', encoding = 'utf-8-sig', newline = '') # read universal but pass on untranslated source = filename output = format_hl7_message ( message = hl7_file.read(1024 * 1024 * 5), # 5 MB max skip_empty_fields = skip_empty_fields, eol = eol, source = source ) hl7_file.close() if not return_filename: return output max_len = 120 if eol is None: output = '\n '.join([ '%s: %s' % ((o[0] + (' ' * max_len))[:max_len], o[1]) for o in output ]) out_name = gmTools.get_unique_filename(prefix = 'gm-formatted_hl7-', suffix = '.hl7') out_file = open(out_name, mode = 'wt', encoding = 'utf8') out_file.write(output) out_file.close() return out_name def format_hl7_message(message=None, skip_empty_fields=True, eol='\n ', source=None)-
Expand source code
def format_hl7_message(message=None, skip_empty_fields=True, eol='\n ', source=None): # a segment is a line starting with a type msg = pyhl7.parse(message) output = [] if source is not None: output.append([_('HL7 Source'), '%s' % source]) output.append([_('HL7 data size'), _('%s bytes') % len(message)]) output.append([_('HL7 Message'), _(' %s segments (lines)%s') % (len(msg), gmTools.bool2subst(skip_empty_fields, _(', skipping empty fields'), ''))]) max_len = 0 for seg_idx in range(len(msg)): seg = msg[seg_idx] seg_type = seg[0][0] output.append([_('Segment #%s <%s>') % (seg_idx, seg_type), _('%s fields') % len(seg)]) for field_idx in range(len(seg)): field = seg[field_idx] try: label = gmHL7Defs.HL7_field_labels[seg_type][field_idx] except KeyError: label = _('HL7 %s field') % seg_type max_len = max(max_len, len(label)) if len(field) == 0: if not skip_empty_fields: output.append(['%2s - %s' % (field_idx, label), _('<EMTPY>')]) continue if (len(field) == 1) and (('%s' % field[0]).strip() == ''): if not skip_empty_fields: output.append(['%2s - %s' % (field_idx, label), _('<EMTPY>')]) continue content_lines = ('%s' % field).split(gmHL7Defs.HL7_BRK) output.append(['%2s - %s' % (field_idx, label), content_lines[0]]) for line in content_lines[1:]: output.append(['', line]) #output.append([u'%2s - %s' % (field_idx, label), u'%s' % field]) if eol is None: return output max_len += 7 return eol.join([ '%s: %s' % ((o[0] + (' ' * max_len))[:max_len], o[1]) for o in output ])