oddb2xml 2.6.6 → 2.7.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: caafd3b48a18d05d29249b82717da28ca795d2c5003c69ce06ee10a7c7d6ecee
4
- data.tar.gz: 7429e7b06a997e04aa5be4ab0883a9dbc4c6638a5c7421899d115c5196b8f853
3
+ metadata.gz: c31777bcd85038bd65d38d67d6ebdf2197f174389403b76ff146b18d3ef4557e
4
+ data.tar.gz: 8d8930ed04518838084ae4aeb69181418b2eddb36cfa83ece2cbc84ccd06e1f4
5
5
  SHA512:
6
- metadata.gz: 5ec16fedb1d2185ae3a44c1f1e1ac1a333f162bb27cfcd3a46f4efb34a3ca8fb87de9a9e650aaabfa992145015db8c7ad4a8498597bbdf7d8ca528c595fb4b5a
7
- data.tar.gz: 96bb2e0f902808245e8e5b58d012e785790feff065608bfada73ddaaf35a27e23ba4c3cbc3ba3afbee09f77c1bd53e99e3b691ea9d8f75c34a1baa01d896d0f8
6
+ metadata.gz: abe9685cc40ba1fbf9525c3cbeb9f332a98725e76621074c9f1df179c91e53cb50a4f15e78a800a28224351d3a47ec8aef0e3b9ee17787a8dccd519db65bc6d8
7
+ data.tar.gz: 415b9049a316af98279f7af0b602ecd85b0bd2e86493133af512d37b494d43155822ef754ad6dcaa39b1aa474fddba57081860588b7e896da13bf891e9b522d6
@@ -0,0 +1,40 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: Ruby
9
+
10
+ on:
11
+ push:
12
+ branches: [ master ]
13
+ pull_request:
14
+ branches: [ master ]
15
+
16
+ jobs:
17
+ test:
18
+ runs-on: ubuntu-latest
19
+ # Using a matrix fails, because /setup-ruby always invokes bundle install without any additional args
20
+ # Fixed by adding not defining the debugger group in the Gemfile
21
+ strategy:
22
+ fail-fast: false
23
+ matrix:
24
+ os: [ ubuntu]
25
+ ruby: [2.4, 2.5, 2.6, 2.7, 3.0, head]
26
+ continue-on-error: ${{ endsWith(matrix.ruby, 'head') }}
27
+ steps:
28
+ - uses: actions/checkout@v2
29
+ - uses: ruby/setup-ruby@v1
30
+ with:
31
+ ruby-version: ${{ matrix.ruby }}
32
+ bundler-cache: true
33
+
34
+ - name: Install dependencies
35
+ run: |
36
+ bundle config set path .bundle/gems --local
37
+ bundle config set without debugger --local
38
+ bundle install
39
+ - name: Test with RSpec
40
+ run: bundle exec rspec
@@ -1,11 +1,11 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <!-- Copyright (c) 2016 MEDEVIT. All rights reserved. This program and the
3
- accompanying materials are made available under the terms of the Eclipse
4
- Public License v1.0 which accompanies this distribution, and is available
5
- at http://www.eclipse.org/legal/epl-v10.html v002 - Ergänzung K Komplementärprodukt
6
- bei generic type, Consider ATC code of length 8 (on vet.med. articles) Relax
7
- ADDSCR occurence to 0 .. 1 v003 - PRODNO hinzugefügt LIMNAMEBAG zur formal-kennzeichnung
8
- von identen limitations v4 - Major refactoring, see https://redmine.medelexis.ch/issues/4405
2
+ <!-- Copyright (c) 2016 MEDEVIT. All rights reserved. This program and the
3
+ accompanying materials are made available under the terms of the Eclipse
4
+ Public License v1.0 which accompanies this distribution, and is available
5
+ at http://www.eclipse.org/legal/epl-v10.html v002 - Ergänzung K Komplementärprodukt
6
+ bei generic type, Consider ATC code of length 8 (on vet.med. articles) Relax
7
+ ADDSCR occurence to 0 .. 1 v003 - PRODNO hinzugefügt LIMNAMEBAG zur formal-kennzeichnung
8
+ von identen limitations v4 - Major refactoring, see https://redmine.medelexis.ch/issues/4405
9
9
  Contributors: MEDEVIT <office@medevit.at> - initial API and implementation -->
10
10
  <xs:schema targetNamespace="http://elexis.ch/Elexis_Artikelstamm_v5"
11
11
  elementFormDefault="qualified" attributeFormDefault="unqualified"
