oddb2xml 2.0.5 → 2.0.6

Sign up to get free protection for your applications and to get access to all the features.
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