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.
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
- XPath.match( doc, "//ARTICLE[GTIN='7680545250363']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/SUBSTANCE_NAME").last.text.should eq 'Alprostadilum'
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/LABEL").last.text.should eq 'III'
324
- XPath.match( doc, "//ARTICLE[GTIN='7680434541015']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/SUBSTANCE_NAME").last.text.should eq 'Matricariae Extractum Isopropanolicum Liquidum'
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").last.text.should eq '98.9'
327
- XPath.match( doc, "//ARTICLE[GTIN='7680434541015']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/UNIT").last.text.should eq 'g/100 g'
328
- XPath.match( doc, "//ARTICLE[GTIN='7680434541015']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/CHEMICAL_QTY").last.text.should eq '10-50'
329
- XPath.match( doc, "//ARTICLE[GTIN='7680434541015']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/CHEMICAL_UNIT").last.text.should eq 'mg/100 g'
330
- end
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 Min.' }
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
- context 'find correct result compositions for nutriflex' do
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
- # From III
464
- leucinum = result.compositions[2].substances.find{ |x| x.name.eql?('Leucinum') }
465
- specify { expect(leucinum).not_to eq nil}
466
- if leucinum
467
- specify { expect(leucinum.name).to eq 'Leucinum' }
468
- specify { expect(leucinum.qty.to_f).to eq 3.13}
469
- specify { expect(leucinum.unit).to eq 'g/400 ml'}
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 1 }
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 nil }
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 6 }
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 3 }
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 5 }
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 Struct::ParseSubstance }
529
+ specify { expect(substance3.class).to eq ParseSubstance }
569
530
  if substance3
570
- specify { expect(substance3.name).to eq 'Amiloridi Hydrochloridum Anhydricum' }
571
- specify { expect(substance3.chemical_substance).to eq 'Amiloridi Hydrochloridum Dihydricum' }
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.chemical_qty.to_f).to eq 5.67 }
575
- specify { expect(substance3.chemical_unit).to eq 'mg' }
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 Struct::ParseSubstance }
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 Struct::ParseSubstance }
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 1 }
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 (Stamm: Wistar Rabies Pm/wi 38-1503-3M)' }
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 Struct::ParseSubstance }
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 Struct::ParseSubstance }
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 'find correct result compositions for tst_grains_de_valse with chemical_dose' do
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.chemical_qty.to_f).to eq 12.5 }
637
- specify { expect(sennosidum.chemical_unit).to eq 'mg' }
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
- end
642
- context 'find correct result compositions for 56829 Iscador Ag 0,01 mg' do
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 2 }
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
- # we don't handle argenti at the moment, because it skipped as it contain pro in its name
662
- if false
663
- argenti = info.compositions.first.substances.find{ |x| x.name.match(/Argenti/i) }
664
- specify { expect(argenti).not_to eq nil}
665
- if argenti
666
- specify { expect(argenti.name).to eq 'Argenti Carbonas' }
667
- skip { expect(argenti.dose).to eq '0.01 mg/ml' } # 100 mg/ml
668
- skip { expect(argenti.qty.to_f).to eq 0.01}
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