oddb2xml 2.0.5 → 2.0.6
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 +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
|