oddb2xml 2.2.4 → 2.2.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/History.txt +5 -0
- data/README.md +0 -1
- data/lib/oddb2xml/builder.rb +15 -11
- data/lib/oddb2xml/cli.rb +0 -13
- data/lib/oddb2xml/downloader.rb +0 -7
- data/lib/oddb2xml/extractor.rb +3 -4
- data/lib/oddb2xml/version.rb +1 -1
- data/oddb2xml.xsd +3 -0
- data/spec/builder_spec.rb +39 -11
- data/spec/calc_spec.rb +152 -105
- data/spec/data/swissmedic_package.xlsx +0 -0
- data/spec/downloader_spec.rb +1 -29
- data/spec/extractor_spec.rb +53 -37
- data/spec/fixtures/vcr_cassettes/oddb2xml.json +875 -873
- data/spec/spec_helper.rb +2 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 29ab2dd3e034c77a8a14f037099a49e719458003
|
4
|
+
data.tar.gz: 90308c0322b82f6237cd3be9156b10d9940296de
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d7a88dca646f60b07c249e6093c5398dd90cdf1b04499300c944fbe1fb2bd314290086f5a242fe388152becbe70e99285f6592c5a864330278b15733487886fc
|
7
|
+
data.tar.gz: 90ade83f9f451ee82810b6b781cf1d8cc52f2bc5c395f61f1b459cc707fdf1b5b7fa5720e560ec7928906edc4141a6d317b09628e553291a1caf34b502b4ec9e
|
data/Gemfile.lock
CHANGED
data/History.txt
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
=== 2.2.5 / 09.09.2015
|
2
|
+
|
3
|
+
* Added field GEN_PRODUCTION, INSULIN_CATEGORY and DRUG_INDEX
|
4
|
+
* Removed downloads of old BM_update from ywesee, as we have a better info about the drugs now
|
5
|
+
|
1
6
|
=== 2.2.4 / 09.09.2015
|
2
7
|
|
3
8
|
* Fixed unit tests error introduced by the new column order of Packungen.xlsx
|
data/README.md
CHANGED
@@ -284,7 +284,6 @@ We use the following files:
|
|
284
284
|
* https://index.ws.e-mediat.net/Swissindex/NonPharma/ws_Pharma_V101.asmx
|
285
285
|
* http://download.swissmedicinfo.ch/ (AipsDownload)
|
286
286
|
* https://raw.githubusercontent.com/zdavatz/oddb2xml_files/master/LPPV.txt
|
287
|
-
* https://raw.githubusercontent.com/zdavatz/oddb2xml_files/master/BM_Update.txt
|
288
287
|
* https://raw.githubusercontent.com/epha/robot/master/data/manual/swissmedic/atc.csv
|
289
288
|
|
290
289
|
## Rules for matching GTIN (aka EAN13), product number and IKSNR
|
data/lib/oddb2xml/builder.rb
CHANGED
@@ -703,11 +703,12 @@ module Oddb2xml
|
|
703
703
|
ean13 = (ean12 + Oddb2xml.calc_checksum(ean12))
|
704
704
|
items[ean13] = info
|
705
705
|
xml.ARTICLE {
|
706
|
-
xml.GTIN
|
707
|
-
xml.NAME
|
708
|
-
xml.PKG_SIZE
|
709
|
-
xml.SELLING_UNITS
|
710
|
-
xml.MEASURE
|
706
|
+
xml.GTIN ean13
|
707
|
+
xml.NAME info.column_c
|
708
|
+
xml.PKG_SIZE info.pkg_size
|
709
|
+
xml.SELLING_UNITS info.selling_units
|
710
|
+
xml.MEASURE info.measure # Nur wenn Lösung wen Spalte M ml, Spritze
|
711
|
+
|
711
712
|
if info.galenic_form.is_a?(String)
|
712
713
|
xml.GALENIC_FORM info.galenic_form
|
713
714
|
xml.GALENIC_GROUP "Unknown"
|
@@ -764,7 +765,6 @@ module Oddb2xml
|
|
764
765
|
ean = obj[:ean]
|
765
766
|
next if pack_info and /Tierarzneimittel/.match(pack_info[:list_code])
|
766
767
|
next if obj[:desc_de] and /ad us vet/i.match(obj[:desc_de])
|
767
|
-
|
768
768
|
pharma_code = obj[:pharmacode]
|
769
769
|
ean = 0 if sprintf('%013d', ean).match(/^000000/)
|
770
770
|
if obj[:seq]
|
@@ -787,7 +787,10 @@ module Oddb2xml
|
|
787
787
|
#xml.CDS01
|
788
788
|
#xml.CDS02
|
789
789
|
if ppac
|
790
|
-
xml.SMCAT
|
790
|
+
xml.SMCAT ppac[:swissmedic_category] unless ppac[:swissmedic_category].empty?
|
791
|
+
xml.GEN_PRODUCTION ppac[:gen_production] unless ppac[:gen_production].empty?
|
792
|
+
xml.INSULIN_CATEGORY ppac[:insulin_category] unless ppac[:insulin_category].empty?
|
793
|
+
xml.DRUG_INDEX ppac[:drug_index] unless ppac[:drug_index].empty?
|
791
794
|
end
|
792
795
|
if no8 and !no8.to_s.empty?
|
793
796
|
if ean and ean.to_s[0..3] == "7680"
|
@@ -817,7 +820,7 @@ module Oddb2xml
|
|
817
820
|
end
|
818
821
|
#xml.TEMP
|
819
822
|
if ean
|
820
|
-
flag =
|
823
|
+
flag = (ppac && !ppac[:drug_index].empty?) ? true : false
|
821
824
|
# as same flag
|
822
825
|
xml.CDBG(flag ? 'Y' : 'N')
|
823
826
|
xml.BG(flag ? 'Y' : 'N')
|
@@ -1180,6 +1183,9 @@ module Oddb2xml
|
|
1180
1183
|
next if obj[:type] == :nonpharma
|
1181
1184
|
row = ''
|
1182
1185
|
pack_info = nil
|
1186
|
+
if (x = @packs.find{|k,v| v[:ean].to_i == ean})
|
1187
|
+
pack_info = x[1]
|
1188
|
+
end
|
1183
1189
|
# Oddb2tdat.parse
|
1184
1190
|
pac,no8 = nil,nil
|
1185
1191
|
if obj[:seq] and obj[:seq][:packages]
|
@@ -1191,7 +1197,6 @@ module Oddb2xml
|
|
1191
1197
|
# :swissmedic_numbers
|
1192
1198
|
if pac
|
1193
1199
|
no8 = pac[:swissmedic_number8].intern
|
1194
|
-
pack_info = @packs[no8.intern] if no8
|
1195
1200
|
end
|
1196
1201
|
if pac and pac[:prices] == nil and no8
|
1197
1202
|
ppac = ((ppac = pack_info and ppac[:is_tier]) ? ppac : nil)
|
@@ -1236,8 +1241,7 @@ module Oddb2xml
|
|
1236
1241
|
else
|
1237
1242
|
'0'
|
1238
1243
|
end
|
1239
|
-
row << "%#{DAT_LEN[:CBGG]}s" % if (
|
1240
|
-
(@flags[ean])) # ywesee BM_update
|
1244
|
+
row << "%#{DAT_LEN[:CBGG]}s" % if (pack_info && pack_info[:drug_index])
|
1241
1245
|
'3'
|
1242
1246
|
else
|
1243
1247
|
'0'
|
data/lib/oddb2xml/cli.rb
CHANGED
@@ -24,7 +24,6 @@ module Oddb2xml
|
|
24
24
|
# product
|
25
25
|
@items = {} # Items from Preparations.xml in BAG, using GTINs as key
|
26
26
|
@refdata_types = {} # Base index from refdata
|
27
|
-
@flags = {} # narcotics flag files repo
|
28
27
|
@lppvs = {} # lppv.txt from files repo
|
29
28
|
@infos = {} # [option] FI from SwissmedicInfo
|
30
29
|
@packs = {} # [option] Packungen from Swissmedic for dat
|
@@ -63,7 +62,6 @@ module Oddb2xml
|
|
63
62
|
end
|
64
63
|
threads << download(:zurrose)
|
65
64
|
threads << download(:package) # swissmedic
|
66
|
-
threads << download(:bm_update) # oddb2xml_files
|
67
65
|
threads << download(:lppv) # oddb2xml_files
|
68
66
|
threads << download(:bag) # bag.e-mediat
|
69
67
|
types.each do |type|
|
@@ -228,17 +226,6 @@ module Oddb2xml
|
|
228
226
|
@packs
|
229
227
|
end
|
230
228
|
end
|
231
|
-
when :bm_update
|
232
|
-
begin # instead of Thread.new do
|
233
|
-
downloader = BMUpdateDownloader.new
|
234
|
-
str = downloader.download
|
235
|
-
Oddb2xml.log("BMUpdateDownloader str #{str.size} bytes")
|
236
|
-
@mutex.synchronize do
|
237
|
-
@flags = BMUpdateExtractor.new(str).to_hash
|
238
|
-
Oddb2xml.log("BMUpdateExtractor added #{@flags.size} flags")
|
239
|
-
@flags
|
240
|
-
end
|
241
|
-
end
|
242
229
|
when :lppv
|
243
230
|
begin # instead of Thread.new do
|
244
231
|
downloader = LppvDownloader.new
|
data/lib/oddb2xml/downloader.rb
CHANGED
@@ -133,13 +133,6 @@ module Oddb2xml
|
|
133
133
|
download_as('epha_interactions.csv', 'r')
|
134
134
|
end
|
135
135
|
end
|
136
|
-
class BMUpdateDownloader < Downloader
|
137
|
-
include DownloadMethod
|
138
|
-
def download
|
139
|
-
@url ||= 'https://raw.githubusercontent.com/zdavatz/oddb2xml_files/master/BM_Update.txt'
|
140
|
-
download_as('oddb2xml_files_bm_update.txt', 'r')
|
141
|
-
end
|
142
|
-
end
|
143
136
|
class LppvDownloader < Downloader
|
144
137
|
include DownloadMethod
|
145
138
|
def download
|
data/lib/oddb2xml/extractor.rb
CHANGED
@@ -28,9 +28,6 @@ module Oddb2xml
|
|
28
28
|
@xml = xml
|
29
29
|
end
|
30
30
|
end
|
31
|
-
class BMUpdateExtractor < Extractor
|
32
|
-
include TxtExtractorMethods
|
33
|
-
end
|
34
31
|
class LppvExtractor < Extractor
|
35
32
|
include TxtExtractorMethods
|
36
33
|
end
|
@@ -96,7 +93,6 @@ module Oddb2xml
|
|
96
93
|
:ean => (ean) ? ean : '',
|
97
94
|
:swissmedic_category => (cat = pac.SwissmedicCategory) ? cat : '',
|
98
95
|
:swissmedic_number8 => (num = pac.SwissmedicNo8) ? num.rjust(8, '0') : '',
|
99
|
-
:narcosis_flag => (flg = pac.FlagNarcosis) ? flg : '',
|
100
96
|
:prices => { :exf_price => exf, :pub_price => pub },
|
101
97
|
}
|
102
98
|
# related all limitations
|
@@ -294,6 +290,9 @@ module Oddb2xml
|
|
294
290
|
:composition_swissmedic => row[comp] ? row[comp].value.to_s : '',
|
295
291
|
:sequence_name => row[seq_name] ? row[seq_name].value.to_s : '',
|
296
292
|
:is_tier => (row[list_code] == 'Tierarzneimittel' ? true : false),
|
293
|
+
:gen_production => row[COLUMNS_JULY_2015.keys.index(:gen_production)].value.to_s,
|
294
|
+
:insulin_category => row[COLUMNS_JULY_2015.keys.index(:insulin_category)].value.to_s,
|
295
|
+
:drug_index => row[COLUMNS_JULY_2015.keys.index(:drug_index)].value.to_s,
|
297
296
|
}
|
298
297
|
end
|
299
298
|
end
|
data/lib/oddb2xml/version.rb
CHANGED
data/oddb2xml.xsd
CHANGED
@@ -109,6 +109,9 @@
|
|
109
109
|
</xs:element>
|
110
110
|
<xs:element ref="ns1:PHAR"/>
|
111
111
|
<xs:element minOccurs="0" ref="ns1:SMCAT"/>
|
112
|
+
<xs:element minOccurs="0" name="GEN_PRODUCTION" type="xs:string" />
|
113
|
+
<xs:element minOccurs="0" name="INSULIN_CATEGORY" type="xs:string" />
|
114
|
+
<xs:element minOccurs="0" name="DRUG_INDEX" type="xs:string" />
|
112
115
|
<xs:element minOccurs="0" ref="ns1:SMNO"/>
|
113
116
|
<xs:element minOccurs="0" ref="ns1:PRODNO"/>
|
114
117
|
<xs:element minOccurs="0" ref="ns1:VAT"/>
|
data/spec/builder_spec.rb
CHANGED
@@ -187,7 +187,7 @@ def checkProductXml
|
|
187
187
|
desitin.elements['CompositionSwissmedic'].text.should eq 'levetiracetamum 250 mg, excipiens pro compressi obducti pro charta.'
|
188
188
|
|
189
189
|
desitin.elements['CPT/CPTCMP/LINE'].text.should eq '0'
|
190
|
-
desitin.elements['CPT/CPTCMP/SUBNO'].text.should eq '
|
190
|
+
desitin.elements['CPT/CPTCMP/SUBNO'].text.should eq '9'
|
191
191
|
desitin.elements['CPT/CPTCMP/QTY'].text.should eq '250'
|
192
192
|
desitin.elements['CPT/CPTCMP/QTYU'].text.should eq 'mg'
|
193
193
|
|
@@ -210,8 +210,8 @@ end
|
|
210
210
|
describe Oddb2xml::Builder do
|
211
211
|
NrExtendedArticles = 86
|
212
212
|
NrSubstances = 12
|
213
|
-
NrProdno =
|
214
|
-
NrPackages =
|
213
|
+
NrProdno = 21
|
214
|
+
NrPackages = 22
|
215
215
|
RegExpDesitin = /1125819012LEVETIRACETAM DESITIN Mini Filmtab 250 mg 30 Stk/
|
216
216
|
include ServerMockHelper
|
217
217
|
def common_run_init
|
@@ -229,23 +229,22 @@ describe Oddb2xml::Builder do
|
|
229
229
|
common_run_init
|
230
230
|
options = Oddb2xml::Options.new
|
231
231
|
@res = buildr_capture(:stdout){ Oddb2xml::Cli.new(options.opts).run }
|
232
|
+
# Oddb2xml::Cli.new(options.opts).run # to debug
|
233
|
+
@article_xml = File.expand_path(File.join(Oddb2xml::WorkDir, 'oddb_article.xml'))
|
234
|
+
@doc = Nokogiri::XML(File.open(@article_xml))
|
235
|
+
@rexml = REXML::Document.new File.read(@article_xml)
|
232
236
|
end
|
233
237
|
|
234
238
|
it 'should return produce a oddb_article.xml' do
|
235
|
-
@article_xml = File.expand_path(File.join(Oddb2xml::WorkDir, 'oddb_article.xml'))
|
236
239
|
File.exists?(@article_xml).should eq true
|
237
240
|
end
|
238
241
|
|
239
242
|
it 'oddb_article.xml should contain a SHA256' do
|
240
|
-
@
|
241
|
-
|
242
|
-
doc = REXML::Document.new File.new(@article_xml)
|
243
|
-
expect( XPath.match( doc, "//ART").first.attributes['DT']).to match /\d{4}-\d{2}-\d{2}/
|
244
|
-
expect( XPath.match( doc, "//ART").first.attributes['SHA256'].size).to eq 64
|
243
|
+
expect(XPath.match(@rexml, "//ART" ).first.attributes['SHA256'].size).to eq 64
|
244
|
+
expect(XPath.match(@rexml, "//ART" ).size).to eq XPath.match(@rexml, "//ART" ).size
|
245
245
|
end
|
246
246
|
|
247
247
|
it 'should be possible to verify the oddb_article.xml' do
|
248
|
-
@article_xml = File.expand_path(File.join(Oddb2xml::WorkDir, 'oddb_article.xml'))
|
249
248
|
result = Oddb2xml.verify_sha256(@article_xml)
|
250
249
|
expect(result)
|
251
250
|
end
|
@@ -253,6 +252,30 @@ describe Oddb2xml::Builder do
|
|
253
252
|
it 'should be possible to verify all xml files against our XSD' do
|
254
253
|
check_validation_via_xsd
|
255
254
|
end
|
255
|
+
|
256
|
+
it 'should have a correct insulin (gentechnik) for 7680532900196' do
|
257
|
+
expect(XPath.match( @rexml, "//ART/[BC='7680532900196']").size).to eq 1
|
258
|
+
expect(XPath.match( @rexml, "//ART//GEN_PRODUCTION").size).to eq 1
|
259
|
+
expect(XPath.match( @rexml, "//ART//GEN_PRODUCTION").first.text).to eq 'X'
|
260
|
+
expect(XPath.match( @rexml, "//ART//INSULIN_CATEGORY").size).to eq 1
|
261
|
+
expect(XPath.match( @rexml, "//ART//INSULIN_CATEGORY").first.text).to eq 'Insulinanalog: schnell wirkend'
|
262
|
+
end
|
263
|
+
|
264
|
+
it 'should have a correct drug information for 7680555610041' do
|
265
|
+
expect(XPath.match( @rexml, "//ART/[BC='7680555610041']").size).to eq 1
|
266
|
+
expect(XPath.match( @rexml, "//ART//DRUG_INDEX").size).to eq 1
|
267
|
+
expect(XPath.match( @rexml, "//ART//DRUG_INDEX").first.text).to eq 'd'
|
268
|
+
found = false
|
269
|
+
XPath.match( @rexml, "//ART//CDBG").each{
|
270
|
+
|flag|
|
271
|
+
if flag.text.eql?('Y')
|
272
|
+
found = true
|
273
|
+
break
|
274
|
+
end
|
275
|
+
}
|
276
|
+
expect(found)
|
277
|
+
end
|
278
|
+
|
256
279
|
end
|
257
280
|
|
258
281
|
context 'when -o for fachinfo is given' do
|
@@ -296,6 +319,7 @@ if RUN_ALL
|
|
296
319
|
options = Oddb2xml::Options.new
|
297
320
|
options.parser.parse!('-f dat --log'.split(' '))
|
298
321
|
@res = buildr_capture(:stdout){ Oddb2xml::Cli.new(options.opts).run }
|
322
|
+
# Oddb2xml::Cli.new(options.opts).run # to debug
|
299
323
|
end
|
300
324
|
|
301
325
|
it 'should contain the correct values fo CMUT from zurrose_transfer.dat' do
|
@@ -307,6 +331,9 @@ if RUN_ALL
|
|
307
331
|
oddb_dat.should match(/^..3/), "should have a record with '3' in CMUT field"
|
308
332
|
oddb_dat.should match(RegExpDesitin), "should have Desitin"
|
309
333
|
IO.readlines(dat_filename).each{ |line| check_article_IGM_format(line) }
|
334
|
+
m = /.+DIAPHIN Trocke.*7680555610041.+/.match(oddb_dat)
|
335
|
+
expect(m[0].size).to eq 97 # size of IGM 1 record
|
336
|
+
expect(m[0][74]).to eq '3'
|
310
337
|
end
|
311
338
|
end
|
312
339
|
|
@@ -340,7 +367,8 @@ if RUN_ALL
|
|
340
367
|
common_run_init
|
341
368
|
options = Oddb2xml::Options.new
|
342
369
|
options.parser.parse!('--append -I 80 -e'.split(' '))
|
343
|
-
|
370
|
+
Oddb2xml::Cli.new(options.opts).run
|
371
|
+
# @res = buildr_capture(:stdout){ Oddb2xml::Cli.new(options.opts).run }
|
344
372
|
end
|
345
373
|
|
346
374
|
it "oddb_article with stuf from ZurRose", :skip => "ZurRose contains ERYTHROCIN i.v. Troc*esteekensub 1000 mg Amp [!]" do
|
data/spec/calc_spec.rb
CHANGED
@@ -8,7 +8,6 @@ require "#{Dir.pwd}/lib/oddb2xml/calc"
|
|
8
8
|
include Oddb2xml
|
9
9
|
|
10
10
|
describe Oddb2xml::Calc do
|
11
|
-
RunAllTests = true
|
12
11
|
before(:all) do VCR.eject_cassette; VCR.insert_cassette('oddb2xml') end
|
13
12
|
after(:all) do VCR.eject_cassette end
|
14
13
|
|
@@ -102,7 +101,7 @@ describe Oddb2xml::Calc do
|
|
102
101
|
# :count => 10, :multi => 1, :dose => ''
|
103
102
|
}
|
104
103
|
)
|
105
|
-
|
104
|
+
Tst_nutriflex = TestExample.new('Nutriflex Lipid plus ohne Elektrolyte, Infusionsemulsion 1250ml',
|
106
105
|
56089, 1, 1, 'Nutriflex Lipid plus, Infusionsemulsion, 1250ml',
|
107
106
|
'5 x 1250', 'ml',
|
108
107
|
'glucosum anhydricum, isoleucinum, leucinum, lysinum anhydricum, methioninum, phenylalaninum, threoninum, tryptophanum, valinum, argininum, histidinum, alaninum, acidum asparticum, acidum glutamicum, glycinum, prolinum, serinum, aminoacida, carbohydrata, materia crassa, sojae oleum, triglycerida saturata media',
|
@@ -128,7 +127,7 @@ Corresp. 5300 kJ.",
|
|
128
127
|
}
|
129
128
|
)
|
130
129
|
|
131
|
-
|
130
|
+
Tst_naropin = TestExample.new('Das ist eine Injektionslösung von einer Packung mit 5 x 100 ml',
|
132
131
|
54015, 01, 100, "Naropin 0,2 %, Infusionslösung / Injektionslösung",
|
133
132
|
'1 x 5 x 100', 'ml',
|
134
133
|
'ropivacainum',
|
@@ -139,7 +138,7 @@ Corresp. 5300 kJ.",
|
|
139
138
|
}
|
140
139
|
)
|
141
140
|
|
142
|
-
|
141
|
+
|
143
142
|
context 'should parse Solvens:' do
|
144
143
|
text = 'Solvens: conserv.: alcohol benzylicus 18 mg, aqua ad iniectabilia q.s. ad solutionem pro 2 ml.'
|
145
144
|
info = Calc.new('Solu-Cortef 100 mg, Injektions-/Infusionspräparat', nil, nil,
|
@@ -197,6 +196,7 @@ if RunAllTests
|
|
197
196
|
specify { expect(result.selling_units).to eq 10 }
|
198
197
|
specify { expect(result.measure).to eq 'ml' }
|
199
198
|
end
|
199
|
+
|
200
200
|
context 'should return correct value for Diamox, comprimés' do
|
201
201
|
pkg_size_L = '1 x 25'
|
202
202
|
einheit_M = 'Tablette(n)'
|
@@ -254,7 +254,7 @@ if RunAllTests
|
|
254
254
|
end
|
255
255
|
[tst_fluorglukose,
|
256
256
|
tst_kamillin,
|
257
|
-
|
257
|
+
Tst_naropin,
|
258
258
|
tst_diamox,
|
259
259
|
tst_mutagrip,
|
260
260
|
].each {
|
@@ -272,8 +272,8 @@ if RunAllTests
|
|
272
272
|
}
|
273
273
|
|
274
274
|
context 'find correct result for Injektionslösung' do
|
275
|
-
info = Calc.new(
|
276
|
-
specify { expect(
|
275
|
+
info = Calc.new(Tst_naropin.name_C, Tst_naropin.package_size_L, Tst_naropin.einheit_M, Tst_naropin.active_substance_0, Tst_naropin.composition_P)
|
276
|
+
specify { expect(Tst_naropin.url).to eq 'http://ch.oddb.org/de/gcc/drug/reg/54015/seq/01/pack/100' }
|
277
277
|
specify { expect(info.galenic_form.description).to eq 'Infusionslösung/Injektionslösung' }
|
278
278
|
specify { expect(info.galenic_group.description).to eq 'Injektion/Infusion' }
|
279
279
|
specify { expect(info.pkg_size).to eq '1 x 5 x 100' }
|
@@ -290,103 +290,6 @@ if RunAllTests
|
|
290
290
|
specify { expect(info.measure).to eq 'Kapsel(n)' }
|
291
291
|
end
|
292
292
|
|
293
|
-
run_time_options = '--calc --skip-download'
|
294
|
-
context "when passing #{run_time_options}" do
|
295
|
-
let(:cli) do
|
296
|
-
options = Oddb2xml::Options.new
|
297
|
-
options.parser.parse!(run_time_options.split(' '))
|
298
|
-
Oddb2xml::Cli.new(options.opts)
|
299
|
-
end
|
300
|
-
it 'should create a correct xml and a csv file' do
|
301
|
-
src = File.expand_path(File.join(File.dirname(__FILE__), 'data', 'swissmedic_package-galenic.xlsx'))
|
302
|
-
dest = File.join(Oddb2xml::WorkDir, 'swissmedic_package.xlsx')
|
303
|
-
FileUtils.makedirs(Oddb2xml::WorkDir)
|
304
|
-
cli.run
|
305
|
-
expected = [
|
306
|
-
'oddb_calc.xml',
|
307
|
-
'oddb_calc.csv',
|
308
|
-
].each { |file|
|
309
|
-
full = File.join(Oddb2xml::WorkDir, file)
|
310
|
-
expect(File.exists?(full)).to eq true
|
311
|
-
}
|
312
|
-
xml_file_name = File.join(Oddb2xml::WorkDir, 'oddb_calc.xml')
|
313
|
-
xml = File.read(xml_file_name)
|
314
|
-
oddb_calc_xsd = File.expand_path(File.join(File.dirname(__FILE__), '..', 'oddb_calc.xsd'))
|
315
|
-
File.exists?(oddb_calc_xsd).should eq true
|
316
|
-
xsd = Nokogiri::XML::Schema(File.read(oddb_calc_xsd))
|
317
|
-
doc = Nokogiri::XML(File.read(xml_file_name))
|
318
|
-
xsd.validate(doc).each do |error| expect(error).to be_nil end
|
319
|
-
doc = REXML::Document.new xml
|
320
|
-
gtin = '7680540151009'
|
321
|
-
ean12 = '7680' + sprintf('%05d',tst_naropin.iksnr_A) + sprintf('%03d',tst_naropin.pack_K)
|
322
|
-
ean13 = (ean12 + Oddb2xml.calc_checksum(ean12))
|
323
|
-
ean13.should eq gtin
|
324
|
-
|
325
|
-
tst_naropin.values_to_compare.each{
|
326
|
-
| key, value |
|
327
|
-
result = XPath.match( doc, "//ARTICLE[GTIN='#{gtin}']/#{key.to_s.upcase}").first.text
|
328
|
-
puts "Testing key #{key.inspect} #{value.inspect} against #{result} seems to fail" unless result == value.to_s
|
329
|
-
result.should eq value.to_s
|
330
|
-
}
|
331
|
-
|
332
|
-
gtin = '7680560890018'
|
333
|
-
ean12 = '7680' + sprintf('%05d',tst_nutriflex.iksnr_A) + sprintf('%03d',tst_nutriflex.pack_K)
|
334
|
-
ean13 = (ean12 + Oddb2xml.calc_checksum(ean12))
|
335
|
-
ean13.should eq gtin
|
336
|
-
tst_nutriflex.values_to_compare.each{
|
337
|
-
| key, value |
|
338
|
-
result = XPath.match( doc, "//ARTICLE[GTIN='#{gtin}']/#{key.to_s.upcase}").first.text
|
339
|
-
puts "Testing key #{key.inspect} #{value.inspect} against #{result} seems to fail" unless result == value.to_s
|
340
|
-
result.should eq value.to_s
|
341
|
-
}
|
342
|
-
matri_name = 'Matricariae Extractum Isopropanolicum Liquidum'
|
343
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680002770014']/NAME").first.text.should eq "Coeur-Vaisseaux Sérocytol, suppositoire"
|
344
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680545250363']").first.should eq nil
|
345
|
-
# XPath.match( doc, "//ARTICLE[GTIN='7680545250363']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/SUBSTANCE_NAME")
|
346
|
-
# find{|x| x.text.eql?("Alprostadilum")}.text.should eq 'Alprostadilum'
|
347
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680458820202']/NAME").last.text.should eq 'Magnesiumchlorid 0,5 molar B. Braun, Zusatzampulle für Infusionslösungen'
|
348
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680458820202']/GALENIC_FORM").last.text.should match /Ampulle/i
|
349
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680555940018']/COMPOSITIONS/COMPOSITION/LABEL").first.text.should eq 'I'
|
350
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680555940018']/COMPOSITIONS/COMPOSITION/LABEL_DESCRIPTION").first.text.should eq 'Glucoselösung'
|
351
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680555940018']/COMPOSITIONS/COMPOSITION/LABEL").each{ |x| puts x.text }
|
352
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680555940018']/COMPOSITIONS/COMPOSITION/LABEL").last.text.should eq 'III'
|
353
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680555940018']/COMPOSITIONS/COMPOSITION/CORRESP").last.text.should eq '4240 kJ pro 1 l'
|
354
|
-
|
355
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680434541015']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/SUBSTANCE_NAME").
|
356
|
-
find{|x| x.text.eql?(matri_name)}.text.should eq matri_name
|
357
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680434541015']/NAME").last.text.should eq 'Kamillin Medipharm, Bad'
|
358
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680434541015']/GALENIC_FORM").last.text.should eq 'Bad'
|
359
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680434541015']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/QTY").first.text.should eq '98.9'
|
360
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680300150105']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/SUBSTANCE_NAME").first.text.should eq 'Lidocaini Hydrochloridum'
|
361
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680300150105']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/UNIT").first.text.should eq 'mg/ml'
|
362
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680434541015']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/CHEMICAL_SUBSTANCE/SUBSTANCE_NAME").first.text.should eq 'Levomenolum'
|
363
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680434541015']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/CHEMICAL_SUBSTANCE/MORE_INFO").first.text.should eq 'ratio: 1:2-2.8'
|
364
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680434541015']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/CHEMICAL_SUBSTANCE/DOSE_TEXT").first.text.should eq '10-50 mg'
|
365
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680434541015']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/CHEMICAL_SUBSTANCE/QTY").first.should eq nil
|
366
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680434541015']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/CHEMICAL_SUBSTANCE/UNIT").first.should eq nil
|
367
|
-
|
368
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680446250592']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/SALTS/SALT/SUBSTANCE_NAME").first.text.should eq 'Ceftriaxonum Natricum'
|
369
|
-
|
370
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680611860045']/NAME").first.text.should eq 'Nutriflex Omega special, Infusionsemulsion 2500 ml'
|
371
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680611860045']/GALENIC_FORM").first.text.should eq 'Infusionsemulsion'
|
372
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680611860045']/SELLING_UNITS").first.text.should eq '5'
|
373
|
-
|
374
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680165980114']/COMPOSITIONS/COMPOSITION/EXCIPIENS/SUBSTANCE_NAME").first.text.should eq 'Excipiens ad solutionem'
|
375
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680165980114']/COMPOSITIONS/COMPOSITION/EXCIPIENS/QTY").first.text.should eq '1'
|
376
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680165980114']/COMPOSITIONS/COMPOSITION/EXCIPIENS/UNIT").first.text.should eq 'ml'
|
377
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680165980114']/NAME").first.text.should eq 'W-Tropfen'
|
378
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680165980114']/GALENIC_FORM").last.text.should eq 'Tropfen'
|
379
|
-
|
380
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680589430011']/NAME").first.text.should eq 'Apligraf'
|
381
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680589430011']/GALENIC_FORM").last.text.should eq 'Unbekannt' # TODO?? 'Scheibe(n)/disque(s)'
|
382
|
-
|
383
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680556740075']/NAME").first.text.should eq "Caverject DC 20, Injektionspräparat"
|
384
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680556740075']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE").size.should eq 6
|
385
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680556740075']/COMPOSITIONS/COMPOSITION/EXCIPIENS/SUBSTANCE_NAME").first.text.should eq "pro Vitro"
|
386
|
-
|
387
|
-
end
|
388
|
-
end
|
389
|
-
|
390
293
|
context 'find correct result for Kamillin' do
|
391
294
|
info = Calc.new(tst_kamillin.name_C, tst_kamillin.package_size_L, tst_kamillin.einheit_M, tst_kamillin.active_substance_0, tst_kamillin.composition_P)
|
392
295
|
specify { expect(info.selling_units).to eq 25 }
|
@@ -413,7 +316,7 @@ if RunAllTests
|
|
413
316
|
end
|
414
317
|
|
415
318
|
context 'find correct result for Nutriflex' do
|
416
|
-
info = Calc.new(
|
319
|
+
info = Calc.new(Tst_nutriflex.name_C, Tst_nutriflex.package_size_L, Tst_nutriflex.einheit_M, Tst_nutriflex.active_substance_0, Tst_nutriflex.composition_P)
|
417
320
|
specify { expect(info.selling_units).to eq 5 }
|
418
321
|
specify { expect(info.galenic_form.description).to eq "Infusionsemulsion" }
|
419
322
|
end
|
@@ -706,4 +609,148 @@ Die HILFSSTOFFE sind Aqua ad iniectabilia und Natrii chloridum.
|
|
706
609
|
end
|
707
610
|
end
|
708
611
|
end
|
612
|
+
|
613
|
+
describe Oddb2xml::Calc do
|
614
|
+
|
615
|
+
before(:all) do
|
616
|
+
@savedDir = Dir.pwd
|
617
|
+
cleanup_directories_before_run
|
618
|
+
FileUtils.makedirs(Oddb2xml::WorkDir)
|
619
|
+
Dir.chdir Oddb2xml::WorkDir
|
620
|
+
VCR.eject_cassette; VCR.insert_cassette('oddb2xml')
|
621
|
+
@run_time_options = '--calc --skip-download'
|
622
|
+
@options = Oddb2xml::Options.new
|
623
|
+
@options.parser.parse!(@run_time_options.split(' '))
|
624
|
+
@oddb_calc_xml = File.join(Oddb2xml::WorkDir, 'oddb_calc.xml')
|
625
|
+
@res = buildr_capture(:stdout){ Oddb2xml::Cli.new(@options.opts).run }
|
626
|
+
expect(File.exists?(@oddb_calc_xml)).to eq true
|
627
|
+
@doc = REXML::Document.new File.read(@oddb_calc_xml)
|
628
|
+
end
|
629
|
+
|
630
|
+
after(:all) do
|
631
|
+
Dir.chdir @savedDir if @savedDir and File.directory?(@savedDir)
|
632
|
+
end
|
633
|
+
|
634
|
+
context "when passing #{@run_time_options}" do
|
635
|
+
it 'should contain the new fields as per July 2015' do
|
636
|
+
# xml.GEN_PRODUCTION gen_production
|
637
|
+
# xml.INSULIN_CATEGORY insulin_category
|
638
|
+
# xml.DRUG_INDEX drug_index
|
639
|
+
expect(File.exists?(@oddb_calc_xml)).to eq true
|
640
|
+
end
|
641
|
+
|
642
|
+
it 'should create a correct xml and a csv file' do
|
643
|
+
src = File.expand_path(File.join(File.dirname(__FILE__), 'data', 'swissmedic_package-galenic.xlsx'))
|
644
|
+
dest = File.join(Oddb2xml::WorkDir, 'swissmedic_package.xlsx')
|
645
|
+
expected = [
|
646
|
+
'oddb_calc.xml',
|
647
|
+
'oddb_calc.csv',
|
648
|
+
].each { |file|
|
649
|
+
full = File.join(Oddb2xml::WorkDir, file)
|
650
|
+
expect(File.exists?(full)).to eq true
|
651
|
+
}
|
652
|
+
oddb_calc_xsd = File.expand_path(File.join(File.dirname(__FILE__), '..', 'oddb_calc.xsd'))
|
653
|
+
File.exists?(oddb_calc_xsd).should eq true
|
654
|
+
xsd = Nokogiri::XML::Schema(File.read(oddb_calc_xsd))
|
655
|
+
doc = Nokogiri::XML(File.read(@oddb_calc_xml))
|
656
|
+
xsd.validate(doc).each do |error| expect(error).to be_nil end
|
657
|
+
end
|
658
|
+
|
659
|
+
it 'should create correct entries for narotin' do
|
660
|
+
gtin = '7680540151009'
|
661
|
+
ean12 = '7680' + sprintf('%05d',Tst_naropin.iksnr_A) + sprintf('%03d',Tst_naropin.pack_K)
|
662
|
+
ean13 = (ean12 + Oddb2xml.calc_checksum(ean12))
|
663
|
+
ean13.should eq gtin
|
664
|
+
|
665
|
+
Tst_naropin.values_to_compare.each{
|
666
|
+
| key, value |
|
667
|
+
result = XPath.match( @doc, "//ARTICLE[GTIN='#{gtin}']/#{key.to_s.upcase}").first.text
|
668
|
+
puts "Testing key #{key.inspect} #{value.inspect} against #{result} seems to fail" unless result == value.to_s
|
669
|
+
result.should eq value.to_s
|
670
|
+
}
|
671
|
+
end
|
672
|
+
|
673
|
+
it 'should create correct entries for narotin' do
|
674
|
+
gtin = '7680560890018'
|
675
|
+
ean12 = '7680' + sprintf('%05d',Tst_nutriflex.iksnr_A) + sprintf('%03d',Tst_nutriflex.pack_K)
|
676
|
+
ean13 = (ean12 + Oddb2xml.calc_checksum(ean12))
|
677
|
+
ean13.should eq gtin
|
678
|
+
Tst_nutriflex.values_to_compare.each{
|
679
|
+
| key, value |
|
680
|
+
result = XPath.match( @doc, "//ARTICLE[GTIN='#{gtin}']/#{key.to_s.upcase}").first.text
|
681
|
+
puts "Testing key #{key.inspect} #{value.inspect} against #{result} seems to fail" unless result == value.to_s
|
682
|
+
result.should eq value.to_s
|
683
|
+
}
|
684
|
+
end
|
685
|
+
|
686
|
+
it 'should create correct entries for 7680555940018' do
|
687
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680555940018']/COMPOSITIONS/COMPOSITION/LABEL").first.text.should eq 'I'
|
688
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680555940018']/COMPOSITIONS/COMPOSITION/LABEL_DESCRIPTION").first.text.should eq 'Glucoselösung'
|
689
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680555940018']/COMPOSITIONS/COMPOSITION/LABEL").each{ |x| puts x.text }
|
690
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680555940018']/COMPOSITIONS/COMPOSITION/LABEL").last.text.should eq 'III'
|
691
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680555940018']/COMPOSITIONS/COMPOSITION/CORRESP").last.text.should eq '4240 kJ pro 1 l'
|
692
|
+
end
|
693
|
+
|
694
|
+
it 'should create correct entries for Lidocaini' do
|
695
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680300150105']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/SUBSTANCE_NAME").first.text.should eq 'Lidocaini Hydrochloridum'
|
696
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680300150105']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/UNIT").first.text.should eq 'mg/ml'
|
697
|
+
end
|
698
|
+
|
699
|
+
it 'should create correct entries for Levomenolum' do
|
700
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680434541015']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/CHEMICAL_SUBSTANCE/SUBSTANCE_NAME").first.text.should eq 'Levomenolum'
|
701
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680434541015']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/CHEMICAL_SUBSTANCE/MORE_INFO").first.text.should eq 'ratio: 1:2-2.8'
|
702
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680434541015']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/CHEMICAL_SUBSTANCE/DOSE_TEXT").first.text.should eq '10-50 mg'
|
703
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680434541015']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/CHEMICAL_SUBSTANCE/QTY").first.should eq nil
|
704
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680434541015']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/CHEMICAL_SUBSTANCE/UNIT").first.should eq nil
|
705
|
+
matri_name = 'Matricariae Extractum Isopropanolicum Liquidum'
|
706
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680434541015']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/SUBSTANCE_NAME").
|
707
|
+
find{|x| x.text.eql?(matri_name)}.text.should eq matri_name
|
708
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680434541015']/NAME").last.text.should eq 'Kamillin Medipharm, Bad'
|
709
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680434541015']/GALENIC_FORM").last.text.should eq 'Bad'
|
710
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680434541015']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/QTY").first.text.should eq '98.9'
|
711
|
+
end
|
712
|
+
|
713
|
+
it 'should create correct entries for Magnesiumchlorid' do
|
714
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680458820202']/NAME").last.text.should eq 'Magnesiumchlorid 0,5 molar B. Braun, Zusatzampulle für Infusionslösungen'
|
715
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680458820202']/GALENIC_FORM").last.text.should match /Ampulle/i
|
716
|
+
end
|
717
|
+
|
718
|
+
it 'should create correct entries for W-Tropfen' do
|
719
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680165980114']/COMPOSITIONS/COMPOSITION/EXCIPIENS/SUBSTANCE_NAME").first.text.should eq 'Excipiens ad solutionem'
|
720
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680165980114']/COMPOSITIONS/COMPOSITION/EXCIPIENS/QTY").first.text.should eq '1'
|
721
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680165980114']/COMPOSITIONS/COMPOSITION/EXCIPIENS/UNIT").first.text.should eq 'ml'
|
722
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680165980114']/NAME").first.text.should eq 'W-Tropfen'
|
723
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680165980114']/GALENIC_FORM").last.text.should eq 'Tropfen'
|
724
|
+
end
|
725
|
+
|
726
|
+
it 'should create correct entries for Coeur-Vaisseaux Sérocytol' do
|
727
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680002770014']/NAME").first.text.should eq "Coeur-Vaisseaux Sérocytol, suppositoire"
|
728
|
+
end
|
729
|
+
|
730
|
+
it 'should not have Alprostadilum' do
|
731
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680545250363']").first.should eq nil
|
732
|
+
end
|
733
|
+
|
734
|
+
it 'should create correct entries for Ceftriaxonum' do
|
735
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680446250592']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/SALTS/SALT/SUBSTANCE_NAME").first.text.should eq 'Ceftriaxonum Natricum'
|
736
|
+
|
737
|
+
end
|
738
|
+
|
739
|
+
it 'should create correct entries for Nutriflex' do
|
740
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680611860045']/NAME").first.text.should eq 'Nutriflex Omega special, Infusionsemulsion 2500 ml'
|
741
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680611860045']/GALENIC_FORM").first.text.should eq 'Infusionsemulsion'
|
742
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680611860045']/SELLING_UNITS").first.text.should eq '5'
|
743
|
+
end
|
744
|
+
|
745
|
+
it 'should create correct entries for Apligraf' do
|
746
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680589430011']/NAME").first.text.should eq 'Apligraf'
|
747
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680589430011']/GALENIC_FORM").last.text.should eq 'Unbekannt' # TODO?? 'Scheibe(n)/disque(s)'
|
748
|
+
end
|
749
|
+
|
750
|
+
it 'should create correct entries for Caverject' do
|
751
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680556740075']/NAME").first.text.should eq "Caverject DC 20, Injektionspräparat"
|
752
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680556740075']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE").size.should eq 6
|
753
|
+
XPath.match( @doc, "//ARTICLE[GTIN='7680556740075']/COMPOSITIONS/COMPOSITION/EXCIPIENS/SUBSTANCE_NAME").first.text.should eq "pro Vitro"
|
754
|
+
end
|
755
|
+
end
|
709
756
|
end
|
Binary file
|