@@ -339,7 +339,6 @@
339
339
  </xs:element>
340
340
  <xs:element name="GENERIC_TYPE"
341
341
  maxOccurs="1" minOccurs="0">
342
-
343
342
  <xs:simpleType>
344
343
  <xs:annotation>
345
344
  <xs:documentation>
@@ -359,6 +358,9 @@
359
358
  <xs:enumeration
360
359
  value="K">
361
360
  </xs:enumeration>
361
+ <xs:enumeration
362
+ value="C"> <!-- BAG 9.6.2020: BDer Buchstabe C bei «Original Generika Code» steht für Co-Marketing Arzneimittel -->
363
+ </xs:enumeration>
362
364
  </xs:restriction>
363
365
  </xs:simpleType>
364
366
  </xs:element>
data/History.txt CHANGED
@@ -1,3 +1,30 @@
1
+ === 2.7.1 / 03.02.2021
2
+ * travis-ci -> Github Actions
3
+ * limit DSCRD/DSCRF to 120 chars as specified in the XSD
4
+ * Use huge option for nokogiri as suggested by https://github.com/sparklemotion/nokogiri/issues/2187
5
+ * Adapt artikelstamm to refdata without pharmacode
6
+ * oddb_article get pharmacode where possible from transfer.dat
7
+
8
+ === 2.7.0 / 05.11.2020
9
+ * Chapter70 hack nur als Kommentar
10
+ * Avoid double hyphen in comment
11
+
12
+ === 2.6.9 / 29.06.2020
13
+
14
+ * Fix problem when running bin/oddb2xml -a -f dat. Thanks to Lukas Furre for reporting the problem
15
+ * Fix warning with regular expression thas has ']'
16
+
17
+ === 2.6.8 / 26.06.2020
18
+
19
+ * Re-Add support for Ruby Version 2.4
20
+ * Specified minimal ruby version in gemspec
21
+ * Patch artikelstamm build to emit a product for Varilrix
22
+
23
+ === 2.6.7 / 25.06.2020
24
+ * Added value 'C' (Co-marketing) for field GENERIC_TYPE Elexis_Artikelstamm_v5.xsd from BAG Preparations.xml
25
+ * Fixed limitations coming from the chapte 70 hack
26
+ * Ruby 2.7 compatible (No URI.open warning)
27
+
1
28
  === 2.6.6 / 11.01.2020
2
29
  * Fix link for varia_De.htm
3
30
 
@@ -130,7 +157,7 @@
130
157
 
131
158
  === 2.4.1 / 2.12.2016
132
159
 
133
- * Update oddb2xml.gemspec to add GPL-3.0 as correct license for Rubygems as stated in LICENSE file
160
+ * Update oddb2xml.gemspec to add GPL-3.0 as correct license for Rubygems as stated in LICENSE file
134
161
  * Added a hack for 24 globulina equina which commas between brackets
135
162
 
136
163
  === 2.4.0 /25.08.2016
@@ -568,7 +595,7 @@
568
595
 
569
596
  * Improve NINCD detection
570
597
  - Update timeout handling
571
- - Improve pharmacode detection
598
+ - Improve pharmacode detection
572
599
 
573
600
  === 1.5.1 / 10.06.2013
574
601
 
@@ -16,7 +16,7 @@ require 'optimist'
16
16
  #{File.basename(__FILE__)} xml_file_to_check
17
17
  EOS
18
18
  end
19
- $stdout.sync = false
19
+ $stdout.sync = true
20
20
 
21
21
  args = ARGV
22
22
  if args.size != 1
@@ -520,7 +520,7 @@ module Oddb2xml
520
520
  return false
521
521
  end
522
522
  return false if !name || name.empty? || name.length < 3
523
- name
523
+ name[0..119] # limit to maximal 120 chars as specified in the XSD
524
524
  end
525
525
  prepare_substances
526
526
  prepare_products
@@ -886,8 +886,12 @@ module Oddb2xml
886
886
  xml.ART('DT' => obj[:last_change] ? obj[:last_change] : '') do
887
887
  nbr_records += 1
888
888
  xml.REF_DATA (obj[:refdata] || @migel[pharma_code]) ? '1' : '0'
