oddb2xml 2.7.0 → 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: f09c85343784bea903af64ee40b29749dfdfc2af55000673244129510276c88a
4
- data.tar.gz: 7a8cbd05765da37ec1d582c13bb71758c05a0ddd73773aea5084fa211ebf98d2
3
+ metadata.gz: c31777bcd85038bd65d38d67d6ebdf2197f174389403b76ff146b18d3ef4557e
4
+ data.tar.gz: 8d8930ed04518838084ae4aeb69181418b2eddb36cfa83ece2cbc84ccd06e1f4
5
5
  SHA512:
6
- metadata.gz: 5be02fa2ec4dff0aa6f8c4a4dbfba9cc0f272831fd0b10b6a1af1a18fd3cff3956ad0884de9e81c19c31d60984cc5d234586372aa7a0d34acdab9015cf7252d8
7
- data.tar.gz: ea9317a80ad372959d59f0a13614a9a5a8a1f5da3befa9202f5dadbcb23a41523580184c9a769fb512ba7256f5d36b97dffc214424d4d70df499cb35b6c9371e
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
data/History.txt CHANGED
@@ -1,3 +1,10 @@
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
+
1
8
  === 2.7.0 / 05.11.2020
2
9
  * Chapter70 hack nur als Kommentar
3
10
  * Avoid double hyphen in comment
