class Oddb2xml::SwissmedicExtractor

Public Class Methods

new(filename, type) click to toggle source
# File lib/oddb2xml/extractor.rb, line 244
def initialize(filename, type)
  @filename = File.join(DOWNLOADS, File.basename(filename))
  @filename = File.join(SpecData, File.basename(filename)) if defined?(RSpec) && !File.exist?(@filename)
  @type = type
  Oddb2xml.log("SwissmedicExtractor #{@filename} #{File.size(@filename)} bytes")
  return unless File.exist?(@filename)
  @sheet = RubyXL::Parser.parse(File.expand_path(@filename)).worksheets[0]
end

Public Instance Methods

to_arry() click to toggle source
# File lib/oddb2xml/extractor.rb, line 253
def to_arry
  data = []
  return data unless @sheet
  case @type
  when :orphan
    col_zulassung = 6
    raise "Could not find Zulassungsnummer in column #{col_zulassung} of #{@filename}" unless /Zulassungs.*nummer/.match?(@sheet[3][col_zulassung].value)
    @sheet.each do |row|
      next unless row[col_zulassung]
      number = row[col_zulassung].value.to_i
      if number != 0
        data << sprintf("%05d", number)
      end
    end
  end
  # puts "found #{data.uniq.size} entities for type #{@type}"
  data.uniq
end
to_hash() click to toggle source

Packungen.xlsx COLUMNS_FEBRUARY_2019

# File lib/oddb2xml/extractor.rb, line 273
def to_hash
  data = {}
  return data unless @sheet
  case @type
  when :package
    Oddb2xml.check_column_indices(@sheet)
    ith = COLUMNS_FEBRUARY_2019.keys.index(:index_therapeuticus)
    iksnr = COLUMNS_FEBRUARY_2019.keys.index(:iksnr)
    seq_name = COLUMNS_FEBRUARY_2019.keys.index(:name_base)
    i_3 = COLUMNS_FEBRUARY_2019.keys.index(:ikscd)
    seqnr = COLUMNS_FEBRUARY_2019.keys.index(:seqnr)
    cat = COLUMNS_FEBRUARY_2019.keys.index(:ikscat)
    siz = COLUMNS_FEBRUARY_2019.keys.index(:size)
    atc = COLUMNS_FEBRUARY_2019.keys.index(:atc_class)
    list_code = COLUMNS_FEBRUARY_2019.keys.index(:production_science)
    eht = COLUMNS_FEBRUARY_2019.keys.index(:unit)
    sub = COLUMNS_FEBRUARY_2019.keys.index(:substances)
    comp = COLUMNS_FEBRUARY_2019.keys.index(:composition)

    # production_science Heilmittelcode, possible values are
    # Allergene
    # Anthroposophika
    # ayurvedische Arzneimittel
    # Bakterien- und Hefepräparate
    # Biotechnologika
    # Blutprodukte
    # Generator
    # Heilmittelcode
    # Homöopathika
    # Impfstoffe
    # Phytotherapeutika
    # Radiopharmazeutika
    # Synthetika human
    # tibetische Arzneimittel
    # Tierarzneimittel
    # Transplantat: Gewebeprodukt
    @sheet.each_with_index do |row, i|
      next if i <= 1
      next unless row && row[iksnr] && row[i_3]
      next unless (row[iksnr].value.to_i > 0) && (row[i_3].value.to_i > 0)
      no8 = sprintf("%05d", row[iksnr].value.to_i) + sprintf("%03d", row[i_3].value.to_i)
      unless no8.empty?
        next if no8.to_i == 0
        ean_base12 = "7680#{no8}"
        prodno = Oddb2xml.gen_prodno(row[iksnr].value.to_i, row[seqnr].value.to_i)
        ean13 = (ean_base12.ljust(12, "0") + Oddb2xml.calc_checksum(ean_base12))
        Oddb2xml.setEan13forProdno(prodno, ean13)
        Oddb2xml.setEan13forNo8(no8, ean13)
        data[no8] = {
          iksnr: row[iksnr].value.to_i,
          no8: no8,
          ean13: ean13,
          prodno: prodno,
          seqnr: row[seqnr].value,
          ith_swissmedic: row[ith] ? row[ith].value.to_s : "",
          swissmedic_category: row[cat].value.to_s,
          atc_code: row[atc] ? Oddb2xml.add_epha_changes_for_ATC(row[iksnr].value.to_s, row[atc].value.to_s) : "",
          list_code: row[list_code] ? row[list_code].value.to_s : "",
          package_size: row[siz] ? row[siz].value.to_s : "",
          einheit_swissmedic: row[eht] ? row[eht].value.to_s : "",
          substance_swissmedic: row[sub] ? row[sub].value.to_s : "",
          composition_swissmedic: row[comp] ? row[comp].value.to_s : "",
          sequence_name: row[seq_name] ? row[seq_name].value.to_s : "",
          is_tier: (row[list_code] == "Tierarzneimittel"),
          gen_production: row[COLUMNS_FEBRUARY_2019.keys.index(:gen_production)].value.to_s,
          insulin_category: row[COLUMNS_FEBRUARY_2019.keys.index(:insulin_category)].value.to_s,
          drug_index: row[COLUMNS_FEBRUARY_2019.keys.index(:drug_index)].value.to_s,
          data_origin: "swissmedic_package",
          expiry_date: row[COLUMNS_FEBRUARY_2019.keys.index(:expiry_date)].value.to_s,
          company_name: row[COLUMNS_FEBRUARY_2019.keys.index(:company)].value.to_s,
          size: row[COLUMNS_FEBRUARY_2019.keys.index(:size)].value.to_s,
          unit: row[COLUMNS_FEBRUARY_2019.keys.index(:unit)].value.to_s
        }
      end
    end
  end
  data
end