oddb2xml 2.7.1 → 2.7.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +1 -2
- data/.standard.yml +2 -0
- data/Gemfile +3 -3
- data/History.txt +24 -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/builder.rb +1070 -1038
- data/lib/oddb2xml/calc.rb +232 -233
- data/lib/oddb2xml/chapter_70_hack.rb +38 -32
- data/lib/oddb2xml/cli.rb +252 -236
- data/lib/oddb2xml/compare.rb +70 -59
- data/lib/oddb2xml/compositions_syntax.rb +451 -430
- data/lib/oddb2xml/compressor.rb +20 -20
- data/lib/oddb2xml/downloader.rb +157 -129
- data/lib/oddb2xml/extractor.rb +295 -295
- data/lib/oddb2xml/options.rb +34 -35
- data/lib/oddb2xml/parslet_compositions.rb +265 -269
- data/lib/oddb2xml/semantic_check.rb +39 -33
- data/lib/oddb2xml/util.rb +163 -163
- data/lib/oddb2xml/version.rb +1 -1
- data/lib/oddb2xml/xml_definitions.rb +32 -33
- data/lib/oddb2xml.rb +1 -1
- data/oddb2xml.gemspec +34 -34
- data/shell.nix +17 -0
- data/spec/artikelstamm_spec.rb +111 -110
- data/spec/builder_spec.rb +490 -505
- 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/transfer.dat +1 -0
- data/spec/data_helper.rb +47 -49
- data/spec/downloader_spec.rb +251 -260
- data/spec/extractor_spec.rb +171 -159
- data/spec/fixtures/vcr_cassettes/oddb2xml.json +1 -1
- data/spec/galenic_spec.rb +233 -256
- data/spec/options_spec.rb +116 -119
- data/spec/parslet_spec.rb +896 -863
- data/spec/spec_helper.rb +153 -153
- data/test_options.rb +39 -42
- data/tools/win_fetch_cacerts.rb +2 -3
- metadata +42 -12
data/spec/parslet_spec.rb
CHANGED
@@ -1,204 +1,193 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'pp'
|
4
1
|
VERBOSE_MESSAGES = false
|
5
|
-
|
6
|
-
|
7
|
-
|
2
|
+
if File.exists?("#{Dir.pwd}/lib/oddb2xml/parslet_compositions.rb")
|
3
|
+
require_relative "../lib/oddb2xml/parslet_compositions"
|
4
|
+
else
|
5
|
+
puts :ParseFailed
|
6
|
+
require_relative "../src/plugin/parslet_compositions"
|
7
|
+
end
|
8
|
+
|
9
|
+
require "parslet/rig/rspec"
|
10
|
+
require "socket"
|
8
11
|
|
9
12
|
hostname = Socket.gethostbyname(Socket.gethostname).first
|
10
|
-
|
11
|
-
puts "hostname is #{hostname}
|
13
|
+
RUN_ALL_COMPOSITION_TESTS = false # /travis|localhost/i.match(hostname) != nil # takes about five minutes to run!
|
14
|
+
puts "hostname is #{hostname} RUN_ALL_COMPOSITION_TESTS #{RUN_ALL_COMPOSITION_TESTS}"
|
12
15
|
# Testing whether 8937 composition lines can be parsed. Found 380 errors in 293 seconds
|
13
16
|
# 520 examples, 20 failures, 1 pending
|
14
17
|
|
15
|
-
RunFailingSpec = true
|
16
|
-
|
17
|
-
describe ParseComposition do
|
18
|
-
to_add = %(
|
19
|
-
VERBOSE_MESSAGES = true
|
20
|
-
pp composition; binding.pry
|
21
|
-
)
|
22
|
-
|
23
|
-
end
|
24
|
-
|
25
|
-
if RunFailingSpec
|
26
|
-
end
|
27
|
-
|
28
18
|
describe ParseComposition do
|
29
19
|
context "should handle 66540 Tektrotyd, Markierungsbesteck" do
|
30
20
|
string = "conserv.: E 216, E 218, excipiens pro suppositorio."
|
31
21
|
composition = ParseComposition.from_string(string)
|
32
|
-
active_agent = ["hynic-[d-phe(1)", "tyr(3)-octeotridum]trifluoroacetum", "acidum ethylendiamini-n,n'-diaceticum"]
|
33
|
-
|
22
|
+
# active_agent = ["hynic-[d-phe(1)", "tyr(3)-octeotridum]trifluoroacetum", "acidum ethylendiamini-n,n'-diaceticum"]
|
34
23
|
active_substance = "HYNIC-[D-Phe(1)"
|
35
24
|
composition_text = "II) Durchstechflasche 2: acidum ethylendiamini-N,N'-diaceticum 10 mg, dinatrii phosphas dodecahydricus, natrii hydroxidum, pro vitro."
|
36
25
|
composition = ParseUtil.parse_compositions(composition_text, active_substance).first
|
37
26
|
|
38
|
-
specify { expect(
|
39
|
-
specify { expect(
|
40
|
-
specify { expect(
|
41
|
-
specify { expect(
|
27
|
+
specify { expect(composition.substances.size).to eq 3 }
|
28
|
+
specify { expect(composition.label).to eq "II" }
|
29
|
+
specify { expect(composition.excipiens.name).to match(/pro vitro/i) }
|
30
|
+
specify { expect(composition.substances.first.name).to eq "Acidum Ethylendiamini-n,n'-diaceticum" }
|
42
31
|
end
|
43
32
|
|
44
33
|
context "should handle excipiens" do
|
45
34
|
string = "conserv.: E 216, E 218, excipiens pro suppositorio."
|
46
35
|
composition = ParseComposition.from_string(string)
|
47
|
-
specify { expect(
|
48
|
-
specify { expect(
|
49
|
-
specify { expect(
|
50
|
-
specify { expect(
|
36
|
+
specify { expect(composition.substances.size).to eq 2 }
|
37
|
+
specify { expect(composition.label).to eq nil }
|
38
|
+
specify { expect(composition.excipiens.name).to match(/excipiens pro suppositorio/i) }
|
39
|
+
specify { expect(composition.substances.first.name).to eq "E 216" }
|
51
40
|
end
|
52
41
|
|
53
|
-
context
|
54
|
-
# def initialize(column_c = nil, size = nil, unit = nil, active_substance = nil, composition= nil)
|
55
|
-
active_substance =
|
56
|
-
composition_text =
|
42
|
+
context "Shire Subcuvia" do
|
43
|
+
# def initialize(column_c = nil, size = nil, unit = nil, active_substance = nil, composition= nil)
|
44
|
+
active_substance = "immunoglobulinum humanum normale"
|
45
|
+
composition_text = "proteina 160 mg cum immunoglobulinum humanum normale min. 95 %, glycinum, natrii chloridum, aqua ad iniectabilia, q.s. ad solutionem pro 1 ml."
|
57
46
|
composition = ParseUtil.parse_compositions(composition_text, active_substance).first
|
58
47
|
specify { expect(composition.substances.size).to eq 4 }
|
59
48
|
specify { expect(composition.label).to eq nil }
|
60
49
|
specify { expect(composition.label_description).to eq nil }
|
61
|
-
specify { expect(composition.substances[0].name).to eq
|
62
|
-
specify { expect(composition.substances[1].name).to eq
|
50
|
+
specify { expect(composition.substances[0].name).to eq "Proteina" }
|
51
|
+
specify { expect(composition.substances[1].name).to eq "Cum Immunoglobulinum Humanum Normale" }
|
63
52
|
specify { expect(composition.substances[0].is_active_agent).to eq false }
|
64
53
|
specify { expect(composition.substances[1].is_active_agent).to eq true }
|
65
54
|
end
|
66
55
|
|
67
|
-
context
|
68
|
-
# def initialize(column_c = nil, size = nil, unit = nil, active_substance = nil, composition= nil)
|
69
|
-
active_substance =
|
70
|
-
composition_text =
|
56
|
+
context "Shire Fosrenol" do
|
57
|
+
# def initialize(column_c = nil, size = nil, unit = nil, active_substance = nil, composition= nil)
|
58
|
+
active_substance = "lanthanum"
|
59
|
+
composition_text = "lanthanum 500 mg ut lanthani (III) carbonas hydricum, excipiens pro compresso."
|
71
60
|
composition = ParseUtil.parse_compositions(composition_text, active_substance).first
|
72
61
|
specify { expect(composition.substances.size).to eq 1 }
|
73
62
|
specify { expect(composition.label).to eq nil }
|
74
63
|
specify { expect(composition.label_description).to eq nil }
|
75
64
|
specify { expect(composition.substances[0].is_active_agent).to eq true }
|
76
|
-
specify { expect(composition.substances[0].name).to eq
|
65
|
+
specify { expect(composition.substances[0].name).to eq "Lanthanum 500 Mg Ut Lanthani (iii) Carbonas Hydricum" }
|
77
66
|
end
|
78
67
|
|
79
68
|
context "should return label with description" do
|
80
69
|
string = "I) Glucoselösung: glucosum anhydricum 240 g ut glucosum monohydricum, calcii chloridum dihydricum 600 mg, acidum citricum monohydricum, aqua ad iniectabilia q.s. ad solutionem pro 500 ml."
|
81
70
|
composition = ParseComposition.from_string(string)
|
82
71
|
specify { expect(composition.substances.size).to eq 3 }
|
83
|
-
specify { expect(composition.label).to eq
|
84
|
-
specify { expect(composition.label_description).to eq
|
72
|
+
specify { expect(composition.label).to eq "I" }
|
73
|
+
specify { expect(composition.label_description).to eq "Glucoselösung" }
|
85
74
|
end
|
86
75
|
|
87
76
|
context "should handle label-description for Cyclacur" do
|
88
77
|
# 37987 1 Cyclacur, Dragées
|
89
78
|
string = "I) Weisse Dragées: estradioli valeras 2 mg, excipiens pro compresso obducto."
|
90
79
|
composition = ParseComposition.from_string(string)
|
91
|
-
specify { expect(
|
92
|
-
specify { expect(
|
93
|
-
specify { expect(
|
94
|
-
specify { expect(
|
80
|
+
specify { expect(composition.substances.size).to eq 1 }
|
81
|
+
specify { expect(composition.label).to eq "I" }
|
82
|
+
specify { expect(composition.label_description).to eq "Weisse Dragées" }
|
83
|
+
specify { expect(composition.substances.first.name).to eq "Estradioli Valeras" }
|
95
84
|
end
|
96
85
|
|
97
86
|
context "should handle label-description for Moviprep" do
|
98
87
|
# 61631 1 Moviprep Orange, Pulver
|
99
88
|
string = "A): macrogolum 3350 100 g, natrii sulfas anhydricus 7.5 g, natrii chloridum 2.691 g, kalii chloridum 1.015 g, arom.: aspartamum et alia, excipiens ad pulverem pro charta."
|
100
89
|
composition = ParseComposition.from_string(string)
|
101
|
-
specify { expect(
|
102
|
-
specify { expect(
|
103
|
-
specify { expect(
|
104
|
-
specify { expect(
|
90
|
+
specify { expect(composition.substances.size).to eq 6 }
|
91
|
+
specify { expect(composition.label).to eq "A" }
|
92
|
+
specify { expect(composition.label_description).to eq nil }
|
93
|
+
specify { expect(composition.substances.first.name).to eq "Macrogolum 3350" }
|
105
94
|
end
|
106
95
|
|
107
96
|
context "should handle 'LA 2x%" do
|
108
97
|
# 48473 1 Wala Echinacea-Mundspray, anthroposophisches Arzneimittel
|
109
98
|
string = "echinacea pallida ex herba LA 20% TM 10 g"
|
110
99
|
composition = ParseComposition.from_string(string)
|
111
|
-
specify { expect(
|
112
|
-
specify { expect(
|
100
|
+
specify { expect(composition.substances.size).to eq 1 }
|
101
|
+
specify { expect(composition.substances.first.name).to eq "Echinacea Pallida Ex Herba La 20% Tm" }
|
113
102
|
end
|
114
103
|
|
115
104
|
context "should handle 'CRM 197" do
|
116
105
|
# 1 Prevenar 13, Suspension in Fertigspritzen
|
117
106
|
string = "proteinum corynebacteriae diphtheriae CRM 197 ca. 32 µg"
|
118
107
|
composition = ParseComposition.from_string(string)
|
119
|
-
specify { expect(
|
120
|
-
specify { expect(
|
108
|
+
specify { expect(composition.substances.size).to eq 1 }
|
109
|
+
specify { expect(composition.substances.first.name).to eq "Proteinum Corynebacteriae Diphtheriae Crm 197" }
|
121
110
|
end
|
122
111
|
|
123
112
|
context "should handle ', Corresp. '" do
|
124
113
|
# 65427 1 Adlers Bronchialpastillen, Pastillen
|
125
114
|
string = "liquiritiae extractum ethanolicum liquidum corresp. acidum glycyrrhizinicum 2.0-2.6 mg, DER: 1.8-2.1:1, Corresp. massa siccata 19.67 mg, droserae extractum ethanolicum liquidum, ratio: 0.6:1, Corresp. massa siccata 0.42 mg, plantaginis folii extractum ethanolicum liquidum, ratio: 0.51:1, Corresp. massa siccata 1.9 mg, aromatica, natrii cyclamas, excipiens pro pastillo"
|
126
115
|
composition = ParseComposition.from_string(string)
|
127
|
-
specify { expect(
|
128
|
-
specify { expect(
|
116
|
+
specify { expect(composition.substances.size).to eq 6 }
|
117
|
+
specify { expect(composition.substances.first.name).to eq "Liquiritiae Extractum Ethanolicum Liquidum" }
|
129
118
|
end
|
130
119
|
|
131
120
|
context "should handle ',,'" do
|
132
121
|
# 52433 1 Botox 100 Allergan-Einheiten, Pulver zur Herstellung einer Injektionslösung
|
133
122
|
string = "Praeparatio cryodesiccata: toxinum botulinicum A 100 U. Botox,, albuminum humanum, natrii chloridum, pro vitro."
|
134
123
|
composition = ParseComposition.from_string(string)
|
135
|
-
specify { expect(
|
136
|
-
specify { expect(
|
137
|
-
specify { expect(
|
124
|
+
specify { expect(composition.substances.size).to eq 3 }
|
125
|
+
specify { expect(composition.substances.first.name).to eq "Toxinum Botulinicum A" }
|
126
|
+
specify { expect(composition.excipiens.name).to match(/vitro/i) }
|
138
127
|
end
|
139
128
|
|
140
129
|
context "should handle corresp. excipiens" do
|
141
130
|
string = "petasina 8 mg corresp. excipiens pro compresso obducto"
|
142
131
|
composition = ParseComposition.from_string(string)
|
143
|
-
specify { expect(
|
144
|
-
specify { expect(
|
145
|
-
specify { expect(
|
132
|
+
specify { expect(composition.substances.size).to eq 1 }
|
133
|
+
specify { expect(composition.substances.first.name).to eq "Petasina" }
|
134
|
+
specify { expect(composition.excipiens.name).to match(/excipiens/i) }
|
146
135
|
end
|
147
136
|
|
148
137
|
context "should handle missing Label A:) in pollinis allergeni extractu" do
|
149
138
|
# 62573 2 Staloral 300 3 Bäume (300 IR/ml) , sublinguale Lösung
|
150
|
-
string =
|
139
|
+
string = "III): pro usu: I) et II) recenter radioactivatum 99m-technetio ut natrii pertechnetas"
|
151
140
|
composition = ParseComposition.from_string(string)
|
152
|
-
specify { expect(composition.source).to eq string}
|
153
|
-
specify { expect(
|
154
|
-
specify { expect(
|
155
|
-
specify { expect(
|
141
|
+
specify { expect(composition.source).to eq string }
|
142
|
+
specify { expect(composition.substances.size).to eq 0 }
|
143
|
+
specify { expect(composition.label).to eq nil }
|
144
|
+
specify { expect(composition.corresp).to eq "III): pro usu: I) et II) recenter radioactivatum 99m-technetio ut natrii pertechnetas" }
|
156
145
|
end
|
157
146
|
|
158
147
|
context "should handle Tela cum praeparatione" do
|
159
|
-
string =
|
148
|
+
string = "Tela cum praeparatione (Panel 1): niccoli sulfas 0.16 mg, alcoholes adipis lanae 0.81 mg, neomycini sulfas 0.49 mg, kalii dichromas 44 µg, Cain-mix: benzocainum 0.364 mg, cinchocaini hydrochloridum 73 µg, tetracaini hydrochloridum 73 µg, Parfum-Mix: amylcinnamaldehydum 15 µg, isoeugenolum 15 µg, cinnamaldehydum 34 µg, eugenolum 34 µg, alcohol cinnamylicus 54 µg, hydroxycitronellalum 54 µg, geraniolum 70 µg, evernia prunastri 70 µg, colophonium 0.97 mg, E 320, E 321, Paraben-Mix: E 218 0.16 mg, E 214 0.16 mg, E 216 0.16 mg, butylis parahydroxybenzoas 0.16 mg, benzylis parahydroxybenzoas 0.16 mg, Negativ-Kontrolle, balsamum peruvianum 0.65 mg, ethylendiamini dihydrochloridum 41 µg, cobalti dichloridum 16 µg, excipiens pro praeparatione"
|
160
149
|
composition = ParseComposition.from_string(string)
|
161
|
-
specify { expect(composition.source).to eq string}
|
162
|
-
specify { expect(
|
163
|
-
specify { expect(
|
150
|
+
specify { expect(composition.source).to eq string }
|
151
|
+
specify { expect(composition.substances.first.name).to eq "Niccoli Sulfas" }
|
152
|
+
specify { expect(composition.label).to eq "Tela cum praeparatione (Panel 1):" }
|
164
153
|
end
|
165
154
|
|
166
155
|
context "should handle '&' and 'deklr.'" do
|
167
|
-
string =
|
156
|
+
string = "TM: cardiospermum halicacabum 100 mg, cetearyl octanoat & isopropylmyristat deklar., alcohol benzylicus, aqua q.s. ad unguentum pro"
|
168
157
|
composition = ParseComposition.from_string(string)
|
169
|
-
specify { expect(
|
158
|
+
specify { expect(composition.substances.first.name).to eq "Tm: Cardiospermum Halicacabum" }
|
170
159
|
end
|
171
160
|
|
172
161
|
context "should handle '150 U.I. hFSH et 150 U.I. hLH'" do
|
173
|
-
string =
|
162
|
+
string = "Praeparatio cryodesiccata: menotropinum 150 U.I. hFSH et 150 U.I. hLH, gonadotropinum chorionicum 7-21 U.I. hCG, lactosum monohydricum, pro vitro"
|
174
163
|
composition = ParseComposition.from_string(string)
|
175
|
-
specify { expect(composition.source).to eq string}
|
176
|
-
specify { expect(
|
177
|
-
specify { expect(
|
164
|
+
specify { expect(composition.source).to eq string }
|
165
|
+
specify { expect(composition.substances.first.name).to eq "Menotropinum" }
|
166
|
+
specify { expect(composition.substances.first.dose.to_s).to eq "150 U.I. hFSH et 150 U.I. hLH" }
|
178
167
|
end
|
179
168
|
|
180
169
|
context "should handle missing arom.: before excipiens" do
|
181
170
|
string = "nicotinum 4 mg ut nicotini resinas, aromatica, antiox.: E 321, arom.: excipiens pro praeparatione"
|
182
171
|
composition = ParseComposition.from_string(string)
|
183
|
-
specify { expect(composition.source).to eq string}
|
172
|
+
specify { expect(composition.source).to eq string }
|
184
173
|
specify { expect(composition.substances.size).to eq 3 }
|
185
|
-
specify { expect(
|
174
|
+
specify { expect(composition.substances.first.name).to eq "Nicotinum" }
|
186
175
|
end
|
187
176
|
|
188
177
|
context "should handle missing Label A:) in pollinis allergeni extractu" do
|
189
178
|
# 62573 2 Staloral 300 3 Bäume (300 IR/ml) , sublinguale Lösung
|
190
|
-
string =
|
179
|
+
string = "pollinis allergeni extractum (alnus glutinosa, betula alba, corylus avellana) 300 U.: excipiens ad solutionem pro 1 ml"
|
191
180
|
composition = ParseComposition.from_string(string)
|
192
|
-
specify { expect(composition.source).to eq string}
|
193
|
-
specify { expect(
|
194
|
-
specify { expect(
|
195
|
-
specify { expect(
|
181
|
+
specify { expect(composition.source).to eq string }
|
182
|
+
specify { expect(composition.substances.size).to eq 1 }
|
183
|
+
specify { expect(composition.substances.first.name).to eq "Pollinis Allergeni Extractum (alnus Glutinosa, Betula Alba, Corylus Avellana)" }
|
184
|
+
specify { expect(composition.label).to eq nil }
|
196
185
|
end
|
197
186
|
|
198
187
|
context "handle 39541 A. Vogel Entspannungs-Tropfen" do
|
199
188
|
string = "passiflorae herbae recentis tinctura, ratio: 1:12, corresp. ethanolum 65 % V/V"
|
200
189
|
composition = ParseComposition.from_string(string)
|
201
|
-
specify { expect(composition.substances.size).to eq
|
190
|
+
specify { expect(composition.substances.size).to eq 1 }
|
202
191
|
specify { expect(composition.substances.first.name).to eq "Passiflorae Herbae Recentis Tinctura" }
|
203
192
|
specify { expect(composition.substances.first.more_info).to eq "ratio: 1:12" }
|
204
193
|
end
|
@@ -206,142 +195,142 @@ describe ParseComposition do
|
|
206
195
|
context "handle II) Aprotininlösung:" do
|
207
196
|
string = "II) Aprotininlösung: aprotininum 1000 U.K.I., natrii chloridum, aqua q.s. ad solutionem, pro vitro 1 ml"
|
208
197
|
composition = ParseComposition.from_string(string)
|
209
|
-
specify { expect(composition.substances.size).to eq
|
198
|
+
specify { expect(composition.substances.size).to eq 2 }
|
210
199
|
specify { expect(composition.substances.first.name).to eq "Aprotininum" }
|
211
200
|
end
|
212
201
|
|
213
202
|
context "handle ut aqua ad" do
|
214
|
-
string =
|
203
|
+
string = "natrii oleas ut aqua ad iniectabilia q.s. ad emulsionem pro 250 ml"
|
215
204
|
composition = ParseComposition.from_string(string)
|
216
|
-
specify { expect(composition.source).to eq string}
|
217
|
-
specify { expect(
|
218
|
-
specify { expect(
|
205
|
+
specify { expect(composition.source).to eq string }
|
206
|
+
specify { expect(composition.substances.size).to eq 1 }
|
207
|
+
specify { expect(composition.substances.first.name).to eq "Natrii Oleas" }
|
219
208
|
end
|
220
209
|
|
221
|
-
context
|
210
|
+
context "find unit for aqua q.s. ad emulsionem pro 250 ml" do
|
222
211
|
string = "natrii oleas, aqua q.s. ad emulsionem pro 250 ml."
|
223
212
|
composition = ParseComposition.from_string(string)
|
224
|
-
specify { expect(composition.source).to eq string}
|
225
|
-
specify { expect(composition.substances.size).to eq
|
226
|
-
specify { expect(
|
227
|
-
specify { expect(
|
213
|
+
specify { expect(composition.source).to eq string }
|
214
|
+
specify { expect(composition.substances.size).to eq 1 }
|
215
|
+
specify { expect(composition.excipiens.dose.to_s).to eq "250 ml" }
|
216
|
+
specify { expect(composition.excipiens.name).to match(/emulsionem/i) }
|
228
217
|
end
|
229
218
|
|
230
219
|
context "should handle '150 U.I. hFSH et 150 U.I. hLH'" do
|
231
|
-
string =
|
220
|
+
string = "Praeparatio cryodesiccata: menotropinum 150 U.I. hFSH et 150 U.I. hLH, gonadotropinum chorionicum 7-21 U.I. hCG, lactosum monohydricum, pro vitro"
|
232
221
|
composition = ParseComposition.from_string(string)
|
233
|
-
specify { expect(composition.source).to eq string}
|
234
|
-
specify { expect(
|
235
|
-
specify { expect(
|
222
|
+
specify { expect(composition.source).to eq string }
|
223
|
+
specify { expect(composition.substances.first.name).to eq "Menotropinum" }
|
224
|
+
specify { expect(composition.substances.first.dose.to_s).to eq "150 U.I. hFSH et 150 U.I. hLH" }
|
236
225
|
end
|
237
226
|
|
238
227
|
context "should handle per centum" do
|
239
|
-
string =
|
228
|
+
string = "acidum nitricum 70 per centum 537 mg, acidum aceticum glaciale 20.4 mg, acidum oxalicum dihydricum 58.6 mg, zinci nitras hexahydricus 6 mg, excipiens ad solutionem pro 1 ml"
|
240
229
|
composition = ParseComposition.from_string(string)
|
241
|
-
specify { expect(composition.source).to eq string}
|
242
|
-
specify { expect(
|
230
|
+
specify { expect(composition.source).to eq string }
|
231
|
+
specify { expect(composition.substances.first.name).to eq "Acidum Nitricum 70 Per Centum" }
|
243
232
|
end
|
244
233
|
|
245
234
|
context "should handle 'potenziert mit: excipiens pro compresso'" do
|
246
|
-
string =
|
235
|
+
string = "ambra grisea D6 30 mg, conium maculatum D3 30 mg, anamirta cocculus D4 210 mg, petroleum rectificatum D8 30 mg, potenziert mit: excipiens pro compresso"
|
247
236
|
composition = ParseComposition.from_string(string)
|
248
|
-
specify { expect(composition.source).to eq string}
|
237
|
+
specify { expect(composition.source).to eq string }
|
249
238
|
specify { expect(composition.label).to eq nil }
|
250
239
|
specify { expect(composition.label_description).to eq nil }
|
251
240
|
specify { expect(composition.galenic_form).to eq nil }
|
252
241
|
specify { expect(composition.route_of_administration).to eq nil }
|
253
|
-
specify { expect(
|
242
|
+
specify { expect(composition.substances.first.name).to eq "Ambra Grisea D6" }
|
254
243
|
end
|
255
244
|
|
256
245
|
context "allow ut followed by et" do
|
257
246
|
# 49417 1 Burgerstein EPA-Kapseln 500mg, Kapseln
|
258
247
|
string =
|
259
|
-
"piscis oleum 500 mg corresp. acida carboxylica omega-3 oligoinsaturata 150 mg ut acidum eicosapentaenoicum 90 mg et acidum docosahexaenoicum 60 mg, excipiens pro capsula."
|
248
|
+
"piscis oleum 500 mg corresp. acida carboxylica omega-3 oligoinsaturata 150 mg ut acidum eicosapentaenoicum 90 mg et acidum docosahexaenoicum 60 mg, excipiens pro capsula."
|
260
249
|
composition = ParseComposition.from_string(string)
|
261
|
-
specify { expect(composition.substances.first.name).to eq
|
262
|
-
specify { expect(composition.substances.first.chemical_substance.name).to eq
|
263
|
-
specify { expect(composition.substances.size).to eq 2
|
264
|
-
specify { expect(composition.substances.first.salts.size).to eq
|
265
|
-
specify { expect(composition.substances.first.chemical_substance.salts.size).to eq
|
266
|
-
specify { expect(composition.substances.first.chemical_substance.salts.first.name).to eq
|
250
|
+
specify { expect(composition.substances.first.name).to eq "Piscis Oleum" } # TODO:
|
251
|
+
specify { expect(composition.substances.first.chemical_substance.name).to eq "Acida Carboxylica Omega-3 Oligoinsaturata" } # TODO:
|
252
|
+
specify { expect(composition.substances.size).to eq 2 }
|
253
|
+
specify { expect(composition.substances.first.salts.size).to eq 0 }
|
254
|
+
specify { expect(composition.substances.first.chemical_substance.salts.size).to eq 1 }
|
255
|
+
specify { expect(composition.substances.first.chemical_substance.salts.first.name).to eq "Acidum Eicosapentaenoicum" }
|
267
256
|
end
|
268
257
|
|
269
|
-
context
|
258
|
+
context "find correct result Solvens (i.m.)" do
|
270
259
|
string = "Solvens (i.m.): aqua ad iniectabilia 2 ml pro vitro"
|
271
260
|
composition = ParseComposition.from_string(string)
|
272
|
-
specify { expect(composition.substances.size).to eq
|
273
|
-
specify { expect(composition.corresp).to eq
|
261
|
+
specify { expect(composition.substances.size).to eq 0 }
|
262
|
+
specify { expect(composition.corresp).to eq "aqua ad iniectabilia 2 ml pro vitro" }
|
274
263
|
end
|
275
264
|
|
276
265
|
context "allow substancename with 'ethanol.'" do
|
277
266
|
string = "mandragora ethanol. decoctum D1 30 mg"
|
278
267
|
composition = ParseComposition.from_string(string)
|
279
|
-
specify { expect(composition.substances.size).to eq 1
|
280
|
-
specify { expect(composition.substances.first.name).to eq
|
281
|
-
specify { expect(composition.substances.first.dose.to_s).to eq
|
268
|
+
specify { expect(composition.substances.size).to eq 1 }
|
269
|
+
specify { expect(composition.substances.first.name).to eq "Mandragora Ethanol. Decoctum D1" }
|
270
|
+
specify { expect(composition.substances.first.dose.to_s).to eq "30 mg" }
|
282
271
|
end
|
283
272
|
|
284
273
|
context "allow substance complicated, calculated dose '6.0 +/-1.2 µg'" do
|
285
274
|
string =
|
286
|
-
"enzephalitidis japanensis virus antigenum (Stamm: SA-14-2) 6.0 +/-1.2 µg, aluminium ut aluminii oxidum hydricum, kalii dihydrogenophosphas, dinatrii phosphas anhydricus, natrii chloridum, aqua q.s. ad solutionem pro 0.5 ml"
|
275
|
+
"enzephalitidis japanensis virus antigenum (Stamm: SA-14-2) 6.0 +/-1.2 µg, aluminium ut aluminii oxidum hydricum, kalii dihydrogenophosphas, dinatrii phosphas anhydricus, natrii chloridum, aqua q.s. ad solutionem pro 0.5 ml"
|
287
276
|
composition = ParseComposition.from_string(string)
|
288
|
-
specify { expect(composition.substances.first.name).to eq
|
289
|
-
specify { expect(composition.substances.first.chemical_substance).to eq
|
290
|
-
specify { expect(composition.substances.first.dose.to_s).to eq
|
291
|
-
specify { expect(composition.substances.size).to eq 5
|
277
|
+
specify { expect(composition.substances.first.name).to eq "Enzephalitidis Japanensis Virus Antigenum (stamm: Sa-14-2)" }
|
278
|
+
specify { expect(composition.substances.first.chemical_substance).to eq nil }
|
279
|
+
specify { expect(composition.substances.first.dose.to_s).to eq "6.0 +/-1.2 µg/0.5 ml" }
|
280
|
+
specify { expect(composition.substances.size).to eq 5 }
|
292
281
|
end
|
293
282
|
|
294
283
|
context "should handle 'aqua ad iniectabilia ad solutionem'" do
|
295
284
|
string = "aqua ad iniectabilia ad solutionem"
|
296
285
|
composition = ParseComposition.from_string(string)
|
297
|
-
specify { expect(composition.substances.size).to eq
|
298
|
-
specify { expect(composition.corresp).to match
|
286
|
+
specify { expect(composition.substances.size).to eq 0 }
|
287
|
+
specify { expect(composition.corresp).to match(/ad iniectabilia/) }
|
299
288
|
end
|
300
289
|
|
301
290
|
context "should handle Corresp. ca. 8370 kJ" do
|
302
291
|
string = "Corresp. ca. 8370 kJ"
|
303
292
|
composition = ParseComposition.from_string(string)
|
304
|
-
specify { expect(composition.substances.size).to eq
|
305
|
-
specify { expect(composition.corresp).to match
|
293
|
+
specify { expect(composition.substances.size).to eq 0 }
|
294
|
+
specify { expect(composition.corresp).to match(/8370 kJ/i) }
|
306
295
|
end
|
307
296
|
|
308
297
|
context "should handle Praeparatio sicca and polysorbatum" do
|
309
|
-
string =
|
298
|
+
string = "Praeparatio sicca cum solvens: praeparatio sicca: albiglutidum 66.95 mg, trehalosum dihydricum, mannitolum, dinatrii phosphas anhydricus, natrii dihydrogenophosphas monohydricus, polysorbatum 80, solvens: aqua ad iniectabilia 0.65 ml pro vitro"
|
310
299
|
composition = ParseComposition.from_string(string)
|
311
|
-
specify { expect(composition.source).to eq string}
|
312
|
-
specify { expect(
|
313
|
-
specify { expect(
|
300
|
+
specify { expect(composition.source).to eq string }
|
301
|
+
specify { expect(composition.substances.first.name).to eq "Albiglutidum" }
|
302
|
+
specify { expect(composition.label).to eq "Praeparatio sicca cum solvens: praeparatio sicca:" }
|
314
303
|
end
|
315
304
|
|
316
305
|
context "handle placebo compressa: excipiens pro compresso obducto" do
|
317
306
|
string = "II) placebo compressa: excipiens pro compresso obducto"
|
318
307
|
composition = ParseComposition.from_string(string)
|
319
|
-
specify { expect(composition.substances.size).to eq
|
320
|
-
specify { expect(composition.label).to eq
|
321
|
-
specify { expect(composition.label_description).to eq
|
308
|
+
specify { expect(composition.substances.size).to eq 0 }
|
309
|
+
specify { expect(composition.label).to eq "II" }
|
310
|
+
specify { expect(composition.label_description).to eq "placebo compressa" }
|
322
311
|
end
|
323
312
|
|
324
313
|
context "handle 46489 Polvac Gräser+Roggen" do
|
325
314
|
string = "A): pollinis allergeni extractum 300 U. (secali cereale cum 12 gramina: Arrhenatherum elatius, Cynosurus cristatus, Dactylis glomerata, Lolium spp., Poa pratensis, Anthoxanthum odoratum, Festuca pratensis, Agrostis tenuis, Bromus ssp., Alopecurus pratensis, Phleum pratense, Holcus lanatus), tyrosinum, natrii chloridum, glycerolum, conserv.: phenolum 2.5 mg, aqua ad iniectabilia q.s. ad solutionem pro 0.5 ml."
|
326
315
|
composition = ParseComposition.from_string(string)
|
327
|
-
specify { expect(composition.substances.size).to eq
|
328
|
-
tyrosinum = composition.substances.find{ |x| /Tyrosinum/i.match(x.name) }
|
316
|
+
specify { expect(composition.substances.size).to eq 5 }
|
317
|
+
tyrosinum = composition.substances.find { |x| /Tyrosinum/i.match(x.name) }
|
329
318
|
specify { expect(composition.substances.first.name).to eq "Pollinis Allergeni Extractum 300 U. (secali Cereale Cum 12 Gramina: Arrhenatherum Elatius, Cynosurus Cristatus, Dactylis Glomerata, Lolium Spp., Poa Pratensis, Anthoxanthum Odoratum, Festuca Pratensis, Agrostis Tenuis, Bromus Ssp., Alopecurus Pratensis, Phleum Pratense, Holcus Lanatus)" }
|
330
|
-
specify { expect(tyrosinum.name).to eq
|
331
|
-
specify { expect(composition.label).to eq
|
319
|
+
specify { expect(tyrosinum.name).to eq "Tyrosinum" }
|
320
|
+
specify { expect(composition.label).to eq "A" }
|
332
321
|
end
|
333
322
|
|
334
323
|
context "handle ratio" do
|
335
|
-
|
336
|
-
"digestio aquosa 500 mg ex dryopteris filix-mas ex herba recenti 40 mg, pteridium aquilinum ex herba recenti 40 mg, polypodium vulgare ex herba recenti 10 mg, Phyllitis scolopendrium ex herba recenti 10 mg, ratio: 1:4,1, extractum ethanolicum 400 mg ex salicis albae folium recens 20 mg, salicis purpureae folium recens 20 mg, salicis viminalis folium recens 40 mg, salicis vitellinae folium recens 20 mg, ratio: 1:3,1, excipiens ad solutionem pro 1 g, corresp. 10 guttae, corresp. ethanolum 25 % V/V"
|
324
|
+
string =
|
325
|
+
"digestio aquosa 500 mg ex dryopteris filix-mas ex herba recenti 40 mg, pteridium aquilinum ex herba recenti 40 mg, polypodium vulgare ex herba recenti 10 mg, Phyllitis scolopendrium ex herba recenti 10 mg, ratio: 1:4,1, extractum ethanolicum 400 mg ex salicis albae folium recens 20 mg, salicis purpureae folium recens 20 mg, salicis viminalis folium recens 40 mg, salicis vitellinae folium recens 20 mg, ratio: 1:3,1, excipiens ad solutionem pro 1 g, corresp. 10 guttae, corresp. ethanolum 25 % V/V"
|
337
326
|
composition = ParseComposition.from_string(string)
|
338
|
-
substance = composition.substances.find{ |x| /Scolopendrium/i.match(x.name) }
|
339
|
-
specify { expect(substance.name).to eq
|
340
|
-
specify { expect(substance.more_info).to eq
|
327
|
+
substance = composition.substances.find { |x| /Scolopendrium/i.match(x.name) }
|
328
|
+
specify { expect(substance.name).to eq "Phyllitis Scolopendrium Ex Herba Recenti" }
|
329
|
+
specify { expect(substance.more_info).to eq "ratio: 1:4,1" }
|
341
330
|
end
|
342
331
|
|
343
332
|
context "should skip lines containing I) et II)" do
|
344
|
-
string =
|
333
|
+
string = "I) et II) et III) corresp.: aminoacida 48 g/l, carbohydrata 150 g/l, materia crassa 50 g/l, in emulsione recenter mixta 1250 ml"
|
345
334
|
composition = ParseComposition.from_string(string)
|
346
335
|
specify { expect(composition.source).to eq string }
|
347
336
|
specify { expect(composition.substances.size).to eq 0 }
|
@@ -349,57 +338,56 @@ describe ParseComposition do
|
|
349
338
|
end
|
350
339
|
|
351
340
|
context "should handle dose with /" do
|
352
|
-
string =
|
341
|
+
string = "poly(dl-lactidum-co-glycolidum) 75/25"
|
353
342
|
composition = ParseComposition.from_string(string)
|
354
|
-
specify { expect(composition.source).to eq string}
|
355
|
-
specify { expect(
|
356
|
-
specify { expect(
|
343
|
+
specify { expect(composition.source).to eq string }
|
344
|
+
specify { expect(composition.substances.first.name).to eq "Poly(dl-lactidum-co-glycolidum)" }
|
345
|
+
specify { expect(composition.substances.first.dose.to_s).to eq "75/25" }
|
357
346
|
end
|
358
347
|
|
359
348
|
context "should handle dose with +/-" do
|
360
|
-
string =
|
349
|
+
string = "enzephalitidis japanensis virus antigenum (Stamm: SA-14-2) 6.0 +/-1.2 µg, aluminium ut aluminii oxidum hydricum, kalii dihydrogenophosphas, dinatrii phosphas anhydricus, natrii chloridum, aqua q.s. ad solutionem pro 0.5 ml"
|
361
350
|
composition = ParseComposition.from_string(string)
|
362
|
-
specify { expect(composition.source).to eq string}
|
363
|
-
specify { expect(
|
364
|
-
specify { expect(
|
351
|
+
specify { expect(composition.source).to eq string }
|
352
|
+
specify { expect(composition.substances.first.name).to eq "Enzephalitidis Japanensis Virus Antigenum (stamm: Sa-14-2)" }
|
353
|
+
specify { expect(composition.substances.first.dose.to_s).to eq "6.0 +/-1.2 µg/0.5 ml" }
|
365
354
|
end
|
366
355
|
|
367
356
|
context "should handle label Praeparatio cryodesiccata (Thrombin)" do
|
368
|
-
string =
|
357
|
+
string = "Praeparatio cryodesiccata (Thrombin): thrombinum humanum 500 U.I., natrii chloridum, natrii citras dihydricus, pro vitro"
|
369
358
|
composition = ParseComposition.from_string(string)
|
370
|
-
specify { expect(composition.source).to eq string}
|
371
|
-
specify { expect(
|
372
|
-
specify { expect(
|
359
|
+
specify { expect(composition.source).to eq string }
|
360
|
+
specify { expect(composition.substances.first.name).to eq "Thrombinum Humanum" }
|
361
|
+
specify { expect(composition.label).to eq "Praeparatio cryodesiccata (Thrombin):" }
|
373
362
|
end
|
374
|
-
|
375
363
|
end
|
376
364
|
|
377
365
|
describe ParseComposition do
|
378
366
|
context "allow 2,2'-methylen-bis(6-tert.-butyl-4-methyl-phenolum)" do
|
379
367
|
string = "2,2'-methylen-bis(6-tert.-butyl-4-methyl-phenolum)"
|
380
368
|
composition = ParseComposition.from_string(string)
|
381
|
-
specify { expect(composition.substances.first.name).to eq
|
369
|
+
specify { expect(composition.substances.first.name).to eq "2,2'-methylen-bis(6-tert.-butyl-4-methyl-phenolum)" }
|
382
370
|
specify { expect(composition.substances.size).to eq 1 }
|
383
371
|
end
|
384
372
|
|
385
373
|
context "allow substancename with 90 % " do
|
386
374
|
string =
|
387
|
-
"acidum nitricum 70 per centum 580.66 mg, acidum aceticum glaciale 41.08 mg, acidum oxalicum dihydricum 57.32 mg, acidum lacticum 90 % 4.55 mg, cupri(II) nitras trihydricus 0.048 mg, excipiens ad solutionem pro 1 ml"
|
388
|
-
|
375
|
+
"acidum nitricum 70 per centum 580.66 mg, acidum aceticum glaciale 41.08 mg, acidum oxalicum dihydricum 57.32 mg, acidum lacticum 90 % 4.55 mg, cupri(II) nitras trihydricus 0.048 mg, excipiens ad solutionem pro 1 ml"
|
376
|
+
composition = ParseComposition.from_string(string)
|
389
377
|
specify { expect(composition.substances.size).to eq 5 }
|
390
|
-
substance = composition.substances.find{ |x| /lacticum/i.match(x.name) }
|
391
|
-
specify { expect(composition.substances.first.name).to eq
|
392
|
-
specify { expect(composition.substances.first.dose.to_s).to eq
|
393
|
-
specify { expect(substance.name).to eq
|
394
|
-
specify { expect(substance.dose.to_s).to eq
|
378
|
+
substance = composition.substances.find { |x| /lacticum/i.match(x.name) }
|
379
|
+
specify { expect(composition.substances.first.name).to eq "Acidum Nitricum 70 Per Centum" }
|
380
|
+
specify { expect(composition.substances.first.dose.to_s).to eq "580.66 mg/ml" }
|
381
|
+
specify { expect(substance.name).to eq "Acidum Lacticum 90 %" }
|
382
|
+
specify { expect(substance.dose.to_s).to eq "4.55 mg/ml" }
|
395
383
|
end
|
396
384
|
|
397
385
|
context "allow substance with two corresp" do
|
398
386
|
string = "magnesii aspartas dihydricus 3.895 g corresp. magnesium 292 mg corresp. 12 mmol, arom.: bergamottae aetheroleum et alia, natrii cyclamas, saccharinum natricum, excipiens ad granulatum pro charta"
|
399
387
|
composition = ParseComposition.from_string(string)
|
400
388
|
context "with correct names" do
|
401
|
-
skip { expect(composition.substances.first.name).to eq
|
402
|
-
skip { expect(composition.substances.first.chemical_substance.name).to eq
|
389
|
+
skip { expect(composition.substances.first.name).to eq "Magnesii Aspartas Dihydricus" }
|
390
|
+
skip { expect(composition.substances.first.chemical_substance.name).to eq "Magnesium" }
|
403
391
|
end
|
404
392
|
specify { expect(composition.substances.size).to eq 6 }
|
405
393
|
end
|
@@ -414,707 +402,699 @@ describe ParseComposition do
|
|
414
402
|
string = "sennosida 20 mg corresp. sennosida A + B calcica 12 mg, excipiens pro compresso obducto"
|
415
403
|
composition = ParseComposition.from_string(string)
|
416
404
|
specify { expect(composition.substances.size).to eq 1 }
|
417
|
-
specify { expect(composition.substances.first.name).to eq
|
418
|
-
specify { expect(composition.substances.first.chemical_substance.name).to eq
|
405
|
+
specify { expect(composition.substances.first.name).to eq "Sennosida" }
|
406
|
+
specify { expect(composition.substances.first.chemical_substance.name).to eq "Sennosida A + B Calcica" }
|
419
407
|
end
|
420
408
|
|
421
409
|
context "allow substances separted by ', et'" do
|
422
410
|
string = "extractum spissum ex: echinaceae purpureae herbae recentis tinctura 1140 mg, ratio: 1:12, et echinaceae purpureae radicis recentis tinctura 60 mg, ratio: 1:11, excipiens pro compresso"
|
423
411
|
composition = ParseComposition.from_string(string)
|
424
412
|
specify { expect(composition.substances.size).to eq 2 }
|
425
|
-
specify { expect(composition.substances.first.name).to eq
|
426
|
-
specify { expect(composition.substances.last.name).to eq
|
413
|
+
specify { expect(composition.substances.first.name).to eq "Echinaceae Purpureae Herbae Recentis Tinctura" }
|
414
|
+
specify { expect(composition.substances.last.name).to eq "Echinaceae Purpureae Radicis Recentis Tinctura" }
|
427
415
|
end
|
428
416
|
|
429
|
-
context
|
417
|
+
context "find kalium 40 mmol/l" do
|
430
418
|
string = "kalium 40 mmol/l, chloridum 194 mmol/l, natrium 154 mmol/l, aqua ad iniectabilia q.s. ad solutionem pro 1000 ml"
|
431
419
|
composition = ParseComposition.from_string(string)
|
432
420
|
specify { expect(composition.substances.size).to eq 3 }
|
433
|
-
specify { expect(composition.substances.first.name).to eq
|
421
|
+
specify { expect(composition.substances.first.name).to eq "Kalium" }
|
434
422
|
specify { expect(composition.substances.first.dose.to_s).to eq "40 mmol/l/1000 ml" }
|
435
423
|
end
|
436
424
|
|
437
|
-
context
|
425
|
+
context "find corresp doses pro vase." do
|
438
426
|
string = "farfarae folii recentis succus ratio: 1:0.68-0.95"
|
439
427
|
composition = ParseComposition.from_string(string)
|
440
428
|
specify { expect(composition.substances.size).to eq 1 }
|
441
|
-
specify { expect(composition.substances.last.name).to eq
|
429
|
+
specify { expect(composition.substances.last.name).to eq "Farfarae Folii Recentis Succus" }
|
442
430
|
specify { expect(composition.substances.last.more_info).to eq "ratio: 1:0.68-0.95" }
|
443
431
|
end
|
444
432
|
|
445
|
-
context
|
433
|
+
context "find corresp doses pro vase." do
|
446
434
|
string = "doses pro vase 30/60"
|
447
435
|
composition = ParseComposition.from_string(string)
|
448
|
-
specify { expect(composition.substances.size).to eq
|
449
|
-
specify { expect(composition.corresp).to match
|
436
|
+
specify { expect(composition.substances.size).to eq 0 }
|
437
|
+
specify { expect(composition.corresp).to match(/pro vase/i) }
|
450
438
|
end
|
451
439
|
|
452
|
-
|
453
|
-
|
454
|
-
string = "sal ems 100 % m/m, corresp. ca., natrium 308.7 mg/g"
|
440
|
+
context "find corresp. ca." do
|
441
|
+
string = "sal ems 100 % m/m, corresp. ca., natrium 308.7 mg/g"
|
455
442
|
composition = ParseComposition.from_string(string)
|
456
443
|
specify { expect(composition.substances.size).to eq 1 }
|
457
|
-
specify { expect(composition.substances.last.name).to eq
|
444
|
+
specify { expect(composition.substances.last.name).to eq "Sal Ems" }
|
458
445
|
end
|
459
446
|
|
460
|
-
context
|
447
|
+
context "find correct result Solvens (i.m.)" do
|
461
448
|
string = "Solvens (i.v.): aqua ad iniectabilia 5 ml, corresp. 20 mg, pro 5 ml"
|
462
449
|
composition = ParseComposition.from_string(string)
|
463
|
-
specify { expect(composition.substances.first).to eq
|
450
|
+
specify { expect(composition.substances.first).to eq nil }
|
464
451
|
end
|
465
452
|
|
466
|
-
context
|
467
|
-
string
|
453
|
+
context "find correct result for dose 1 Mio U.I." do
|
454
|
+
string = "phenoxymethylpenicillinum kalicum 1 Mio U.I., conserv.: E 200, excipiens pro compresso obducto"
|
468
455
|
composition = ParseComposition.from_string(string)
|
469
456
|
specify { expect(composition.substances.size).to eq 2 }
|
470
|
-
specify { expect(composition.substances.first.name).to eq
|
471
|
-
specify { expect(composition.substances.first.dose.to_s).to eq
|
472
|
-
specify { expect(composition.substances.last.name).to eq
|
457
|
+
specify { expect(composition.substances.first.name).to eq "Phenoxymethylpenicillinum Kalicum" }
|
458
|
+
specify { expect(composition.substances.first.dose.to_s).to eq "1 Mio U.I." }
|
459
|
+
specify { expect(composition.substances.last.name).to eq "E 200" }
|
473
460
|
end
|
474
461
|
|
475
|
-
context
|
476
|
-
string
|
462
|
+
context "find dose with max." do
|
463
|
+
string = "residui: formaldehydum max. 100 µg"
|
477
464
|
composition = ParseComposition.from_string(string)
|
478
|
-
specify { expect(composition.substances.size).to eq
|
479
|
-
specify { expect(composition.substances.last.name).to eq
|
465
|
+
specify { expect(composition.substances.size).to eq 1 }
|
466
|
+
specify { expect(composition.substances.last.name).to eq "Formaldehydum" }
|
480
467
|
end
|
481
468
|
|
482
|
-
context
|
483
|
-
composition = ParseComposition.from_string(
|
469
|
+
context "handle Corresp. 4000 kJ." do
|
470
|
+
composition = ParseComposition.from_string("Corresp. 4000 kJ.")
|
484
471
|
specify { expect(composition.substances.size).to eq 0 }
|
485
|
-
specify { expect(composition.corresp).to eq
|
472
|
+
specify { expect(composition.corresp).to eq "4000 kJ" }
|
486
473
|
end
|
487
474
|
|
488
|
-
context
|
489
|
-
string =
|
475
|
+
context "handle dose dose with g/dm²" do
|
476
|
+
string = "Tela cum unguento 14 g/dm²"
|
490
477
|
composition = ParseComposition.from_string(string)
|
491
478
|
specify { expect(composition.substances.size).to eq 1 }
|
492
|
-
specify { expect(composition.substances.first.dose.to_s).to eq
|
493
|
-
specify { expect(composition.substances.first.name).to eq
|
479
|
+
specify { expect(composition.substances.first.dose.to_s).to eq "14 g/dm²" }
|
480
|
+
specify { expect(composition.substances.first.name).to eq "Tela Cum Unguento" }
|
494
481
|
end
|
495
482
|
|
496
|
-
context
|
497
|
-
string =
|
483
|
+
context "handle dose 2*10^9 CFU," do
|
484
|
+
string = "saccharomyces boulardii cryodesiccatus 250 mg corresp. cellulae vivae 2*10^9 CFU, excipiens pro capsula"
|
498
485
|
composition = ParseComposition.from_string(string)
|
499
486
|
specify { expect(composition.substances.size).to eq 1 }
|
500
|
-
specify { expect(composition.substances.first.chemical_substance.dose.to_s).to eq
|
501
|
-
specify { expect(composition.substances.first.name).to eq
|
487
|
+
specify { expect(composition.substances.first.chemical_substance.dose.to_s).to eq "2*10^9 CFU" }
|
488
|
+
specify { expect(composition.substances.first.name).to eq "Saccharomyces Boulardii Cryodesiccatus" }
|
502
489
|
end
|
503
490
|
|
504
|
-
context
|
491
|
+
context "handle dose followed by ratio" do
|
505
492
|
# 43996 1 Keppur, Salbe
|
506
493
|
string = "symphyti radicis recentis extractum ethanolicum liquidum 280 mg ratio: 1:3-4"
|
507
494
|
composition = ParseComposition.from_string(string)
|
508
495
|
specify { expect(composition.substances.size).to eq 1 }
|
509
|
-
specify { expect(composition.substances.first.name).to eq
|
496
|
+
specify { expect(composition.substances.first.name).to eq "Symphyti Radicis Recentis Extractum Ethanolicum Liquidum" }
|
510
497
|
end
|
511
498
|
|
512
|
-
context
|
513
|
-
string
|
499
|
+
context "find correct result Überzug: E 132" do
|
500
|
+
string = "olanzapinum 15 mg, Überzug: E 132, excipiens pro compresso obducto."
|
514
501
|
composition = ParseComposition.from_string(string)
|
515
502
|
specify { expect(composition.substances.size).to eq 2 }
|
516
|
-
specify { expect(composition.substances.first.name).to eq
|
517
|
-
specify { expect(composition.substances.last.name).to eq
|
518
|
-
specify { expect(composition.substances.last.more_info).to eq
|
503
|
+
specify { expect(composition.substances.first.name).to eq "Olanzapinum" }
|
504
|
+
specify { expect(composition.substances.last.name).to eq "E 132" }
|
505
|
+
specify { expect(composition.substances.last.more_info).to eq "Überzug" }
|
519
506
|
end
|
520
507
|
|
521
508
|
context "should handle ut followed by corresp. " do
|
522
509
|
# 65302 1 Exviera 250 mg, Filmtabletten
|
523
|
-
string =
|
510
|
+
string = "dasabuvirum 250 mg ut dasabuvirum natricum corresp. dasabuvirum natricum monohydricum 270.26 mg, excipiens pro compresso obducto"
|
524
511
|
composition = ParseComposition.from_string(string)
|
525
512
|
specify { expect(composition.label).to eq nil }
|
526
513
|
specify { expect(composition.label_description).to eq nil }
|
527
|
-
specify { expect(composition.substances.size).to eq 1
|
528
|
-
specify { expect(composition.substances.first.name).to eq
|
514
|
+
specify { expect(composition.substances.size).to eq 1 }
|
515
|
+
specify { expect(composition.substances.first.name).to eq "Dasabuvirum" }
|
529
516
|
specify { expect(composition.substances.first.salts.size).to eq 1 }
|
530
|
-
specify { expect(composition.substances.first.salts.first.name).to eq
|
531
|
-
specify { expect(composition.substances.first.salts.first.chemical_substance.name).to eq
|
517
|
+
specify { expect(composition.substances.first.salts.first.name).to eq "Dasabuvirum Natricum" }
|
518
|
+
specify { expect(composition.substances.first.salts.first.chemical_substance.name).to eq "Dasabuvirum Natricum Monohydricum" }
|
532
519
|
end
|
533
520
|
|
534
|
-
context
|
535
|
-
string
|
521
|
+
context "find correct result for ut excipiens" do
|
522
|
+
string = "drospirenonum 3 mg, ethinylestradiolum 20 µg ut excipiens pro compresso obducto"
|
536
523
|
composition = ParseComposition.from_string(string)
|
537
524
|
specify { expect(composition.substances.size).to eq 2 }
|
538
|
-
specify { expect(composition.substances.last.name).to eq
|
525
|
+
specify { expect(composition.substances.last.name).to eq "Ethinylestradiolum" }
|
539
526
|
end
|
540
527
|
|
541
|
-
context
|
528
|
+
context "find correct result compositions for DER: followed by corresp." do
|
542
529
|
# 16863 1 Salvia Wild, Tropfen
|
543
|
-
string
|
530
|
+
string = "salviae extractum ethanolicum liquidum, DER: 1:4.2-5.0 corresp. ethanolum 40 % V/V"
|
544
531
|
composition = ParseComposition.from_string(string)
|
545
532
|
specify { expect(composition.substances.size).to eq 2 }
|
546
|
-
specify { expect(composition.substances[1].name).to eq
|
533
|
+
specify { expect(composition.substances[1].name).to eq "DER: 1:4.2-5.0" }
|
547
534
|
end
|
548
535
|
|
549
|
-
|
550
|
-
context 'find correct result compositions for 00613 Pentavac' do
|
536
|
+
context "find correct result compositions for 00613 Pentavac" do
|
551
537
|
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."
|
552
538
|
line_2 = "II) Hib-Komponente (Lyophilisat): haemophilus influenzae Typ B polysaccharida T-conjugatum 10 µg, trometamolum, saccharum, pro praeparatione."
|
553
539
|
txt = "#{line_1}\n#{line_2}"
|
554
|
-
composition = ParseComposition.from_string(line_1)
|
555
|
-
composition = ParseComposition.from_string(line_2)
|
540
|
+
# composition = ParseComposition.from_string(line_1)
|
541
|
+
# composition = ParseComposition.from_string(line_2)
|
556
542
|
info = ParseUtil.parse_compositions(txt)
|
557
543
|
|
558
|
-
specify { expect(info.first.label).to eq
|
559
|
-
specify { expect(info.size).to eq
|
560
|
-
specify { expect(info.first.substances.size).to eq
|
561
|
-
toxoidum =
|
562
|
-
specify { expect(toxoidum.class).to eq
|
544
|
+
specify { expect(info.first.label).to eq "I" }
|
545
|
+
specify { expect(info.size).to eq 2 }
|
546
|
+
specify { expect(info.first.substances.size).to eq 14 }
|
547
|
+
toxoidum = info.first.substances.find { |x| x.name.match(/Toxoidum Diphtheriae/i) }
|
548
|
+
specify { expect(toxoidum.class).to eq ParseSubstance }
|
563
549
|
if toxoidum
|
564
|
-
specify { expect(toxoidum.name).to eq
|
565
|
-
specify { expect(toxoidum.qty.to_f).to eq
|
566
|
-
specify { expect(toxoidum.unit).to eq
|
550
|
+
specify { expect(toxoidum.name).to eq "Toxoidum Diphtheriae" }
|
551
|
+
specify { expect(toxoidum.qty.to_f).to eq 30.0 }
|
552
|
+
specify { expect(toxoidum.unit).to eq "U.I./0.5 ml" }
|
567
553
|
end
|
568
554
|
end
|
569
555
|
|
570
|
-
context
|
571
|
-
string =
|
556
|
+
context "find correct result compositions for fluticasoni with chemical_dose" do
|
557
|
+
string = "fluticasoni-17 propionas 100 µg, lactosum monohydricum q.s. ad pulverem pro 25 mg."
|
572
558
|
composition = ParseComposition.from_string(string)
|
573
559
|
specify { expect(composition.substances.size).to eq 2 }
|
574
|
-
fluticasoni =
|
575
|
-
specify { expect(fluticasoni.name).to eq
|
576
|
-
specify { expect(fluticasoni.qty.to_f).to eq
|
577
|
-
specify { expect(fluticasoni.unit).to eq
|
578
|
-
specify { expect(fluticasoni.dose.to_s).to eq
|
579
|
-
lactosum =
|
560
|
+
fluticasoni = composition.substances.find { |x| x.name.match(/Fluticasoni/i) }
|
561
|
+
specify { expect(fluticasoni.name).to eq "Fluticasoni-17 Propionas" }
|
562
|
+
specify { expect(fluticasoni.qty.to_f).to eq 100.0 }
|
563
|
+
specify { expect(fluticasoni.unit).to eq "µg/25 mg" }
|
564
|
+
specify { expect(fluticasoni.dose.to_s).to eq "100 µg/25 mg" }
|
565
|
+
lactosum = composition.substances.find { |x| x.name.match(/Lactosum/i) }
|
580
566
|
specify { expect(lactosum.name).to eq "Lactosum Monohydricum" }
|
581
|
-
skip { expect(lactosum.dose.to_s).to eq
|
567
|
+
skip { expect(lactosum.dose.to_s).to eq "25 mg" }
|
582
568
|
end
|
583
569
|
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
|
570
|
+
context "find correct result Solvens (i.m.)" do
|
571
|
+
string = "Solvens (i.m.): aqua ad iniectabilia 2 ml pro vitro"
|
572
|
+
composition = ParseComposition.from_string(string)
|
573
|
+
specify { expect(composition.substances.size).to eq 0 }
|
574
|
+
specify { expect(composition.corresp).to eq "aqua ad iniectabilia 2 ml pro vitro" }
|
575
|
+
end
|
590
576
|
|
591
|
-
|
592
|
-
|
593
|
-
|
594
|
-
|
595
|
-
|
596
|
-
|
597
|
-
|
598
|
-
|
599
|
-
|
600
|
-
|
601
|
-
|
602
|
-
|
603
|
-
|
577
|
+
context "should handle Iscador" do
|
578
|
+
# 56829 sequence 3 Iscador M
|
579
|
+
string = "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."
|
580
|
+
composition = ParseComposition.from_string(string)
|
581
|
+
viscum = composition.substances.find { |x| x.name.match(/viscum/i) }
|
582
|
+
specify { expect(viscum.name).to eq "Extractum Aquosum Liquidum Fermentatum 0.05 Mg Ex Viscum Album (mali) Recens" }
|
583
|
+
specify { expect(viscum.qty).to eq 0.01 } # 0.0001 mg/ml
|
584
|
+
specify { expect(viscum.unit).to eq "mg/ml" } # 0.0001 mg/ml
|
585
|
+
specify { expect(viscum.dose.qty).to eq 0.01 } # 0.0001 mg/ml
|
586
|
+
specify { expect(viscum.dose.unit).to eq "mg/ml" } # 0.0001 mg/ml
|
587
|
+
specify { expect(viscum.dose.to_s).to eq "0.01 mg/ml" } # 0.0001 mg/ml
|
588
|
+
specify { expect(composition.source).to eq string }
|
589
|
+
end
|
604
590
|
|
605
|
-
context
|
591
|
+
context "find correct result compositions for poloxamerum" do
|
606
592
|
# 47657 1 Nanocoll, Markierungsbesteck
|
607
593
|
string = "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."
|
608
594
|
composition = ParseComposition.from_string(string)
|
609
595
|
specify { expect(composition.substances.size).to eq 6 }
|
610
|
-
poloxamerum =
|
611
|
-
specify { expect(poloxamerum.name).to eq
|
612
|
-
specify { expect(poloxamerum.qty.to_f).to eq
|
613
|
-
specify { expect(poloxamerum.unit).to eq
|
596
|
+
poloxamerum = composition.substances.find { |x| x.name.match(/poloxamerum/i) }
|
597
|
+
specify { expect(poloxamerum.name).to eq "Poloxamerum 238" }
|
598
|
+
specify { expect(poloxamerum.qty.to_f).to eq 0.0 }
|
599
|
+
specify { expect(poloxamerum.unit).to eq nil }
|
614
600
|
end
|
615
601
|
|
616
|
-
|
617
|
-
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
|
602
|
+
context "should handle DER followed by corresp" do
|
603
|
+
# 54024 1 Nieren- und Blasendragées S
|
604
|
+
string = "DER: 4-5:1, corresp. arbutinum 24-30 mg"
|
605
|
+
composition = ParseComposition.from_string(string)
|
606
|
+
specify { expect(composition.source).to eq string }
|
607
|
+
specify { expect(composition.label).to eq nil }
|
608
|
+
specify { expect(composition.label_description).to eq nil }
|
609
|
+
specify { expect(composition.substances.size).to eq 1 }
|
610
|
+
specify { expect(composition.substances.first.name).to eq "DER: 4-5:1" }
|
611
|
+
specify { expect(composition.substances.first.chemical_substance.name).to eq "Arbutinum" }
|
612
|
+
end
|
627
613
|
|
628
|
-
|
629
|
-
|
630
|
-
|
631
|
-
|
632
|
-
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
|
614
|
+
context "should handle 'A): macrogolum 3350 100 g'" do
|
615
|
+
# 57900 1 Moviprep, Pulver
|
616
|
+
string = "A): macrogolum 3350 100 g, natrii sulfas anhydricus 7.5 g"
|
617
|
+
composition = ParseComposition.from_string(string)
|
618
|
+
specify { expect(composition.source).to eq string }
|
619
|
+
specify { expect(composition.label).to eq "A" }
|
620
|
+
specify { expect(composition.label_description).to eq nil }
|
621
|
+
specify { expect(composition.substances.size).to eq 2 }
|
622
|
+
specify { expect(composition.substances.first.name).to eq "Macrogolum 3350" }
|
623
|
+
specify { expect(composition.substances.first.qty).to eq 100 }
|
624
|
+
specify { expect(composition.substances.first.unit).to eq "g" }
|
625
|
+
end
|
640
626
|
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
|
647
|
-
|
648
|
-
|
627
|
+
context "should able to handle a simple ratio" do
|
628
|
+
string = "allii sativi maceratum oleosum 270 mg, ratio: 1:10, excipiens pro capsula."
|
629
|
+
composition = ParseComposition.from_string(string)
|
630
|
+
specify { expect(composition.source).to eq string }
|
631
|
+
specify { expect(composition.substances.size).to eq 1 }
|
632
|
+
specify { expect(composition.substances.first.name).to eq "Allii Sativi Maceratum Oleosum" }
|
633
|
+
specify { expect(composition.substances.first.more_info).to eq "ratio: 1:10" }
|
634
|
+
end
|
649
635
|
|
650
|
-
|
651
|
-
|
652
|
-
|
653
|
-
|
654
|
-
|
655
|
-
|
656
|
-
|
657
|
-
|
658
|
-
|
636
|
+
context "should able to handle multiple ratio" do
|
637
|
+
# 25273 1 Schoenenberger naturreiner Heilpflanzensaft, Thymian
|
638
|
+
string = "thymi herbae recentis extractum aquosum liquidum, ratio: 1:1.5-2.4."
|
639
|
+
composition = ParseComposition.from_string(string)
|
640
|
+
specify { expect(composition.source).to eq string }
|
641
|
+
specify { expect(composition.substances.size).to eq 1 }
|
642
|
+
specify { expect(composition.substances.first.name).to eq "Thymi Herbae Recentis Extractum Aquosum Liquidum" }
|
643
|
+
specify { expect(composition.substances.first.more_info).to eq "ratio: 1:1.5-2.4" }
|
644
|
+
end
|
659
645
|
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
|
664
|
-
|
665
|
-
|
666
|
-
|
646
|
+
context "should handles lines containing V): mannitolum 40 mg pro dosi" do
|
647
|
+
string = "V): mannitolum 40 mg pro dosi"
|
648
|
+
composition = ParseComposition.from_string(string)
|
649
|
+
specify { expect(composition.source).to eq string }
|
650
|
+
specify { expect(composition.label).to eq "V" }
|
651
|
+
specify { expect(composition.substances.size).to eq 1 }
|
652
|
+
end
|
667
653
|
|
668
|
-
|
669
|
-
|
670
|
-
|
671
|
-
|
672
|
-
|
673
|
-
|
674
|
-
|
675
|
-
|
654
|
+
context "should treat correctly CFU units" do
|
655
|
+
# 56015 Perskindol Cool avec consoude, gel
|
656
|
+
string = "lactobacillus acidophilus cryodesiccatus min. 10^9 CFU"
|
657
|
+
composition = ParseComposition.from_string(string)
|
658
|
+
specify { expect(composition.substances.first.name).to eq "Lactobacillus Acidophilus Cryodesiccatus" }
|
659
|
+
specify { expect(composition.substances.first.qty).to eq "10^9" }
|
660
|
+
specify { expect(composition.substances.first.unit).to eq "CFU" }
|
661
|
+
end
|
676
662
|
|
677
|
-
|
663
|
+
context "should pass several () inside a name" do
|
678
664
|
composition = nil
|
679
|
-
|
680
|
-
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
688
|
-
|
689
|
-
|
690
|
-
|
691
|
-
composition = ParseComposition.from_string(string)
|
692
|
-
}
|
693
|
-
composition = ParseComposition.from_string(strings.last + ' 15 µg')
|
694
|
-
specify { expect(composition.substances.first.name.downcase).to eq strings.last.downcase }
|
695
|
-
specify { expect(composition.substances.first.qty).to eq 15 }
|
696
|
-
specify { expect(composition.substances.first.unit).to eq 'µg' }
|
697
|
-
end
|
698
|
-
|
699
|
-
context "should emit correct unit when excipiens contains pro X ml" do
|
700
|
-
string = 'glatiramerum acetas 20 mg corresp. glatiramerum 18 mg, mannitolum, aqua ad iniectabilia q.s. ad solutionem pro 0.5 ml.'
|
665
|
+
strings = [
|
666
|
+
"a(eine klammer) und nachher",
|
667
|
+
"(eine klammer) und nachher",
|
668
|
+
"haemagglutininum influenzae A (eine klammer)",
|
669
|
+
"haemagglutininum influenzae A (eine klammer) und nachher",
|
670
|
+
"haemagglutininum influenzae A (H1N1) (in Klammer)",
|
671
|
+
"haemagglutininum influenzae A (H1N1) or (H5N3) (in Klammer) more",
|
672
|
+
"haemagglutininum influenzae A (H1N1) eins (second) even more",
|
673
|
+
"ab (H1N1)-like: dummy",
|
674
|
+
"Virus-Stamm A/California/7/2009 (H1N1)-like: reassortant virus NYMC X-179A",
|
675
|
+
"haemagglutininum influenzae A (H1N1) (Virus-Stamm A/California/7/2009 (H1N1)-like: reassortant virus NYMC X-179A)"
|
676
|
+
].each { |string|
|
701
677
|
composition = ParseComposition.from_string(string)
|
702
|
-
|
703
|
-
|
704
|
-
|
705
|
-
|
706
|
-
|
707
|
-
|
708
|
-
specify { expect(composition.substances.first.chemical_substance.unit).to eq 'mg/0.5 ml' }
|
709
|
-
end
|
678
|
+
}
|
679
|
+
composition = ParseComposition.from_string(strings.last + " 15 µg")
|
680
|
+
specify { expect(composition.substances.first.name.downcase).to eq strings.last.downcase }
|
681
|
+
specify { expect(composition.substances.first.qty).to eq 15 }
|
682
|
+
specify { expect(composition.substances.first.unit).to eq "µg" }
|
683
|
+
end
|
710
684
|
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
|
716
|
-
|
717
|
-
|
685
|
+
context "should emit correct unit when excipiens contains pro X ml" do
|
686
|
+
string = "glatiramerum acetas 20 mg corresp. glatiramerum 18 mg, mannitolum, aqua ad iniectabilia q.s. ad solutionem pro 0.5 ml."
|
687
|
+
composition = ParseComposition.from_string(string)
|
688
|
+
specify { expect(composition.substances.first.name).to eq "Glatiramerum Acetas" }
|
689
|
+
specify { expect(composition.substances.first.qty).to eq 20 }
|
690
|
+
specify { expect(composition.substances.first.unit).to eq "mg/0.5 ml" }
|
691
|
+
specify { expect(composition.substances.first.chemical_substance.unit).to eq "mg/0.5 ml" }
|
692
|
+
specify { expect(composition.substances.first.chemical_substance.name).to eq "Glatiramerum" }
|
693
|
+
specify { expect(composition.substances.first.chemical_substance.qty).to eq 18 }
|
694
|
+
specify { expect(composition.substances.first.chemical_substance.unit).to eq "mg/0.5 ml" }
|
695
|
+
end
|
718
696
|
|
719
|
-
|
720
|
-
|
721
|
-
|
722
|
-
|
723
|
-
|
724
|
-
|
725
|
-
|
726
|
-
# TODO: specify { expect(composition.substances.first.dose.to_s).to eq '9 g/L 5 ml' }
|
727
|
-
end
|
697
|
+
context "should handle substance with a range" do
|
698
|
+
string = "glyceroli monostearas 40-55"
|
699
|
+
composition = ParseComposition.from_string(string)
|
700
|
+
specify { expect(composition.substances.size).to eq 1 }
|
701
|
+
specify { expect(composition.substances.first.name).to eq "Glyceroli Monostearas" }
|
702
|
+
specify { expect(composition.substances.first.dose.to_s).to eq "40-55" }
|
703
|
+
end
|
728
704
|
|
729
|
-
|
730
|
-
|
731
|
-
|
732
|
-
|
733
|
-
|
734
|
-
|
735
|
-
|
736
|
-
|
737
|
-
|
738
|
-
specify { expect(substance.unit).to eq 'mg' }
|
739
|
-
specify { expect(composition.substances.first.name).to eq 'Calcium' } # TODO:
|
740
|
-
# TODO: specify { expect(composition.substances.first.dose.to_s).to eq '9 g/L 5 ml' }
|
741
|
-
end
|
705
|
+
context "should handle mineralia with alia" do
|
706
|
+
string = "mineralia: calcium 160 ut alia: ginseng extractum 50 mg"
|
707
|
+
composition = ParseComposition.from_string(string)
|
708
|
+
specify { expect(composition.substances.size).to eq 2 }
|
709
|
+
specify { expect(composition.substances.first.salts.size).to eq 0 }
|
710
|
+
specify { expect(composition.substances.first.name).to eq "Calcium" } # TODO:
|
711
|
+
specify { expect(composition.substances.last.name).to eq "Ginseng Extractum" } # TODO:
|
712
|
+
# TODO: specify { expect(composition.substances.first.dose.to_s).to eq '9 g/L 5 ml' }
|
713
|
+
end
|
742
714
|
|
743
|
-
|
744
|
-
|
745
|
-
|
746
|
-
|
747
|
-
|
748
|
-
|
749
|
-
|
715
|
+
context "should handle mineralia" do
|
716
|
+
string = "mineralia: calcium 160 mg ut magnesium 120 mg ut ferrum 5.6 mg ut cuprum 1 mg ut manganum 1.4 mg ut iodum 60 µg ut molybdenum 60 µg"
|
717
|
+
composition = ParseComposition.from_string(string)
|
718
|
+
specify { expect(composition.substances.size).to eq 1 }
|
719
|
+
specify { expect(composition.substances.first.more_info).to eq "mineralia" }
|
720
|
+
specify { expect(composition.substances.first.salts.size).to eq 6 }
|
721
|
+
substance = composition.substances.first.salts.find { |x| /Magnesium/i.match(x.name) }
|
722
|
+
specify { expect(substance.name).to eq "Magnesium" }
|
723
|
+
specify { expect(substance.qty).to eq 120.0 }
|
724
|
+
specify { expect(substance.unit).to eq "mg" }
|
725
|
+
specify { expect(composition.substances.first.name).to eq "Calcium" } # TODO:
|
726
|
+
# TODO: specify { expect(composition.substances.first.dose.to_s).to eq '9 g/L 5 ml' }
|
727
|
+
end
|
750
728
|
|
751
|
-
|
752
|
-
|
753
|
-
|
754
|
-
|
755
|
-
|
756
|
-
|
757
|
-
|
758
|
-
specify { expect(globulina.is_active_agent).to eq true }
|
759
|
-
specify { expect(globulina.qty).to eq 8 }
|
760
|
-
specify { expect(globulina.unit).to eq 'mg' }
|
761
|
-
end
|
729
|
+
context "should handle Solvens line" do
|
730
|
+
string = "Solvens: natrii chloridi solutio 9 g/L 5 ml."
|
731
|
+
composition = ParseComposition.from_string(string)
|
732
|
+
specify { expect(composition.substances.size).to eq 0 }
|
733
|
+
specify { expect(composition.corresp).to eq "natrii chloridi solutio 9 g/L 5 ml" }
|
734
|
+
skip { expect(composition.excipiens.substance.name).to eq "Natrii Chloridi Solutio" }
|
735
|
+
end
|
762
736
|
|
763
|
-
|
764
|
-
|
765
|
-
|
766
|
-
|
767
|
-
|
768
|
-
|
769
|
-
|
770
|
-
|
771
|
-
|
772
|
-
|
773
|
-
|
737
|
+
context "should parse a complex composition" do
|
738
|
+
composition = ParseUtil.parse_compositions(
|
739
|
+
"globulina equina (immunisé avec coeur) 8 mg",
|
740
|
+
"globulina equina (immunisé avec coeur)"
|
741
|
+
).first
|
742
|
+
specify { expect(composition.substances.size).to eq 1 }
|
743
|
+
globulina = composition.substances.find { |x| /globulina/i.match(x.name) }
|
744
|
+
specify { expect(globulina.name).to eq "Globulina Equina (immunisé Avec Coeur)" }
|
745
|
+
specify { expect(globulina.is_active_agent).to eq true }
|
746
|
+
specify { expect(globulina.qty).to eq 8 }
|
747
|
+
specify { expect(globulina.unit).to eq "mg" }
|
748
|
+
end
|
749
|
+
|
750
|
+
context "should parse globulina equina (immunise" do
|
751
|
+
composition = ParseUtil.parse_compositions(
|
752
|
+
"globulina equina (immunisé avec coeur, Tissu Pulmonaire, Reins De Porcins) 8 mg",
|
753
|
+
"globulina equina (immunisé avec coeur, Tissu Pulmonaire, Reins De Porcins)"
|
754
|
+
).first
|
755
|
+
specify { expect(composition.substances.size).to eq 1 }
|
756
|
+
globulina = composition.substances.find { |x| /globulina/i.match(x.name) }
|
757
|
+
specify { expect(globulina.name).to eq "Globulina Equina (immunisé Avec Coeur, Tissu Pulmonaire, Reins De Porcins)" }
|
758
|
+
specify { expect(globulina.is_active_agent).to eq true }
|
759
|
+
specify { expect(globulina.qty).to eq 8 }
|
760
|
+
specify { expect(globulina.unit).to eq "mg" }
|
761
|
+
end
|
774
762
|
|
775
|
-
|
776
|
-
|
777
|
-
|
778
|
-
|
779
|
-
|
780
|
-
|
781
|
-
|
782
|
-
|
783
|
-
|
784
|
-
|
763
|
+
context "should return correct composition for containing '(acarus siro)" do
|
764
|
+
string = "acari allergeni extractum (acarus siro) 50'000 U., conserv.: phenolum, excipiens ad solutionem pro 1 ml."
|
765
|
+
composition = ParseComposition.from_string(string)
|
766
|
+
specify { expect(composition.source).to eq string }
|
767
|
+
specify { expect(composition.substances.size).to eq 2 } # got only 1
|
768
|
+
specify { expect(composition.substances.first.more_info).to eq nil }
|
769
|
+
specify { expect(composition.substances.first.name).to eq "Acari Allergeni Extractum (acarus Siro)" }
|
770
|
+
specify { expect(composition.substances.last.name).to eq "Phenolum" } # was Acari Allergeni Extractum (acarus Siro)
|
771
|
+
specify { expect(composition.substances.last.more_info).to match "conserv" }
|
772
|
+
end
|
785
773
|
|
786
|
-
|
787
|
-
|
788
|
-
|
789
|
-
|
790
|
-
|
791
|
-
|
792
|
-
|
793
|
-
|
794
|
-
|
795
|
-
|
796
|
-
|
797
|
-
|
798
|
-
|
799
|
-
|
800
|
-
|
774
|
+
context "should return correct composition for containing 'A): acari allergeni extractum 50 U' (IKSNR 60606)" do
|
775
|
+
# Novo-Helisen Depot D. farinae/D. pteronyssinus Kombipackung 1-3, Injektionssuspension
|
776
|
+
string =
|
777
|
+
"A): acari allergeni extractum 50 U.: dermatophagoides farinae 50 % et dermatophagoides pteronyssinus 50 %, aluminium ut aluminii hydroxidum hydricum ad adsorptionem, natrii chloridum, conserv.: phenolum 4.0 mg, aqua q.s. ad suspensionem pro 1 ml."
|
778
|
+
composition = ParseComposition.from_string(string)
|
779
|
+
composition.label_description
|
780
|
+
specify { expect(composition.label).to eq "A" }
|
781
|
+
specify { expect(composition.label_description).to eq "acari allergeni extractum 50 U." }
|
782
|
+
specify { expect(composition.source).to eq string }
|
783
|
+
specify { expect(composition.substances.size).to eq 5 }
|
784
|
+
pteronyssinus = composition.substances.find { |x| /pteronyssinus/i.match(x.name) }
|
785
|
+
specify { expect(composition.substances.first.name).to eq "Dermatophagoides Farinae" }
|
786
|
+
specify { expect(pteronyssinus.name).to eq "Dermatophagoides Pteronyssinus" }
|
787
|
+
specify { expect(pteronyssinus.more_info).to eq nil }
|
788
|
+
end
|
801
789
|
|
802
|
-
|
803
|
-
|
804
|
-
|
805
|
-
|
806
|
-
|
807
|
-
|
808
|
-
|
809
|
-
|
810
|
-
|
811
|
-
|
790
|
+
context "should return correct composition for containing 'virus rabiei inactivatum" do
|
791
|
+
string = "Praeparatio cryodesiccata: virus rabiei inactivatum (Stamm: Wistar Rabies PM/WI 38-1503-3M) min. 2.5 U.I."
|
792
|
+
composition = ParseComposition.from_string(string)
|
793
|
+
specify { expect(composition.source).to eq string }
|
794
|
+
specify { expect(composition.substances.size).to eq 1 }
|
795
|
+
specify { expect(composition.substances.first.name).to eq "Virus Rabiei Inactivatum (stamm: Wistar Rabies Pm/wi 38-1503-3m)" }
|
796
|
+
specify { expect(composition.substances.first.qty).to eq 2.5 }
|
797
|
+
specify { expect(composition.substances.first.unit).to eq "U.I." }
|
798
|
+
specify { expect(composition.label).to eq "Praeparatio cryodesiccata:" }
|
799
|
+
end
|
812
800
|
|
813
|
-
|
814
|
-
|
815
|
-
|
816
|
-
|
817
|
-
|
818
|
-
|
819
|
-
|
820
|
-
|
801
|
+
context "should return correct composition for containing Histamin Equivalent Pric. (e.g IKSNR 58566)" do
|
802
|
+
# 58566 1 Soluprick SQ Phleum pratense, Lösung
|
803
|
+
string = "pollinis allergeni extractum (Phleum pratense) 10 U., natrii chloridum, phenolum, glycerolum, aqua ad iniectabilia q.s. ad solutionem pro 1 ml, U = Histamin Equivalent Prick."
|
804
|
+
composition = ParseComposition.from_string(string)
|
805
|
+
specify { expect(composition.source).to eq string }
|
806
|
+
specify { expect(composition.substances.size).to eq 4 }
|
807
|
+
specify { expect(composition.substances.first.name).to eq "Pollinis Allergeni Extractum (phleum Pratense)" }
|
808
|
+
end
|
821
809
|
|
822
|
-
|
823
|
-
|
824
|
-
|
825
|
-
|
826
|
-
|
827
|
-
|
828
|
-
|
829
|
-
|
830
|
-
|
810
|
+
context "should handle aqua ad iniectabilia" do
|
811
|
+
string = "any_substance, aqua ad iniectabilia q.s. ad solutionem pro 5 ml"
|
812
|
+
composition = ParseComposition.from_string(string)
|
813
|
+
# substance = composition.substances.last
|
814
|
+
specify { expect(composition.excipiens.name).to eq "aqua ad iniectabilia q.s. ad solutionem" }
|
815
|
+
specify { expect(composition.excipiens.chemical_substance).to eq nil }
|
816
|
+
specify { expect(composition.excipiens.qty).to eq 5.0 }
|
817
|
+
specify { expect(composition.excipiens.unit).to eq "ml" }
|
818
|
+
end
|
831
819
|
|
832
|
-
|
833
|
-
|
834
|
-
|
835
|
-
|
836
|
-
|
837
|
-
|
838
|
-
|
839
|
-
|
840
|
-
|
841
|
-
|
842
|
-
|
820
|
+
context "should return correct substance for 'excipiens ad solutionem pro 1 ml corresp. ethanolum 59.5 % V/V'" do
|
821
|
+
string = "any_substance, excipiens ad solutionem pro 1 ml corresp. ethanolum 59.5 % V/V"
|
822
|
+
composition = ParseComposition.from_string(string)
|
823
|
+
# substance = composition.substances.first
|
824
|
+
# TODO: what should we report here? dose = pro 1 ml or 59.5 % V/V, chemical_substance = ethanolum?
|
825
|
+
# or does it only make sense as part of a composition?
|
826
|
+
skip { expect(composition.excipiens.name).to eq "Ethanolum" }
|
827
|
+
specify { expect(composition.excipiens.cdose).to eq nil }
|
828
|
+
skip { expect(composition.excipiens.qty).to eq 59.5 }
|
829
|
+
skip { expect(composition.excipiens.unit).to eq "% V/V" }
|
830
|
+
end
|
843
831
|
|
844
|
-
|
845
|
-
|
846
|
-
|
847
|
-
|
848
|
-
|
849
|
-
|
850
|
-
|
832
|
+
context "should return correct composition for 'excipiens ad emulsionem'" do
|
833
|
+
string = 'something, excipiens ad emulsionem pro 1 g"'
|
834
|
+
composition = ParseComposition.from_string(string)
|
835
|
+
# substance = composition.substances.first
|
836
|
+
specify { expect(composition.source).to eq string }
|
837
|
+
specify { expect(composition.substances.size).to eq 1 }
|
838
|
+
end
|
851
839
|
|
852
|
-
|
853
|
-
|
854
|
-
|
855
|
-
|
856
|
-
|
857
|
-
|
858
|
-
|
840
|
+
context "should return correct substance for 'aqua q.s. ad suspensionem pro 0.5 ml'" do
|
841
|
+
string = "natrii dihydrogenophosphas dihydricus, aqua q.s. ad suspensionem pro 0.5 ml."
|
842
|
+
composition = ParseComposition.from_string(string)
|
843
|
+
specify { expect(composition.excipiens.name).to match(/aqua|excipiens/) }
|
844
|
+
specify { expect(composition.excipiens.qty).to eq 0.5 }
|
845
|
+
specify { expect(composition.excipiens.unit).to eq "ml" }
|
846
|
+
end
|
859
847
|
|
860
|
-
|
861
|
-
|
862
|
-
|
863
|
-
|
864
|
-
|
865
|
-
|
866
|
-
|
867
|
-
|
868
|
-
|
848
|
+
context "should return correct substance for 'excipiens ad solutionem pro 3 ml corresp. 50 µg'" do
|
849
|
+
string = "any_substance, excipiens ad solutionem pro 3 ml corresp. 50 µg"
|
850
|
+
composition = ParseComposition.from_string(string)
|
851
|
+
specify { expect(composition.excipiens.name).to match(/Excipiens/i) }
|
852
|
+
specify { expect(composition.excipiens.qty).to eq 3.0 }
|
853
|
+
specify { expect(composition.excipiens.unit).to eq "ml" }
|
854
|
+
specify { expect(composition.excipiens.cdose.qty).to eq 50.0 }
|
855
|
+
specify { expect(composition.excipiens.cdose.unit).to eq "µg" }
|
856
|
+
end
|
869
857
|
|
870
|
-
|
871
|
-
|
872
|
-
|
873
|
-
|
874
|
-
|
875
|
-
|
876
|
-
|
877
|
-
|
858
|
+
context "should return correct substance for 'excipiens ad pulverem pro 1000 mg'" do
|
859
|
+
string = "any_substance, excipiens ad pulverem pro 1000 mg"
|
860
|
+
CompositionTransformer.clear_substances
|
861
|
+
composition = ParseComposition.from_string(string)
|
862
|
+
specify { expect(composition.excipiens.name).to match(/Excipiens/) }
|
863
|
+
specify { expect(composition.excipiens.qty).to eq 1000.0 }
|
864
|
+
specify { expect(composition.excipiens.unit).to eq "mg" }
|
865
|
+
end
|
878
866
|
|
879
|
-
|
880
|
-
|
881
|
-
|
882
|
-
|
883
|
-
|
884
|
-
|
885
|
-
|
886
|
-
|
887
|
-
|
867
|
+
context "should pass with 'etinoli 7900 U.I'" do
|
868
|
+
string = "retinoli 7900 U.I."
|
869
|
+
composition = ParseComposition.from_string(string)
|
870
|
+
specify { expect(composition.source).to eq string }
|
871
|
+
specify { expect(composition.substances.size).to eq 1 }
|
872
|
+
specify { expect(composition.substances.first.qty).to eq 7900.0 }
|
873
|
+
specify { expect(composition.substances.first.unit).to eq "U.I." }
|
874
|
+
specify { expect(composition.substances.first.name).to eq "Retinoli" }
|
875
|
+
end
|
888
876
|
|
889
|
-
|
890
|
-
|
891
|
-
|
892
|
-
|
893
|
-
|
894
|
-
|
895
|
-
|
877
|
+
context "should return correct composition for containing 'absinthii herba 1.2 g pro charta" do
|
878
|
+
string = "absinthii herba 1.2 g pro charta"
|
879
|
+
composition = ParseComposition.from_string(string)
|
880
|
+
specify { expect(composition.source).to eq string }
|
881
|
+
specify { expect(composition.substances.size).to eq 1 }
|
882
|
+
specify { expect(composition.substances.first.name).to eq "Absinthii Herba" }
|
883
|
+
end
|
896
884
|
|
897
|
-
|
898
|
-
|
899
|
-
|
900
|
-
|
901
|
-
|
902
|
-
|
903
|
-
|
885
|
+
context "should return correct composition for containing 'ad pulverem'" do
|
886
|
+
string = "pimpinellae radix 15 % ad pulverem"
|
887
|
+
composition = ParseComposition.from_string(string)
|
888
|
+
specify { expect(composition.source).to eq string }
|
889
|
+
specify { expect(composition.substances.size).to eq 1 }
|
890
|
+
specify { expect(composition.substances.first.name).to eq "Pimpinellae Radix" }
|
891
|
+
end
|
904
892
|
|
905
|
-
|
906
|
-
|
907
|
-
|
908
|
-
|
909
|
-
|
910
|
-
|
911
|
-
|
893
|
+
context "should return correct composition for 'DER: 6:1'" do
|
894
|
+
string = "DER: 6:1"
|
895
|
+
composition = ParseComposition.from_string(string)
|
896
|
+
specify { expect(composition.source).to eq string }
|
897
|
+
specify { expect(composition.substances.size).to eq 1 }
|
898
|
+
specify { expect(composition.substances.first.name).to eq string }
|
899
|
+
end
|
912
900
|
|
913
|
-
|
914
|
-
|
915
|
-
|
916
|
-
|
917
|
-
|
918
|
-
|
919
|
-
|
920
|
-
|
921
|
-
|
901
|
+
context "should return correct composition for containing ' ut procaini hydrochloridum" do
|
902
|
+
string =
|
903
|
+
"procainum 10 mg ut procaini hydrochloridum"
|
904
|
+
composition = ParseComposition.from_string(string)
|
905
|
+
specify { expect(composition.source).to eq string }
|
906
|
+
specify { expect(composition.substances.size).to eq 1 }
|
907
|
+
specify { expect(composition.substances.first.name).to eq "Procainum" }
|
908
|
+
specify { expect(composition.substances.first.salts.first.name).to eq "Procaini Hydrochloridum" }
|
909
|
+
end
|
922
910
|
|
923
|
-
|
924
|
-
|
925
|
-
#"absinthii herba 15 %, anisi fructus 15 %, carvi fructus 15 %, foeniculi fructus 15 %, iuniperi pseudofructus 10 %, millefolii herba 15 %, pimpinellae radix 15 % ad pulverem.\n"
|
926
|
-
"pimpinellae radix 15 % ad pulverem.\n"
|
927
|
-
|
928
|
-
|
929
|
-
|
930
|
-
|
931
|
-
|
932
|
-
|
933
|
-
|
911
|
+
context "should return correct composition for containing 'ad pulverem'" do
|
912
|
+
string =
|
913
|
+
# "absinthii herba 15 %, anisi fructus 15 %, carvi fructus 15 %, foeniculi fructus 15 %, iuniperi pseudofructus 10 %, millefolii herba 15 %, pimpinellae radix 15 % ad pulverem.\n"
|
914
|
+
"pimpinellae radix 15 % ad pulverem.\n"
|
915
|
+
composition = ParseComposition.from_string(string)
|
916
|
+
specify { expect(composition.source).to eq string }
|
917
|
+
specify { expect(composition.substances.size).to eq 1 }
|
918
|
+
specify { expect(composition.substances.first.name).to eq "Pimpinellae Radix" }
|
919
|
+
specify { expect(composition.substances.first.qty).to eq 15.0 }
|
920
|
+
specify { expect(composition.substances.first.unit).to eq "%" }
|
921
|
+
end
|
934
922
|
|
935
|
-
|
936
|
-
|
937
|
-
"abrus precatorius C6, aconitum napellus C6, atropa belladonna C6, calendula officinalis C6, chelidonium majus C6, viburnum opulus C6 ana partes, excipiens ad globulos.\n"
|
938
|
-
|
939
|
-
|
940
|
-
|
941
|
-
|
942
|
-
|
923
|
+
context "should return correct composition for containing 'excipiens ad globulos" do
|
924
|
+
string =
|
925
|
+
"abrus precatorius C6, aconitum napellus C6, atropa belladonna C6, calendula officinalis C6, chelidonium majus C6, viburnum opulus C6 ana partes, excipiens ad globulos.\n"
|
926
|
+
composition = ParseComposition.from_string(string)
|
927
|
+
specify { expect(composition.source).to eq string }
|
928
|
+
specify { expect(composition.substances.size).to eq 6 }
|
929
|
+
specify { expect(composition.substances.first.name).to eq "Abrus Precatorius C6" }
|
930
|
+
end
|
943
931
|
|
944
|
-
|
945
|
-
|
946
|
-
|
947
|
-
|
948
|
-
|
949
|
-
|
932
|
+
context "should return correct composition for containing 'arom.: E 104'" do
|
933
|
+
string = "gentianae radix 12 mg, primulae flos 36 mg, rumicis acetosae herba 36 mg, sambuci flos 36 mg, verbenae herba 36 mg, color.: E 104 et E 132, excipiens pro compresso obducto."
|
934
|
+
composition = ParseComposition.from_string(string)
|
935
|
+
specify { expect(composition.source).to eq string }
|
936
|
+
specify { expect(composition.substances.size).to eq 7 }
|
937
|
+
e104 = composition.substances.find { |x| x.name.eql?("E 104") }
|
950
938
|
|
951
|
-
|
952
|
-
|
953
|
-
|
939
|
+
specify { expect(e104.name).to eq "E 104" }
|
940
|
+
specify { expect(composition.substances.first.name).to eq "Gentianae Radix" }
|
941
|
+
end
|
954
942
|
|
955
|
-
|
956
|
-
|
957
|
-
|
958
|
-
|
959
|
-
|
960
|
-
|
961
|
-
|
962
|
-
|
943
|
+
context "should return correct composition for containing 'color.: E 160(a)'" do
|
944
|
+
string = "color.: E 160(a), E 171"
|
945
|
+
composition = ParseComposition.from_string(string)
|
946
|
+
specify { expect(composition.source).to eq string }
|
947
|
+
specify { expect(composition.substances.size).to eq 2 }
|
948
|
+
specify { expect(composition.substances.first.name).to eq "E 160(a)" }
|
949
|
+
specify { expect(composition.substances.last.name).to eq "E 171" }
|
950
|
+
end
|
963
951
|
|
964
|
-
|
965
|
-
|
966
|
-
|
967
|
-
|
968
|
-
# specify { expect(substance.name).to eq 'Urtica Dioica' } # TODO: is this okay?
|
969
|
-
|
970
|
-
|
952
|
+
context "should parse a Praeparatio with a label/galenic form?" do
|
953
|
+
string = "Praeparatio cryodesiccata: pollinis allergeni extractum 25'000 U.: urtica dioica"
|
954
|
+
composition = ParseComposition.from_string(string)
|
955
|
+
# substance = composition.substances.first
|
956
|
+
# specify { expect(substance.name).to eq 'Urtica Dioica' } # TODO: is this okay?
|
957
|
+
specify { expect(composition.label).to eq "Praeparatio cryodesiccata:" }
|
958
|
+
end
|
971
959
|
|
972
|
-
|
973
|
-
|
974
|
-
|
975
|
-
|
976
|
-
|
977
|
-
|
960
|
+
context "should return correct substance for equis F(ab')2" do
|
961
|
+
string = "viperis antitoxinum equis F(ab')2"
|
962
|
+
composition = ParseComposition.from_string(string)
|
963
|
+
substance = composition.substances.first
|
964
|
+
specify { expect(substance.name).to eq "Viperis Antitoxinum Equis F(ab')" }
|
965
|
+
end
|
978
966
|
|
979
|
-
|
980
|
-
|
981
|
-
|
982
|
-
|
983
|
-
|
984
|
-
|
967
|
+
context "should return correct substance for with two et substances corresp" do
|
968
|
+
string = "viperis antitoxinum equis F(ab')2 corresp. Vipera aspis > 1000 LD50 mus et Vipera berus > 500 LD50 mus et Vipera ammodytes > 1000 LD50 mus"
|
969
|
+
composition = ParseComposition.from_string(string)
|
970
|
+
substance = composition.substances.last
|
971
|
+
specify { expect(substance.name).to eq "Vipera Ammodytes > 1000 Ld50 Mus" }
|
972
|
+
end
|
985
973
|
|
986
|
-
|
987
|
-
|
988
|
-
|
989
|
-
|
990
|
-
|
991
|
-
|
992
|
-
|
993
|
-
|
994
|
-
|
974
|
+
context "should return correct substance for 'pyrazinamidum 500 mg'" do
|
975
|
+
string = "pyrazinamidum 500 mg"
|
976
|
+
CompositionTransformer.clear_substances
|
977
|
+
composition = ParseComposition.from_string(string)
|
978
|
+
substance = composition.substances.first
|
979
|
+
specify { expect(substance.name).to eq "Pyrazinamidum" }
|
980
|
+
specify { expect(substance.qty).to eq 500.0 }
|
981
|
+
specify { expect(substance.unit).to eq "mg" }
|
982
|
+
end
|
995
983
|
|
996
|
-
|
997
|
-
|
984
|
+
context "should return correct substance for given with et and corresp. (IKSNR 11879)" do
|
985
|
+
string = "calcii lactas pentahydricus 25 mg et calcii hydrogenophosphas anhydricus 300 mg corresp. calcium 100 mg"
|
998
986
|
|
999
|
-
|
1000
|
-
|
1001
|
-
|
1002
|
-
|
1003
|
-
|
1004
|
-
|
1005
|
-
|
1006
|
-
|
1007
|
-
|
1008
|
-
|
1009
|
-
|
1010
|
-
|
1011
|
-
|
1012
|
-
|
1013
|
-
|
987
|
+
composition = ParseComposition.from_string(string)
|
988
|
+
specify { expect(composition.substances.size).to eq 2 }
|
989
|
+
# calcii = composition.substances.find { |x| /calcii/i.match(x.name) }
|
990
|
+
pentahydricus = composition.substances.find { |x| /pentahydricus/i.match(x.name) }
|
991
|
+
anhydricus = composition.substances.find { |x| /anhydricus/i.match(x.name) }
|
992
|
+
specify { expect(pentahydricus.name).to eq "Calcii Lactas Pentahydricus" }
|
993
|
+
specify { expect(pentahydricus.qty).to eq 25.0 }
|
994
|
+
specify { expect(pentahydricus.unit).to eq "mg" }
|
995
|
+
specify { expect(anhydricus.name).to eq "Calcii Hydrogenophosphas Anhydricus" }
|
996
|
+
specify { expect(anhydricus.qty).to eq 300.0 }
|
997
|
+
specify { expect(anhydricus.unit).to eq "mg" }
|
998
|
+
specify { expect(anhydricus.chemical_substance.name).to eq "Calcium" }
|
999
|
+
specify { expect(anhydricus.chemical_substance.qty).to eq 100.0 }
|
1000
|
+
specify { expect(anhydricus.chemical_substance.unit).to eq "mg" }
|
1001
|
+
end
|
1002
|
+
|
1003
|
+
context "should return correct substances for Nutriflex IKSNR 42847" do
|
1004
|
+
line_1 = "I) Glucoselösung: glucosum anhydricum 240 g ut glucosum monohydricum, calcii chloridum dihydricum 600 mg, acidum citricum monohydricum, aqua ad iniectabilia q.s. ad solutionem pro 500 ml."
|
1005
|
+
line_2 = "."
|
1006
|
+
# line_4 = "."
|
1007
|
+
# line_5 = "I) et II) corresp.: aminoacida 70 g, nitrogenia 10 g, natrium 40.5 mmol, kalium 25.7 mmol, calcium 4.1 mmol, magnesium 5 mmol, chloridum 49.5 mmol, phosphas 14.7 mmol, acetas 22 mmol, in solutione recenter reconstituta 1000 ml."
|
1008
|
+
# line_6 = "Corresp. 5190 kJ pro 1 l."
|
1009
|
+
# tst = "glucosum anhydricum 240 g ut glucosum monohydricum, calcii chloridum dihydricum 600 mg, acidum citricum monohydricum"
|
1010
|
+
# tst2 = "glucosum anhydricum 240 g ut glucosum monohydricum, calcii chloridum dihydricum 600 mg"
|
1011
|
+
# tst_ut = "glucosum anhydricum 240 g ut glucosum monohydricum"
|
1012
|
+
composition = ParseComposition.from_string(line_2)
|
1013
|
+
# line_3 = "II) Aminosäurelösung: aminoacida: isoleucinum 4.11 g, leucinum 5.48 g, lysinum anhydricum 3.98 g ut lysinum monohydricum, methioninum 3.42 g, phenylalaninum 6.15 g, threoninum 3.18 g, tryptophanum 1 g, valinum 4.54 g, argininum 4.73 g, histidinum 2.19 g ut histidini hydrochloridum monohydricum, alaninum 8.49 g, acidum asparticum 2.63 g, acidum glutamicum 6.14 g, glycinum 2.89 g, prolinum 5.95 g, serinum 5.25 g, mineralia: magnesii acetas tetrahydricus 1.08 g, natrii acetas trihydricus 1.63 g, kalii dihydrogenophosphas 2 g, kalii hydroxidum 620 mg, natrii hydroxidum 1.14 g, acidum citricum monohydricum, aqua ad iniectabilia q.s. ad solutionem pro 500 ml."
|
1014
|
+
# line_3 = "II) Aminosäurelösung: aminoacida: isoleucinum 4.11 g, leucinum 5.48 g"
|
1015
|
+
line_3 = "aminoacida: isoleucinum 4.11 g, leucinum 5.48 g"
|
1016
|
+
composition = ParseComposition.from_string(line_3)
|
1017
|
+
composition = ParseComposition.from_string(line_1)
|
1014
1018
|
|
1015
|
-
|
1016
|
-
|
1017
|
-
.
|
1018
|
-
|
1019
|
-
.
|
1020
|
-
|
1021
|
-
Corresp. 5190 kJ pro 1 l."
|
1022
|
-
line_1 = "I) Glucoselösung: glucosum anhydricum 240 g ut glucosum monohydricum, calcii chloridum dihydricum 600 mg, acidum citricum monohydricum, aqua ad iniectabilia q.s. ad solutionem pro 500 ml."
|
1023
|
-
line_2 = "."
|
1024
|
-
line_3 = "II) Aminosäurelösung: aminoacida: isoleucinum 4.11 g, leucinum 5.48 g, lysinum anhydricum 3.98 g ut lysinum monohydricum, methioninum 3.42 g, phenylalaninum 6.15 g, threoninum 3.18 g, tryptophanum 1 g, valinum 4.54 g, argininum 4.73 g, histidinum 2.19 g ut histidini hydrochloridum monohydricum, alaninum 8.49 g, acidum asparticum 2.63 g, acidum glutamicum 6.14 g, glycinum 2.89 g, prolinum 5.95 g, serinum 5.25 g, mineralia: magnesii acetas tetrahydricus 1.08 g, natrii acetas trihydricus 1.63 g, kalii dihydrogenophosphas 2 g, kalii hydroxidum 620 mg, natrii hydroxidum 1.14 g, acidum citricum monohydricum, aqua ad iniectabilia q.s. ad solutionem pro 500 ml."
|
1025
|
-
line_4 = "."
|
1026
|
-
line_5 = "I) et II) corresp.: aminoacida 70 g, nitrogenia 10 g, natrium 40.5 mmol, kalium 25.7 mmol, calcium 4.1 mmol, magnesium 5 mmol, chloridum 49.5 mmol, phosphas 14.7 mmol, acetas 22 mmol, in solutione recenter reconstituta 1000 ml."
|
1027
|
-
line_6 = "Corresp. 5190 kJ pro 1 l."
|
1028
|
-
tst = 'glucosum anhydricum 240 g ut glucosum monohydricum, calcii chloridum dihydricum 600 mg, acidum citricum monohydricum'
|
1029
|
-
tst2 = 'glucosum anhydricum 240 g ut glucosum monohydricum, calcii chloridum dihydricum 600 mg'
|
1030
|
-
tst_ut = 'glucosum anhydricum 240 g ut glucosum monohydricum'
|
1031
|
-
composition = ParseComposition.from_string(line_2)
|
1032
|
-
line_3 = "II) Aminosäurelösung: aminoacida: isoleucinum 4.11 g, leucinum 5.48 g, lysinum anhydricum 3.98 g ut lysinum monohydricum, methioninum 3.42 g, phenylalaninum 6.15 g, threoninum 3.18 g, tryptophanum 1 g, valinum 4.54 g, argininum 4.73 g, histidinum 2.19 g ut histidini hydrochloridum monohydricum, alaninum 8.49 g, acidum asparticum 2.63 g, acidum glutamicum 6.14 g, glycinum 2.89 g, prolinum 5.95 g, serinum 5.25 g, mineralia: magnesii acetas tetrahydricus 1.08 g, natrii acetas trihydricus 1.63 g, kalii dihydrogenophosphas 2 g, kalii hydroxidum 620 mg, natrii hydroxidum 1.14 g, acidum citricum monohydricum, aqua ad iniectabilia q.s. ad solutionem pro 500 ml."
|
1033
|
-
line_3 = "II) Aminosäurelösung: aminoacida: isoleucinum 4.11 g, leucinum 5.48 g"
|
1034
|
-
line_3 = "aminoacida: isoleucinum 4.11 g, leucinum 5.48 g"
|
1035
|
-
composition = ParseComposition.from_string(line_3)
|
1036
|
-
composition = ParseComposition.from_string(line_1)
|
1037
|
-
|
1038
|
-
composition = ParseComposition.from_string(line_1)
|
1039
|
-
specify { expect(composition.substances.size).to eq 3 }
|
1040
|
-
specify { expect(composition.label).to eq 'I' }
|
1041
|
-
specify { expect(composition.label_description).to eq 'Glucoselösung' }
|
1042
|
-
dihydricum = composition.substances.find{ |x| /dihydricum/i.match(x.name) }
|
1043
|
-
monohydricum = composition.substances.find{ |x| /monohydricum/i.match(x.name) }
|
1044
|
-
|
1045
|
-
specify { expect(dihydricum.name).to eq 'Calcii Chloridum Dihydricum' }
|
1046
|
-
specify { expect(dihydricum.chemical_substance).to eq nil }
|
1047
|
-
specify { expect(dihydricum.qty).to eq 600.0}
|
1048
|
-
specify { expect(dihydricum.unit).to eq 'mg/500 ml' }
|
1049
|
-
|
1050
|
-
specify { expect(monohydricum.name).to eq 'Acidum Citricum Monohydricum' }
|
1051
|
-
specify { expect(monohydricum.chemical_substance).to eq nil }
|
1052
|
-
specify { expect(monohydricum.cdose).to eq nil }
|
1053
|
-
specify { expect(monohydricum.qty).to eq nil}
|
1054
|
-
specify { expect(monohydricum.unit).to eq nil }
|
1055
|
-
end
|
1019
|
+
composition = ParseComposition.from_string(line_1)
|
1020
|
+
specify { expect(composition.substances.size).to eq 3 }
|
1021
|
+
specify { expect(composition.label).to eq "I" }
|
1022
|
+
specify { expect(composition.label_description).to eq "Glucoselösung" }
|
1023
|
+
dihydricum = composition.substances.find { |x| /dihydricum/i.match(x.name) }
|
1024
|
+
monohydricum = composition.substances.find { |x| /monohydricum/i.match(x.name) }
|
1056
1025
|
|
1057
|
-
|
1058
|
-
|
1059
|
-
|
1060
|
-
|
1061
|
-
].each {
|
1062
|
-
|string|
|
1063
|
-
composition = ParseComposition.from_string(string)
|
1064
|
-
substance = composition.substances.first
|
1065
|
-
specify { expect(substance.name).to eq '9,11-linolicum' }
|
1066
|
-
specify { expect(substance.chemical_substance).to eq nil }
|
1067
|
-
CompositionTransformer.clear_substances
|
1068
|
-
composition = ParseComposition.from_string(string)
|
1069
|
-
}
|
1070
|
-
|
1071
|
-
specify { expect(substance.qty).to eq 3.25}
|
1072
|
-
specify { expect(substance.unit).to eq 'mg' }
|
1073
|
-
end
|
1026
|
+
specify { expect(dihydricum.name).to eq "Calcii Chloridum Dihydricum" }
|
1027
|
+
specify { expect(dihydricum.chemical_substance).to eq nil }
|
1028
|
+
specify { expect(dihydricum.qty).to eq 600.0 }
|
1029
|
+
specify { expect(dihydricum.unit).to eq "mg/500 ml" }
|
1074
1030
|
|
1075
|
-
|
1076
|
-
|
1077
|
-
|
1078
|
-
|
1079
|
-
|
1080
|
-
|
1081
|
-
specify { expect(composition.substances.first.salts.size).to eq 1}
|
1082
|
-
if composition.substances.first
|
1083
|
-
salt = composition.substances.first.salts.first
|
1084
|
-
specify { expect(salt.name).to eq 'Zuclopenthixoli Dihydrochloridum' }
|
1085
|
-
specify { expect(salt.qty).to eq nil}
|
1086
|
-
specify { expect(salt.unit).to eq nil }
|
1087
|
-
end
|
1088
|
-
end
|
1031
|
+
specify { expect(monohydricum.name).to eq "Acidum Citricum Monohydricum" }
|
1032
|
+
specify { expect(monohydricum.chemical_substance).to eq nil }
|
1033
|
+
specify { expect(monohydricum.cdose).to eq nil }
|
1034
|
+
specify { expect(monohydricum.qty).to eq nil }
|
1035
|
+
specify { expect(monohydricum.unit).to eq nil }
|
1036
|
+
end
|
1089
1037
|
|
1090
|
-
|
1091
|
-
|
1038
|
+
context "should return correct substance for 9,11-linolicum " do
|
1039
|
+
substance = nil
|
1040
|
+
composition = nil
|
1041
|
+
["9,11-linolicum",
|
1042
|
+
"9,11-linolicum 3.25 mg"].each { |string|
|
1092
1043
|
composition = ParseComposition.from_string(string)
|
1093
|
-
|
1094
|
-
|
1095
|
-
|
1096
|
-
|
1097
|
-
specify { expect(pentahydricus.qty).to eq 25.0}
|
1098
|
-
specify { expect(pentahydricus.unit).to eq 'mg' }
|
1099
|
-
specify { expect(anhydricus.name).to eq 'Calcii Hydrogenophosphas Anhydricus' }
|
1100
|
-
specify { expect(anhydricus.qty).to eq 300.0 }
|
1101
|
-
specify { expect(anhydricus.unit).to eq 'mg' }
|
1102
|
-
end
|
1103
|
-
|
1104
|
-
context "should return correct substance for 'Xenonum(133-xe) 74 -740 Mb'" do
|
1105
|
-
string = "Xenonum(133-Xe) 74 -740 MBq"
|
1044
|
+
substance = composition.substances.first
|
1045
|
+
specify { expect(substance.name).to eq "9,11-linolicum" }
|
1046
|
+
specify { expect(substance.chemical_substance).to eq nil }
|
1047
|
+
CompositionTransformer.clear_substances
|
1106
1048
|
composition = ParseComposition.from_string(string)
|
1107
|
-
|
1108
|
-
|
1109
|
-
|
1110
|
-
|
1049
|
+
}
|
1050
|
+
|
1051
|
+
specify { expect(substance.qty).to eq 3.25 }
|
1052
|
+
specify { expect(substance.unit).to eq "mg" }
|
1053
|
+
end
|
1054
|
+
|
1055
|
+
context "should return correct substance ut (IKSNR 44744)" do
|
1056
|
+
string = "zuclopenthixolum 2 mg ut zuclopenthixoli dihydrochloridum, excipiens pro compresso obducto."
|
1057
|
+
composition = ParseComposition.from_string(string)
|
1058
|
+
specify { expect(composition.substances.size).to eq 1 }
|
1059
|
+
specify { expect(composition.substances.first.name).to eq "Zuclopenthixolum" }
|
1060
|
+
specify { expect(composition.substances.first.qty).to eq 2.0 }
|
1061
|
+
specify { expect(composition.substances.first.salts.size).to eq 1 }
|
1062
|
+
if composition.substances.first
|
1063
|
+
salt = composition.substances.first.salts.first
|
1064
|
+
specify { expect(salt.name).to eq "Zuclopenthixoli Dihydrochloridum" }
|
1065
|
+
specify { expect(salt.qty).to eq nil }
|
1066
|
+
specify { expect(salt.unit).to eq nil }
|
1111
1067
|
end
|
1068
|
+
end
|
1069
|
+
|
1070
|
+
context "should return correct substance for given with et (IKSNR 11879)" do
|
1071
|
+
string = "calcii lactas pentahydricus 25 mg et calcii hydrogenophosphas anhydricus 300 mg"
|
1072
|
+
composition = ParseComposition.from_string(string)
|
1073
|
+
specify { expect(composition.substances.size).to eq 2 }
|
1074
|
+
pentahydricus = composition.substances.find { |x| /pentahydricus/i.match(x.name) }
|
1075
|
+
anhydricus = composition.substances.find { |x| /anhydricus/i.match(x.name) }
|
1076
|
+
specify { expect(pentahydricus.name).to eq "Calcii Lactas Pentahydricus" }
|
1077
|
+
specify { expect(pentahydricus.qty).to eq 25.0 }
|
1078
|
+
specify { expect(pentahydricus.unit).to eq "mg" }
|
1079
|
+
specify { expect(anhydricus.name).to eq "Calcii Hydrogenophosphas Anhydricus" }
|
1080
|
+
specify { expect(anhydricus.qty).to eq 300.0 }
|
1081
|
+
specify { expect(anhydricus.unit).to eq "mg" }
|
1082
|
+
end
|
1083
|
+
|
1084
|
+
context "should return correct substance for 'Xenonum(133-xe) 74 -740 Mb'" do
|
1085
|
+
string = "Xenonum(133-Xe) 74 -740 MBq"
|
1086
|
+
composition = ParseComposition.from_string(string)
|
1087
|
+
substance = composition.substances.first
|
1088
|
+
specify { expect(substance.name).to eq "Xenonum(133-xe)" }
|
1089
|
+
specify { expect(substance.qty).to eq "74-740" }
|
1090
|
+
specify { expect(substance.unit).to eq "MBq" }
|
1091
|
+
end
|
1112
1092
|
|
1113
1093
|
context "should return correct substance for 'pyrazinamidum'" do
|
1114
1094
|
string = "pyrazinamidum"
|
1115
1095
|
composition = ParseComposition.from_string(string)
|
1116
|
-
|
1117
|
-
specify { expect(substance.name).to eq
|
1096
|
+
substance = composition.substances.first
|
1097
|
+
specify { expect(substance.name).to eq "Pyrazinamidum" }
|
1118
1098
|
specify { expect(substance.qty).to eq nil }
|
1119
1099
|
specify { expect(substance.unit).to eq nil }
|
1120
1100
|
end
|
@@ -1131,97 +1111,97 @@ Corresp. 5190 kJ pro 1 l."
|
|
1131
1111
|
context "should return correct substance for 'retinoli palmitas 7900 U.I.'" do
|
1132
1112
|
string = "retinoli palmitas 7900 U.I."
|
1133
1113
|
composition = ParseComposition.from_string(string)
|
1134
|
-
|
1135
|
-
specify { expect(substance.name).to eq
|
1136
|
-
specify { expect(substance.qty).to eq 7900.0}
|
1137
|
-
specify { expect(substance.unit).to eq
|
1114
|
+
substance = composition.substances.first
|
1115
|
+
specify { expect(substance.name).to eq "Retinoli Palmitas" }
|
1116
|
+
specify { expect(substance.qty).to eq 7900.0 }
|
1117
|
+
specify { expect(substance.unit).to eq "U.I." }
|
1138
1118
|
end
|
1139
1119
|
|
1140
1120
|
context "should return correct substance for 'toxoidum pertussis 8 µg'" do
|
1141
1121
|
string = "toxoidum pertussis 8 µg"
|
1142
1122
|
composition = ParseComposition.from_string(string)
|
1143
|
-
|
1144
|
-
specify { expect(substance.name).to eq
|
1145
|
-
specify { expect(substance.qty).to eq 8.0}
|
1146
|
-
specify { expect(substance.unit).to eq
|
1123
|
+
substance = composition.substances.first
|
1124
|
+
specify { expect(substance.name).to eq "Toxoidum Pertussis" }
|
1125
|
+
specify { expect(substance.qty).to eq 8.0 }
|
1126
|
+
specify { expect(substance.unit).to eq "µg" }
|
1147
1127
|
end
|
1148
1128
|
|
1149
1129
|
context "should return correct substance Rote Filmtablett 54819 Beriplast" do
|
1150
|
-
string = "A) Rote Filmtablette: estradiolum 1 mg ut estradiolum hemihydricum, excipiens pro compresso obducto"
|
1130
|
+
# string = "A) Rote Filmtablette: estradiolum 1 mg ut estradiolum hemihydricum, excipiens pro compresso obducto"
|
1151
1131
|
string = "estradiolum 1 mg ut estradiolum hemihydricum, excipiens pro compresso obducto"
|
1152
1132
|
composition = ParseComposition.from_string(string)
|
1153
1133
|
substance = composition.substances.first
|
1154
1134
|
specify { expect(composition.substances.size).to eq 1 }
|
1155
1135
|
# specify { expect(composition.substances.last.name).to eq 'Obducto' }
|
1156
|
-
specify { expect(substance.name).to eq
|
1157
|
-
specify { expect(composition.substances.first.salts.first.name).to eq
|
1136
|
+
specify { expect(substance.name).to eq "Estradiolum" }
|
1137
|
+
specify { expect(composition.substances.first.salts.first.name).to eq "Estradiolum Hemihydricum" }
|
1158
1138
|
specify { expect(substance.cdose.to_s).to eq "" }
|
1159
|
-
specify { expect(substance.qty).to eq 1.0}
|
1160
|
-
specify { expect(substance.unit).to eq
|
1139
|
+
specify { expect(substance.qty).to eq 1.0 }
|
1140
|
+
specify { expect(substance.unit).to eq "mg" }
|
1161
1141
|
end
|
1162
1142
|
|
1163
1143
|
context "should return correct composition for containing ut IKSNR 613" do
|
1164
|
-
string =
|
1144
|
+
string = "aluminium ut aluminii hydroxidum hydricum ad adsorptionem"
|
1165
1145
|
composition = ParseComposition.from_string(string)
|
1166
1146
|
specify { expect(composition.source).to eq string }
|
1167
1147
|
specify { expect(composition.label).to eq nil }
|
1168
1148
|
specify { expect(composition.substances.size).to eq 1 }
|
1169
|
-
specify { expect(composition.substances.first.name).to eq
|
1170
|
-
specify { expect(composition.substances.first.salts.first.name).to eq
|
1149
|
+
specify { expect(composition.substances.first.name).to eq "Aluminium" }
|
1150
|
+
specify { expect(composition.substances.first.salts.first.name).to eq "Aluminii Hydroxidum Hydricum Ad Adsorptionem" }
|
1171
1151
|
end
|
1172
1152
|
|
1173
1153
|
context "should return correct substance for 'toxoidum pertussis 25 µg et haemagglutininum filamentosum 25 µg'" do
|
1174
1154
|
string = "toxoidum pertussis 25 µg et haemagglutininum filamentosum 15 µg"
|
1175
1155
|
composition = ParseComposition.from_string(string)
|
1176
1156
|
toxoidum = composition.substances.first
|
1177
|
-
specify { expect(toxoidum.name).to eq
|
1178
|
-
specify { expect(toxoidum.qty).to eq 25.0}
|
1179
|
-
specify { expect(toxoidum.unit).to eq
|
1157
|
+
specify { expect(toxoidum.name).to eq "Toxoidum Pertussis" }
|
1158
|
+
specify { expect(toxoidum.qty).to eq 25.0 }
|
1159
|
+
specify { expect(toxoidum.unit).to eq "µg" }
|
1180
1160
|
specify { expect(toxoidum.chemical_substance).to eq nil }
|
1181
1161
|
haemagglutininum = composition.substances.last
|
1182
|
-
specify { expect(haemagglutininum.name).to eq
|
1183
|
-
specify { expect(haemagglutininum.qty).to eq 15.0}
|
1184
|
-
specify { expect(haemagglutininum.unit).to eq
|
1162
|
+
specify { expect(haemagglutininum.name).to eq "Haemagglutininum Filamentosum" }
|
1163
|
+
specify { expect(haemagglutininum.qty).to eq 15.0 }
|
1164
|
+
specify { expect(haemagglutininum.unit).to eq "µg" }
|
1185
1165
|
end
|
1186
1166
|
|
1187
1167
|
context "should return correct composition for containing parenthesis in substance name abd 40 U. (e.g IKSNR 613)" do
|
1188
|
-
string =
|
1168
|
+
string = "virus poliomyelitis typus 1 inactivatum (D-Antigen) 40 U."
|
1189
1169
|
composition = ParseComposition.from_string(string)
|
1190
1170
|
specify { expect(composition.source).to eq string }
|
1191
1171
|
specify { expect(composition.substances.size).to eq 1 }
|
1192
|
-
specify { expect(composition.substances.first.name).to eq
|
1172
|
+
specify { expect(composition.substances.first.name).to eq "Virus Poliomyelitis Typus 1 Inactivatum (d-antigen)" }
|
1193
1173
|
end
|
1194
1174
|
|
1195
1175
|
context "should return correct composition for containing parenthesis in substance name (e.g IKSNR 613)" do
|
1196
|
-
string =
|
1197
|
-
string =
|
1176
|
+
string = "virus poliomyelitis typus inactivatum (D-Antigen)"
|
1177
|
+
string = "virus poliomyelitis typus 1 inactivatum (d-antigen)"
|
1198
1178
|
composition = ParseComposition.from_string(string)
|
1199
1179
|
specify { expect(composition.source).to eq string }
|
1200
1180
|
specify { expect(composition.substances.size).to eq 1 }
|
1201
|
-
specify { expect(composition.substances.first.name).to eq
|
1181
|
+
specify { expect(composition.substances.first.name).to eq "Virus Poliomyelitis Typus 1 Inactivatum (d-antigen)" }
|
1202
1182
|
end
|
1203
1183
|
|
1204
1184
|
context "should return correct composition for containing residui (e.g IKSNR 613)" do
|
1205
|
-
string =
|
1185
|
+
string = "residui: neomycinum, streptomycinum"
|
1206
1186
|
composition = ParseComposition.from_string(string)
|
1207
1187
|
specify { expect(composition.source).to eq string }
|
1208
1188
|
specify { expect(composition.substances.size).to eq 2 }
|
1209
|
-
specify { expect(composition.substances.first.more_info).to eq
|
1210
|
-
specify { expect(composition.substances.first.name).to eq
|
1211
|
-
specify { expect(composition.substances.last.name).to
|
1189
|
+
specify { expect(composition.substances.first.more_info).to eq "residui" }
|
1190
|
+
specify { expect(composition.substances.first.name).to eq "Neomycinum" }
|
1191
|
+
specify { expect(composition.substances.last.name).to eq "Streptomycinum" }
|
1212
1192
|
end
|
1213
1193
|
|
1214
1194
|
context "should return correct composition for 'conserv.: E 217, E 219' IKSNR 613" do
|
1215
|
-
# string = '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.'
|
1195
|
+
# string = '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.'
|
1216
1196
|
string =
|
1217
|
-
|
1197
|
+
"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."
|
1218
1198
|
composition = ParseComposition.from_string(string)
|
1219
1199
|
specify { expect(composition.source).to eq string }
|
1220
|
-
specify { expect(composition.label).to eq
|
1200
|
+
specify { expect(composition.label).to eq "I" }
|
1221
1201
|
end
|
1222
1202
|
|
1223
1203
|
context "should return correct composition for 'conserv.: E 217, E 219'" do
|
1224
|
-
string =
|
1204
|
+
string = "conserv.: E 217, E 219"
|
1225
1205
|
composition = ParseComposition.from_string(string)
|
1226
1206
|
specify { expect(composition.source).to eq string }
|
1227
1207
|
specify { expect(composition.label).to eq nil }
|
@@ -1229,29 +1209,29 @@ Corresp. 5190 kJ pro 1 l."
|
|
1229
1209
|
|
1230
1210
|
context "should parse more complicated example" do
|
1231
1211
|
string =
|
1232
|
-
"I) DTPa-IPV-Komponente (Suspension): toxoidum diphtheriae 30 U.I., toxoidum pertussis 25 µg et haemagglutininum filamentosum 25 µg"
|
1212
|
+
"I) DTPa-IPV-Komponente (Suspension): toxoidum diphtheriae 30 U.I., toxoidum pertussis 25 µg et haemagglutininum filamentosum 25 µg"
|
1233
1213
|
composition = ParseComposition.from_string(string)
|
1234
1214
|
specify { expect(composition.source).to eq string }
|
1235
1215
|
|
1236
|
-
specify { expect(composition.label).to eq
|
1237
|
-
specify { expect(composition.label_description).to eq
|
1216
|
+
specify { expect(composition.label).to eq "I" }
|
1217
|
+
specify { expect(composition.label_description).to eq "DTPa-IPV-Komponente (Suspension)" }
|
1238
1218
|
|
1239
1219
|
specify { expect(composition.galenic_form).to eq nil }
|
1240
1220
|
specify { expect(composition.route_of_administration).to eq nil }
|
1241
1221
|
|
1242
|
-
toxoidum = composition.substances.find{|x| /toxoidum diphther/i.match(x.name)}
|
1243
|
-
specify { expect(toxoidum.name).to eq
|
1222
|
+
toxoidum = composition.substances.find { |x| /toxoidum diphther/i.match(x.name) }
|
1223
|
+
specify { expect(toxoidum.name).to eq "Toxoidum Diphtheriae" }
|
1244
1224
|
specify { expect(toxoidum.qty).to eq 30 }
|
1245
|
-
specify { expect(toxoidum.unit).to eq
|
1225
|
+
specify { expect(toxoidum.unit).to eq "U.I." }
|
1246
1226
|
|
1247
|
-
haema = composition.substances.find{|x| /Haemagglutininum/i.match(x.name)}
|
1248
|
-
specify { expect(haema.name).to eq
|
1227
|
+
haema = composition.substances.find { |x| /Haemagglutininum/i.match(x.name) }
|
1228
|
+
specify { expect(haema.name).to eq "Haemagglutininum Filamentosum" }
|
1249
1229
|
specify { expect(haema.qty).to eq 25 }
|
1250
|
-
specify { expect(haema.unit).to eq
|
1230
|
+
specify { expect(haema.unit).to eq "µg" }
|
1251
1231
|
end
|
1252
1232
|
|
1253
1233
|
context "should return correct composition for 'minoxidilum'" do
|
1254
|
-
string =
|
1234
|
+
string = "minoxidilum 2.5 mg, pyrazinamidum 500 mg"
|
1255
1235
|
composition = ParseComposition.from_string(string)
|
1256
1236
|
specify { expect(composition.source).to eq string }
|
1257
1237
|
specify { expect(composition.label).to eq nil }
|
@@ -1259,35 +1239,35 @@ Corresp. 5190 kJ pro 1 l."
|
|
1259
1239
|
specify { expect(composition.galenic_form).to eq nil }
|
1260
1240
|
specify { expect(composition.route_of_administration).to eq nil }
|
1261
1241
|
substance = composition.substances.first
|
1262
|
-
specify { expect(substance.name).to eq
|
1242
|
+
specify { expect(substance.name).to eq "Minoxidilum" }
|
1263
1243
|
specify { expect(substance.qty).to eq 2.5 }
|
1264
|
-
specify { expect(substance.unit).to eq
|
1244
|
+
specify { expect(substance.unit).to eq "mg" }
|
1265
1245
|
end
|
1266
1246
|
|
1267
1247
|
context "should return correct composition for 'terra'" do
|
1268
|
-
string =
|
1248
|
+
string = "terra"
|
1269
1249
|
composition = ParseComposition.from_string(string)
|
1270
1250
|
specify { expect(composition.source).to eq string }
|
1271
1251
|
specify { expect(composition.label).to eq nil }
|
1272
1252
|
specify { expect(composition.label_description).to eq nil }
|
1273
1253
|
specify { expect(composition.galenic_form).to eq nil }
|
1274
1254
|
specify { expect(composition.route_of_administration).to eq nil }
|
1275
|
-
specify { expect(
|
1255
|
+
specify { expect(composition.substances.first.name).to eq "Terra" }
|
1276
1256
|
end
|
1277
1257
|
|
1278
1258
|
context "should return correct composition for 'terra silicea spec..'" do
|
1279
|
-
string =
|
1259
|
+
string = "terra silicea spec. 810 mg, excipiens pro compresso"
|
1280
1260
|
composition = ParseComposition.from_string(string)
|
1281
|
-
specify { expect(composition.source).to eq string}
|
1261
|
+
specify { expect(composition.source).to eq string }
|
1282
1262
|
specify { expect(composition.label).to eq nil }
|
1283
1263
|
specify { expect(composition.label_description).to eq nil }
|
1284
1264
|
specify { expect(composition.galenic_form).to eq nil }
|
1285
1265
|
specify { expect(composition.route_of_administration).to eq nil }
|
1286
|
-
specify { expect(
|
1266
|
+
specify { expect(composition.substances.first.name).to eq "Terra Silicea Spec." }
|
1287
1267
|
end
|
1288
1268
|
|
1289
1269
|
context "should return correct composition for 'minoxidilum'" do
|
1290
|
-
string =
|
1270
|
+
string = "minoxidilum 2.5 mg"
|
1291
1271
|
composition = ParseComposition.from_string(string)
|
1292
1272
|
specify { expect(composition.source).to eq string }
|
1293
1273
|
specify { expect(composition.label).to eq nil }
|
@@ -1295,13 +1275,13 @@ Corresp. 5190 kJ pro 1 l."
|
|
1295
1275
|
specify { expect(composition.galenic_form).to eq nil }
|
1296
1276
|
specify { expect(composition.route_of_administration).to eq nil }
|
1297
1277
|
substance = composition.substances.first
|
1298
|
-
specify { expect(substance.name).to eq
|
1278
|
+
specify { expect(substance.name).to eq "Minoxidilum" }
|
1299
1279
|
specify { expect(substance.qty).to eq 2.5 }
|
1300
|
-
specify { expect(substance.unit).to eq
|
1280
|
+
specify { expect(substance.unit).to eq "mg" }
|
1301
1281
|
end
|
1302
1282
|
|
1303
1283
|
context "should return correct composition for 'minoxidilum'" do
|
1304
|
-
string =
|
1284
|
+
string = "minoxidilum"
|
1305
1285
|
composition = ParseComposition.from_string(string)
|
1306
1286
|
specify { expect(composition.source).to eq string }
|
1307
1287
|
specify { expect(composition.label).to eq nil }
|
@@ -1309,13 +1289,70 @@ Corresp. 5190 kJ pro 1 l."
|
|
1309
1289
|
specify { expect(composition.galenic_form).to eq nil }
|
1310
1290
|
specify { expect(composition.route_of_administration).to eq nil }
|
1311
1291
|
substance = composition.substances.first
|
1312
|
-
specify { expect(substance.name).to eq
|
1292
|
+
specify { expect(substance.name).to eq "Minoxidilum" }
|
1313
1293
|
specify { expect(substance.qty).to eq nil }
|
1314
1294
|
specify { expect(substance.unit).to eq nil }
|
1315
1295
|
end
|
1316
1296
|
|
1297
|
+
context "should handle 41174" do
|
1298
|
+
string = "triamcinoloni acetonidum 10 mg, carmellosum natricum, natrii chloridum, polysorbatum 80, conserv.: alcohol benzylicus 9.9 mg, aqua ad iniectabile q.s. ad suspensionem pro 1 ml."
|
1299
|
+
composition = ParseComposition.from_string(string)
|
1300
|
+
specify { expect(composition.source).to eq string }
|
1301
|
+
specify { expect(composition.label).to eq nil }
|
1302
|
+
specify { expect(composition.substances.size).to be > 1 }
|
1303
|
+
specify { expect(composition.substances.first.name).to eq "Triamcinoloni Acetonidum" }
|
1304
|
+
specify { expect(composition.substances.last.name).to eq "Alcohol Benzylicus" }
|
1305
|
+
end
|
1306
|
+
|
1307
|
+
context "should handle 67023" do
|
1308
|
+
string = "noradrenalinum 0.06 mg ut noradrenalini tartras, natrii chloridum, acidum hydrochloridum, aqua ad iniectabile q.s. ad solutionem pro 1 ml corresp. natrium 3.308 mg."
|
1309
|
+
composition = ParseComposition.from_string(string)
|
1310
|
+
specify { expect(composition.source).to eq string }
|
1311
|
+
specify { expect(composition.label).to eq nil }
|
1312
|
+
specify { expect(composition.substances.size).to be > 1 }
|
1313
|
+
specify { expect(composition.substances.first.name).to eq "Noradrenalinum" }
|
1314
|
+
specify { expect(composition.substances.last.name).to eq "Acidum Hydrochloridum" }
|
1315
|
+
end
|
1316
|
+
|
1317
|
+
context "should handle 67023" do
|
1318
|
+
string = "noradrenalinum 0.06 mg ut noradrenalini tartras, natrii chloridum, acidum hydrochloridum, aqua ad iniectabile q.s. ad solutionem pro 1 ml corresp. natrium 3.308 mg."
|
1319
|
+
composition = ParseComposition.from_string(string)
|
1320
|
+
specify { expect(composition.source).to eq string }
|
1321
|
+
specify { expect(composition.label).to eq nil }
|
1322
|
+
specify { expect(composition.substances.size).to be > 0 }
|
1323
|
+
specify { expect(composition.substances.first.name).to eq "Noradrenalinum" }
|
1324
|
+
specify { expect(composition.substances.last.name).to eq "Acidum Hydrochloridum" }
|
1325
|
+
end
|
1326
|
+
|
1327
|
+
context "should handle 67689" do
|
1328
|
+
string = "daratumumabum 1800 mg, hyaluronidasum humanum ADNr, histidinum, histidini hydrochloridum monohydricum, sorbitolum 735.1 mg, methioninum, polysorbatum 20, aqua ad iniectabile ad solutionem pro 15 ml"
|
1329
|
+
composition = ParseComposition.from_string(string)
|
1330
|
+
specify { expect(composition.source).to eq string }
|
1331
|
+
specify { expect(composition.label).to eq nil }
|
1332
|
+
specify { expect(composition.substances.size).to be > 0 }
|
1333
|
+
specify { expect(composition.substances.first.name).to eq "Daratumumabum" }
|
1334
|
+
specify { expect(composition.substances.last.name).to eq "Polysorbatum 20" }
|
1335
|
+
end
|
1336
|
+
|
1337
|
+
context "should handle 66097" do
|
1338
|
+
string = "acidum acetylsalicylicum 100 mg, cellulosum microcristallinum, maydis amylum, silica colloidalis anhydrica, acidum stearicum, Überzug: acidi methacrylici et ethylis acrylatis polymerisatum 1:1, polysorbatum 80, natrii laurilsulfas corresp. natrium 2 µg, triethylis citras, talcum pro compresso obducto" # fails
|
1339
|
+
composition = ParseComposition.from_string(string)
|
1340
|
+
specify { expect(composition.source).to eq string }
|
1341
|
+
specify { expect(composition.label).to eq nil }
|
1342
|
+
specify { expect(composition.substances.first.name).to eq "Acidum Acetylsalicylicum" }
|
1343
|
+
specify { expect(composition.substances.last.name).to eq "Talcum pro compresso Obducto" }
|
1344
|
+
end
|
1345
|
+
context "should handle 65828" do
|
1346
|
+
string = " esomeprazolum 20 mg ut esomeprazolum magnesicum dihydricum, acidi methacrylici et ethylis acrylatis polymerisati 1:1 dispersio 30 per centum, natrii laurilsulfas, talcum, triethylis citras, hypromellosum, sacchari sphaerae corresp. saccharum 4.73 mg et maydis amylum, magnesii stearas, hydroxypropylcellulosum, glyceroli monostearas 40-55, polysorbatum 80, cellulosum microcristallinum, povidonum K 29-32, macrogolum 6000, crospovidonum, natrii stearylis fumaras, Überzug: hypromellosum, E 171, macrogolum 400, E 172 (rubrum), E 172 (flavum), pro compresso obducto corresp. natrium 0.01 mg."
|
1347
|
+
composition = ParseComposition.from_string(string)
|
1348
|
+
specify { expect(composition.source).to eq string }
|
1349
|
+
specify { expect(composition.label).to eq nil }
|
1350
|
+
specify { expect(composition.substances.first.name).to eq "Esomeprazolum" }
|
1351
|
+
specify { expect(composition.substances.last.name).to eq "pro compresso Obducto" }
|
1352
|
+
end
|
1353
|
+
|
1317
1354
|
context "should return correct composition for 'minoxidilum excipiens'" do
|
1318
|
-
string =
|
1355
|
+
string = "minoxidilum 2.5 mg, excipiens pro compresso."
|
1319
1356
|
composition = ParseComposition.from_string(string)
|
1320
1357
|
specify { expect(composition.source).to eq string }
|
1321
1358
|
specify { expect(composition.label).to eq nil }
|
@@ -1324,112 +1361,108 @@ Corresp. 5190 kJ pro 1 l."
|
|
1324
1361
|
specify { expect(composition.route_of_administration).to eq nil }
|
1325
1362
|
|
1326
1363
|
substance = composition.substances.first
|
1327
|
-
specify { expect(substance.name).to eq
|
1364
|
+
specify { expect(substance.name).to eq "Minoxidilum" }
|
1328
1365
|
specify { expect(substance.qty).to eq 2.5 }
|
1329
|
-
specify { expect(substance.unit).to eq
|
1330
|
-
skip
|
1366
|
+
specify { expect(substance.unit).to eq "mg" }
|
1367
|
+
skip "what is the correct name for excipiens?" # { expect(composition.substances.last.name).to eq 'Excipiens Pro Compresso' }
|
1331
1368
|
end
|
1332
1369
|
|
1333
|
-
context
|
1334
|
-
line_1 =
|
1335
|
-
line_2 =
|
1336
|
-
line_3 =
|
1337
|
-
line_4 =
|
1338
|
-
line_5 =
|
1370
|
+
context "find correct result compositions for nutriflex" do
|
1371
|
+
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."
|
1372
|
+
line_2 = "II) Fettemulsion: sojae oleum 25 g, triglycerida saturata media 25 g, lecithinum ex ovo 3 g, glycerolum, natrii oleas, aqua q.s. ad emulsionem pro 250 ml."
|
1373
|
+
line_3 = "III) Aminosäurenlösung: isoleucinum 2.34 g, leucinum 3.13 g, lysinum anhydricum 2.26 g ut lysini hydrochloridum, methioninum 1.96 g, aqua ad iniectabilia q.s. ad solutionem pro 400 ml."
|
1374
|
+
line_4 = "I) et II) et III) corresp.: aminoacida 32 g/l, acetas 32 mmol/l, acidum citricum monohydricum, in emulsione recenter mixta 1250 ml."
|
1375
|
+
line_5 = "Corresp. 4000 kJ."
|
1339
1376
|
text = "#{line_1}\n#{line_2}\n#{line_3}\n#{line_4}\n#{line_5}"
|
1340
|
-
compositions =
|
1341
|
-
specify { expect(compositions.first.substances.first.name).to eq
|
1342
|
-
specify { expect(compositions.first.substances.first.salts.first.name).to eq
|
1343
|
-
specify { expect(compositions.size).to eq 5}
|
1344
|
-
specify { expect(compositions.first.substances.first.qty.to_f).to eq 150.0}
|
1345
|
-
specify { expect(compositions.first.substances.first.unit).to eq
|
1346
|
-
|
1347
|
-
specify { expect(compositions[0].source).to eq line_1}
|
1348
|
-
specify { expect(compositions[0].label).to eq
|
1349
|
-
specify { expect(compositions[0].label_description).to eq
|
1350
|
-
specify { expect(compositions[1].label).to eq
|
1351
|
-
specify { expect(compositions[2].label).to eq
|
1377
|
+
compositions = ParseUtil.parse_compositions(text, "glucosum anhydricum, zinci acetas dihydricus, isoleucinum, leucinum")
|
1378
|
+
specify { expect(compositions.first.substances.first.name).to eq "Glucosum Anhydricum" }
|
1379
|
+
specify { expect(compositions.first.substances.first.salts.first.name).to eq "Glucosum Monohydricum" }
|
1380
|
+
specify { expect(compositions.size).to eq 5 }
|
1381
|
+
specify { expect(compositions.first.substances.first.qty.to_f).to eq 150.0 }
|
1382
|
+
specify { expect(compositions.first.substances.first.unit).to eq "g/500 ml" }
|
1383
|
+
|
1384
|
+
specify { expect(compositions[0].source).to eq line_1 }
|
1385
|
+
specify { expect(compositions[0].label).to eq "I" }
|
1386
|
+
specify { expect(compositions[0].label_description).to eq "Glucoselösung" }
|
1387
|
+
specify { expect(compositions[1].label).to eq "II" }
|
1388
|
+
specify { expect(compositions[2].label).to eq "III" }
|
1352
1389
|
glucosum = compositions.first.substances.first
|
1353
|
-
specify { expect(glucosum.name).to eq
|
1354
|
-
specify { expect(glucosum.qty.to_f).to eq
|
1355
|
-
specify { expect(glucosum.unit).to eq
|
1390
|
+
specify { expect(glucosum.name).to eq "Glucosum Anhydricum" }
|
1391
|
+
specify { expect(glucosum.qty.to_f).to eq 150.0 }
|
1392
|
+
specify { expect(glucosum.unit).to eq "g/500 ml" }
|
1356
1393
|
specify { expect(compositions[0].substances.size).to eq 3 }
|
1357
1394
|
specify { expect(compositions[1].substances.size).to eq 5 } # should have glycerolum, natrii oleas, aqua
|
1358
1395
|
specify { expect(compositions[2].substances.size).to eq 4 }
|
1359
|
-
specify { expect(compositions[1].source).to eq line_2}
|
1360
|
-
specify { expect(compositions[2].source).to eq line_3}
|
1361
|
-
specify { expect(compositions[3].source).to eq line_4}
|
1362
|
-
specify { expect(compositions[3].corresp).to eq line_4.sub(/\.$/,
|
1363
|
-
specify { expect(compositions[4].source).to eq line_5}
|
1364
|
-
specify { expect(compositions[4].corresp).to eq
|
1396
|
+
specify { expect(compositions[1].source).to eq line_2 }
|
1397
|
+
specify { expect(compositions[2].source).to eq line_3 }
|
1398
|
+
specify { expect(compositions[3].source).to eq line_4 }
|
1399
|
+
specify { expect(compositions[3].corresp).to eq line_4.sub(/\.$/, "") }
|
1400
|
+
specify { expect(compositions[4].source).to eq line_5 }
|
1401
|
+
specify { expect(compositions[4].corresp).to eq "4000 kJ" }
|
1365
1402
|
|
1366
1403
|
# from II)
|
1367
|
-
if compositions
|
1368
|
-
lecithinum =
|
1369
|
-
specify { expect(lecithinum).not_to eq nil}
|
1404
|
+
if compositions && compositions[1] && compositions[1].substances
|
1405
|
+
lecithinum = compositions[1].substances.find { |x| x.name.match(/lecithinum/i) }
|
1406
|
+
specify { expect(lecithinum).not_to eq nil }
|
1370
1407
|
if lecithinum
|
1371
|
-
specify { expect(lecithinum.name).to eq
|
1372
|
-
specify { expect(lecithinum.qty.to_f).to eq
|
1373
|
-
specify { expect(lecithinum.unit).to eq
|
1408
|
+
specify { expect(lecithinum.name).to eq "Lecithinum Ex Ovo" }
|
1409
|
+
specify { expect(lecithinum.qty.to_f).to eq 3.0 }
|
1410
|
+
specify { expect(lecithinum.unit).to eq "g/250 ml" }
|
1374
1411
|
end
|
1375
1412
|
|
1376
1413
|
# From III
|
1377
|
-
leucinum =
|
1378
|
-
specify { expect(leucinum).not_to eq nil}
|
1414
|
+
leucinum = compositions[2].substances.find { |x| x.name.eql?("Leucinum") }
|
1415
|
+
specify { expect(leucinum).not_to eq nil }
|
1379
1416
|
if leucinum
|
1380
|
-
specify { expect(leucinum.name).to eq
|
1381
|
-
specify { expect(leucinum.qty.to_f).to eq
|
1382
|
-
specify { expect(leucinum.unit).to eq
|
1417
|
+
specify { expect(leucinum.name).to eq "Leucinum" }
|
1418
|
+
specify { expect(leucinum.qty.to_f).to eq 3.13 }
|
1419
|
+
specify { expect(leucinum.unit).to eq "g/400 ml" }
|
1383
1420
|
end
|
1384
|
-
|
1385
|
-
specify { expect(
|
1386
|
-
|
1387
|
-
specify { expect(
|
1388
|
-
|
1389
|
-
|
1421
|
+
leucinum_i = compositions[0].substances.find { |x| x.name.eql?("Leucinum") }
|
1422
|
+
specify { expect(leucinum_i).to eq nil }
|
1423
|
+
leucinum_ii = compositions[1].substances.find { |x| x.name.eql?("Leucinum") }
|
1424
|
+
specify { expect(leucinum_ii).to eq nil }
|
1425
|
+
# aqua = compositions[2].substances.find{ |x| /aqua ad/i.match(x.name) }
|
1426
|
+
# specify { expect(aqua.name).to eq "Aqua Ad Iniectabilia Q.s. Ad Solutionem Pro"}
|
1390
1427
|
end
|
1391
|
-
|
1392
|
-
end
|
1393
|
-
|
1394
|
-
|
1395
|
-
|
1396
|
-
describe ParseUtil::HandleSwissmedicErrors do
|
1397
|
-
context 'should handle fixes' do
|
1398
|
-
replacement = '\1, \2'
|
1399
|
-
pattern_replacement = { /(sulfuris D6\s[^\s]+\smg)\s([^,]+)/ => replacement }
|
1400
|
-
test_string = 'sulfuris D6 2,2 mg hypericum perforatum D2 0,66'
|
1401
|
-
expected = 'sulfuris D6 2,2 mg, hypericum perforatum D2 0,66'
|
1402
|
-
handler = ParseUtil::HandleSwissmedicErrors.new(pattern_replacement )
|
1403
|
-
result = handler.apply_fixes(test_string)
|
1404
|
-
specify { expect(result).to eq expected }
|
1405
|
-
specify { expect(handler.report.size).to eq 2 }
|
1406
|
-
specify { expect(/report/i.match(handler.report[0]).class).to eq MatchData }
|
1407
|
-
specify { expect(handler.report[1].index(replacement).class).to eq Fixnum }
|
1408
1428
|
end
|
1409
1429
|
|
1430
|
+
describe ParseUtil::HandleSwissmedicErrors do
|
1431
|
+
context "should handle fixes" do
|
1432
|
+
replacement = '\1, \2'
|
1433
|
+
pattern_replacement = {/(sulfuris D6\s[^\s]+\smg)\s([^,]+)/ => replacement}
|
1434
|
+
test_string = "sulfuris D6 2,2 mg hypericum perforatum D2 0,66"
|
1435
|
+
expected = "sulfuris D6 2,2 mg, hypericum perforatum D2 0,66"
|
1436
|
+
handler = ParseUtil::HandleSwissmedicErrors.new(pattern_replacement)
|
1437
|
+
result = handler.apply_fixes(test_string)
|
1438
|
+
specify { expect(result).to eq expected }
|
1439
|
+
specify { expect(handler.report.size).to eq 2 }
|
1440
|
+
specify { expect(/report/i.match(handler.report[0]).class).to eq MatchData }
|
1441
|
+
specify { expect(handler.report[1].index(replacement).class).to eq Integer }
|
1442
|
+
end
|
1410
1443
|
end
|
1411
1444
|
end
|
1412
1445
|
|
1413
|
-
|
1414
|
-
|
1415
|
-
|
1416
|
-
|
1417
|
-
|
1418
|
-
|
1419
|
-
|
1420
|
-
|
1421
|
-
|line|
|
1422
|
-
|
1423
|
-
|
1424
|
-
|
1425
|
-
|
1426
|
-
|
1427
|
-
|
1428
|
-
|
1429
|
-
|
1446
|
+
if RUN_ALL_COMPOSITION_TESTS
|
1447
|
+
describe ParseComposition do
|
1448
|
+
context "should parse a complex composition" do
|
1449
|
+
start_time = Time.now
|
1450
|
+
specify { expect(File.exist?(AllCompositionLines)).to eq true }
|
1451
|
+
inhalt = IO.readlines(AllCompositionLines)
|
1452
|
+
nr = 0
|
1453
|
+
@nr_errors = 0
|
1454
|
+
inhalt.each { |line|
|
1455
|
+
nr += 1
|
1456
|
+
next if line.length < 5
|
1457
|
+
puts "#{File.basename(AllCompositionLines)}:#{nr} #{@nr_errors} errors: #{line}" if VERBOSE_MESSAGES
|
1458
|
+
begin
|
1459
|
+
ParseComposition.from_string line
|
1460
|
+
rescue Parslet::ParseFailed
|
1461
|
+
@nr_errors += 1
|
1462
|
+
puts "#{File.basename(AllCompositionLines)}:#{nr} parse_error #{@nr_errors} in: #{line}"
|
1463
|
+
end
|
1464
|
+
}
|
1465
|
+
at_exit { puts "Testing whether #{nr} composition lines can be parsed. Found #{@nr_errors} errors in #{(Time.now - start_time).to_i} seconds" }
|
1430
1466
|
end
|
1431
|
-
}
|
1432
|
-
at_exit { puts "Testing whether #{nr} composition lines can be parsed. Found #{@nrErrors} errors in #{(Time.now - start_time).to_i} seconds" }
|
1433
|
-
|
1434
1467
|
end
|
1435
|
-
end
|
1468
|
+
end
|