oddb2xml 2.6.6 → 2.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +40 -0
- data/Elexis_Artikelstamm_v5.xsd +10 -8
- data/History.txt +29 -2
- data/bin/check_artikelstamm +1 -1
- data/lib/oddb2xml/builder.rb +53 -26
- data/lib/oddb2xml/chapter_70_hack.rb +7 -8
- data/lib/oddb2xml/cli.rb +4 -1
- data/lib/oddb2xml/downloader.rb +2 -2
- data/lib/oddb2xml/extractor.rb +0 -7
- data/lib/oddb2xml/parslet_compositions.rb +5 -1
- data/lib/oddb2xml/semantic_check.rb +6 -4
- data/lib/oddb2xml/util.rb +18 -8
- data/lib/oddb2xml/version.rb +1 -1
- data/oddb2xml.gemspec +3 -0
- data/spec/artikelstamm_spec.rb +36 -37
- data/spec/builder_spec.rb +24 -37
- data/spec/cli_spec.rb +26 -0
- data/spec/data/Preparations.xml +139 -3
- data/spec/data/refdata_NonPharma.xml +0 -3
- data/spec/data/refdata_Pharma.xml +10 -25
- data/spec/data/swissmedic_package.xlsx +0 -0
- data/spec/data/transfer.dat +2 -1
- data/spec/data/varia_De.htm +2 -2
- data/spec/extractor_spec.rb +6 -10
- metadata +33 -6
- data/.travis.yml +0 -31
data/lib/oddb2xml/util.rb
CHANGED
@@ -7,6 +7,14 @@ module Oddb2xml
|
|
7
7
|
def Oddb2xml.gen_prodno(iksnr, seqnr)
|
8
8
|
sprintf('%05d',iksnr) + sprintf('%02d', seqnr)
|
9
9
|
end
|
10
|
+
def Oddb2xml.uri_open(url)
|
11
|
+
version = RUBY_VERSION.split('.').map { |x| x.to_i }
|
12
|
+
if (version <=> [2,5,0]) >= 0
|
13
|
+
URI.open(url)
|
14
|
+
else
|
15
|
+
open(url)
|
16
|
+
end
|
17
|
+
end
|
10
18
|
def Oddb2xml.calc_checksum(str)
|
11
19
|
str = str.strip
|
12
20
|
sum = 0
|
@@ -34,7 +42,7 @@ module Oddb2xml
|
|
34
42
|
end
|
35
43
|
Oddb2xml.patch_some_utf8(german).gsub('<br>',"\n")
|
36
44
|
end
|
37
|
-
|
45
|
+
|
38
46
|
def Oddb2xml.patch_some_utf8(line)
|
39
47
|
begin
|
40
48
|
line = line.encode('utf-8')
|
@@ -61,7 +69,7 @@ module Oddb2xml
|
|
61
69
|
def Oddb2xml.add_epha_changes_for_ATC(iksnr, atc_code, force_run: false)
|
62
70
|
@atc_csv_content = {} if force_run
|
63
71
|
if @atc_csv_content.size == 0
|
64
|
-
|
72
|
+
Oddb2xml.uri_open(@atc_csv_origin).readlines.each{
|
65
73
|
|line|
|
66
74
|
items = line.split(',')
|
67
75
|
@atc_csv_content[[items[0], items[1]]] = items[2]
|
@@ -86,7 +94,7 @@ module Oddb2xml
|
|
86
94
|
def Oddb2xml.skip_download?
|
87
95
|
@options[:skip_download]
|
88
96
|
end
|
89
|
-
|
97
|
+
|
90
98
|
def Oddb2xml.skip_download(file)
|
91
99
|
return false if defined?(VCR)
|
92
100
|
dest = "#{Downloads}/#{File.basename(file)}"
|
@@ -96,7 +104,7 @@ module Oddb2xml
|
|
96
104
|
end
|
97
105
|
false
|
98
106
|
end
|
99
|
-
|
107
|
+
|
100
108
|
def Oddb2xml.download_finished(file, remove_file = true)
|
101
109
|
src = "#{WorkDir}/#{File.basename(file)}"
|
102
110
|
dest = "#{Downloads}/#{File.basename(file)}"
|
@@ -183,7 +191,9 @@ COLUMNS_FEBRUARY_2019= {
|
|
183
191
|
:drug_index => /Verz. bei betäubun.*smittel-haltigen Präparaten/i,
|
184
192
|
}
|
185
193
|
def Oddb2xml.add_hash(string)
|
186
|
-
doc = Nokogiri::XML.parse(string)
|
194
|
+
doc = Nokogiri::XML.parse(string) do |config|
|
195
|
+
config.huge
|
196
|
+
end
|
187
197
|
nr = 0
|
188
198
|
doc.root.elements.each do |node|
|
189
199
|
nr += 1
|
@@ -232,7 +242,7 @@ COLUMNS_FEBRUARY_2019= {
|
|
232
242
|
@@ean13_to_no8 = {}
|
233
243
|
def Oddb2xml.setEan13forProdno(prodno, ean13)
|
234
244
|
if ean13.to_i == 7680006660045 || ean13.to_i == 7680006660014
|
235
|
-
|
245
|
+
Oddb2xml.log "setEan13forProdno #{prodno} ean13 #{ean13}"
|
236
246
|
end
|
237
247
|
@@prodno_to_ean13[prodno] ||= []
|
238
248
|
@@prodno_to_ean13[prodno] << ean13
|
@@ -240,13 +250,13 @@ COLUMNS_FEBRUARY_2019= {
|
|
240
250
|
end
|
241
251
|
def Oddb2xml.setEan13forNo8(no8, ean13)
|
242
252
|
if ean13.to_i == 7680006660045 || ean13.to_i == 7680006660014
|
243
|
-
|
253
|
+
Oddb2xml.log "setEan13forNo8 #{no8} ean13 #{ean13}"
|
244
254
|
end
|
245
255
|
if @@no8_to_ean13[no8].nil?
|
246
256
|
@@no8_to_ean13[no8] = ean13
|
247
257
|
@@ean13_to_no8[ean13] = no8
|
248
258
|
elsif !@@no8_to_ean13[no8].eql?(ean13)
|
249
|
-
|
259
|
+
Oddb2xml.log "@@no8_to_ean13[no8] #{@@no8_to_ean13[no8]} not overridden by #{ean13}"
|
250
260
|
end
|
251
261
|
end
|
252
262
|
def Oddb2xml.getEan13forProdno(prodno)
|
data/lib/oddb2xml/version.rb
CHANGED
data/oddb2xml.gemspec
CHANGED
@@ -16,6 +16,7 @@ Gem::Specification.new do |spec|
|
|
16
16
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
17
17
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
18
|
spec.require_paths = ["lib"]
|
19
|
+
spec.required_ruby_version = ">= 2.2.0"
|
19
20
|
|
20
21
|
# We fix the version of the spec to newer versions only in the third position
|
21
22
|
# hoping that these version fix only security/severe bugs
|
@@ -36,6 +37,8 @@ Gem::Specification.new do |spec|
|
|
36
37
|
spec.add_dependency 'xml-simple'
|
37
38
|
spec.add_dependency 'ox'
|
38
39
|
spec.add_dependency 'htmlentities'
|
40
|
+
spec.add_dependency 'webrick'
|
41
|
+
spec.add_dependency 'rexml'
|
39
42
|
|
40
43
|
spec.add_development_dependency "bundler"
|
41
44
|
spec.add_development_dependency "rake"
|
data/spec/artikelstamm_spec.rb
CHANGED
@@ -24,7 +24,7 @@ describe Oddb2xml::Builder do
|
|
24
24
|
unless @inhalt.index(expected_value)
|
25
25
|
puts expected_value
|
26
26
|
end
|
27
|
-
|
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
|
@@ -184,7 +177,7 @@ describe Oddb2xml::Builder do
|
|
184
177
|
@inhalt = IO.read(@artikelstamm_name)
|
185
178
|
expect(@inhalt.index('BIOMARIS Voll Meersalz 500 g')).not_to be nil
|
186
179
|
end
|
187
|
-
|
180
|
+
|
188
181
|
it 'Should not contain PHAR 8809544 Sildenavil with pexf and ppub 0.0' do
|
189
182
|
#1128809544Sildenafil Suspension 7mg/ml 100ml 0030850045801000000000000000000000002
|
190
183
|
@inhalt = IO.read(@artikelstamm_name)
|
@@ -211,12 +204,10 @@ describe Oddb2xml::Builder do
|
|
211
204
|
it 'shoud contain GENERIC_TYPE' do
|
212
205
|
expect(@inhalt.index('<GENERIC_TYPE')).not_to be nil
|
213
206
|
end
|
214
|
-
|
207
|
+
|
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>
|
@@ -237,7 +228,7 @@ describe Oddb2xml::Builder do
|
|
237
228
|
</ITEM)
|
238
229
|
expect(@inhalt.index(expected)).not_to be nil
|
239
230
|
end
|
240
|
-
|
231
|
+
|
241
232
|
it 'should contain PEVISONE Creme 30 g' do
|
242
233
|
expect(@inhalt.index('Pevisone Creme 15 g')).not_to be nil # 7680406620144
|
243
234
|
expect(@inhalt.index('Pevisone Creme 30 g')).not_to be nil # 7680406620229
|
@@ -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>
|
@@ -349,10 +335,9 @@ describe Oddb2xml::Builder do
|
|
349
335
|
<SL_ENTRY>true</SL_ENTRY>
|
350
336
|
<IKSCAT>D</IKSCAT>
|
351
337
|
<DEDUCTIBLE>10</DEDUCTIBLE>
|
352
|
-
</ITEM>),
|
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>
|
@@ -391,7 +375,7 @@ describe Oddb2xml::Builder do
|
|
391
375
|
<DOSAGE_FORMF>Compresse</DOSAGE_FORMF>
|
392
376
|
<IKSCAT>C</IKSCAT>
|
393
377
|
<PRODNO>3164402</PRODNO>
|
394
|
-
</ITEM>),
|
378
|
+
</ITEM>),
|
395
379
|
'product 3TC Filmtabl' => %(<PRODUCT>
|
396
380
|
<PRODNO>5366201</PRODNO>
|
397
381
|
<SALECD>A</SALECD>
|
@@ -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>
|
@@ -439,20 +421,37 @@ describe Oddb2xml::Builder do
|
|
439
421
|
<DEDUCTIBLE>20</DEDUCTIBLE>
|
440
422
|
<PRODNO>5329001</PRODNO>
|
441
423
|
</ITEM>),
|
442
|
-
'
|
443
|
-
|
444
|
-
<
|
445
|
-
<DSCR>
|
446
|
-
<DSCRF
|
447
|
-
<
|
448
|
-
|
424
|
+
'Varilrix product' => %(<PRODUCT>
|
425
|
+
<PRODNO>0058501</PRODNO>
|
426
|
+
<SALECD>A</SALECD>
|
427
|
+
<DSCR>Varilrix Trockensub c solv</DSCR>
|
428
|
+
<DSCRF>Varilrix subst sèche c solv</DSCRF>
|
429
|
+
<ATC>J07BK01</ATC>
|
430
|
+
<LIMNAMEBAG>0808</LIMNAMEBAG>
|
431
|
+
<SUBSTANCE>Vaccinum virus varicellae vivus attenuat. (Stamm OKA)</SUBSTANCE>
|
432
|
+
</PRODUCT>),
|
433
|
+
'Varilrix item' => %(<ITEM PHARMATYPE="P">
|
434
|
+
<GTIN>7680005850010</GTIN>
|
435
|
+
<SALECD>A</SALECD>
|
436
|
+
<DSCR>Varilrix Trockensub c solv Fertspr 0.500 ml</DSCR>
|
437
|
+
<DSCRF>Varilrix subst sèche c solv ser prê 0.500 ml</DSCRF>
|
438
|
+
<COMP>
|
439
|
+
<NAME>GlaxoSmithKline AG</NAME>
|
440
|
+
<GLN>7601001000674</GLN>
|
441
|
+
</COMP>
|
442
|
+
<PEXF>43.64</PEXF>
|
443
|
+
<PPUB>66.5</PPUB>
|
444
|
+
<SL_ENTRY>true</SL_ENTRY>
|
445
|
+
<IKSCAT>B</IKSCAT>
|
446
|
+
<DEDUCTIBLE>10</DEDUCTIBLE>
|
447
|
+
<PRODNO>0058501</PRODNO>
|
448
|
+
</ITEM),
|
449
449
|
'Chapter 70 product' => %(<PRODUCT>
|
450
450
|
<PRODNO>2069639</PRODNO>
|
451
|
-
<!--Chapter70 hack-->
|
451
|
+
<!--Chapter70 hack prodno 2069639 Ceres Urtinkturen gemäss L2 mit - im Kommentar-->
|
452
452
|
<SALECD>A</SALECD>
|
453
|
-
<DSCR>Ceres Urtinkturen gemäss L2</DSCR>
|
453
|
+
<DSCR>Ceres Urtinkturen gemäss L2 mit -- im Kommentar</DSCR>
|
454
454
|
<DSCRF/>
|
455
|
-
<LIMNAMEBAG>L1, L2</LIMNAMEBAG>
|
456
455
|
</PRODUCT>),
|
457
456
|
'Chapter 70 item' => %(<ITEM PHARMATYPE="P">
|
458
457
|
<GTIN>2500000588532</GTIN>
|
@@ -462,7 +461,7 @@ describe Oddb2xml::Builder do
|
|
462
461
|
<DSCRF>--missing--</DSCRF>
|
463
462
|
<PEXF>23.44</PEXF>
|
464
463
|
<PPUB>31.30</PPUB>
|
465
|
-
<!--Chapter70 hack-->
|
464
|
+
<!--Chapter70 hack 2500000588532 EINF ARZNEI Ceres Urtinktur spez 20ml-->
|
466
465
|
<SL_ENTRY>true</SL_ENTRY>
|
467
466
|
<PRODNO>2069639</PRODNO>
|
468
467
|
</ITEM>),
|
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>
|
@@ -59,7 +58,7 @@ ARTICLE_NAROPIN = %(<REF_DATA>1</REF_DATA>
|
|
59
58
|
<BCSTAT>A</BCSTAT>
|
60
59
|
</ARTBAR>
|
61
60
|
</ART>)
|
62
|
-
|
61
|
+
|
63
62
|
ARTICLE_COMMON_ELEMENTS = [
|
64
63
|
['ARTICLE/ART/REF_DATA', '1'],
|
65
64
|
['ARTICLE/ART/SMCAT', 'A'],
|
@@ -256,17 +255,7 @@ def check_result(inhalt, nbr_record)
|
|
256
255
|
expect(inhalt.index('<ERROR_CODE/>')).to be > 0
|
257
256
|
m = /<NBR_RECORD>(\d+)<\/NBR_RECORD>/.match(inhalt)
|
258
257
|
expect(m).not_to be nil
|
259
|
-
expect(m[1].to_i).to eq nbr_record
|
260
|
-
end
|
261
|
-
|
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
|
258
|
+
expect(m[1].to_i).to eq nbr_record
|
270
259
|
end
|
271
260
|
|
272
261
|
['article', 'betrieb', 'code', 'interaction', 'limitation', 'medizinalperson', 'product', 'substance'].each do |cat|
|
@@ -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,16 +462,16 @@ def checkProductXml(nbr_record = -1)
|
|
473
462
|
end
|
474
463
|
|
475
464
|
describe Oddb2xml::Builder do
|
476
|
-
NrExtendedArticles =
|
477
|
-
NrSubstances =
|
478
|
-
NrLimitations =
|
479
|
-
|
465
|
+
NrExtendedArticles = 80
|
466
|
+
NrSubstances = 28
|
467
|
+
NrLimitations = 15
|
468
|
+
|
480
469
|
NrInteractions = 2
|
481
470
|
NrCodes = 5
|
482
471
|
NrProdno = 31
|
483
|
-
NrPackages =
|
484
|
-
NrProducts =
|
485
|
-
RegExpDesitin = /
|
472
|
+
NrPackages = 46
|
473
|
+
NrProducts = 40
|
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
|
@@ -532,7 +526,7 @@ describe Oddb2xml::Builder do
|
|
532
526
|
|
533
527
|
check_attributes(oddb_article_xml, ARTICLE_ATTRIBUTE_TESTS)
|
534
528
|
check_elements(oddb_article_xml, ARTICLE_COMMON_ELEMENTS)
|
535
|
-
|
529
|
+
|
536
530
|
it 'should validate XSD article' do
|
537
531
|
@inhalt = File.read(oddb_article_xml)
|
538
532
|
# This fails on Ruby < 2.4 as NAROPIN INJ LÖS 0.2 % 10 is wrongly encoded
|
@@ -552,7 +546,7 @@ describe Oddb2xml::Builder do
|
|
552
546
|
end
|
553
547
|
|
554
548
|
it 'should have a correct insulin (gentechnik) for 7680532900196' do
|
555
|
-
expect(
|
549
|
+
expect(@inhalt.match(/.*<BC>7680532900196<\/BC>.*/).class).to be MatchData
|
556
550
|
expect(XPath.match( @rexml, "//ART//GEN_PRODUCTION").size).to be >= 1
|
557
551
|
expect(XPath.match( @rexml, "//ART//GEN_PRODUCTION").first.text).to eq 'X'
|
558
552
|
expect(XPath.match( @rexml, "//ART//INSULIN_CATEGORY").size).to eq 1
|
@@ -568,7 +562,7 @@ describe Oddb2xml::Builder do
|
|
568
562
|
ean_with_drug_index = 7680555610041
|
569
563
|
it "should have a correct drug information for #{ean_with_drug_index}" do
|
570
564
|
doc = REXML::Document.new IO.read(checkAndGetArticleXmlName)
|
571
|
-
expect(
|
565
|
+
expect(@inhalt.match(/.*<BC>#{ean_with_drug_index}<\/BC>.*/).class).to be MatchData
|
572
566
|
expect(XPath.match( @rexml, "//ART//DRUG_INDEX").size).to eq 1
|
573
567
|
expect(XPath.match( @rexml, "//ART//DRUG_INDEX").first.text).to eq 'd'
|
574
568
|
found = false
|
@@ -605,11 +599,11 @@ describe Oddb2xml::Builder do
|
|
605
599
|
<CPT/>)
|
606
600
|
expect(oddb_product_xml.index(text2)).to be >= 1
|
607
601
|
end
|
608
|
-
|
602
|
+
|
609
603
|
it 'should generate SALECD A for swissmedic packages' do
|
610
604
|
expect(IO.read(oddb_article_xml).index('<SALECD>A<!--Overriding status I nincd 10 for 7680658560014 as in refdata_pharma--></SALECD>')).to be >= 1
|
611
605
|
end
|
612
|
-
|
606
|
+
|
613
607
|
end
|
614
608
|
|
615
609
|
context 'when -o for fachinfo is given' do
|
@@ -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
|
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[
|
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
|