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 +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
|