module HL7toCSV

Constants

VERSION

Public Class Methods

convert(hl7s) click to toggle source
# File lib/hl7tocsv.rb, line 6
def self.convert(hl7s)
  parsed = Array(hl7s).map { |hl7| SimpleHL7Parser::HL7.parse(hl7) }
  headers = determine_headers(parsed)

  parsed.reduce([]) do |reduced, hl7|
    write_headers = hl7 == parsed.first
    reduced << hl7_to_csv(hl7, headers, write_headers)
    reduced
  end.join("\n")
end
determine_headers(hl7s) click to toggle source
# File lib/hl7tocsv.rb, line 17
def self.determine_headers(hl7s)
  hl7s.reduce([]) do |reduced, hl7|
    reduced << hl7.obx.map { |obx| obx.observation_identifier.split('^')[1] + ' ' + obx.obr.universal_service_id.split('^')[1].strip }
  end.flatten.
    uniq.
    sort
end
hl7_to_csv(hl7, headers, write_headers = true) click to toggle source
# File lib/hl7tocsv.rb, line 25
def self.hl7_to_csv(hl7, headers, write_headers = true)
  hash = hl7.obx.reduce({}) do |h, obx|
    h[obx.observation_identifier.split('^')[1] + ' ' + obx.obr.universal_service_id.split('^')[1].strip] = obx.observation_value
    h
  end

  CSV.generate(write_headers: write_headers, headers: ['ID'] + headers, encoding: 'utf-8') do |csv|
    csv << [hl7.obr.first.placer_order_number] + headers.map { |h| hash[h] }
  end
end