oddb2xml 2.0.5 → 2.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +13 -5
- data/Gemfile.lock +26 -19
- data/History.txt +5 -0
- data/dokumentation_calc.textile +50 -0
- data/lib/oddb2xml/builder.rb +9 -4
- data/lib/oddb2xml/calc.rb +1 -1
- data/lib/oddb2xml/cli.rb +1 -0
- data/lib/oddb2xml/compositions_syntax.rb +368 -0
- data/lib/oddb2xml/extractor.rb +13 -4
- data/lib/oddb2xml/parslet_compositions.rb +598 -0
- data/lib/oddb2xml/version.rb +1 -1
- data/oddb2xml.gemspec +1 -0
- data/spec/builder_spec.rb +1 -1
- data/spec/calc_spec.rb +102 -121
- data/spec/composition_syntax_spec.rb +502 -0
- data/spec/data/compositions.txt +8937 -0
- data/spec/data/swissmedic_package-galenic.xlsx +0 -0
- data/spec/data/zurrose_transfer.dat +5 -0
- data/spec/extractor_spec.rb +40 -0
- data/spec/parslet_spec.rb +1268 -0
- data/spec/spec_helper.rb +8 -0
- metadata +56 -34
- data/lib/oddb2xml/parse_compositions.rb +0 -106
data/spec/calc_spec.rb
CHANGED
@@ -14,6 +14,7 @@ include Oddb2xml
|
|
14
14
|
describe Oddb2xml::Calc do
|
15
15
|
RunAllTests = true
|
16
16
|
|
17
|
+
|
17
18
|
after(:each) do
|
18
19
|
FileUtils.rm(Dir.glob(File.join(Oddb2xml::WorkDir, '*.*')))
|
19
20
|
FileUtils.rm(Dir.glob(File.join(Oddb2xml::WorkDir, 'downloads', '*')))
|
@@ -292,6 +293,7 @@ if RunAllTests
|
|
292
293
|
m = />.* /.match(xml)
|
293
294
|
m.should eq nil
|
294
295
|
doc = REXML::Document.new xml
|
296
|
+
# puts xml; binding.pry
|
295
297
|
gtin = '7680540151009'
|
296
298
|
ean12 = '7680' + sprintf('%05d',tst_naropin.iksnr_A) + sprintf('%03d',tst_naropin.pack_K)
|
297
299
|
ean13 = (ean12 + Oddb2xml.calc_checksum(ean12))
|
@@ -314,20 +316,28 @@ if RunAllTests
|
|
314
316
|
puts "Testing key #{key.inspect} #{value.inspect} against #{result} seems to fail" unless result == value.to_s
|
315
317
|
result.should eq value.to_s
|
316
318
|
}
|
317
|
-
|
319
|
+
matri_name = 'Matricariae Extractum Isopropanolicum Liquidum'
|
320
|
+
XPath.match( doc, "//ARTICLE[GTIN='7680545250363']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/SUBSTANCE_NAME").
|
321
|
+
find{|x| x.text.eql?("Alprostadilum")}.text.should eq 'Alprostadilum'
|
318
322
|
XPath.match( doc, "//ARTICLE[GTIN='7680458820202']/NAME").last.text.should eq 'Magnesiumchlorid 0,5 molar B. Braun, Zusatzampulle für Infusionslösungen'
|
319
323
|
XPath.match( doc, "//ARTICLE[GTIN='7680555940018']/COMPOSITIONS/COMPOSITION/LABEL").first.text.should eq 'I'
|
320
324
|
XPath.match( doc, "//ARTICLE[GTIN='7680555940018']/COMPOSITIONS/COMPOSITION/LABEL_DESCRIPTION").first.text.should eq 'Glucoselösung'
|
321
325
|
XPath.match( doc, "//ARTICLE[GTIN='7680555940018']/COMPOSITIONS/COMPOSITION/LABEL").each{ |x| puts x.text }
|
322
326
|
XPath.match( doc, "//ARTICLE[GTIN='7680555940018']/COMPOSITIONS/COMPOSITION/LABEL").last.text.should eq 'III'
|
323
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680555940018']/COMPOSITIONS/COMPOSITION/
|
324
|
-
|
327
|
+
XPath.match( doc, "//ARTICLE[GTIN='7680555940018']/COMPOSITIONS/COMPOSITION/CORRESP").last.text.should eq '4240 kJ pro 1 l'
|
328
|
+
|
329
|
+
XPath.match( doc, "//ARTICLE[GTIN='7680434541015']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/SUBSTANCE_NAME").
|
330
|
+
find{|x| x.text.eql?(matri_name)}.text.should eq matri_name
|
325
331
|
XPath.match( doc, "//ARTICLE[GTIN='7680434541015']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/CHEMICAL_SUBSTANCE").last.text.should eq 'Levomenolum'
|
326
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680434541015']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/QTY").
|
327
|
-
XPath.match( doc, "//ARTICLE[GTIN='7680434541015']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/
|
328
|
-
XPath.match( doc, "//ARTICLE[GTIN='
|
329
|
-
XPath.match( doc, "//ARTICLE[GTIN='
|
330
|
-
|
332
|
+
XPath.match( doc, "//ARTICLE[GTIN='7680434541015']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/QTY").first.text.should eq '98.9'
|
333
|
+
XPath.match( doc, "//ARTICLE[GTIN='7680434541015']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/MORE_INFO").first.text.should eq 'ratio: 1:2-2.8'
|
334
|
+
XPath.match( doc, "//ARTICLE[GTIN='7680300150105']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/SUBSTANCE_NAME").first.text.should eq 'Lidocaini Hydrochloridum'
|
335
|
+
XPath.match( doc, "//ARTICLE[GTIN='7680300150105']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/UNIT").first.text.should eq 'mg/ml'
|
336
|
+
|
337
|
+
XPath.match( doc, "//ARTICLE[GTIN='7680434541015']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/CHEMICAL_QTY").first.text.should eq '10-50'
|
338
|
+
XPath.match( doc, "//ARTICLE[GTIN='7680434541015']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/CHEMICAL_UNIT").first.text.should eq 'mg/100 g'
|
339
|
+
|
340
|
+
end
|
331
341
|
end
|
332
342
|
|
333
343
|
context 'find correct result for Kamillin' do
|
@@ -354,6 +364,7 @@ if RunAllTests
|
|
354
364
|
specify { expect(res.class).to eq Array }
|
355
365
|
specify { expect(res.first.class).to eq String }
|
356
366
|
end
|
367
|
+
|
357
368
|
context 'find correct result for Nutriflex' do
|
358
369
|
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)
|
359
370
|
specify { expect(info.selling_units).to eq 5 }
|
@@ -386,7 +397,7 @@ if RunAllTests
|
|
386
397
|
bifidobacterium = info.compositions.first.substances.find{ |x| x.name.match(/Bifidobacterium/i) }
|
387
398
|
specify { expect(bifidobacterium).not_to eq nil}
|
388
399
|
if bifidobacterium
|
389
|
-
specify { expect(bifidobacterium.name).to eq 'Bifidobacterium Infantis
|
400
|
+
specify { expect(bifidobacterium.name).to eq 'Bifidobacterium Infantis' }
|
390
401
|
skip { expect(bifidobacterium.qty.to_f).to eq '10^9'}
|
391
402
|
skip { expect(bifidobacterium.unit).to eq 'CFU'}
|
392
403
|
end
|
@@ -397,8 +408,8 @@ if RunAllTests
|
|
397
408
|
specify { expect(e_127.unit).to eq nil}
|
398
409
|
end
|
399
410
|
end
|
400
|
-
|
401
|
-
context 'find correct result for Cardio-Pulmo-Rénal Sérocytol, suppositoire' do
|
411
|
+
end
|
412
|
+
context 'find correct result for 274 Cardio-Pulmo-Rénal Sérocytol, suppositoire' do
|
402
413
|
info = Calc.new(tst_cardio_pumal.name_C, tst_cardio_pumal.package_size_L, tst_cardio_pumal.einheit_M, tst_cardio_pumal.active_substance_0, tst_cardio_pumal.composition_P)
|
403
414
|
specify { expect(info.galenic_form.description).to eq 'suppositoire' }
|
404
415
|
specify { expect(info.galenic_group.description).to eq 'unbekannt' }
|
@@ -409,7 +420,7 @@ if RunAllTests
|
|
409
420
|
globulina = info.compositions.first.substances.find{ |x| x.name.match(/porcins|globulina/i) }
|
410
421
|
specify { expect(globulina).not_to eq nil}
|
411
422
|
if globulina
|
412
|
-
specify { expect(globulina.name).to eq 'Globulina Equina (immunisé Avec Coeur, Tissu Pulmonaire, Reins De Porcins)' }
|
423
|
+
specify { expect(globulina.name.downcase).to eq 'Globulina Equina (immunisé Avec Coeur, Tissu Pulmonaire, Reins De Porcins)'.downcase }
|
413
424
|
specify { expect(globulina.qty.to_f).to eq 8.0}
|
414
425
|
specify { expect(globulina.unit).to eq 'mg'}
|
415
426
|
end
|
@@ -423,80 +434,44 @@ if RunAllTests
|
|
423
434
|
specify { expect(e_218).not_to eq nil}
|
424
435
|
end
|
425
436
|
|
426
|
-
|
427
|
-
text = "#{Line_1}\n#{Line_2}\n#{Line_3}\n#{Line_4}\n#{Line_5}"
|
428
|
-
result = Calc.new('Nutriflex Lipid peri, Infusionsemulsion, 1250ml', nil, nil,
|
429
|
-
'glucosum anhydricum, zinci acetas dihydricus, isoleucinum, leucinum',
|
430
|
-
text
|
431
|
-
)
|
432
|
-
# Line_1 = 'I) Glucoselösung: glucosum anhydricum 150 g ut glucosum monohydricum, natrii dihydrogenophosphas dihydricus 2.34 g, zinci acetas dihydricus 6.58 mg, aqua ad iniectabilia q.s. ad solutionem pro 500 ml.'
|
433
|
-
specify { expect(result.compositions.first.substances.first.name).to eq 'Glucosum Anhydricum'}
|
434
|
-
specify { expect(result.compositions.first.substances.first.chemical_substance).to eq 'Glucosum Monohydricum'}
|
435
|
-
specify { expect(result.compositions.first.substances.first.qty.to_f).to eq 150.0}
|
436
|
-
specify { expect(result.compositions.first.substances.first.unit).to eq 'g/500 ml'}
|
437
|
-
|
438
|
-
specify { expect(result.compositions[0].source).to eq Line_1}
|
439
|
-
specify { expect(result.compositions[0].label).to eq 'I'}
|
440
|
-
specify { expect(result.compositions[0].label_description).to eq 'Glucoselösung'}
|
441
|
-
specify { expect(result.compositions[1].label).to eq 'II' }
|
442
|
-
specify { expect(result.compositions[2].label).to eq 'III' }
|
443
|
-
glucosum = result.compositions.first.substances.first
|
444
|
-
specify { expect(glucosum.name).to eq 'Glucosum Anhydricum' }
|
445
|
-
specify { expect(glucosum.qty.to_f).to eq 150.0}
|
446
|
-
specify { expect(glucosum.unit).to eq 'g/500 ml'}
|
447
|
-
specify { expect(result.compositions.size).to eq 3}
|
448
|
-
specify { expect(result.compositions[0].substances.size).to eq 3}
|
449
|
-
specify { expect(result.compositions[1].substances.size).to eq 5} # should have glycerolum, natrii oleas, aqua
|
450
|
-
specify { expect(result.compositions[2].substances.size).to eq 4}
|
451
|
-
specify { expect(result.compositions[1].source).to eq Line_2}
|
452
|
-
specify { expect(result.compositions[2].source).to eq Line_3}
|
453
|
-
|
454
|
-
# from II)
|
455
|
-
lecithinum = result.compositions[1].substances.find{ |x| x.name.match(/lecithinum/i) }
|
456
|
-
specify { expect(lecithinum).not_to eq nil}
|
457
|
-
if lecithinum
|
458
|
-
specify { expect(lecithinum.name).to eq 'Lecithinum Ex Ovo' }
|
459
|
-
specify { expect(lecithinum.qty.to_f).to eq 3.0}
|
460
|
-
specify { expect(lecithinum.unit).to eq 'g/250 ml'}
|
461
|
-
end
|
437
|
+
if RunAllTests
|
462
438
|
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
439
|
+
context 'find correct result compositions for 00613 Pentavac' do
|
440
|
+
line_1 = "I) DTPa-IPV-Komponente (Suspension): toxoidum diphtheriae 30 U.I., toxoidum tetani 40 U.I., toxoidum pertussis 25 µg et haemagglutininum filamentosum 25 µg, virus poliomyelitis typus 1 inactivatum (D-Antigen) 40 U., virus poliomyelitis typus 2 inactivatum (D-Antigen) 8 U., virus poliomyelitis typus 3 inactivatum (D-Antigen) 32 U., aluminium ut aluminii hydroxidum hydricum ad adsorptionem, formaldehydum 10 µg, conserv.: phenoxyethanolum 2.5 µl, residui: neomycinum, streptomycinum, polymyxini B sulfas, medium199, aqua q.s. ad suspensionem pro 0.5 ml."
|
441
|
+
line_2 = "II) Hib-Komponente (Lyophilisat): haemophilus influenzae Typ B polysaccharida T-conjugatum 10 µg, trometamolum, saccharum, pro praeparatione."
|
442
|
+
txt = "#{line_1}\n#{line_2}"
|
443
|
+
info = ParseUtil.parse_compositions(txt)
|
444
|
+
specify { expect(info.first.label).to eq 'I' }
|
445
|
+
specify { expect(info.size).to eq 2 }
|
446
|
+
specify { expect(info.first.substances.size).to eq 14 }
|
447
|
+
toxoidum = info.first.substances.find{ |x| x.name.match(/Toxoidum Diphtheriae/i) }
|
448
|
+
specify { expect(toxoidum.class).to eq ParseSubstance }
|
449
|
+
if toxoidum
|
450
|
+
specify { expect(toxoidum.name).to eq 'Toxoidum Diphtheriae' }
|
451
|
+
specify { expect(toxoidum.qty.to_f).to eq 30.0 }
|
452
|
+
specify { expect(toxoidum.unit).to eq 'U.I./0.5 ml' }
|
470
453
|
end
|
471
|
-
leucinum_I = result.compositions[0].substances.find{ |x| x.name.eql?('Leucinum') }
|
472
|
-
specify { expect(leucinum_I).to eq nil}
|
473
|
-
leucinum_II = result.compositions[1].substances.find{ |x| x.name.eql?('Leucinum') }
|
474
|
-
specify { expect(leucinum_II).to eq nil}
|
475
|
-
aqua = result.compositions[2].substances.find{ |x| /aqua ad/i.match(x.name) }
|
476
|
-
specify { expect(aqua).to eq nil}
|
477
454
|
end
|
478
|
-
end
|
479
|
-
|
480
|
-
if RunAllTests
|
481
455
|
|
482
456
|
context 'find correct result compositions for fluticasoni with chemical_dose' do
|
483
457
|
info = ParseUtil.parse_compositions('fluticasoni-17 propionas 100 µg, lactosum monohydricum q.s. ad pulverem pro 25 mg.')
|
484
458
|
specify { expect(info.size).to eq 1 }
|
485
|
-
specify { expect(info.first.substances.size).to eq
|
459
|
+
specify { expect(info.first.substances.size).to eq 2 }
|
486
460
|
fluticasoni = info.first.substances.find{ |x| x.name.match(/Fluticasoni/i) }
|
487
461
|
specify { expect(fluticasoni.name).to eq 'Fluticasoni-17 Propionas' }
|
488
462
|
specify { expect(fluticasoni.qty.to_f).to eq 100.0 }
|
489
463
|
specify { expect(fluticasoni.unit).to eq 'µg/25 mg' }
|
490
|
-
specify { expect(fluticasoni.dose).to eq "100 µg/25 mg" }
|
464
|
+
specify { expect(fluticasoni.dose.to_s).to eq "100 µg/25 mg" }
|
491
465
|
lactosum = info.first.substances.find{ |x| x.name.match(/Lactosum/i) }
|
492
|
-
specify { expect(lactosum).to eq
|
466
|
+
specify { expect(lactosum.name).to eq "Lactosum Monohydricum" }
|
467
|
+
specify { expect(lactosum.dose.to_s).to eq "25 mg" }
|
493
468
|
end
|
494
469
|
|
495
470
|
context 'find correct result compositions for stuff with percents' do
|
496
471
|
txt = 'calcium carbonicum hahnemanni C7 5 %, chamomilla recutita D5 22.5 %, magnesii hydrogenophosphas trihydricus C5 50 %, passiflora incarnata D5 22.5 %, xylitolum, excipiens ad globulos.'
|
497
472
|
info = ParseUtil.parse_compositions(txt)
|
498
473
|
specify { expect(info.size).to eq 1 }
|
499
|
-
specify { expect(info.first.substances.size).to eq
|
474
|
+
specify { expect(info.first.substances.size).to eq ExcipiensIs_a_Substance ? 6 : 5 }
|
500
475
|
recutita = info.first.substances.find{ |x| x.name.match(/recutita/i) }
|
501
476
|
specify { expect(recutita.name).to eq 'Chamomilla Recutita D5' }
|
502
477
|
specify { expect(recutita.qty.to_f).to eq 22.5 }
|
@@ -507,27 +482,13 @@ if RunAllTests
|
|
507
482
|
txt = 'procainum 10 mg ut procaini hydrochloridum, phenazonum 50 mg, Antiox.: E 320, glycerolum q.s. ad solutionem pro 1 g.'
|
508
483
|
info = ParseUtil.parse_compositions(txt)
|
509
484
|
specify { expect(info.size).to eq 1 }
|
510
|
-
specify { expect(info.first.substances.size).to eq
|
485
|
+
specify { expect(info.first.substances.size).to eq 4 }
|
511
486
|
procainum = info.first.substances.find{ |x| x.name.match(/procain/i) }
|
512
487
|
specify { expect(procainum.name).to eq 'Procainum' }
|
513
488
|
specify { expect(procainum.qty.to_f).to eq 10.0 }
|
514
489
|
specify { expect(procainum.unit).to eq 'mg/g' }
|
515
490
|
end
|
516
491
|
|
517
|
-
context 'find correct result compositions for 00613 Pentavac' do
|
518
|
-
line_1 = "I) DTPa-IPV-Komponente (Suspension): toxoidum diphtheriae 30 U.I., toxoidum tetani 40 U.I., toxoidum pertussis 25 µg et haemagglutininum filamentosum 25 µg, virus poliomyelitis typus 1 inactivatum (D-Antigen) 40 U., virus poliomyelitis typus 2 inactivatum (D-Antigen) 8 U., virus poliomyelitis typus 3 inactivatum (D-Antigen) 32 U., aluminium ut aluminii hydroxidum hydricum ad adsorptionem, formaldehydum 10 µg, conserv.: phenoxyethanolum 2.5 µl, residui: neomycinum, streptomycinum, polymyxini B sulfas, medium199, aqua q.s. ad suspensionem pro 0.5 ml."
|
519
|
-
line_2 = "II) Hib-Komponente (Lyophilisat): haemophilus influenzae Typ B polysaccharida T-conjugatum 10 µg, trometamolum, saccharum, pro praeparatione."
|
520
|
-
txt = "#{line_1}\n#{line_2}"
|
521
|
-
info = ParseUtil.parse_compositions(txt)
|
522
|
-
specify { expect(info.first.label).to eq 'I' }
|
523
|
-
specify { expect(info.size).to eq 2 }
|
524
|
-
specify { expect(info.first.substances.size).to eq 11 }
|
525
|
-
toxoidum = info.first.substances.find{ |x| x.name.match(/Toxoidum Diphtheriae/i) }
|
526
|
-
specify { expect(toxoidum.name).to eq 'Toxoidum Diphtheriae' }
|
527
|
-
specify { expect(toxoidum.qty.to_f).to eq 30.0 }
|
528
|
-
specify { expect(toxoidum.unit).to eq 'U.I./ml' }
|
529
|
-
end
|
530
|
-
|
531
492
|
context 'find correct result compositions for poloxamerum' do
|
532
493
|
line_1 = "I): albuminum humanum colloidale 0.5 mg, stanni(II) chloridum dihydricum 0.2 mg, glucosum anhydricum, dinatrii phosphas monohydricus, natrii fytas (9:1), poloxamerum 238, q.s. ad pulverem pro vitro."
|
533
494
|
line_2 = "II): pro usu: I) recenter radioactivatum 99m-technetio ut natrii pertechnetas."
|
@@ -537,7 +498,7 @@ if RunAllTests
|
|
537
498
|
text
|
538
499
|
)
|
539
500
|
specify { expect(info.compositions.size).to eq 2 }
|
540
|
-
specify { expect(info.compositions.first.substances.size).to eq
|
501
|
+
specify { expect(info.compositions.first.substances.size).to eq ExcipiensIs_a_Substance ? 7 : 6 }
|
541
502
|
poloxamerum = info.compositions.first.substances.find{ |x| x.name.match(/poloxamerum/i) }
|
542
503
|
skip { expect(poloxamerum.name).to eq 'Poloxamerum 238' }
|
543
504
|
skip { expect(poloxamerum.qty.to_f).to eq "" }
|
@@ -565,14 +526,14 @@ if RunAllTests
|
|
565
526
|
substance1 = info.compositions.first.substances.find{ |x| x.name.match(/hydrochlorothiazidum/i) }
|
566
527
|
specify { expect(substance1.name).to eq 'Hydrochlorothiazidum' }
|
567
528
|
substance3 = info.compositions.first.substances.find{ |x| x.name.match(/amiloridi hydrochloridum/i) }
|
568
|
-
specify { expect(substance3.class).to eq
|
529
|
+
specify { expect(substance3.class).to eq ParseSubstance }
|
569
530
|
if substance3
|
570
|
-
specify { expect(substance3.name).to eq
|
571
|
-
specify { expect(substance3.chemical_substance).to eq
|
572
|
-
specify { expect(substance3.qty.to_f).to eq 5 }
|
531
|
+
specify { expect(substance3.name).to eq 'Amiloridi Hydrochloridum Dihydricum' }
|
532
|
+
specify { expect(substance3.chemical_substance.name).to eq 'Amiloridi Hydrochloridum Anhydricum' }
|
533
|
+
specify { expect(substance3.qty.to_f).to eq 5.67 }
|
573
534
|
specify { expect(substance3.unit).to eq 'mg' }
|
574
|
-
specify { expect(substance3.
|
575
|
-
specify { expect(substance3.
|
535
|
+
specify { expect(substance3.chemical_substance.qty.to_f).to eq 5}
|
536
|
+
specify { expect(substance3.chemical_substance.unit).to eq 'mg' }
|
576
537
|
specify { expect(substance3.is_active_agent).to eq true }
|
577
538
|
end
|
578
539
|
|
@@ -589,9 +550,9 @@ if RunAllTests
|
|
589
550
|
substance1 = info.compositions.first.substances.find{ |x| x.name.match(/atropa belladonna/i) }
|
590
551
|
specify { expect(substance1.name).to eq 'Atropa Belladonna D30' }
|
591
552
|
substance2 = info.compositions.first.substances.find{ |x| x.name.match(/lycopus virginicus/i) }
|
592
|
-
specify { expect(substance2.class).to eq
|
553
|
+
specify { expect(substance2.class).to eq ParseSubstance }
|
593
554
|
substance3 = info.compositions.first.substances.find{ |x| x.name.match(/lapis albus/i) }
|
594
|
-
specify { expect(substance3.class).to eq
|
555
|
+
specify { expect(substance3.class).to eq ParseSubstance }
|
595
556
|
if substance3
|
596
557
|
specify { expect(substance3.name).to eq 'Lapis Albus D12' }
|
597
558
|
end
|
@@ -604,73 +565,93 @@ Solvens: aqua ad iniectabilia q.s. ad suspensionem pro 1 ml."
|
|
604
565
|
'virus rabiei inactivatum (Stamm: Wistar Rabies PM/WI 38-1503-3M) ',
|
605
566
|
text
|
606
567
|
)
|
607
|
-
specify { expect(info.compositions.size).to eq
|
568
|
+
specify { expect(info.compositions.size).to eq 2 }
|
608
569
|
specify { expect(info.compositions.first.label).to eq nil }
|
609
570
|
substance1 = info.compositions.first.substances.find{ |x| x.name.match(/virus rabiei inactivatu/i) }
|
610
571
|
specify { expect(substance1).should_not be nil }
|
611
572
|
if substance1
|
612
|
-
specify { expect(substance1.name).to eq 'Virus Rabiei Inactivatum (
|
573
|
+
specify { expect(substance1.name).to eq 'Virus Rabiei Inactivatum (stamm: Wistar Rabies Pm/wi 38-1503-3m)' }
|
613
574
|
end
|
614
575
|
substance2 = info.compositions.first.substances.find{ |x| x.name.match(/albuminum humanu/i) }
|
615
576
|
if substance2
|
616
577
|
specify { expect(substance2.name).to eq 'Albuminum Humanum' }
|
617
578
|
end
|
618
|
-
specify { expect(substance2.class).to eq
|
579
|
+
specify { expect(substance2.class).to eq ParseSubstance }
|
619
580
|
substance3 = info.compositions.first.substances.find{ |x| x.name.match(/neomycini sulfas/i) }
|
620
|
-
specify { expect(substance3.class).to eq
|
581
|
+
specify { expect(substance3.class).to eq ParseSubstance }
|
621
582
|
if substance3
|
622
583
|
specify { expect(substance3.name).to eq 'Neomycini Sulfas' }
|
623
584
|
end
|
624
585
|
end
|
625
586
|
|
626
|
-
context
|
587
|
+
context "find correct result compositions for #{tst_grains_de_valse.composition_P} with chemical_dose" do
|
627
588
|
info = Calc.new(tst_grains_de_valse.name_C, tst_grains_de_valse.package_size_L, tst_grains_de_valse.einheit_M, tst_grains_de_valse.active_substance_0, tst_grains_de_valse.composition_P)
|
628
589
|
sennosidum = info.compositions.first.substances.find{ |x| x.name.match(/Senn/i) }
|
629
590
|
specify { expect(sennosidum).not_to eq nil}
|
630
591
|
if sennosidum
|
631
592
|
specify { expect(sennosidum.name).to eq 'Sennae Folii Extractum Methanolicum Siccum' }
|
632
|
-
specify { expect(sennosidum.dose).to eq '78-104 mg' }
|
593
|
+
specify { expect(sennosidum.dose.to_s).to eq '78-104 mg' }
|
633
594
|
specify { expect(sennosidum.qty.to_f).to eq 78.0}
|
634
595
|
specify { expect(sennosidum.unit).to eq 'mg'}
|
635
|
-
specify { expect(sennosidum.chemical_substance).to eq 'Sennosidum B' }
|
636
|
-
specify { expect(sennosidum.
|
637
|
-
specify { expect(sennosidum.
|
596
|
+
specify { expect(sennosidum.chemical_substance.name).to eq 'Sennosidum B' }
|
597
|
+
specify { expect(sennosidum.chemical_substance.qty.to_f).to eq 12.5 }
|
598
|
+
specify { expect(sennosidum.chemical_substance.unit).to eq 'mg' }
|
638
599
|
end
|
639
600
|
end
|
640
601
|
|
641
|
-
|
642
|
-
|
602
|
+
context 'find correct result compositions for 56829 sequence 3 Iscador M 0,01 mg' do
|
603
|
+
comment_from_email_good_7_juni_2011 = %(
|
604
|
+
Ausgedeutscht heisst das:
|
605
|
+
Der Extrakt ist ein Auszug aus der Frischpflanze im Verhältnis 1:5, also ‚extractum 0.05 mg’ entspricht 0.01 mg frischem Mistelkraut.
|
606
|
+
Es handelt sich um EINEN Wirkstoff, also „in Kombination“ ist falsch formuliert.
|
607
|
+
Die HILFSSTOFFE sind Aqua ad iniectabilia und Natrii chloridum.
|
608
|
+
)
|
609
|
+
text = 'extractum aquosum liquidum fermentatum 0.05 mg ex viscum album (mali) recens 0.01 mg, natrii chloridum, aqua q.s. ad solutionem pro 1 ml.'
|
610
|
+
info = Calc.new("Iscador M 0,01 mg, Injektionslösung", '2 x 7', 'Ampulle(n)',
|
611
|
+
'viscum album (mali) recens',
|
612
|
+
text)
|
613
|
+
specify { expect(info.pkg_size).to eq '2 x 7' }
|
614
|
+
specify { expect(info.selling_units).to eq 14 }
|
615
|
+
specify { expect(info.compositions.first.substances.size).to eq ExcipiensIs_a_Substance ? 3 : 2 }
|
616
|
+
viscum = info.compositions.first.substances.find{ |x| x.name.match(/viscum/i) }
|
617
|
+
specify { expect(viscum).not_to eq nil}
|
618
|
+
natrii = info.compositions.first.substances.find{ |x| x.name.match(/natrii chloridum/i) }
|
619
|
+
specify { expect(natrii).not_to eq nil}
|
620
|
+
if viscum
|
621
|
+
specify { expect(viscum.name).to eq 'Extractum Aquosum Liquidum Fermentatum 0.05 Mg Ex Viscum Album (mali) Recens' }
|
622
|
+
specify { expect(viscum.is_active_agent).to eq true }
|
623
|
+
specify { expect(viscum.dose.to_s).to eq '0.01 mg/ml' }
|
624
|
+
specify { expect(viscum.qty.to_f).to eq 0.01}
|
625
|
+
specify { expect(viscum.unit).to eq 'mg/ml'}
|
626
|
+
specify { expect(viscum.chemical_substance).to eq nil }
|
627
|
+
end
|
628
|
+
end
|
629
|
+
context 'find correct result compositions for 56829 sequence 23 Iscador Ag 0,01 mg' do
|
643
630
|
text = 'extractum aquosum liquidum fermentatum 0.05 mg ex viscum album (mali) recens 0.01 mg, natrii chloridum, argenti carbonas (0,01 ug pro 100 mg herba recente), aqua q.s. ad solutionem pro 1 ml.'
|
644
631
|
info = Calc.new("Iscador M c. Arg. 0,01 mg, Injektionslösung, anthroposophisches Arzneimittel", '2 x 7', 'Ampulle(n)',
|
645
632
|
'viscum album (mali) recens, argenti carbonas (0,01 ug pro 100 mg herba recente)',
|
646
633
|
text)
|
647
634
|
specify { expect(info.pkg_size).to eq '2 x 7' }
|
648
635
|
specify { expect(info.selling_units).to eq 14 }
|
649
|
-
specify { expect(info.compositions.first.substances.size).to eq
|
636
|
+
specify { expect(info.compositions.first.substances.size).to eq ExcipiensIs_a_Substance ? 4 : 3 }
|
650
637
|
viscum = info.compositions.first.substances.find{ |x| x.name.match(/viscum/i) }
|
651
638
|
specify { expect(viscum).not_to eq nil}
|
652
639
|
if viscum
|
653
640
|
specify { expect(viscum.name).to eq 'Extractum Aquosum Liquidum Fermentatum 0.05 Mg Ex Viscum Album (mali) Recens' }
|
654
|
-
specify { expect(viscum.dose).to eq '0.01 mg/ml' }
|
641
|
+
specify { expect(viscum.dose.to_s).to eq '0.01 mg/ml' }
|
655
642
|
specify { expect(viscum.qty.to_f).to eq 0.01}
|
656
643
|
specify { expect(viscum.unit).to eq 'mg/ml'}
|
657
644
|
specify { expect(viscum.chemical_substance).to eq nil }
|
658
|
-
specify { expect(viscum.chemical_qty).to eq nil }
|
659
|
-
specify { expect(viscum.chemical_unit).to eq nil }
|
660
645
|
end
|
661
|
-
|
662
|
-
|
663
|
-
|
664
|
-
specify { expect(argenti).
|
665
|
-
|
666
|
-
|
667
|
-
|
668
|
-
|
669
|
-
skip { expect(argenti.unit).to eq 'mg/ml'}
|
670
|
-
specify { expect(argenti.chemical_substance).to eq nil }
|
671
|
-
specify { expect(argenti.chemical_qty).to eq nil }
|
672
|
-
specify { expect(argenti.chemical_unit).to eq nil }
|
673
|
-
end
|
646
|
+
argenti = info.compositions.first.substances.find{ |x| x.name.match(/Argenti/i) }
|
647
|
+
specify { expect(argenti).not_to eq nil}
|
648
|
+
if argenti
|
649
|
+
specify { expect(argenti.name).to eq 'Argenti Carbonas (0,01 Ug pro 100 Mg Herba Recente)' }
|
650
|
+
skip { expect(argenti.dose.to_s).to eq '0.01 mg/ml' } # 100 mg/ml
|
651
|
+
skip { expect(argenti.qty.to_f).to eq 0.01}
|
652
|
+
skip { expect(argenti.unit).to eq 'mg/ml'}
|
653
|
+
specify { expect(argenti.chemical_substance).to eq nil }
|
674
654
|
end
|
675
655
|
end
|
676
|
-
end
|
656
|
+
end
|
657
|
+
end
|