class Oddb2xml::SwissmedicExtractor
Public Class Methods
new(filename, type)
click to toggle source
# File lib/oddb2xml/extractor.rb, line 236 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 245 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 265 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