889
- # xml.PHAR sprintf('%07d', obj[:pharmacode]) if obj[:pharmacode]
890
- xml.PHAR obj[:pharmacode] if obj[:pharmacode]
889
+ if obj[:pharmacode] && obj[:pharmacode].length > 0
890
+ xml.PHAR obj[:pharmacode]
891
+ elsif zur_rose
892
+ puts "Adding #{zur_rose[:pharmacode]} to article GTIN #{ean}"
893
+ xml.PHAR zur_rose[:pharmacode]
894
+ end
891
895
  #xml.GRPCD
892
896
  #xml.CDS01
893
897
  #xml.CDS02
@@ -988,14 +992,7 @@ module Oddb2xml
988
992
  xml.CDTYP 'E13'
989
993
  xml.BC ean # /^9999|^0000|^0$/.match(ean.to_s) ? 0 : sprintf('%013d', ean)
990
994
  xml.BCSTAT 'A' # P is alternative
991
- #xml.PHAR2
992
995
  } if ean
993
- #xml.ARTCH {
994
- #xml.PHAR2
995
- #xml.CHTYPE
996
- #xml.LINENO
997
- #xml.NOUNITS
998
- #}
999
996
  if pac and pac[:prices]
1000
997
  pac[:prices].each_pair do |key, price|
