oddb2xml 2.6.9 → 2.7.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.github/workflows/ruby.yml +40 -0
- data/.standard.yml +2 -0
- data/Elexis_Artikelstamm_v5.xsd +0 -3
- data/Gemfile +3 -3
- data/History.txt +28 -0
- data/README.md +3 -3
- data/Rakefile +24 -23
- data/bin/check_artikelstamm +11 -11
- data/bin/compare_v5 +23 -23
- data/bin/oddb2xml +14 -13
- data/lib/oddb2xml.rb +1 -1
- data/lib/oddb2xml/builder.rb +1075 -1048
- data/lib/oddb2xml/calc.rb +232 -233
- data/lib/oddb2xml/chapter_70_hack.rb +38 -32
- data/lib/oddb2xml/cli.rb +252 -235
- data/lib/oddb2xml/compare.rb +70 -59
- data/lib/oddb2xml/compositions_syntax.rb +448 -430
- data/lib/oddb2xml/compressor.rb +20 -20
- data/lib/oddb2xml/downloader.rb +156 -128
- data/lib/oddb2xml/extractor.rb +295 -302
- data/lib/oddb2xml/options.rb +34 -35
- data/lib/oddb2xml/parslet_compositions.rb +263 -269
- data/lib/oddb2xml/semantic_check.rb +39 -33
- data/lib/oddb2xml/util.rb +166 -164
- data/lib/oddb2xml/version.rb +1 -1
- data/lib/oddb2xml/xml_definitions.rb +32 -33
- data/oddb2xml.gemspec +32 -31
- data/spec/artikelstamm_spec.rb +116 -135
- data/spec/builder_spec.rb +495 -524
- data/spec/calc_spec.rb +552 -593
- data/spec/check_artikelstamm_spec.rb +26 -26
- data/spec/cli_spec.rb +173 -174
- data/spec/compare_spec.rb +9 -11
- data/spec/composition_syntax_spec.rb +390 -409
- data/spec/compressor_spec.rb +48 -48
- data/spec/data/refdata_NonPharma.xml +0 -3
- data/spec/data/refdata_Pharma.xml +0 -26
- data/spec/data/transfer.dat +1 -0
- data/spec/data/varia_De.htm +2 -2
- data/spec/data_helper.rb +47 -49
- data/spec/downloader_spec.rb +251 -260
- data/spec/extractor_spec.rb +172 -164
- data/spec/galenic_spec.rb +233 -256
- data/spec/options_spec.rb +116 -119
- data/spec/parslet_spec.rb +833 -861
- data/spec/spec_helper.rb +153 -153
- data/test_options.rb +39 -42
- data/tools/win_fetch_cacerts.rb +2 -3
- metadata +48 -5
- data/.travis.yml +0 -29
data/spec/compare_spec.rb
CHANGED
@@ -1,23 +1,21 @@
|
|
1
|
-
|
2
|
-
require 'spec_helper'
|
1
|
+
require "spec_helper"
|
3
2
|
require "rexml/document"
|
4
3
|
require "oddb2xml/compare"
|
5
4
|
|
6
5
|
describe Oddb2xml::CompareV5 do
|
7
|
-
|
8
|
-
context 'when comparing v5' do
|
6
|
+
context "when comparing v5" do
|
9
7
|
before(:all) do
|
10
|
-
@first = File.join(Oddb2xml::SpecData,
|
11
|
-
@second = File.join(Oddb2xml::SpecData,
|
8
|
+
@first = File.join(Oddb2xml::SpecData, "v5_first.xml")
|
9
|
+
@second = File.join(Oddb2xml::SpecData, "v5_second.xml")
|
12
10
|
expect(File.exist?(@second)).to eq true
|
13
11
|
expect(File.exist?(@first)).to eq true
|
14
12
|
@result = Oddb2xml::CompareV5.new(@first, @second).compare
|
15
13
|
end
|
16
|
-
it
|
17
|
-
expected = {"PRODUCTS"=>{"NR_COMPARED"=>1, "PRODNO"=>0, "SALECD"=>0, "DSCR"=>1, "DSCRF"=>0, "ATC"=>0, "SUBSTANCE"=>1},
|
18
|
-
"LIMITATIONS"=>{"NR_COMPARED"=>3, "LIMNAMEBAG"=>0, "DSCR"=>0, "DSCRF"=>0, "LIMITATION_PTS"=>1},
|
19
|
-
"ITEMS"=>{"NR_COMPARED"=>4, "PHARMATYPE"=>0, "GTIN"=>0, "SALECD"=>0, "DSCR"=>0, "DSCRF"=>0, "PEXF"=>2, "PPUB"=>2, "PKG_SIZE"=>0,
|
20
|
-
|
14
|
+
it "should return true" do
|
15
|
+
expected = {"PRODUCTS" => {"NR_COMPARED" => 1, "PRODNO" => 0, "SALECD" => 0, "DSCR" => 1, "DSCRF" => 0, "ATC" => 0, "SUBSTANCE" => 1},
|
16
|
+
"LIMITATIONS" => {"NR_COMPARED" => 3, "LIMNAMEBAG" => 0, "DSCR" => 0, "DSCRF" => 0, "LIMITATION_PTS" => 1},
|
17
|
+
"ITEMS" => {"NR_COMPARED" => 4, "PHARMATYPE" => 0, "GTIN" => 0, "SALECD" => 0, "DSCR" => 0, "DSCRF" => 0, "PEXF" => 2, "PPUB" => 2, "PKG_SIZE" => 0,
|
18
|
+
"MEASURE" => 0, "DOSAGE_FORM" => 3, "PRODNO" => 0, "PHAR" => 0, "IKSCAT" => 0}}
|
21
19
|
expect(@result).to eq(expected)
|
22
20
|
end
|
23
21
|
end
|
@@ -1,477 +1,458 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require 'spec_helper'
|
1
|
+
require "spec_helper"
|
4
2
|
require "#{Dir.pwd}/lib/oddb2xml/parslet_compositions"
|
5
|
-
require
|
6
|
-
require
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
let(:
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
3
|
+
require "parslet/rig/rspec"
|
4
|
+
require "parslet/convenience"
|
5
|
+
|
6
|
+
RUN_ALL_PARSING_EXAMPLES = false # Takes over 3 minutes to run, all the other ones just a few seconds
|
7
|
+
NO_GO_INTO_PRY = false
|
8
|
+
if NO_GO_INTO_PRY
|
9
|
+
|
10
|
+
describe CompositionParser do
|
11
|
+
let(:parser) { CompositionParser.new }
|
12
|
+
context "identifier parsing" do
|
13
|
+
let(:dose_parser) { parser.dose }
|
14
|
+
let(:identifier_parser) { parser.identifier }
|
15
|
+
let(:identifier_with_comma_parser) { parser.identifier_with_comma }
|
16
|
+
let(:identifier_without_comma_parser) { parser.identifier_without_comma }
|
17
|
+
let(:substance_parser) { parser.substance }
|
18
|
+
let(:salts_parser) { parser.salts }
|
19
|
+
let(:substance_name_parser) { parser.substance_name }
|
20
|
+
let(:number_parser) { parser.number }
|
21
|
+
let(:excipiens_parser) { parser.excipiens }
|
22
|
+
let(:composition_parser) { parser }
|
23
|
+
|
24
|
+
it "parses identifier" do
|
25
|
+
text = "Solvens: conserv.: alcohol benzylicus 18 mg, aqua ad iniectabilia q.s. ad solutionem pro 2 ml."
|
26
|
+
res1 = composition_parser.parse_with_debug(text)
|
27
|
+
puts res1
|
28
|
+
# pp res1; binding.pry
|
29
|
+
end
|
32
30
|
end
|
33
31
|
end
|
34
|
-
end
|
35
|
-
else
|
36
|
-
|
37
|
-
excipiens_tests = {
|
38
|
-
'aqua ad iniectabilia ad solutionem pro 4 ml' => nil,
|
39
|
-
'aether q.s. ad solutionem pro 1 g' => 'aether q.s. ad solutionem',
|
40
|
-
'saccharum ad globulos pro 1 g' => 'saccarum',
|
41
|
-
'q.s. ad solutionem pro 5 ml' => 'q.s. ad solutionem pro 5 ml',
|
42
|
-
'excipiens ad solutionem pro 1 g, corresp. ethanolum 31 % V/V.' => 'zzz',
|
43
|
-
'excipiens ad emulsionem pro 1 1' => 'aether q.s. ad solutionem',
|
44
|
-
'aqua ad iniectabilia q.s. ad solutionem pro 1 ml' => "aqua ad iniectabilia q.s. ad solutionem",
|
45
|
-
'aqua q.s. ad suspensionem pro 0.5 ml' => "aqua q.s. ad suspensionem",
|
46
|
-
'excipiens ad pulverem corresp. suspensio reconstituta 1 ml' => 'Excipiens',
|
47
|
-
'excipiens ad pulverem pro 1000 mg' => 'Excipiens',
|
48
|
-
'excipiens ad emulsionem pro 1 ml' => 'Excipiens',
|
49
|
-
'excipiens ad pulverem pro charta' => 'Excipiens',
|
50
|
-
'excipiens ad pulverem' => 'Excipiens ad pulverem',
|
51
|
-
'excipiens ad solutionem pro 1 ml corresp. ethanolum 59.5 % V/V' => 'Excipiens',
|
52
|
-
'excipiens ad solutionem pro 2 ml' => 'Excipiens',
|
53
|
-
'excipiens ad solutionem pro 3 ml corresp. 50 µg' => 'Excipiens',
|
54
|
-
'excipiens ad solutionem pro 4 ml corresp. 50 µg pro dosi' => 'Excipiens',
|
55
|
-
'excipiens pro compresso' => 'Excipiens pro compresso',
|
56
|
-
}
|
57
|
-
|
58
|
-
substance_tests = {
|
59
|
-
"U = Histamin Equivalent Prick" => 'U = Histamin Equivalent Prick', # 58566
|
60
|
-
"Vipera aspis > 1000 LD50 mus et Vipera berus > 500 LD50, natrii chloridum" => "Vipera Aspis > 1000 Ld50 Mus",
|
61
|
-
"Vipera aspis > 1000 LD50 mus et Vipera berus > 500 LD50, natrii chloridum, polysorbatum 80" => "Vipera Aspis > 1000 Ld50 Mus",
|
62
|
-
"Vipera aspis > 1000 LD50 mus et Vipera berus > 500 LD50, natrii chloridum, polysorbatum 80, aqua ad iniectabilia ad solutionem pro 4 ml" => "Vipera Aspis > 1000 Ld50 Mus",
|
63
|
-
"Vipera aspis > 1000 LD50 mus et Vipera berus > 500 LD50, natrii chloridum, polysorbatum 80, aqua ad iniectabilia q.s. ad solutionem pro 4 ml" => "Vipera Aspis > 1000 Ld50 Mus",
|
64
|
-
"antitoxinum equis Fab'" => "Antitoxinum Equis Fab'",
|
65
|
-
"antitoxinum equis Fab'x" => "Antitoxinum Equis Fab'x",
|
66
|
-
"calcii gluconas 100 mg corresp. calcium 100 mg" => 'Calcii Gluconas',
|
67
|
-
"calcii gluconas 100 mg et calcii lactas pentahydricus 25 mg et calcii hydrogenophosphas anhydricus 300 mg corresp. calcium 100 mg" => 'Calcii Gluconas',
|
68
|
-
"calcii gluconas 100 mg et calcii lactas pentahydricus 25 mg et calcii hydrogenophosphas anhydricus 300 mg" => 'Calcii Gluconas',
|
69
|
-
"calcii gluconas corresp. calcium 100 mg" => 'Calcii Gluconas Corresp. Calcium',
|
70
|
-
"calcii lactas pentahydricus 25 mg corresp. calcium 100 mg" => 'Calcii Lactas Pentahydricus',
|
71
|
-
"calcii lactas pentahydricus 25 mg et calcii hydrogenophosphas anhydricus 300 mg corresp. calcium 100 mg" => 'Calcii Lactas Pentahydricus',
|
72
|
-
"calcii lactas pentahydricus 25 mg et calcii hydrogenophosphas anhydricus 300 mg" => 'Calcii Lactas Pentahydricus',
|
73
|
-
"calcii lactas pentahydricus 25 mg" => 'Calcii Lactas Pentahydricus',
|
74
|
-
"conserv.: E 217, E 219" => "E 217",
|
75
|
-
"conserv.: E 217, E 219, natrii dehydroacetas" => "E 217",
|
76
|
-
"conserv.: E 217, E 219, natrii dehydroacetas, excipiens ad solutionem pro 1 ml corresp. 50 µg pro dosi" => "line #{__LINE__}",
|
77
|
-
"ethanolum 59.5 % V/V" => 'Ethanolum',
|
78
|
-
"globulina equina (immunisé')" => "Globulina Equina (immunisé')",
|
79
|
-
"globulina equina (immunisé)" => 'Globulina Equina (immunisé)',
|
80
|
-
"globulina equina'" => "Globulina Equina'",
|
81
|
-
"osseinum-hydroxyapatit 200 mg corresp. collagena 52 mg et calcium 43 mg" => "Osseinum-hydroxyapatit",
|
82
|
-
"viperis antitoxinum equis F(ab')" => "Viperis Antitoxinum Equis F(ab')",
|
83
|
-
"viperis antitoxinum equis F(ab')2" => "Viperis Antitoxinum Equis F(ab')2",
|
84
|
-
"viperis antitoxinum equis F(ab)" => "Viperis Antitoxinum Equis F(ab)",
|
85
|
-
"xylometazolini hydrochloridum 0.5 mg, natrii hyaluronas, conserv.: E 217, E 219, natrii dehydroacetas, excipiens ad solutionem pro 1 ml corresp. 50 µg pro dosi" => "line #{__LINE__}",
|
86
|
-
'1-Chloro-2,2,5,5-tetramethyl-4-oxoimidazolidine 75 mg' => '1-chloro-2,2,5,5-tetramethyl-4-oxoimidazolidine',
|
87
|
-
'9,11-linolicum acidum' => "9,11-linolicum Acidum",
|
88
|
-
'9,11-linolicum' => "9,11-linolicum",
|
89
|
-
'A/California/7/2009 virus NYMC X-179A' => 'A/california/7/2009 Virus Nymc X-179a',
|
90
|
-
'DER: 1:4' => 'Der: 1:4',
|
91
|
-
'DER: 3.5:1' => 'Der: 3.5:1',
|
92
|
-
'DER: 6-8:1' => 'Der: 6-8:1',
|
93
|
-
'DTPa-IPV-Komponente (Suspension)' => 'Dtpa-ipv-komponente (suspension)',
|
94
|
-
'DTPa-IPV-Komponente' => 'Dtpa-ipv-komponente',
|
95
|
-
'E 160(a)' => 'E 160(a)',
|
96
|
-
'E 270' => 'E 270',
|
97
|
-
'X-179A' => 'X-179a',
|
98
|
-
'X179A' => 'X179a',
|
99
|
-
'absinthii herba 1.2 g pro charta' => "Absinthii Herba",
|
100
|
-
'acidum 9,11-linolicum 3.25 mg' => "Acidum 9,11-linolicum",
|
101
|
-
'acidum 9,11-linolicum' => "Acidum 9,11-linolicum",
|
102
|
-
'antiox.: E 321' => 'E 321',
|
103
|
-
'benzoe 40 guttae' => 'Benzoe',
|
104
|
-
'benzoe 40 ml' => 'Benzoe',
|
105
|
-
'color.: E 160(a)' => 'E 160', # TODO: or E 160(a) ??
|
106
|
-
'ethanolum 70-78 % V/V' => "Ethanolum",
|
107
|
-
'ginseng extractum corresp. ginsenosidea 3.4 mg' => 'Ginseng Extractum Corresp. Ginsenosidea',
|
108
|
-
'moelle épinière' => 'Moelle épinière',
|
109
|
-
'pimpinellae radix 15 % ad pulverem' => 'Pimpinellae Radix',
|
110
|
-
'retinoli 7900 U.I.' => 'Retinoli',
|
111
|
-
'retinoli palmitas 7900 U.I.' => 'Retinoli Palmitas',
|
112
|
-
'sennae folium 75 % corresp. hydroxyanthracenae 2.7 %' => 'Sennae Folium',
|
113
|
-
'silybum marianum D3 0.3 ml ad solutionem pro 2 ml' => "Silybum Marianum D3",
|
114
|
-
'silybum marianum D3 0.3 ml ad solutionem pro 3 ml corresp. ethanolum 30 % V/V' => "line #{__LINE__}",
|
115
|
-
'streptococcus pneumoniae 12 %' => 'Streptococcus Pneumoniae',
|
116
|
-
'virus NYMC X-179A' => 'Virus Nymc X-179a',
|
117
|
-
'virus poliomyelitis typus 1 inactivatum (D-Antigen) 2 mg' => "Virus Poliomyelitis Typus 1 Inactivatum (d-antigen)",
|
118
|
-
'virus poliomyelitis typus 1 inactivatum (D-Antigen)' => 'Virus Poliomyelitis Typus 1 Inactivatum (d-antigen)',
|
119
|
-
'virus poliomyelitis typus 1 inactivatum D-Antigen' => 'Virus Poliomyelitis Typus 1 Inactivatum D-antigen',
|
120
|
-
'virus poliomyelitis typus inactivatum (D-Antigen) 2 mg' => 'Virus Poliomyelitis Typus Inactivatum (d-antigen)',
|
121
|
-
'virus poliomyelitis typus inactivatum (D-Antigen)' => 'Virus Poliomyelitis Typus Inactivatum (d-antigen)',
|
122
|
-
'virus poliomyelitis typus inactivatum D-Antigen' => 'Virus Poliomyelitis Typus Inactivatum D-antigen',
|
123
|
-
'virus poliomyelitis' => 'Virus Poliomyelitis',
|
124
|
-
'virus' => 'Virus',
|
125
|
-
'xenonum(133-Xe) 74 -740 MBq' => 'Xenonum(133-xe)',
|
126
|
-
'yttrii(90-Y) chloridum zum Kalibrierungszeitpunkt 1850 MBq' => 'Yttrii(90-y) Chloridum Zum Kalibrierungszeitpunkt',
|
127
|
-
'yttrii(90-Y) chloridum zum Kalibrierungszeitpunkt' => 'Yttrii(90-y) Chloridum Zum Kalibrierungszeitpunkt',
|
128
|
-
}
|
129
|
-
|
130
|
-
|
131
|
-
composition_tests = [
|
132
|
-
"E 160(a)",
|
133
|
-
"E 160(a), adeps lanae",
|
134
|
-
"achillea millefolium D3 2,2 mg",
|
135
|
-
"achillea millefolium D3 2,2 mg, aconitum napellus D2 1,32 mg, arnica montana D2 2,2 mg",
|
136
|
-
"achillea millefolium D3 2,2 mg, aconitum napellus D2 1,32 mg, arnica montana D2 2,2 mg, atropa belladonna D2 2,2 mg, bellis perennis D2 1,1 mg, calendula officinalis D2 2,2 mg, chamomilla recutita D3 2,2 mg, echinacea D2 0,55 mg, echinacea purpurea D2 0,55 mg, hamamelis virginiana D1 0,22 mg, hepar sulfuris D6 2,2 mg hypericum perforatum D2 0,66 mg, mercurius solubilis hahnemanni D8 1,1 mg, symphytum officinale D6 2,2 mg, aqua ad iniectabilia, natrii chloridum q.s. ad solutionem pro 2,2 ml.\n",
|
137
|
-
"acida oligoinsaturata 8.15 mg",
|
138
|
-
"acida oligoinsaturata 8.15 mg, alcoholes adipis lanae, adeps lanae, color.: E 160(a), excipiens ad emulsionem pro 1 g.\n",
|
139
|
-
"acidum 9,11-linolicum 3.25 mg",
|
140
|
-
"acidum 9,11-linolicum 3.25 mg, acidum 9,12-linolicum 1.3 mg, aromatica, conserv.: E 215, E 218, excipiens ad emulsionem pro 1 g.\n",
|
141
|
-
"adeps lanae, E 160",
|
142
|
-
"adeps lanae, E 160(a)",
|
143
|
-
"adeps lanae, color.: E 160(a)",
|
144
|
-
"adeps lanae, color.: E 160(a), excipiens ad emulsionem pro 1 g.\n",
|
145
|
-
"adeps lanae, color.: E 160(a), excipiens ad emulsionem pro 1 g.\n",
|
146
|
-
"alcoholes adipis lanae, adeps lanae, color.: E 160(a), excipiens ad emulsionem pro 1 g.\n",
|
147
|
-
"atropa belladonna D2 2,2 mg, bellis perennis D2 1,1 mg, calendula officinalis D2 2,2 mg, chamomilla recutita D3 2,2 mg, echinacea D2 0,55 mg, echinacea purpurea D2 0,55 mg, hamamelis virginiana D1 0,22 mg, hepar sulfuris D6 2,2 mg hypericum perforatum D2 0,66 mg, mercurius solubilis hahnemanni D8 1,1 mg, symphytum officinale D6 2,2 mg, aqua ad iniectabilia, natrii chloridum q.s. ad solutionem pro 2,2 ml.\n",
|
148
|
-
"berberidis corticis extractum ethanolicum liquidum 35 mg, DER: 6:1, combreti extractum aquosum liquidum 18 mg, DER: 1:4, cynarae extractum ethanolicum liquidum 36 mg, DER: 1:1, orthosiphonis folii extractum ethanolicum liquidum 18 mg, DER: 3.5:1, excipiens ad solutionem pro 1 ml, corresp. ethanolum 74 % V/V\n",
|
149
|
-
"cholecalciferolum 250 U.I., acidum ascorbicum 20 mg, calcii gluconas 100 mg et calcii lactas pentahydricus 25 mg et calcii hydrogenophosphas anhydricus 300 mg corresp. calcium 100 mg, arom.: saccharinum natricum, natrii cyclamas, vanillinum et alia, excipiens pro compresso obducto.",
|
150
|
-
"color.: E 160(a)",
|
151
|
-
"color.: E 160(a)\n",
|
152
|
-
"conserv.: E 217, E 219, natrii dehydroacetas",
|
153
|
-
"conserv.: E 217, E 219, natrii dehydroacetas, excipiens ad solutionem pro 1 ml corresp. 50 µg pro dosi.",
|
154
|
-
"extractum ethanolicum et glycerolicum liquidum ex absinthii herba 0.7 mg, cinnamomi cortex 3.8 mg, guaiaci lignum 14.3 mg, millefolii herba 7 mg, rhoeados flos 11 mg, tormentillae rhizoma 9.5 mg, balsamum tolutanum 0.3 mg, benzoe tonkinensis 4.8 mg, myrrha 2.4 mg, olibanum 0.9 mg, excipiens ad solutionem pro 1 ml, corresp. 40 guttae, corresp. ethanolum 37 % V/V",
|
155
|
-
"hamamelis virginiana D1 0,22 mg, hepar sulfuris D6 2,2 mg hypericum perforatum D2 0,66 mg, mercurius solubilis hahnemanni D8 1,1 mg, symphytum officinale D6 2,2 mg, aqua ad iniectabilia, natrii chloridum q.s. ad solutionem pro 2,2 ml.\n",
|
156
|
-
"hepar sulfuris D6 2,2 mg hypericum perforatum D2 0,66 mg",
|
157
|
-
"hepar sulfuris D6 2,2 mg hypericum perforatum D2 0,66 mg, mercurius solubilis hahnemanni D8 1,1 mg, symphytum officinale D6 2,2 mg, aqua ad iniectabilia, natrii chloridum q.s. ad solutionem pro 2,2 ml.\n",
|
158
|
-
"hyaluronas, conserv.: E 217, E 219",
|
159
|
-
"hypericum perforatum D2 0,66 mg, mercurius solubilis hahnemanni D8 1,1 mg, symphytum officinale D6 2,2 mg, aqua ad iniectabilia, natrii chloridum q.s. ad solutionem pro 2,2 ml.\n",
|
160
|
-
"mercurius solubilis hahnemanni D8 1,1 mg, symphytum officinale D6 2,2 mg, aqua ad iniectabilia, natrii chloridum q.s. ad solutionem pro 2,2 ml.\n",
|
161
|
-
"mercurius solubilis hahnemanni D8 1,1 mg, symphytum officinale D6 2,2 mg, aqua ad iniectabilia, natrii chloridum q.s. ad solutionem pro 2,2 ml.\n",
|
162
|
-
"natrii dehydroacetas, excipiens ad solutionem pro 1 ml corresp. 50 µg pro dosi.",
|
163
|
-
"osseinum-hydroxyapatit 200 mg corresp. collagena 52 mg et calcium 43 mg",
|
164
|
-
"rhei extractum ethanolicum siccum 50 mg corresp. glycosida anthrachinoni 5 mg, acidum salicylicum 10 mg, excipiens ad solutionem pro 1 ml corresp. ethanolum 59.5 % V/V",
|
165
|
-
"sennae folium 75 % corresp. hydroxyanthracenae 2.7 %",
|
166
|
-
"viperis antitoxinum equis F(ab')2 corresp. Vipera aspis > 1000 LD50 mus et Vipera berus > 500 LD50 mus et Vipera ammodytes > 1000 LD50 mus, natrii chloridum, polysorbatum 80, aqua ad iniectabilia q.s. ad solutionem pro 4 ml.",
|
167
|
-
"xylometazolini hydrochloridum 0.5 mg, natrii hyaluronas, conserv.: E 217, E 219, natrii dehydroacetas, excipiens ad solutionem pro 1 ml corresp. 50 µg pro dosi.",
|
168
|
-
'gasum inhalationis, pro vitro',
|
169
|
-
'toxoidum pertussis 25 µg et haemagglutininum filamentosum 25 µg',
|
170
|
-
'xenonum 74 -740 MBq',
|
171
|
-
]
|
172
|
-
|
173
|
-
nr_parsing_tests = excipiens_tests.size + substance_tests.size + composition_tests.size
|
174
|
-
if RunAllParsingExamples
|
175
|
-
puts "Testing includes #{nr_parsing_tests} lines to be parsed"
|
176
32
|
else
|
177
|
-
puts "Skip testing includes #{nr_parsing_tests} lines to be parsed"
|
178
|
-
end
|
179
33
|
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
34
|
+
excipiens_tests = {
|
35
|
+
"aqua ad iniectabilia ad solutionem pro 4 ml" => nil,
|
36
|
+
"aether q.s. ad solutionem pro 1 g" => "aether q.s. ad solutionem",
|
37
|
+
"saccharum ad globulos pro 1 g" => "saccarum",
|
38
|
+
"q.s. ad solutionem pro 5 ml" => "q.s. ad solutionem pro 5 ml",
|
39
|
+
"excipiens ad solutionem pro 1 g, corresp. ethanolum 31 % V/V." => "zzz",
|
40
|
+
"excipiens ad emulsionem pro 1 1" => "aether q.s. ad solutionem",
|
41
|
+
"aqua ad iniectabilia q.s. ad solutionem pro 1 ml" => "aqua ad iniectabilia q.s. ad solutionem",
|
42
|
+
"aqua q.s. ad suspensionem pro 0.5 ml" => "aqua q.s. ad suspensionem",
|
43
|
+
"excipiens ad pulverem corresp. suspensio reconstituta 1 ml" => "Excipiens",
|
44
|
+
"excipiens ad pulverem pro 1000 mg" => "Excipiens",
|
45
|
+
"excipiens ad emulsionem pro 1 ml" => "Excipiens",
|
46
|
+
"excipiens ad pulverem pro charta" => "Excipiens",
|
47
|
+
"excipiens ad pulverem" => "Excipiens ad pulverem",
|
48
|
+
"excipiens ad solutionem pro 1 ml corresp. ethanolum 59.5 % V/V" => "Excipiens",
|
49
|
+
"excipiens ad solutionem pro 2 ml" => "Excipiens",
|
50
|
+
"excipiens ad solutionem pro 3 ml corresp. 50 µg" => "Excipiens",
|
51
|
+
"excipiens ad solutionem pro 4 ml corresp. 50 µg pro dosi" => "Excipiens",
|
52
|
+
"excipiens pro compresso" => "Excipiens pro compresso"
|
53
|
+
}
|
54
|
+
|
55
|
+
substance_tests = {
|
56
|
+
"U = Histamin Equivalent Prick" => "U = Histamin Equivalent Prick", # 58566
|
57
|
+
"Vipera aspis > 1000 LD50 mus et Vipera berus > 500 LD50, natrii chloridum" => "Vipera Aspis > 1000 Ld50 Mus",
|
58
|
+
"Vipera aspis > 1000 LD50 mus et Vipera berus > 500 LD50, natrii chloridum, polysorbatum 80" => "Vipera Aspis > 1000 Ld50 Mus",
|
59
|
+
"Vipera aspis > 1000 LD50 mus et Vipera berus > 500 LD50, natrii chloridum, polysorbatum 80, aqua ad iniectabilia ad solutionem pro 4 ml" => "Vipera Aspis > 1000 Ld50 Mus",
|
60
|
+
"Vipera aspis > 1000 LD50 mus et Vipera berus > 500 LD50, natrii chloridum, polysorbatum 80, aqua ad iniectabilia q.s. ad solutionem pro 4 ml" => "Vipera Aspis > 1000 Ld50 Mus",
|
61
|
+
"antitoxinum equis Fab'" => "Antitoxinum Equis Fab'",
|
62
|
+
"antitoxinum equis Fab'x" => "Antitoxinum Equis Fab'x",
|
63
|
+
"calcii gluconas 100 mg corresp. calcium 100 mg" => "Calcii Gluconas",
|
64
|
+
"calcii gluconas 100 mg et calcii lactas pentahydricus 25 mg et calcii hydrogenophosphas anhydricus 300 mg corresp. calcium 100 mg" => "Calcii Gluconas",
|
65
|
+
"calcii gluconas 100 mg et calcii lactas pentahydricus 25 mg et calcii hydrogenophosphas anhydricus 300 mg" => "Calcii Gluconas",
|
66
|
+
"calcii gluconas corresp. calcium 100 mg" => "Calcii Gluconas Corresp. Calcium",
|
67
|
+
"calcii lactas pentahydricus 25 mg corresp. calcium 100 mg" => "Calcii Lactas Pentahydricus",
|
68
|
+
"calcii lactas pentahydricus 25 mg et calcii hydrogenophosphas anhydricus 300 mg corresp. calcium 100 mg" => "Calcii Lactas Pentahydricus",
|
69
|
+
"calcii lactas pentahydricus 25 mg et calcii hydrogenophosphas anhydricus 300 mg" => "Calcii Lactas Pentahydricus",
|
70
|
+
"calcii lactas pentahydricus 25 mg" => "Calcii Lactas Pentahydricus",
|
71
|
+
"conserv.: E 217, E 219" => "E 217",
|
72
|
+
"conserv.: E 217, E 219, natrii dehydroacetas" => "E 217",
|
73
|
+
"conserv.: E 217, E 219, natrii dehydroacetas, excipiens ad solutionem pro 1 ml corresp. 50 µg pro dosi" => "line #{__LINE__}",
|
74
|
+
"ethanolum 59.5 % V/V" => "Ethanolum",
|
75
|
+
"globulina equina (immunisé')" => "Globulina Equina (immunisé')",
|
76
|
+
"globulina equina (immunisé)" => "Globulina Equina (immunisé)",
|
77
|
+
"globulina equina'" => "Globulina Equina'",
|
78
|
+
"osseinum-hydroxyapatit 200 mg corresp. collagena 52 mg et calcium 43 mg" => "Osseinum-hydroxyapatit",
|
79
|
+
"viperis antitoxinum equis F(ab')" => "Viperis Antitoxinum Equis F(ab')",
|
80
|
+
"viperis antitoxinum equis F(ab')2" => "Viperis Antitoxinum Equis F(ab')2",
|
81
|
+
"viperis antitoxinum equis F(ab)" => "Viperis Antitoxinum Equis F(ab)",
|
82
|
+
"xylometazolini hydrochloridum 0.5 mg, natrii hyaluronas, conserv.: E 217, E 219, natrii dehydroacetas, excipiens ad solutionem pro 1 ml corresp. 50 µg pro dosi" => "line #{__LINE__}",
|
83
|
+
"1-Chloro-2,2,5,5-tetramethyl-4-oxoimidazolidine 75 mg" => "1-chloro-2,2,5,5-tetramethyl-4-oxoimidazolidine",
|
84
|
+
"9,11-linolicum acidum" => "9,11-linolicum Acidum",
|
85
|
+
"9,11-linolicum" => "9,11-linolicum",
|
86
|
+
"A/California/7/2009 virus NYMC X-179A" => "A/california/7/2009 Virus Nymc X-179a",
|
87
|
+
"DER: 1:4" => "Der: 1:4",
|
88
|
+
"DER: 3.5:1" => "Der: 3.5:1",
|
89
|
+
"DER: 6-8:1" => "Der: 6-8:1",
|
90
|
+
"DTPa-IPV-Komponente (Suspension)" => "Dtpa-ipv-komponente (suspension)",
|
91
|
+
"DTPa-IPV-Komponente" => "Dtpa-ipv-komponente",
|
92
|
+
"E 160(a)" => "E 160(a)",
|
93
|
+
"E 270" => "E 270",
|
94
|
+
"X-179A" => "X-179a",
|
95
|
+
"X179A" => "X179a",
|
96
|
+
"absinthii herba 1.2 g pro charta" => "Absinthii Herba",
|
97
|
+
"acidum 9,11-linolicum 3.25 mg" => "Acidum 9,11-linolicum",
|
98
|
+
"acidum 9,11-linolicum" => "Acidum 9,11-linolicum",
|
99
|
+
"antiox.: E 321" => "E 321",
|
100
|
+
"benzoe 40 guttae" => "Benzoe",
|
101
|
+
"benzoe 40 ml" => "Benzoe",
|
102
|
+
"color.: E 160(a)" => "E 160", # TODO: or E 160(a) ??
|
103
|
+
"ethanolum 70-78 % V/V" => "Ethanolum",
|
104
|
+
"ginseng extractum corresp. ginsenosidea 3.4 mg" => "Ginseng Extractum Corresp. Ginsenosidea",
|
105
|
+
"moelle épinière" => "Moelle épinière",
|
106
|
+
"pimpinellae radix 15 % ad pulverem" => "Pimpinellae Radix",
|
107
|
+
"retinoli 7900 U.I." => "Retinoli",
|
108
|
+
"retinoli palmitas 7900 U.I." => "Retinoli Palmitas",
|
109
|
+
"sennae folium 75 % corresp. hydroxyanthracenae 2.7 %" => "Sennae Folium",
|
110
|
+
"silybum marianum D3 0.3 ml ad solutionem pro 2 ml" => "Silybum Marianum D3",
|
111
|
+
"silybum marianum D3 0.3 ml ad solutionem pro 3 ml corresp. ethanolum 30 % V/V" => "line #{__LINE__}",
|
112
|
+
"streptococcus pneumoniae 12 %" => "Streptococcus Pneumoniae",
|
113
|
+
"virus NYMC X-179A" => "Virus Nymc X-179a",
|
114
|
+
"virus poliomyelitis typus 1 inactivatum (D-Antigen) 2 mg" => "Virus Poliomyelitis Typus 1 Inactivatum (d-antigen)",
|
115
|
+
"virus poliomyelitis typus 1 inactivatum (D-Antigen)" => "Virus Poliomyelitis Typus 1 Inactivatum (d-antigen)",
|
116
|
+
"virus poliomyelitis typus 1 inactivatum D-Antigen" => "Virus Poliomyelitis Typus 1 Inactivatum D-antigen",
|
117
|
+
"virus poliomyelitis typus inactivatum (D-Antigen) 2 mg" => "Virus Poliomyelitis Typus Inactivatum (d-antigen)",
|
118
|
+
"virus poliomyelitis typus inactivatum (D-Antigen)" => "Virus Poliomyelitis Typus Inactivatum (d-antigen)",
|
119
|
+
"virus poliomyelitis typus inactivatum D-Antigen" => "Virus Poliomyelitis Typus Inactivatum D-antigen",
|
120
|
+
"virus poliomyelitis" => "Virus Poliomyelitis",
|
121
|
+
"virus" => "Virus",
|
122
|
+
"xenonum(133-Xe) 74 -740 MBq" => "Xenonum(133-xe)",
|
123
|
+
"yttrii(90-Y) chloridum zum Kalibrierungszeitpunkt 1850 MBq" => "Yttrii(90-y) Chloridum Zum Kalibrierungszeitpunkt",
|
124
|
+
"yttrii(90-Y) chloridum zum Kalibrierungszeitpunkt" => "Yttrii(90-y) Chloridum Zum Kalibrierungszeitpunkt"
|
125
|
+
}
|
126
|
+
|
127
|
+
composition_tests = [
|
128
|
+
"E 160(a)",
|
129
|
+
"E 160(a), adeps lanae",
|
130
|
+
"achillea millefolium D3 2,2 mg",
|
131
|
+
"achillea millefolium D3 2,2 mg, aconitum napellus D2 1,32 mg, arnica montana D2 2,2 mg",
|
132
|
+
"achillea millefolium D3 2,2 mg, aconitum napellus D2 1,32 mg, arnica montana D2 2,2 mg, atropa belladonna D2 2,2 mg, bellis perennis D2 1,1 mg, calendula officinalis D2 2,2 mg, chamomilla recutita D3 2,2 mg, echinacea D2 0,55 mg, echinacea purpurea D2 0,55 mg, hamamelis virginiana D1 0,22 mg, hepar sulfuris D6 2,2 mg hypericum perforatum D2 0,66 mg, mercurius solubilis hahnemanni D8 1,1 mg, symphytum officinale D6 2,2 mg, aqua ad iniectabilia, natrii chloridum q.s. ad solutionem pro 2,2 ml.\n",
|
133
|
+
"acida oligoinsaturata 8.15 mg",
|
134
|
+
"acida oligoinsaturata 8.15 mg, alcoholes adipis lanae, adeps lanae, color.: E 160(a), excipiens ad emulsionem pro 1 g.\n",
|
135
|
+
"acidum 9,11-linolicum 3.25 mg",
|
136
|
+
"acidum 9,11-linolicum 3.25 mg, acidum 9,12-linolicum 1.3 mg, aromatica, conserv.: E 215, E 218, excipiens ad emulsionem pro 1 g.\n",
|
137
|
+
"adeps lanae, E 160",
|
138
|
+
"adeps lanae, E 160(a)",
|
139
|
+
"adeps lanae, color.: E 160(a)",
|
140
|
+
"adeps lanae, color.: E 160(a), excipiens ad emulsionem pro 1 g.\n",
|
141
|
+
"adeps lanae, color.: E 160(a), excipiens ad emulsionem pro 1 g.\n",
|
142
|
+
"alcoholes adipis lanae, adeps lanae, color.: E 160(a), excipiens ad emulsionem pro 1 g.\n",
|
143
|
+
"atropa belladonna D2 2,2 mg, bellis perennis D2 1,1 mg, calendula officinalis D2 2,2 mg, chamomilla recutita D3 2,2 mg, echinacea D2 0,55 mg, echinacea purpurea D2 0,55 mg, hamamelis virginiana D1 0,22 mg, hepar sulfuris D6 2,2 mg hypericum perforatum D2 0,66 mg, mercurius solubilis hahnemanni D8 1,1 mg, symphytum officinale D6 2,2 mg, aqua ad iniectabilia, natrii chloridum q.s. ad solutionem pro 2,2 ml.\n",
|
144
|
+
"berberidis corticis extractum ethanolicum liquidum 35 mg, DER: 6:1, combreti extractum aquosum liquidum 18 mg, DER: 1:4, cynarae extractum ethanolicum liquidum 36 mg, DER: 1:1, orthosiphonis folii extractum ethanolicum liquidum 18 mg, DER: 3.5:1, excipiens ad solutionem pro 1 ml, corresp. ethanolum 74 % V/V\n",
|
145
|
+
"cholecalciferolum 250 U.I., acidum ascorbicum 20 mg, calcii gluconas 100 mg et calcii lactas pentahydricus 25 mg et calcii hydrogenophosphas anhydricus 300 mg corresp. calcium 100 mg, arom.: saccharinum natricum, natrii cyclamas, vanillinum et alia, excipiens pro compresso obducto.",
|
146
|
+
"color.: E 160(a)",
|
147
|
+
"color.: E 160(a)\n",
|
148
|
+
"conserv.: E 217, E 219, natrii dehydroacetas",
|
149
|
+
"conserv.: E 217, E 219, natrii dehydroacetas, excipiens ad solutionem pro 1 ml corresp. 50 µg pro dosi.",
|
150
|
+
"extractum ethanolicum et glycerolicum liquidum ex absinthii herba 0.7 mg, cinnamomi cortex 3.8 mg, guaiaci lignum 14.3 mg, millefolii herba 7 mg, rhoeados flos 11 mg, tormentillae rhizoma 9.5 mg, balsamum tolutanum 0.3 mg, benzoe tonkinensis 4.8 mg, myrrha 2.4 mg, olibanum 0.9 mg, excipiens ad solutionem pro 1 ml, corresp. 40 guttae, corresp. ethanolum 37 % V/V",
|
151
|
+
"hamamelis virginiana D1 0,22 mg, hepar sulfuris D6 2,2 mg hypericum perforatum D2 0,66 mg, mercurius solubilis hahnemanni D8 1,1 mg, symphytum officinale D6 2,2 mg, aqua ad iniectabilia, natrii chloridum q.s. ad solutionem pro 2,2 ml.\n",
|
152
|
+
"hepar sulfuris D6 2,2 mg hypericum perforatum D2 0,66 mg",
|
153
|
+
"hepar sulfuris D6 2,2 mg hypericum perforatum D2 0,66 mg, mercurius solubilis hahnemanni D8 1,1 mg, symphytum officinale D6 2,2 mg, aqua ad iniectabilia, natrii chloridum q.s. ad solutionem pro 2,2 ml.\n",
|
154
|
+
"hyaluronas, conserv.: E 217, E 219",
|
155
|
+
"hypericum perforatum D2 0,66 mg, mercurius solubilis hahnemanni D8 1,1 mg, symphytum officinale D6 2,2 mg, aqua ad iniectabilia, natrii chloridum q.s. ad solutionem pro 2,2 ml.\n",
|
156
|
+
"mercurius solubilis hahnemanni D8 1,1 mg, symphytum officinale D6 2,2 mg, aqua ad iniectabilia, natrii chloridum q.s. ad solutionem pro 2,2 ml.\n",
|
157
|
+
"mercurius solubilis hahnemanni D8 1,1 mg, symphytum officinale D6 2,2 mg, aqua ad iniectabilia, natrii chloridum q.s. ad solutionem pro 2,2 ml.\n",
|
158
|
+
"natrii dehydroacetas, excipiens ad solutionem pro 1 ml corresp. 50 µg pro dosi.",
|
159
|
+
"osseinum-hydroxyapatit 200 mg corresp. collagena 52 mg et calcium 43 mg",
|
160
|
+
"rhei extractum ethanolicum siccum 50 mg corresp. glycosida anthrachinoni 5 mg, acidum salicylicum 10 mg, excipiens ad solutionem pro 1 ml corresp. ethanolum 59.5 % V/V",
|
161
|
+
"sennae folium 75 % corresp. hydroxyanthracenae 2.7 %",
|
162
|
+
"viperis antitoxinum equis F(ab')2 corresp. Vipera aspis > 1000 LD50 mus et Vipera berus > 500 LD50 mus et Vipera ammodytes > 1000 LD50 mus, natrii chloridum, polysorbatum 80, aqua ad iniectabilia q.s. ad solutionem pro 4 ml.",
|
163
|
+
"xylometazolini hydrochloridum 0.5 mg, natrii hyaluronas, conserv.: E 217, E 219, natrii dehydroacetas, excipiens ad solutionem pro 1 ml corresp. 50 µg pro dosi.",
|
164
|
+
"gasum inhalationis, pro vitro",
|
165
|
+
"toxoidum pertussis 25 µg et haemagglutininum filamentosum 25 µg",
|
166
|
+
"xenonum 74 -740 MBq"
|
167
|
+
]
|
168
|
+
|
169
|
+
nr_parsing_tests = excipiens_tests.size + substance_tests.size + composition_tests.size
|
170
|
+
if RUN_ALL_PARSING_EXAMPLES
|
171
|
+
puts "Testing includes #{nr_parsing_tests} lines to be parsed"
|
172
|
+
else
|
173
|
+
puts "Skip testing includes #{nr_parsing_tests} lines to be parsed"
|
174
|
+
end
|
186
175
|
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
176
|
+
# Here follow some low level test of the most important parts of the parser
|
177
|
+
describe CompositionParser do
|
178
|
+
let(:parser) { CompositionParser.new }
|
179
|
+
|
180
|
+
context "should return correct dose for 2*10^9 CFU.'" do
|
181
|
+
let(:dose_parse) { parser.dose }
|
182
|
+
|
183
|
+
[
|
184
|
+
"40 U.",
|
185
|
+
"50'000 U.I.",
|
186
|
+
"1 Mio. U.I.",
|
187
|
+
"3 Mg",
|
188
|
+
"2 mg",
|
189
|
+
"0.3 ml",
|
190
|
+
"0.01 mg/ml",
|
191
|
+
"3 mg/ml",
|
192
|
+
"2*10^9 CFU",
|
193
|
+
"10^4.4 U.",
|
194
|
+
"20 mg",
|
195
|
+
"100 % m/m",
|
196
|
+
"308.7 mg/g",
|
197
|
+
"0.11 µg/g",
|
198
|
+
"2.2 g",
|
199
|
+
"2,2 g",
|
200
|
+
"59.5 % V/V",
|
201
|
+
"50 %",
|
202
|
+
"80-120 g"
|
203
|
+
].each { |id|
|
209
204
|
it "parses dose #{id}" do
|
210
|
-
expect(dose_parse).to
|
205
|
+
expect(dose_parse).to parse(id)
|
211
206
|
end
|
212
207
|
}
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
].each {
|
218
|
-
|id|
|
208
|
+
[
|
209
|
+
"10 2*10^9 CFU",
|
210
|
+
"20 20 mg",
|
211
|
+
"50%" # This can be part of a name like ferrum-quarz 50%
|
212
|
+
].each { |id|
|
219
213
|
it "parses dose #{id}" do
|
220
|
-
expect(dose_parse).to_not
|
214
|
+
expect(dose_parse).to_not parse(id)
|
221
215
|
end
|
222
216
|
}
|
223
|
-
|
224
|
-
|
225
|
-
context "identifier parsing" do
|
226
|
-
let(:identifier_parser) { parser.identifier }
|
217
|
+
end
|
227
218
|
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
219
|
+
context "identifier parsing" do
|
220
|
+
let(:identifier_parser) { parser.identifier }
|
221
|
+
|
222
|
+
it "parses identifier" do
|
223
|
+
expect(identifier_parser).to parse("calcium")
|
224
|
+
expect(identifier_parser).to parse("D2")
|
225
|
+
expect(identifier_parser).to parse("9,11-linolicum")
|
226
|
+
expect(identifier_parser).to parse("xenonum(133-Xe)")
|
227
|
+
expect(identifier_parser).to_not parse("10")
|
228
|
+
expect(identifier_parser).to_not parse("pro asdf")
|
229
|
+
expect(identifier_parser).to_not parse("calcium,")
|
230
|
+
end
|
236
231
|
end
|
237
|
-
end
|
238
232
|
|
239
|
-
|
240
|
-
|
233
|
+
context "identifier_with_comma parsing" do
|
234
|
+
let(:identifier_with_comma_parser) { parser.identifier_with_comma }
|
241
235
|
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
236
|
+
it "parses identifier_with_comma" do
|
237
|
+
expect(identifier_with_comma_parser).to parse("calcium")
|
238
|
+
end
|
239
|
+
it "parses identifier_with_comma" do
|
240
|
+
expect(identifier_with_comma_parser).to parse("9,11-linolicum")
|
241
|
+
expect(identifier_with_comma_parser).to parse("a_bart_c")
|
242
|
+
expect(identifier_with_comma_parser).to parse("éxcuäseé")
|
243
|
+
end
|
244
|
+
it "parses identifier_with_comma" do
|
245
|
+
expect(identifier_with_comma_parser).to_not parse("10")
|
246
|
+
expect(identifier_with_comma_parser).to_not parse("9,11-lino licum")
|
247
|
+
end
|
248
|
+
it "parses identifier_with_comma no comma at end allowed" do
|
249
|
+
expect(identifier_with_comma_parser).to_not parse("calcium9,")
|
250
|
+
end
|
251
|
+
it "parses identifier_with_comma no comma at end allowed" do
|
252
|
+
expect(identifier_with_comma_parser).to_not parse("calcium,")
|
253
|
+
end
|
254
|
+
it "parses identifier_with_comma no comma at end allowed" do
|
255
|
+
expect(identifier_with_comma_parser).to_not parse("9,11-lino licum,")
|
256
|
+
end
|
257
|
+
it "parses identifier_with_comma" do
|
258
|
+
expect(identifier_with_comma_parser).to_not parse("9,11-linolicum;")
|
259
|
+
end
|
265
260
|
end
|
266
|
-
end
|
267
261
|
|
268
|
-
|
269
|
-
|
262
|
+
context "label parsing" do
|
263
|
+
let(:label_parser) { parser.label }
|
270
264
|
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
].each {
|
277
|
-
|id|
|
265
|
+
[
|
266
|
+
"A):",
|
267
|
+
"II)",
|
268
|
+
"V)",
|
269
|
+
"A): acari allergeni extractum 50 U.: "
|
270
|
+
].each { |id|
|
278
271
|
it "parses label #{id}" do
|
279
|
-
expect(label_parser).to
|
272
|
+
expect(label_parser).to parse(id)
|
280
273
|
end
|
281
274
|
}
|
282
|
-
|
283
|
-
|
284
|
-
].each {
|
285
|
-
|id|
|
275
|
+
[
|
276
|
+
"I): albuminum humanum colloidale 0.5 mg,"
|
277
|
+
].each { |id|
|
286
278
|
it "parses label #{id}" do
|
287
|
-
expect(label_parser).to_not
|
279
|
+
expect(label_parser).to_not parse(id)
|
288
280
|
end
|
289
281
|
}
|
290
|
-
|
291
|
-
|
292
|
-
context "substance parsing" do
|
293
|
-
let(:substance_parser) { parser.substance }
|
282
|
+
end
|
294
283
|
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
284
|
+
context "substance parsing" do
|
285
|
+
let(:substance_parser) { parser.substance }
|
286
|
+
|
287
|
+
[
|
288
|
+
"calcium",
|
289
|
+
"calcium 10 mg",
|
290
|
+
"ferrum-quarz 50% 20 mg",
|
291
|
+
"macrogolum 3350",
|
292
|
+
"pollinis allergeni extractum (Phleum pratense) 10 U.",
|
293
|
+
"phenoxymethylpenicillinum kalicum 1 U.I.",
|
294
|
+
"phenoxymethylpenicillinum kalicum 1 Mio. U.I.",
|
295
|
+
"DER: 1:4",
|
296
|
+
"DER: 3-5:1",
|
297
|
+
"DER: 6-8:1",
|
298
|
+
"DER: 4.0-9.0:1",
|
299
|
+
"retinoli palmitas 7900 U.I."
|
300
|
+
].each do |id|
|
310
301
|
it "parses substance #{id}" do
|
311
|
-
expect(substance_parser).to
|
302
|
+
expect(substance_parser).to parse(id)
|
312
303
|
end
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
let(:excipiens_parser) { parser.excipiens }
|
304
|
+
end
|
305
|
+
it "parses substance calcium, zwei" do
|
306
|
+
expect(substance_parser).to_not parse("calcium, zwei")
|
307
|
+
end
|
308
|
+
end
|
319
309
|
|
320
|
-
|
321
|
-
|
322
|
-
excipiens_tests.each{
|
323
|
-
|value, name|
|
324
|
-
it "parses excipiens #{value}" do expect(excipiens_parser).to parse(value) end
|
325
|
-
}
|
310
|
+
context "excipiens parsing" do
|
311
|
+
let(:excipiens_parser) { parser.excipiens }
|
326
312
|
|
327
|
-
|
313
|
+
puts "Testing whether #{excipiens_tests.size} excipiens can be parsed"
|
314
|
+
let(:excipiens_parser) { parser.excipiens }
|
315
|
+
excipiens_tests.each do |value, name|
|
316
|
+
it "parses excipiens #{value}" do
|
317
|
+
expect(excipiens_parser).to parse(value)
|
318
|
+
end
|
319
|
+
end
|
320
|
+
end
|
328
321
|
|
329
|
-
|
330
|
-
|
322
|
+
context "substance_name parsing" do
|
323
|
+
let(:substance_name_parser) { parser.substance_name }
|
331
324
|
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
].each {
|
338
|
-
|id|
|
325
|
+
[
|
326
|
+
"calcium",
|
327
|
+
"calendula officinalis D2",
|
328
|
+
"pollinis allergeni extractum (Phleum pratense)",
|
329
|
+
"retinoli palmitas"
|
330
|
+
].each { |id|
|
339
331
|
it "parses substance_name #{id}" do
|
340
|
-
expect(substance_name_parser).to
|
332
|
+
expect(substance_name_parser).to parse(id)
|
341
333
|
end
|
342
334
|
}
|
343
335
|
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
].each {
|
353
|
-
|id|
|
336
|
+
[
|
337
|
+
"calcium 10 mg",
|
338
|
+
"ferrum-quarz 50% 20 mg",
|
339
|
+
"calendula officinalis D2 2.2 mg",
|
340
|
+
"macrogolum 3.2",
|
341
|
+
"macrogolum 3350 10 mg",
|
342
|
+
"pollinis allergeni extractum (Phleum pratense) 10 U.",
|
343
|
+
"retinoli palmitas 7900 U.I."
|
344
|
+
].each { |id|
|
354
345
|
it "parses substance_name #{id}" do
|
355
|
-
expect(substance_name_parser).not_to
|
346
|
+
expect(substance_name_parser).not_to parse(id)
|
356
347
|
end
|
357
348
|
}
|
349
|
+
end
|
358
350
|
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
"F(ab')2",
|
370
|
-
].each {
|
371
|
-
|id|
|
351
|
+
context "simple_substance parsing" do
|
352
|
+
let(:simple_substance_parser) { parser.simple_substance }
|
353
|
+
[
|
354
|
+
"2,2'-methylen-bis(6-tert.-butyl-4-methyl-phenolum)",
|
355
|
+
"calcium part_b",
|
356
|
+
"calcium 10",
|
357
|
+
"calcium 10 mg",
|
358
|
+
# 'macrogolum 3350 10 mg',
|
359
|
+
"F(ab')2"
|
360
|
+
].each { |id|
|
372
361
|
it "parses simple_substance #{id}" do
|
373
|
-
expect(simple_substance_parser).to
|
362
|
+
expect(simple_substance_parser).to parse(id)
|
374
363
|
end
|
375
364
|
}
|
376
|
-
|
365
|
+
[
|
377
366
|
"calcium corresp. 10 ml",
|
378
367
|
"excipiens",
|
379
368
|
"calcium ut magnesium",
|
380
|
-
"calcium et magnesium"
|
381
|
-
].each {
|
382
|
-
|id|
|
369
|
+
"calcium et magnesium"
|
370
|
+
].each { |id|
|
383
371
|
it "parses simple_substance #{id} should fail" do
|
384
|
-
expect(simple_substance_parser).to_not
|
372
|
+
expect(simple_substance_parser).to_not parse(id)
|
385
373
|
end
|
386
374
|
}
|
387
|
-
|
375
|
+
end
|
388
376
|
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
# "Viperis Antitoxinum Equis F(ab')2", swissmedic patch, as only one occurrence
|
401
|
-
|
402
|
-
].each {
|
403
|
-
|id|
|
377
|
+
context "substance_name parsing" do
|
378
|
+
[
|
379
|
+
"calcium",
|
380
|
+
"calcium par_2 Part_C",
|
381
|
+
"semecarpus anacardium D12",
|
382
|
+
"virus poliomyelitis typus inactivatum",
|
383
|
+
"virus poliomyelitis typus inactivatum (D-Antigen)",
|
384
|
+
"virus poliomyelitis typus 1 inactivatum (D-Antigen)",
|
385
|
+
"stanni(II) chloridum dihydricum",
|
386
|
+
"ethanol.",
|
387
|
+
"calendula officinalis D2",
|
388
|
+
# "Viperis Antitoxinum Equis F(ab')2", swissmedic patch, as only one occurrence
|
389
|
+
"xenonum(133-Xe)"
|
390
|
+
].each { |id|
|
404
391
|
let(:substance_name_parser) { parser.substance_name }
|
405
392
|
it "parses substance_name #{id}" do
|
406
|
-
expect(substance_name_parser).to
|
393
|
+
expect(substance_name_parser).to parse(id)
|
407
394
|
end
|
408
395
|
}
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
].each {
|
420
|
-
|id|
|
396
|
+
[
|
397
|
+
"calendula officinalis D2 2,2 mg",
|
398
|
+
"calcium corresp. xx",
|
399
|
+
"calcium residui: xx",
|
400
|
+
"calcium ut xx",
|
401
|
+
"calcium et xx",
|
402
|
+
"calcium,",
|
403
|
+
"calcium9,",
|
404
|
+
"excipiens pro",
|
405
|
+
"albuminum humanum colloidale, stanni(II) chloridum dihydricum"
|
406
|
+
].each { |id|
|
421
407
|
let(:substance_name_parser) { parser.substance_name }
|
422
408
|
it "parses substance_name #{id} should fail" do
|
423
|
-
expect(substance_name_parser).to_not
|
409
|
+
expect(substance_name_parser).to_not parse(id)
|
424
410
|
end
|
425
411
|
}
|
426
|
-
|
412
|
+
end
|
427
413
|
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
].each {
|
438
|
-
|id|
|
414
|
+
context "composition parsing" do
|
415
|
+
let(:composition_parser) { parser.composition }
|
416
|
+
[
|
417
|
+
"calcium",
|
418
|
+
"calcium par_2 Part_C",
|
419
|
+
"virus poliomyelitis typus inactivatum",
|
420
|
+
"virus poliomyelitis typus inactivatum (D-Antigen)",
|
421
|
+
"virus poliomyelitis typus 1 inactivatum (D-Antigen)",
|
422
|
+
"toxoidum pertussis 25 µg et haemagglutininum filamentosum 15 µg"
|
423
|
+
].each { |id|
|
439
424
|
it "parses composition #{id}" do
|
440
|
-
expect(composition_parser).to
|
425
|
+
expect(composition_parser).to parse(id)
|
441
426
|
end
|
442
427
|
}
|
443
428
|
|
444
|
-
|
445
|
-
|
446
|
-
composition_tests.each{
|
447
|
-
|value, name|
|
448
|
-
let(:composition_parser) { parser.composition }
|
449
|
-
it "parses composition #{value}" do
|
450
|
-
expect(composition_parser).to parse(value)
|
451
|
-
end
|
452
|
-
}
|
453
|
-
puts "Testing whether #{substance_tests.size} substances can be parsed as composition"
|
454
|
-
substance_tests.each{
|
455
|
-
|value, name|
|
456
|
-
it "parses substance #{value}" do
|
457
|
-
expect(composition_parser).to parse(value)
|
458
|
-
end
|
459
|
-
}
|
460
|
-
|
461
|
-
if RunAllParsingExamples
|
462
|
-
specify { expect( File.exists?(AllCompositionLines)).to eq true }
|
463
|
-
composition_lines = IO.readlines(AllCompositionLines)
|
464
|
-
puts "Testing whether all #{composition_lines.size} lines in #{File.basename(AllCompositionLines)} can be parsed"
|
465
|
-
composition_lines.each{
|
466
|
-
|value, name|
|
429
|
+
puts "Testing whether #{composition_tests.size} compositions can be parsed"
|
430
|
+
composition_tests.each { |value, name|
|
467
431
|
let(:composition_parser) { parser.composition }
|
468
|
-
it "parses composition #{value}" do
|
432
|
+
it "parses composition #{value}" do
|
433
|
+
expect(composition_parser).to parse(value)
|
434
|
+
end
|
435
|
+
}
|
436
|
+
puts "Testing whether #{substance_tests.size} substances can be parsed as composition"
|
437
|
+
substance_tests.each { |value, name|
|
438
|
+
it "parses substance #{value}" do
|
439
|
+
expect(composition_parser).to parse(value)
|
440
|
+
end
|
469
441
|
}
|
470
|
-
else
|
471
|
-
puts "Skip testing whether #{composition_tests.size} compositions and #{substance_tests.size} substances can be parsed"
|
472
|
-
end
|
473
442
|
|
443
|
+
if RUN_ALL_PARSING_EXAMPLES
|
444
|
+
specify { expect(File.exist?(AllCompositionLines)).to eq true }
|
445
|
+
composition_lines = IO.readlines(AllCompositionLines)
|
446
|
+
puts "Testing whether all #{composition_lines.size} lines in #{File.basename(AllCompositionLines)} can be parsed"
|
447
|
+
composition_lines.each do |value, name|
|
448
|
+
let(:composition_parser) { parser.composition }
|
449
|
+
it "parses composition #{value}" do
|
450
|
+
expect(composition_parser).to parse(value)
|
451
|
+
end
|
452
|
+
end
|
453
|
+
else
|
454
|
+
puts "Skip testing whether #{composition_tests.size} compositions and #{substance_tests.size} substances can be parsed"
|
455
|
+
end
|
456
|
+
end
|
474
457
|
end
|
475
|
-
|
476
458
|
end
|
477
|
-
end
|