class Oddb2xml::RefdataExtractor

Public Class Methods

new(xml, type) click to toggle source
Calls superclass method Oddb2xml::Extractor::new
# File lib/oddb2xml/extractor.rb, line 204
def initialize(xml, type)
  @type = (type == :pharma ? "PHARMA" : "NONPHARMA")
  super(xml)
end

Public Instance Methods

to_hash() click to toggle source
# File lib/oddb2xml/extractor.rb, line 209
def to_hash
  data = {}
  result = SwissRegArticleEntry.parse(@xml.sub(STRIP_FOR_SAX_MACHINE, ""), lazy: true)
  items = result.ARTICLE.ITEM
  items.each do |pac|
    ean13 = (gtin = pac.GTIN.to_s) ? gtin : "0"
    if ean13.size < 13
      puts "Refdata #{@type} use 13 chars not #{ean13.size} for #{ean13}" if $VERBOSE
      ean13 = ean13.rjust(13, "0")
    end
    if ean13.size == 14 && ean13[0] == "0"
      puts "Refdata #{@type} remove leading '0' for #{ean13}" if $VERBOSE
      ean13 = ean13[1..-1]
    end
    # but in refdata_nonPharma we have a about 700 GTINs which are 14 characters and longer
    item = {}
    item[:ean13] = ean13
    item[:no8] = pac.SWMC_AUTHNR
    item[:data_origin] = "refdata"
    item[:refdata] = true
    item[:_type] = (typ = pac.ATYPE.downcase.to_sym) ? typ : ""
    item[:last_change] = (date = Time.parse(pac.DT).to_s) ? date : "" # Date and time of last data change
    item[:desc_de] = (dscr = pac.NAME_DE) ? dscr : ""
    item[:desc_fr] = (dscr = pac.NAME_FR) ? dscr : ""
    item[:desc_it] = item[:desc_de] # refdata has no italian name
    item[:atc_code] = (code = pac.ATC) ? code.to_s : ""
    item[:company_name] = (nam = pac.AUTH_HOLDER_NAME) ? nam : ""
    item[:company_ean] = (gln = pac.AUTH_HOLDER_GLN) ? gln : ""
    data[item[:ean13]] = item
  end
  data
end