1001
998
  xml.ARTPRI {
@@ -1337,7 +1334,7 @@ module Oddb2xml
1337
1334
  else
1338
1335
  ('0' * DAT_LEN[:ITHE])
1339
1336
  end.to_i
1340
- row << "%0#{DAT_LEN[:CEAN]}d" % (sprintf('%013d', ean).match(/^000000/) ? 0 : ean.to_i)
1337
+ row << "%0#{DAT_LEN[:CEAN]}d" % (sprintf('%013d', ean.to_i).match(/^000000/) ? 0 : ean.to_i)
1341
1338
  row << "%#{DAT_LEN[:CMWS]}s" % '2' # pharma
1342
1339
  rows << row
1343
1340
  end
@@ -1413,7 +1410,7 @@ module Oddb2xml
1413
1410
  return '--missing--'
1414
1411
  end
1415
1412
  return '--missing--' if !name || name.empty? || name.length < 3
1416
- name
1413
+ name[0..119] # limit to maximal 120 chars as specified in the XSD
1417
1414
  end
1418
1415
  def override(xml, id, field, default_value)
1419
1416
  has_overrides = /\d{13}/.match(id.to_s) ? @@article_overrides[id.to_i] : @@product_overrides[id.to_i]
@@ -1499,7 +1496,6 @@ module Oddb2xml
1499
1496
  name ||= (item[:desc_de] + item[:name_de]) if item
1500
1497
  name ||= obj[:sequence_name]
1501
1498
  xml.GTIN pkg_gtin.to_s.rjust(13, '0')
1502
- override(xml, pkg_gtin, :PHAR, pharma_code)
1503
1499
  xml.SALECD('A')
1504
1500
  # maxLength for DSCR is 50 for Artikelstamm v3
1505
1501
  xml.DSCR(name) # for description for zur_rose
@@ -1557,9 +1553,20 @@ module Oddb2xml
1557
1553
  when 'N'; xml.DEDUCTIBLE 10; # 10%
1558
1554
  end if item && item[:deductible]
1559
1555
  prodno = Oddb2xml.getProdnoForEan13(pkg_gtin)
1560
- xml.PRODNO prodno if prodno
1561
1556
  atc = package[:atc_code]
1562
1557
  atc ||= @refdata[pkg_gtin][:seq][:atc_code] if @refdata[pkg_gtin]
1558
+ unless prodno # find a prodno from packages for vaccinations
1559
+ if atc && /^J07/.match(atc) && !/^J07AX/.match(atc)
1560
+ pack = @packs.values.find{ |v| v && v[:atc_code].eql?(atc)}
1561
+ if pack
1562
+ prodno = pack[:prodno]
1563
+ Oddb2xml.log "Patching vaccination for #{pkg_gtin} #{atc} #{name} via prodno #{prodno}"
1564
+ else
1565
+ Oddb2xml.log "unable to find a pack/prodno for vaccination for #{pkg_gtin} #{atc} #{name}"
1566
+ end
1567
+ end
1568
+ end
1569
+ xml.PRODNO prodno if prodno
1563
1570
  csv = []
1564
1571
  @csv_file << [pkg_gtin, name, package[:unit], measure,
1565
1572
  pexf ? pexf : '',
@@ -1571,8 +1578,6 @@ module Oddb2xml
1571
1578
  end
1572
1579
  end
1573
1580
  else # non pharma
1574
- @csv_file << [ ean13, (obj[:desc_de] || obj[:description]), '', '',
1575
- obj[:price], obj[:pub_price], '', '', '', '', '', '' ]
1576
1581
  if @@emitted_v5_gtins.index(ean13)
1577
1582
  next
1578
1583
  else
@@ -1589,17 +1594,37 @@ module Oddb2xml
1589
1594
  next if /^#{Oddb2xml::FAKE_GTIN_START}/.match(ean13.to_s)
1590
1595
  xml.ITEM({'PHARMATYPE' => patched_pharma_type }) do
1591
1596
  xml.GTIN ean13.to_s.rjust(13, '0')
1592
- xml.PHAR obj[:pharmacode]
1597
+ xml.PHAR obj[:pharmacode] if obj[:pharmacode] && obj[:pharmacode].length > 0
1593
1598
  emit_salecd(xml, ean13, obj)
1594
- xml.DSCR(obj[:desc_de] || obj[:description]) # for description for zur_rose
1599
+ description = obj[:desc_de] || obj[:description] # for description for zur_rose
1600
+ xml.DSCR(description)
1595
1601
  xml.DSCRF(obj[:desc_fr] || '--missing--')
1596
1602
  xml.COMP do
1597
1603
  xml.GLN obj[:company_ean]
1598
1604
  end if obj[:company_ean] && !obj[:company_ean].empty?
1599
- xml.PEXF obj[:price] if obj[:price] && !obj[:price].empty?
1600
- xml.PPUB obj[:pub_price] if obj[:pub_price] && !obj[:pub_price].empty?
1605
+ if !(obj[:price] && !obj[:price].empty?) || !(obj[:pub_price] && !obj[:pub_price].empty?)
1606
+ zur_rose_detail = @infos_zur_rose.values.find{|x| x[:ean13].to_i == ean13.to_i}
1607
+ end
1608
+ ppub = nil; pexf=nil
1609
+ if obj[:price] && !obj[:price].empty?
1610
+ xml.PEXF (pexf = obj[:price])
1611
+ elsif zur_rose_detail
1612
+ if zur_rose_detail[:price] && !zur_rose_detail[:price].empty? && !zur_rose_detail[:price].eql?('0.00')
1613
+ Oddb2xml.log "NonPharma: #{ean13} adding PEXF #{zur_rose_detail[:price]} #{description}"
1614
+ xml.PEXF (pexf = zur_rose_detail[:price])
1615
+ end
1616
+ end
1617
+ if obj[:pub_price] && !obj[:pub_price].empty?
1618
+ xml.PPUB (ppub = obj[:pub_price])
1619
+ elsif zur_rose_detail
1620
+ if zur_rose_detail[:pub_price] && !zur_rose_detail[:pub_price].empty? && !zur_rose_detail[:pub_price].eql?('0.00')
1621
+ Oddb2xml.log "NonPharma: #{ean13} adding PPUB #{zur_rose_detail[:pub_price]} #{description}"
1622
+ xml.PPUB (ppub = zur_rose_detail[:pub_price])
1623
+ end
1624
+ end
1625
+ @csv_file << [ ean13, description, '', '', pexf, ppub, '', '', '', '', '', '' ]
1601
1626
  if chap70
1602
- xml.comment "Chapter70 hack"
1627
+ xml.comment "Chapter70 hack #{ean13.to_s.rjust(13, '0')} #{description.encode(:xml => :text).gsub('--','-')}"
1603
1628
  xml.SL_ENTRY 'true'
1604
1629
  xml.PRODNO obj[:pharmacode]
1605
1630
  end
@@ -1665,7 +1690,7 @@ module Oddb2xml
1665
1690
  myPack = @packs.values.find{ |x| x[:iksnr].to_i == obj[:seq][:swissmedic_number5].to_i } if obj[:seq]
1666
1691
  if myPack && !prodno
1667
1692
  prodno ||= myPack[:prodno]
1668
- puts "Setting prodno #{prodno} for #{ean13} Varilrix"
1693
+ puts "Setting prodno #{prodno} for #{ean13} #{myPack[:sequence_name]}"
1669
1694
  end
1670
1695
  next unless prodno
1671
1696
  next if emitted_prodno.index(prodno)
@@ -1703,12 +1728,14 @@ module Oddb2xml
1703
1728
  used_limitations << lim_code unless used_limitations.index(lim_code)
1704
1729
  xml.LIMNAMEBAG lim_code
1705
1730
  elsif obj[:chapter70]
1706
- used_limitations << obj[:code]
1707
- xml.comment "Chapter70 hack"
1731
+ xml.comment "Chapter70 hack prodno #{prodno} #{obj[:description].encode(:xml => :text).gsub('--','-')}"
1708
1732
  xml.SALECD('A') # these products are always active!
1709
1733
  xml.DSCR obj[:description]
1710
1734
  xml.DSCRF ''
1711
- xml.LIMNAMEBAG obj[:code]
1735
+ if @limitations.index(obj[:code])
1736
+ xml.LIMNAMEBAG obj[:code]
1737
+ used_limitations << obj[:code]
1738
+ end
1712
1739
  end
1713
1740
  if sequence && sequence[:substances]
1714
1741
  value = nil
@@ -1734,7 +1761,7 @@ module Oddb2xml
1734
1761
  end
1735
1762
  emitted_lim_code << lim[:code]
1736
1763
  xml.LIMITATION do
1737
- xml.comment "Chapter70 hack" if lim[:chap70]
1764
+ xml.comment "Chapter70 2 hack" if lim[:chap70]
1738
1765
  xml.LIMNAMEBAG lim[:code] # original LIMCD
1739
1766
  xml.DSCR Oddb2xml.html_decode(lim[:desc_de])
1740
1767
  xml.DSCRF Oddb2xml.html_decode(lim[:desc_fr])
@@ -12,7 +12,7 @@ module Oddb2xml
12
12
  puts "parse_td returns: #{res}" if $VERBOSE
13
13
  rescue => exc
14
14
  puts "Unable to pars #{elem} #{exc}"
15
- binding.pry
15
+ # binding.pry
16
16
  return nil
17
17
  end
18
18
  res.flatten # .join("\t")
@@ -33,7 +33,7 @@ module Oddb2xml
33
33
  effort: :tolerant,
34
34
  smart: true
35
35
  }
36
- res = Ox.load(open(html_file).read, mode: :hash_no_attrs).values.first['body']
36
+ res = Ox.load(Oddb2xml.uri_open(html_file).read, mode: :hash_no_attrs).values.first['body']
37
37
  result = []
38
38
  idx = 0
39
39
  @@items = {}
@@ -50,15 +50,16 @@ module Oddb2xml
50
50
  data = {}
51
51
  pharma_code = entry.first
52
52
  ean13 = (Oddb2xml::FAKE_GTIN_START + pharma_code.to_s)
53
- german = entry[2].force_encoding('ISO-8859-1').encode('UTF-8')
54
- while !german.eql?(HTMLEntities.new.decode(german))
55
- german = HTMLEntities.new.decode(german)
53
+ if entry[2].encoding.to_s.eql?('ASCII-8BIT')
54
+ german = CGI.unescape(entry[2].force_encoding('ISO-8859-1'))
55
+ else
56
+ german = entry[2]
56
57
  end
57
58
  @@items[ean13] = {
58
59
  :data_origin => 'Chapter70',
59
60
  :line => entry.join(","),
60
61
  :ean13 => ean13,
61
- :description => Oddb2xml.html_decode(entry[2]),
62
+ :description => german,
62
63
  :quantity => entry[3],
63
64
  :pharmacode => pharma_code,
64
65
  :pub_price => entry[4],
@@ -70,5 +71,3 @@ module Oddb2xml
70
71
  end
71
72
  end
72
73
  end
73
-
74
-
data/lib/oddb2xml/cli.rb CHANGED
@@ -88,6 +88,7 @@ module Oddb2xml
88
88
  puts "Validatied #{@_files[:artikelstamm]}"
89
89
  else
90
90
  puts "Validating failed using #{cmd}"
91
+ raise "Validating failed using #{cmd}"
91
92
  exit(2)
92
93
  end
93
94
  end
@@ -157,7 +158,9 @@ module Oddb2xml
157
158
  end
158
159
  end
159
160
  if @options[:calc]
160
- FileUtils.cp(File.join(WorkDir, file), File.join(WorkDir, file.sub('.xml', '_'+Time.now.strftime("%d.%m.%Y_%H.%M")+'.xml')), :verbose => false)
161
+ ext = File.extname(file)
162
+ dest = File.join(WorkDir, file.sub(ext, '_'+Time.now.strftime("%d.%m.%Y_%H.%M")+ext))
163
+ FileUtils.cp(File.join(WorkDir, file), dest, :verbose => false)
161
164
  end
162
165
  end
163
166
  rescue Interrupt
@@ -23,7 +23,7 @@ module Oddb2xml
23
23
  else
24
24
  begin
25
25
  io = File.open(file, option)
26
- data = open(@url).read
26
+ data = Oddb2xml.uri_open(@url).read
27
27
  io.write(data)
28
28
  rescue => error
29
29
  puts "error #{error} while fetching #{@url}"
@@ -283,7 +283,7 @@ module Oddb2xml
283
283
  include DownloadMethod
284
284
  def initialize(type=:orphan, options = {})
285
285
  url = BASE_URL + '/swissmedic/de/home/services/listen_neu.html'
286
- doc = Nokogiri::HTML(open(url))
286
+ doc = Nokogiri::HTML(Oddb2xml.uri_open(url))
287
287
  @type = type
288
288
  @options = options
289
289
  case @type
@@ -218,7 +218,6 @@ module Oddb2xml
218
218
  item = {}
219
219
  item[:ean13] = ean13
220
220
  item[:no8] = pac.SWMC_AUTHNR
221
- item[:pharmacode] = (phar = pac.PHAR.to_s) ? phar: '0'
222
221
  item[:data_origin] = 'refdata'
223
222
  item[:refdata] = true
224
223
  item[:_type] = (typ = pac.ATYPE.downcase.to_sym) ? typ: ''
@@ -228,12 +227,6 @@ module Oddb2xml
228
227
  item[:atc_code] = (code = pac.ATC) ? code.to_s : ''
229
228
  item[:company_name] = (nam = pac.AUTH_HOLDER_NAME) ? nam: ''
230
229
  item[:company_ean] = (gln = pac.AUTH_HOLDER_GLN) ? gln: ''
231
- unless item[:pharmacode]
232
- item[:pharmacode] = phar
233
- unless data[item[:pharmacode]] # pharmacode => GTINs
234
- data[item[:ean13]] = []
235
- end
236
- end
237
230
  data[item[:ean13]] = item
238
231
  end
239
232
  data
@@ -88,7 +88,11 @@ module ParseUtil
88
88
  composition.substances.each do
89
89
  |substance_item|
90
90
  active_substance_name = substance_item.name.downcase.sub(/^cum\s/, '')
91
- substance_item.is_active_agent = (active_agents.find {|x| /#{x.downcase.gsub('(', '\(').gsub(')', '\)')}($|\s)/.match(active_substance_name) } != nil)
91
+ substance_item.is_active_agent = (active_agents.find {|x| /#{x.downcase.
92
+ gsub('(', '\(').
93
+ gsub(')', '\)').
94
+ gsub('[', '\[').
95
+ gsub(']', '\]')}($|\s)/.match(active_substance_name) } != nil)
92
96
  substance_item.is_active_agent = true if substance_item.chemical_substance and active_agents.find {|x| x.downcase.eql?(substance_item.chemical_substance.name.downcase) }
93
97
  end
94
98
  comps << composition
@@ -64,7 +64,7 @@ module Oddb2xml
64
64
  end
65
65
  end
66
66
  end
67
-
67
+
68
68
  def everyPharmaArticleHasAProductItem
69
69
  result = true
70
70
  puts "#{Time.now.strftime("%H:%M:%S")}: everyPharmaArticleHasAProductItem"
@@ -74,7 +74,7 @@ module Oddb2xml
74
74
  unless allProductNumbers.index(item[:PRODNO])
75
75
  puts "Item #{item[:GTIN]} has no Product #{item[:PRODNO]} #{item[:DSCR]}"
76
76
  result = false
77
- end
77
+ end unless item[:Chapter70_HACK]
78
78
  end
79
79
  result
80
80
  end
@@ -91,17 +91,19 @@ module Oddb2xml
91
91
  end
92
92
  result
93
93
  end
94
-
94
+
95
95
  def everyReferencedLimitationIsIncluded
96
+ result = true
96
97
  puts "#{Time.now.strftime("%H:%M:%S")}: everyReferencedLimitationIsIncluded"
97
98
  allLimitations = limitations.collect{ |lim| lim[:LIMNAMEBAG] }
98
99
  products.each do |product|
99
100
  next unless product[:LIMNAMEBAG]
100
101
  unless allLimitations.index(product[:LIMNAMEBAG])
101
102
  puts "product #{product[:PRODNO]} has no limitation #{product[:LIMNAMEBAG]} #{product[:DSCR]}"
102
- return false
103
+ result = false
103
104
  end
104
105
  end
106
+ result
105
107
  end
106
108
 
107
109
  def checkPackageSize