@@ -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 {
@@ -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
@@ -1598,7 +1594,7 @@ module Oddb2xml
1598
1594
  next if /^#{Oddb2xml::FAKE_GTIN_START}/.match(ean13.to_s)
1599
1595
  xml.ITEM({'PHARMATYPE' => patched_pharma_type }) do
1600
1596
  xml.GTIN ean13.to_s.rjust(13, '0')
1601
- xml.PHAR obj[:pharmacode]
1597
+ xml.PHAR obj[:pharmacode] if obj[:pharmacode] && obj[:pharmacode].length > 0
1602
1598
  emit_salecd(xml, ean13, obj)
1603
1599
  description = obj[:desc_de] || obj[:description] # for description for zur_rose
1604
1600
  xml.DSCR(description)
@@ -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
data/lib/oddb2xml/util.rb CHANGED
@@ -191,7 +191,9 @@ COLUMNS_FEBRUARY_2019= {
191
191
  :drug_index => /Verz. bei betäubun.*smittel-haltigen Präparaten/i,
192
192
  }
193
193
  def Oddb2xml.add_hash(string)
194
- doc = Nokogiri::XML.parse(string)
194
+ doc = Nokogiri::XML.parse(string) do |config|
195
+ config.huge
196
+ end
195
197
  nr = 0
196
198
  doc.root.elements.each do |node|
197
199
  nr += 1
@@ -1,3 +1,3 @@
1
1
  module Oddb2xml
2
- VERSION = "2.7.0"
2
+ VERSION = "2.7.1"
3
3
  end
data/oddb2xml.gemspec CHANGED
@@ -37,6 +37,8 @@ Gem::Specification.new do |spec|
37
37
  spec.add_dependency 'xml-simple'
38
38
  spec.add_dependency 'ox'
39
39
  spec.add_dependency 'htmlentities'
40
+ spec.add_dependency 'webrick'
41
+ spec.add_dependency 'rexml'
40
42
 
41
43
  spec.add_development_dependency "bundler"
42
44
  spec.add_development_dependency "rake"
@@ -24,7 +24,7 @@ describe Oddb2xml::Builder do
24
24
  unless @inhalt.index(expected_value)
25
25
  puts expected_value
26
26
  end
27
- binding.pry unless @inhalt.index(expected_value)
27
+ binding.pry if defined?(Pry) && !@inhalt.index(expected_value)
28
28
  expect(@inhalt.index(expected_value)).not_to be nil
29
29
  end
30
30
  def common_run_init(options = {})
@@ -71,17 +71,16 @@ describe Oddb2xml::Builder do
71
71
  end
72
72
 
73
73
  it 'should have a GTIN and a public price with 14 chars (ean14)' do
74
+ # Till January 2021 it was possible to find a price via transfer.dat
75
+ # as the pharmacode was given in the refdata_NonPharma.xml
74
76
  expected = %(<ITEM PHARMATYPE="N">
75
77
  <GTIN>68711428066649</GTIN>
76
- <PHAR>5863450</PHAR>
77
78
  <SALECD>A</SALECD>
78
79
  <DSCR>3M MEDIPORE+PAD Absorbtionsverb 10x15cm 8 x 25 Stk</DSCR>
79
80
  <DSCRF>3M MEDIPORE+PAD compr absorb 10x15cm 8 x 25 pce</DSCRF>
80
81
  <COMP>
81
82
  <GLN>7610182000007</GLN>
82
83
  </COMP>
83
- <PEXF>108.01</PEXF>
84
- <PPUB>178.20</PPUB>
85
84
  </ITEM>)
86
85
  expect(@inhalt.index(expected)).not_to be nil
87
86
  end
@@ -160,12 +159,6 @@ describe Oddb2xml::Builder do
160
159
  expect(@inhalt.index('GTIN>0')).to be > 0
161
160
  end
162
161
 
163
- it 'should contain a PHAR 4236857 from refdata_NonPharma.xml' do
164
- expect(@inhalt.index('<PHAR>4236863</PHAR>')).to be > 0
165
- # Marco leaves the 14 GTIN digit in previous importes. As of January 2018 force it to the 13 digits
166
- expect(@inhalt.index('<GTIN>0040565124346</GTIN>')).to be > 0
167
- end
168
-
169
162
  it 'should a DSCRF for 4042809018288 TENSOPLAST Kompressionsbinde 5cmx4.5m' do
170
163
  skip("Where does the DSCR for 4042809018288 come from. It should be TENSOPLAST bande compression 5cmx4.5m")
171
164
  end
@@ -215,8 +208,6 @@ describe Oddb2xml::Builder do
215
208
  it 'should contain DIBASE with phar' do
216
209
  expected = %(<ITEM PHARMATYPE="P">
217
210
  <GTIN>7680658560014</GTIN>
218
- <!--obsolete override-->
219
- <PHAR>7199565</PHAR>
220
211
  <SALECD>A</SALECD>
221
212
  <DSCR>Dibase 10'000 Tropfen 10000 IE/ml Fl 10 ml</DSCR>
222
213
  <DSCRF>Dibase 10'000 gouttes 10000 UI/ml fl 10 ml</DSCRF>
@@ -249,7 +240,6 @@ describe Oddb2xml::Builder do
249
240
  tests = { 'item 7680403330459 CARBADERM only in Preparations(SL) with public price' =>
250
241
  %(<ITEM PHARMATYPE="P">
251
242
  <GTIN>7680403330459</GTIN>
252
- <PHAR>3603779</PHAR>
253
243
  <SALECD>A</SALECD>
254
244
  <DSCR>Carbaderm Creme Tb 300 ml</DSCR>
255
245
  <DSCRF>Carbaderm crème tb 300 ml</DSCRF>
@@ -271,7 +261,6 @@ describe Oddb2xml::Builder do
271
261
  </ITEM>),
272
262
  'product 3247501 LANSOYL' => '<ITEM PHARMATYPE="P">
273
263
  <GTIN>7680324750190</GTIN>
274
- <PHAR>0023722</PHAR>
275
264
  <SALECD>A</SALECD>
276
265
  <DSCR>LANSOYL Gel 225 g</DSCR>
277
266
  <DSCRF>LANSOYL gel 225 g</DSCRF>
@@ -290,7 +279,6 @@ describe Oddb2xml::Builder do
290
279
  'product 5366201 3TC' =>
291
280
  %(<ITEM PHARMATYPE="P">
292
281
  <GTIN>7680536620137</GTIN>
293
- <PHAR>1699947</PHAR>
294
282
  <SALECD>A</SALECD>
295
283
  <DSCR>3TC Filmtabl 150 mg 60 Stk</DSCR>
296
284
  <DSCRF>3TC cpr pell 150 mg 60 pce</DSCRF>
@@ -314,7 +302,6 @@ describe Oddb2xml::Builder do
314
302
  'item 7680161050583 HIRUDOID 40g' =>
315
303
  %(<ITEM PHARMATYPE="P">
316
304
  <GTIN>7680161050583</GTIN>
317
- <PHAR>2731179</PHAR>
318
305
  <SALECD>A</SALECD>
319
306
  <DSCR>Hirudoid Creme 3 mg/g 40 g</DSCR>
320
307
  <DSCRF>Hirudoid crème 3 mg/g 40 g</DSCRF>
@@ -336,7 +323,6 @@ describe Oddb2xml::Builder do
336
323
  'item 7680161050743 Hirudoid Creme 3 mg/g 100 g' =>
337
324
  %( <ITEM PHARMATYPE="P">
338
325
  <GTIN>7680161050743</GTIN>
339
- <PHAR>2731179</PHAR>
340
326
  <SALECD>A</SALECD>
341
327
  <DSCR>Hirudoid Creme 3 mg/g 100 g</DSCR>
342
328
  <DSCRF>Hirudoid crème 3 mg/g 100 g</DSCRF>
@@ -352,7 +338,6 @@ describe Oddb2xml::Builder do
352
338
  </ITEM>),
353
339
  'item 7680284860144 ANCOPIR' =>'<ITEM PHARMATYPE="P">
354
340
  <GTIN>7680284860144</GTIN>
355
- <PHAR>0177804</PHAR>
356
341
  <SALECD>A</SALECD>
357
342
  <DSCR>ANCOPIR Inj Lös 5 Amp 2 ml</DSCR>
358
343
  <DSCRF>Ancopir, sol inj</DSCRF>
@@ -374,7 +359,6 @@ describe Oddb2xml::Builder do
374
359
  </ITEM>',
375
360
  'FERRO-GRADUMET price from ZurRose ' => %(<ITEM PHARMATYPE="P">
376
361
  <GTIN>7680316440115</GTIN>
377
- <PHAR>0020244</PHAR>
378
362
  <SALECD>A</SALECD>
379
363
  <DSCR>FERRO-GRADUMET Depottabl 30 Stk</DSCR>
380
364
  <DSCRF>FERRO-GRADUMET cpr dépôt 30 pce</DSCRF>
@@ -402,7 +386,6 @@ describe Oddb2xml::Builder do
402
386
  </PRODUCT>),
403
387
  'nur aus Packungen Coeur-Vaisseaux Sérocytol,' => %(<ITEM PHARMATYPE="P">
404
388
  <GTIN>7680002770014</GTIN>
405
- <PHAR>0361815</PHAR>
406
389
  <SALECD>A</SALECD>
407
390
  <DSCR>SEROCYTOL Herz-Gefässe Supp 3 Stk</DSCR>
408
391
  <DSCRF>SEROCYTOL Coeur-Vaisseaux supp 3 pce</DSCRF>
@@ -419,7 +402,6 @@ describe Oddb2xml::Builder do
419
402
  </ITEM>),
420
403
  'HUMALOG (Richter)' => %(<ITEM PHARMATYPE="P">
421
404
  <GTIN>7680532900196</GTIN>
422
- <PHAR>1699999</PHAR>
423
405
  <SALECD>A</SALECD>
424
406
  <DSCR>Humalog Inj Lös Durchstf 10 ml</DSCR>
425
407
  <DSCRF>Humalog sol inj flac 10 ml</DSCRF>
@@ -450,7 +432,6 @@ describe Oddb2xml::Builder do
450
432
  </PRODUCT>),
451
433
  'Varilrix item' => %(<ITEM PHARMATYPE="P">
452
434
  <GTIN>7680005850010</GTIN>
453
- <PHAR>1770177</PHAR>
454
435
  <SALECD>A</SALECD>
455
436
  <DSCR>Varilrix Trockensub c solv Fertspr 0.500 ml</DSCR>
456
437
  <DSCRF>Varilrix subst sèche c solv ser prê 0.500 ml</DSCRF>
data/spec/builder_spec.rb CHANGED
@@ -39,7 +39,6 @@ ARTICLE_ZURROSE_ELEMENTS = [
39
39
  ]
40
40
 
41
41
  ARTICLE_NAROPIN = %(<REF_DATA>1</REF_DATA>
42
- <PHAR>1882189</PHAR>
43
42
  <SMCAT>B</SMCAT>
44
43
  <SMNO>54015011</SMNO>
45
44
  <PRODNO>5401501</PRODNO>
@@ -259,16 +258,6 @@ def check_result(inhalt, nbr_record)
259
258
  expect(m[1].to_i).to eq nbr_record
260
259
  end
261
260
 
262
- def checkItemForRefdata(doc, pharmacode, isRefdata)
263
- article = XPath.match( doc, "//ART[PHAR=#{pharmacode.to_s}]").first
264
- name = article.elements['DSCRD'].text
265
- refdata = article.elements['REF_DATA'].text
266
- smno = article.elements['SMNO'] ? article.elements['SMNO'].text : 'nil'
267
- puts "checking doc for gtin #{gtin} isRefdata #{isRefdata} == #{refdata}. SMNO: #{smno} #{name}" if $VERBOSE
268
- expect(article.elements['REF_DATA'].text).to eq(isRefdata.to_s)
269
- article
270
- end
271
-
272
261
  ['article', 'betrieb', 'code', 'interaction', 'limitation', 'medizinalperson', 'product', 'substance'].each do |cat|
273
262
  eval "
274
263
  def oddb_#{cat}_xml
@@ -408,7 +397,7 @@ def checkArticleXml(checkERYTHROCIN = true)
408
397
  expect(desitin.elements['DSCRD'].text).to eq("LEVETIRACETAM DESITIN Mini Filmtab 250 mg 30 Stk")
409
398
  expect(desitin.elements['DSCRF'].text).to eq('LEVETIRACETAM DESITIN mini cpr pel 250 mg 30 pce')
410
399
  expect(desitin.elements['REF_DATA'].text).to eq('1')
411
- expect(desitin.elements['PHAR'].text).to eq('5819012')
400
+ expect(desitin.elements['PHAR'].text).to eq('5819012')
412
401
  expect(desitin.elements['SMCAT'].text).to eq('B')
413
402
  expect(desitin.elements['SMNO'].text).to eq('62069008')
414
403
  expect(desitin.elements['VAT'].text).to eq('2')
@@ -473,7 +462,7 @@ def checkProductXml(nbr_record = -1)
473
462
  end
474
463
 
475
464
  describe Oddb2xml::Builder do
476
- NrExtendedArticles = 78
465
+ NrExtendedArticles = 80
477
466
  NrSubstances = 28
478
467
  NrLimitations = 15
479
468
 
@@ -482,7 +471,7 @@ describe Oddb2xml::Builder do
482
471
  NrProdno = 31
483
472
  NrPackages = 46
484
473
  NrProducts = 40
485
- RegExpDesitin = /1125819012LEVETIRACETAM DESITIN Mini Filmtab 250 mg 30 Stk/
474
+ RegExpDesitin = /1120000000LEVETIRACETAM DESITIN Mini Filmtab 250 mg 30 Stk/
486
475
  include ServerMockHelper
487
476
  def common_run_init(options = {})
488
477
  @savedDir = Dir.pwd
@@ -516,6 +505,11 @@ describe Oddb2xml::Builder do
516
505
  check_result(@inhalt, NrProducts)
517
506
  end
518
507
 
508
+ it 'should have a correct NBR_RECORD in oddb_products.xml' do
509
+ oddb_product_xml = oddb_article_xml.sub('oddb_article.xml', 'oddb_product.xml')
510
+ check_result(File.read(oddb_product_xml), 46)
511
+ end
512
+
519
513
  it 'oddb_article.xml should contain a SHA256' do
520
514
  expect(XPath.match(@rexml, "//ART" ).first.attributes['SHA256'].size).to eq 64
521
515
  expect(XPath.match(@rexml, "//ART" ).size).to eq XPath.match(@rexml, "//ART" ).size
@@ -821,19 +815,12 @@ describe Oddb2xml::Builder do
821
815
 
822
816
  it 'should generate the flag non-refdata' do
823
817
  doc = REXML::Document.new File.new(checkAndGetArticleXmlName('non-refdata'))
824
- expect(XPath.match( doc, "//REF_DATA" ).size).to be > 0
825
- checkItemForRefdata(doc, "1699947", 1) # 3TC Filmtabl 150 mg SMNO 53662013 IKSNR 53‘662, 53‘663
826
- checkItemForRefdata(doc, "0598003", 0) # SOFRADEX Gtt Auric 8 ml
827
- checkItemForRefdata(doc, "5366964", 0) # 1-DAY ACUVUE moist jour
828
- unless SkipMigelDownloader
829
- novopen = checkItemForRefdata(doc, "3036984", 1) # NovoPen 4 Injektionsgerät blue In NonPharma (a MiGel product)
830
- expect(novopen.elements['ARTBAR/BC'].text).to eq '0'
831
- end
818
+ expect(XPath.match( doc, "//REF_DATA" ).size).to eq NrExtendedArticles
832
819
  end
833
820
 
834
821
  it 'should generate SALECD A for migel (NINCD 13)' do
835
822
  doc = REXML::Document.new File.new(checkAndGetArticleXmlName)
836
- article = XPath.match( doc, "//ART[PHAR=4236863]").first
823
+ article = XPath.match( doc, "//ART[DSCRD='ACTICOAT Flex 7 Wundverband 10x12.5cm 5 Stk']").first
837
824
  expect(article.elements['SALECD'].text).to eq('A')
838
825
  expect(article.elements['ARTINS/NINCD'].text).to eq('13')
839
826
  end
@@ -860,12 +847,12 @@ describe Oddb2xml::Builder do
860
847
  end
861
848
 
862
849
  it 'should load correct number of nonpharma' do
850
+ puts checkAndGetArticleXmlName
863
851
  doc = REXML::Document.new File.new(checkAndGetArticleXmlName)
864
852
  dscrds = XPath.match( doc, "//ART" )
865
853
  expect(dscrds.size).to eq(NrExtendedArticles)
866
- expect(XPath.match( doc, "//PHAR" ).find_all{|x| x.text.match('1699947') }.size).to eq(1) # swissmedic_packages Cardio-Pulmo-Rénal Sérocytol, suppositoire
867
- expect(XPath.match( doc, "//PHAR" ).find_all{|x| x.text.match('2465312') }.size).to eq(1) # from refdata_pharma.xml"
868
854
  expect(XPath.match( doc, "//PHAR" ).find_all{|x| x.text.match('0000000') }.size).to eq(0) # 0 is not a valid pharmacode
855
+ expect(XPath.match( doc, "//PHAR" ).find_all{|x| x.text.match(/\d+/)}.size).to eq 65
869
856
  end
870
857
 
871
858
  it 'should have a correct NBR_RECORD in oddb_limitation.xml' do
@@ -5,7 +5,6 @@
5
5
  <ITEM DT="2015-11-24 00:00:00 +000">
6
6
  <ATYPE>NONPHARMA</ATYPE>
7
7
  <GTIN>7611600441020</GTIN>
8
- <PHAR>0058519</PHAR>
9
8
  <NAME_DE>TUBEGAZE Verband weiss Nr 12 20m Finger gross</NAME_DE>
10
9
  <NAME_FR>TUBEGAZE pans tubul blanc Nr 12 20m doigts grands</NAME_FR>
11
10
  <AUTH_HOLDER_NAME>IVF HARTMANN AG</AUTH_HOLDER_NAME>
@@ -14,7 +13,6 @@
14
13
  <ITEM DT="2015-11-24 00:00:00 +000">
15
14
  <ATYPE>NONPHARMA</ATYPE>
16
15
  <GTIN>00040565124308</GTIN>
17
- <PHAR>4236863</PHAR>
18
16
  <NAME_DE>ACTICOAT Flex 7 Wundverband 10x12.5cm 5 Stk</NAME_DE>
19
17
  <NAME_FR>ACTICOAT Flex 7 pansement vulné 10x12.5cm 5 pce</NAME_FR>
20
18
  <AUTH_HOLDER_NAME>Smith &amp; Nephew Schweiz AG</AUTH_HOLDER_NAME>
@@ -32,7 +30,6 @@
32
30
  <ITEM DT="2018-03-16T00:00:00">
33
31
  <ATYPE>NONPHARMA</ATYPE>
34
32
  <GTIN>68711428066649</GTIN>
35
- <PHAR>5863450</PHAR>
36
33
  <NAME_DE>3M MEDIPORE+PAD Absorbtionsverb 10x15cm 8 x 25 Stk</NAME_DE>
37
34
  <NAME_FR>3M MEDIPORE+PAD compr absorb 10x15cm 8 x 25 pce</NAME_FR>
38
35
  <AUTH_HOLDER_NAME>3M (Schweiz) GmbH (Professional Health Care)</AUTH_HOLDER_NAME>
@@ -5,7 +5,6 @@
5
5
  <ITEM DT="2018-12-05T00:00:00">
6
6
  <ATYPE>PHARMA</ATYPE>
7
7
  <GTIN>7680005850010</GTIN>
8
- <PHAR>1770177</PHAR>
9
8
  <SWMC_AUTHNR>00585001</SWMC_AUTHNR>
10
9
  <NAME_DE>VARILRIX Trockensub c Solv Fertspr 0.5 ml</NAME_DE>
11
10
  <NAME_FR>VARILRIX subst sèche c solv ser pré 0.5 ml</NAME_FR>
@@ -16,7 +15,6 @@
16
15
  <ITEM DT="2017-12-14T00:00:00">
17
16
  <ATYPE>PHARMA</ATYPE>
18
17
  <GTIN>7680545340019</GTIN>
19
- <PHAR>6749124</PHAR>
20
18
  <SWMC_AUTHNR>54534001</SWMC_AUTHNR>
21
19
  <NAME_DE>TEBOKAN Filmtabl 240 mg 30 Stk</NAME_DE>
22
20
  <NAME_FR>TEBOKAN cpr pell 240 mg 30 pce</NAME_FR>
@@ -27,7 +25,6 @@
27
25
  <ITEM DT="2017-12-14T00:00:00">
28
26
  <ATYPE>PHARMA</ATYPE>
29
27
  <GTIN>7680540150118</GTIN>
30
- <PHAR>1882189</PHAR>
31
28
  <SWMC_AUTHNR>54015011</SWMC_AUTHNR>
32
29
  <NAME_DE>NAROPIN Inj Lös 0.2 % 10ml Duofit Amp 5 Stk</NAME_DE>
33
30
  <NAME_FR>NAROPIN sol inj 0.2 % 10ml amp duofit 5 pce</NAME_FR>
@@ -38,7 +35,6 @@
38
35
  <ITEM DT="2017-12-08T00:00:00">
39
36
  <ATYPE>PHARMA</ATYPE>
40
37
  <GTIN>7680563520172</GTIN>
41
- <PHAR>6477223</PHAR>
42
38
  <SWMC_AUTHNR>56352017</SWMC_AUTHNR>
43
39
  <NAME_DE>ADVATE Trockensub 250 IE c Solv 2 ml Durchstf</NAME_DE>
44
40
  <NAME_FR>ADVATE subst sèche 250 UI c solv 2 ml flac</NAME_FR>
@@ -49,7 +45,6 @@
49
45
  <ITEM DT="2018-09-20T00:00:00">
50
46
  <ATYPE>PHARMA</ATYPE>
51
47
  <GTIN>7680658560014</GTIN>
52
- <PHAR>7199565</PHAR>
53
48
  <SWMC_AUTHNR>65856001</SWMC_AUTHNR>
54
49
  <NAME_DE>DIBASE Tropfen 10000 IE/ml Fl 10 ml</NAME_DE>
55
50
  <NAME_FR>DIBASE gouttes 10000 UI/ml fl 10 ml</NAME_FR>
@@ -60,7 +55,6 @@
60
55
  <ITEM DT="2017-12-08T00:00:00">
61
56
  <ATYPE>PHARMA</ATYPE>
62
57
  <GTIN>7680555580054</GTIN>
63
- <PHAR>2465312</PHAR>
64
58
  <SWMC_AUTHNR>55558005</SWMC_AUTHNR>
65
59
  <NAME_DE>ZYVOXID Filmtabl 600 mg 10 Stk</NAME_DE>
66
60
  <NAME_FR>ZYVOXID cpr pell 600 mg 10 pce</NAME_FR>
@@ -71,7 +65,6 @@
71
65
  <ITEM DT="2017-12-08T00:00:00">
72
66
  <ATYPE>PHARMA</ATYPE>
73
67
  <GTIN>7680620690084</GTIN>
74
- <PHAR>5819012</PHAR>
75
68
  <SWMC_AUTHNR>62069008</SWMC_AUTHNR>
76
69
  <NAME_DE>LEVETIRACETAM DESITIN Mini Filmtab 250 mg 30 Stk</NAME_DE>
77
70
  <NAME_FR>LEVETIRACETAM DESITIN mini cpr pel 250 mg 30 pce</NAME_FR>
@@ -82,7 +75,6 @@
82
75
  <ITEM DT="2017-12-08T00:00:00">
83
76
  <ATYPE>PHARMA</ATYPE>
84
77
  <GTIN>7680353660163</GTIN>
85
- <PHAR>0020273</PHAR>
86
78
  <SWMC_AUTHNR>35366016</SWMC_AUTHNR>
87
79
  <NAME_DE>KENDURAL Depottabl 30 Stk</NAME_DE>
88
80
  <NAME_FR>KENDURAL cpr dépôt 30 pce</NAME_FR>
@@ -93,7 +85,6 @@
93
85
  <ITEM DT="2017-12-08T00:00:00">
94
86
  <ATYPE>PHARMA</ATYPE>
95
87
  <GTIN>7680536620137</GTIN>
96
- <PHAR>1699947</PHAR>
97
88
  <SWMC_AUTHNR>53662013</SWMC_AUTHNR>
98
89
  <NAME_DE>3TC Filmtabl 150 mg 60 Stk</NAME_DE>
99
90
  <NAME_FR>3TC cpr pell 150 mg 60 pce</NAME_FR>
@@ -104,7 +95,6 @@
104
95
  <ITEM DT="2017-12-08T00:00:00">
105
96
  <ATYPE>PHARMA</ATYPE>
106
97
  <GTIN>7680161050583</GTIN>
107
- <PHAR>2731179</PHAR>
108
98
  <SWMC_AUTHNR>16105058</SWMC_AUTHNR>
109
99
  <NAME_DE>HIRUDOID Creme 3 mg/g 40 g</NAME_DE>
110
100
  <NAME_FR>HIRUDOID crème 3 mg/g 40 g</NAME_FR>
@@ -115,7 +105,6 @@
115
105
  <ITEM DT="2017-12-08T00:00:00">
116
106
  <ATYPE>PHARMA</ATYPE>
117
107
  <GTIN>7680324750190</GTIN>
118
- <PHAR>0023722</PHAR>
119
108
  <SWMC_AUTHNR>32475019</SWMC_AUTHNR>
120
109
  <NAME_DE>LANSOYL Gel 225 g</NAME_DE>
121
110
  <NAME_FR>LANSOYL gel 225 g</NAME_FR>
@@ -126,7 +115,6 @@
126
115
  <ITEM DT="2017-12-08T00:00:00">
127
116
  <ATYPE>PHARMA</ATYPE>
128
117
  <GTIN>7680573230016</GTIN>
129
- <PHAR>6824802</PHAR>
130
118
  <SWMC_AUTHNR>57323001</SWMC_AUTHNR>
131
119
  <NAME_DE>LANSOPRAZOL Mepha Kaps 15 mg Fl 60 Stk</NAME_DE>
132
120
  <NAME_FR>LANSOPRAZOL Mepha caps 15 mg fl 60 pce</NAME_FR>
@@ -137,7 +125,6 @@
137
125
  <ITEM DT="2017-12-08T00:00:00">
138
126
  <ATYPE>PHARMA</ATYPE>
139
127
  <GTIN>7680532900196</GTIN>
140
- <PHAR>1699999</PHAR>
141
128
  <SWMC_AUTHNR>53290019</SWMC_AUTHNR>
142
129
  <NAME_DE>HUMALOG Inj Lös 100 IE/ml Durchstf 10 ml</NAME_DE>
143
130
  <NAME_FR>HUMALOG sol inj 100 UI/ml flac 10 ml</NAME_FR>
@@ -148,7 +135,6 @@
148
135
  <ITEM DT="2017-12-01T00:00:00">
149
136
  <ATYPE>PHARMA</ATYPE>
150
137
  <GTIN>7680002770014</GTIN>
151
- <PHAR>0361815</PHAR>
152
138
  <SWMC_AUTHNR>00277001</SWMC_AUTHNR>
153
139
  <NAME_DE>SEROCYTOL Herz-Gefässe Supp 3 Stk</NAME_DE>
154
140
  <NAME_FR>SEROCYTOL Coeur-Vaisseaux supp 3 pce</NAME_FR>
@@ -159,7 +145,6 @@
159
145
  <ITEM DT="2017-12-01T00:00:00">
160
146
  <ATYPE>PHARMA</ATYPE>
161
147
  <GTIN>7680002780013</GTIN>
162
- <PHAR>0361821</PHAR>
163
148
  <SWMC_AUTHNR>00278001</SWMC_AUTHNR>
164
149
  <NAME_DE>SEROCYTOL Kolon Supp 3 Stk</NAME_DE>
165
150
  <NAME_FR>SEROCYTOL Côlon supp 3 pce</NAME_FR>
@@ -170,7 +155,6 @@
170
155
  <ITEM DT="2017-12-01T00:00:00">
171
156
  <ATYPE>PHARMA</ATYPE>
172
157
  <GTIN>7680406620144</GTIN>
173
- <PHAR>0769841</PHAR>
174
158
  <SWMC_AUTHNR>40662014</SWMC_AUTHNR>
175
159
  <NAME_DE>PEVISONE Creme 15 g</NAME_DE>
176
160
  <NAME_FR>PEVISONE crème 15 g</NAME_FR>
@@ -181,7 +165,6 @@
181
165
  <ITEM DT="2017-12-01T00:00:00">
182
166
  <ATYPE>PHARMA</ATYPE>
183
167
  <GTIN>7680406620229</GTIN>
184
- <PHAR>0863244</PHAR>
185
168
  <SWMC_AUTHNR>40662022</SWMC_AUTHNR>
186
169
  <NAME_DE>PEVISONE Creme 30 g</NAME_DE>
187
170
  <NAME_FR>PEVISONE crème 30 g</NAME_FR>
@@ -192,7 +175,6 @@
192
175
  <ITEM DT="2017-11-03T00:00:00">
193
176
  <ATYPE>PHARMA</ATYPE>
194
177
  <GTIN>7680587340015</GTIN>
195
- <PHAR>4153628</PHAR>
196
178
  <SWMC_AUTHNR>58734001</SWMC_AUTHNR>
197
179
  <NAME_DE>YONDELIS Trockensub 0.25 mg Durchstf</NAME_DE>
198
180
  <NAME_FR>YONDELIS subst sèche 0.25 mg flac</NAME_FR>
@@ -203,7 +185,6 @@
203
185
  <ITEM DT="2017-11-03T00:00:00">
204
186
  <ATYPE>PHARMA</ATYPE>
205
187
  <GTIN>7680627160016</GTIN>
206
- <PHAR>5301924</PHAR>
207
188
  <SWMC_AUTHNR>62716001</SWMC_AUTHNR>
208
189
  <NAME_DE>COOP VITALITY Bronchialpastillen 40 Stk</NAME_DE>
209
190
  <NAME_FR>COOP VITALITY pastilles bronchiques 40 pce</NAME_FR>
@@ -214,7 +195,6 @@
214
195
  <ITEM DT="2018-01-30T00:00:00">
215
196
  <ATYPE>PHARMA</ATYPE>
216
197
  <GTIN>7680651600014</GTIN>
217
- <PHAR>6571270</PHAR>
218
198
  <SWMC_AUTHNR>65160001</SWMC_AUTHNR>
219
199
  <NAME_DE>LYNPARZA Kaps 50 mg 448 Stk</NAME_DE>
220
200
  <NAME_FR>LYNPARZA caps 50 mg 448 pce</NAME_FR>
@@ -225,7 +205,6 @@
225
205
  <ITEM DT="2018-02-09T00:00:00">
226
206
  <ATYPE>PHARMA</ATYPE>
227
207
  <GTIN>7680316440115</GTIN>
228
- <PHAR>0020244</PHAR>
229
208
  <SWMC_AUTHNR>31644011</SWMC_AUTHNR>
230
209
  <NAME_DE>FERRO-GRADUMET Depottabl 30 Stk</NAME_DE>
231
210
  <NAME_FR>FERRO-GRADUMET cpr dépôt 30 pce</NAME_FR>
@@ -236,7 +215,6 @@
236
215
  <ITEM DT="2018-03-16T00:00:00">
237
216
  <ATYPE>PHARMA</ATYPE>
238
217
  <GTIN>7680581580011</GTIN>
239
- <PHAR>3656617</PHAR>
240
218
  <SWMC_AUTHNR>58158001</SWMC_AUTHNR>
241
219
  <NAME_DE>PRIORIX TETRA Trockensub c Solv Fertspr</NAME_DE>
242
220
  <NAME_FR>PRIORIX TETRA subst sèche c solv ser pré</NAME_FR>
@@ -247,7 +225,6 @@
247
225
  <ITEM DT="2018-03-23T00:00:00">
248
226
  <ATYPE>PHARMA</ATYPE>
249
227
  <GTIN>7680444470107</GTIN>
250
- <PHAR>0919766</PHAR>
251
228
  <SWMC_AUTHNR>44447010</SWMC_AUTHNR>
252
229
  <NAME_DE>LOPRESOR Retard Divitabs 200 mg 14 Stk</NAME_DE>
253
230
  <NAME_FR>LOPRESOR Retard Divitabs 200 mg 14 pce</NAME_FR>
@@ -258,7 +235,6 @@
258
235
  <ITEM DT="2018-03-23T00:00:00">
259
236
  <ATYPE>PHARMA</ATYPE>
260
237
  <GTIN>7680444470299</GTIN>
261
- <PHAR>0919772</PHAR>
262
238
  <SWMC_AUTHNR>44447029</SWMC_AUTHNR>
263
239
  <NAME_DE>LOPRESOR Retard Divitabs 200 mg 56 Stk</NAME_DE>
264
240
  <NAME_FR>LOPRESOR Retard Divitabs 200 mg 56 pce</NAME_FR>
@@ -269,7 +245,6 @@
269
245
  <ITEM DT="2018-03-23T00:00:00">
270
246
  <ATYPE>PHARMA</ATYPE>
271
247
  <GTIN>7680152190687</GTIN>
272
- <PHAR>0544042</PHAR>
273
248
  <SWMC_AUTHNR>15219068</SWMC_AUTHNR>
274
249
  <NAME_DE>ZYMAFLUOR Tabl 0.25 mg Ds 400 Stk</NAME_DE>
275
250
  <NAME_FR>ZYMAFLUOR cpr 0.25 mg bte 400 pce</NAME_FR>
@@ -280,7 +255,6 @@
280
255
  <ITEM DT="2018-03-23T00:00:00">
281
256
  <ATYPE>PHARMA</ATYPE>
282
257
  <GTIN>7680434540995</GTIN>
283
- <PHAR>2381532</PHAR>
284
258
  <SWMC_AUTHNR>43454099</SWMC_AUTHNR>
285
259
  <NAME_DE>KAMILLIN Medipharm Bad liq 10 Btl 40 ml</NAME_DE>
286
260
  <NAME_FR>KAMILLIN Medipharm bain liq 10 sach 40 ml</NAME_FR>
@@ -51,7 +51,7 @@ end unless SkipMigelDownloader
51
51
  describe Oddb2xml::RefdataExtractor do
52
52
  before(:all) { common_before }
53
53
  after(:all) { common_after }
54
- @@last_change = '2015-11-24 00:00:00 +0000'
54
+ Last_change = '2015-11-24 00:00:00 +0000'
55
55
 
56
56
  context 'should handle pharma articles' do
57
57
  subject do
@@ -60,17 +60,15 @@ describe Oddb2xml::RefdataExtractor do
60
60
  @pharma_items = Oddb2xml::RefdataExtractor.new(xml, 'PHARMA').to_hash
61
61
  end
62
62
 
63
- it "should have correct info for pharmacode 1699947 correctly" do
63
+ it "should have correct info for no8 62069008 correctly" do
64
64
  @pharma_items = subject.to_hash
65
- pharma_code_LEVETIRACETAM = '5819012'
66
- item_found = @pharma_items.values.find{ |x| x[:pharmacode].eql?(pharma_code_LEVETIRACETAM)}
65
+ item_found = @pharma_items.values.find{ |x| x[:ean13].eql?(Oddb2xml::LEVETIRACETAM_GTIN)}
67
66
  expect(item_found).not_to be nil
68
67
  expected = {:data_origin=>"refdata",
69
68
  :refdata=>true,
70
69
  :_type=>:pharma,
71
70
  :ean13=> Oddb2xml::LEVETIRACETAM_GTIN.to_s,
72
71
  :no8 => "62069008",
73
- :pharmacode=> pharma_code_LEVETIRACETAM,
74
72
  :data_origin => "refdata",
75
73
  :desc_de=>"LEVETIRACETAM DESITIN Mini Filmtab 250 mg 30 Stk",
76
74
  :desc_fr=>"LEVETIRACETAM DESITIN mini cpr pel 250 mg 30 pce",
@@ -90,15 +88,13 @@ describe Oddb2xml::RefdataExtractor do
90
88
 
91
89
  it "should have correct info for nonpharma with pharmacode 0058502 correctly" do
92
90
  @non_pharma_items = subject.to_hash
93
- pharma_code_TUBEGAZE = '0058519'
94
- item_found = @non_pharma_items.values.find{ |x| x[:pharmacode].eql?(pharma_code_TUBEGAZE)}
91
+ item_found = @non_pharma_items.values.find{ |x| x[:ean13].eql?('7611600441020')}
95
92
  expect(item_found).not_to be nil
96
93
  expected = {:refdata=>true,
97
94
  :_type=>:nonpharma,
98
95
  :ean13=>'7611600441020',
99
96
  :no8 => nil,
100
- :pharmacode=>pharma_code_TUBEGAZE,
101
- :last_change => @@last_change,
97
+ :last_change => Last_change,
102
98
  :data_origin => "refdata",
103
99
  :desc_de=>"TUBEGAZE Verband weiss Nr 12 20m Finger gross",
104
100
  :desc_fr=>"TUBEGAZE pans tubul blanc Nr 12 20m doigts grands",
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oddb2xml
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.7.0
4
+ version: 2.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yasuhiro Asaka, Zeno R.R. Davatz, Niklaus Giger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-05 00:00:00.000000000 Z
11
+ date: 2021-02-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -234,6 +234,34 @@ dependencies:
234
234
  - - ">="
235
235
  - !ruby/object:Gem::Version
236
236
  version: '0'
237
+ - !ruby/object:Gem::Dependency
238
+ name: webrick
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - ">="
242
+ - !ruby/object:Gem::Version
243
+ version: '0'
244
+ type: :runtime
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
251
+ - !ruby/object:Gem::Dependency
252
+ name: rexml
253
+ requirement: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - ">="
256
+ - !ruby/object:Gem::Version
257
+ version: '0'
258
+ type: :runtime
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - ">="
263
+ - !ruby/object:Gem::Version
264
+ version: '0'
237
265
  - !ruby/object:Gem::Dependency
238
266
  name: bundler
239
267
  requirement: !ruby/object:Gem::Requirement
@@ -355,9 +383,9 @@ executables:
355
383
  extensions: []
356
384
  extra_rdoc_files: []
357
385
  files:
386
+ - ".github/workflows/ruby.yml"
358
387
  - ".gitignore"
359
388
  - ".rspec"
360
- - ".travis.yml"
361
389
  - Elexis_Artikelstamm_v003.xsd
362
390
  - Elexis_Artikelstamm_v5.xsd
363
391
  - Gemfile
@@ -486,7 +514,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
486
514
  - !ruby/object:Gem::Version
487
515
  version: '0'
488
516
  requirements: []
489
- rubygems_version: 3.1.2
517
+ rubygems_version: 3.2.4
490
518
  signing_key:
491
519
  specification_version: 4
492
520
  summary: oddb2xml creates xml files.
data/.travis.yml DELETED
@@ -1,29 +0,0 @@
1
- language: ruby
2
-
3
- bundler_args: --without debugger
4
-
5
- cache: bundler
6
- sudo: false
7
-
8
- before_install:
9
- - gem --version
10
-
11
- script: bundle exec rspec
12
-
13
- rvm:
14
- - 2.4
15
- - 2.5
16
- - 2.6
17
- - 2.7
18
- - ruby-head
19
-
20
- matrix:
21
- allow_failures:
22
- - rvm: ruby-head
23
-
24
- notifications:
25
- email:
26
- recipients:
27
- - ngiger@ywesee.com
28
- - yasaka@ywesee.com
29
- - zdavatz@ywesee.com