oddb2xml 2.0.6 → 2.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/Gemfile.lock +1 -1
- data/History.txt +13 -0
- data/dokumentation_calc.textile +30 -24
- data/lib/oddb2xml/builder.rb +32 -19
- data/lib/oddb2xml/calc.rb +10 -1
- data/lib/oddb2xml/compositions_syntax.rb +220 -151
- data/lib/oddb2xml/parslet_compositions.rb +148 -323
- data/lib/oddb2xml/version.rb +1 -1
- data/spec/calc_spec.rb +19 -13
- data/spec/composition_syntax_spec.rb +39 -40
- data/spec/data/swissmedic_package-galenic.xlsx +0 -0
- data/spec/parslet_spec.rb +320 -213
- data/spec/spec_helper.rb +0 -1
- metadata +2 -2
data/spec/parslet_spec.rb
CHANGED
@@ -15,87 +15,156 @@ puts "hostname is #{hostname} RunAllCompositionsTests #{RunAllCompositionsTests}
|
|
15
15
|
# Testing whether 8937 composition lines can be parsed. Found 380 errors in 293 seconds
|
16
16
|
# 520 examples, 20 failures, 1 pending
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
RunFailingSpec = false
|
21
|
-
RunExcipiensTest = true
|
22
|
-
RunSpecificTests = true
|
23
|
-
RunMostImportantParserTests = true
|
18
|
+
RunFailingSpec = true
|
19
|
+
VERBOSE_MESSAGES = true
|
24
20
|
|
25
21
|
describe ParseComposition do
|
26
22
|
to_add = %(
|
27
23
|
VERBOSE_MESSAGES = true
|
28
24
|
pp composition; binding.pry
|
29
25
|
)
|
26
|
+
|
27
|
+
context "should handle failed" do
|
28
|
+
strings = [
|
29
|
+
]
|
30
|
+
strings.each{ |string|
|
31
|
+
composition = ParseComposition.from_string(string)
|
32
|
+
binding.pry if composition.substances.size == 0
|
33
|
+
specify { expect( composition.substances.size).not_to eq 0 }
|
34
|
+
}
|
35
|
+
end
|
36
|
+
|
30
37
|
end
|
31
38
|
|
39
|
+
if RunFailingSpec
|
32
40
|
describe ParseComposition do
|
33
41
|
|
34
|
-
|
35
|
-
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
describe ParseComposition do
|
47
|
+
context "should handle 'LA 2x%" do
|
48
|
+
# 48473 1 Wala Echinacea-Mundspray, anthroposophisches Arzneimittel
|
49
|
+
string = "echinacea pallida ex herba LA 20% TM 10 g"
|
50
|
+
composition = ParseComposition.from_string(string)
|
51
|
+
specify { expect( composition.substances.size).to eq 1 }
|
52
|
+
specify { expect( composition.substances.first.name).to eq "Echinacea Pallida Ex Herba La 20% Tm" }
|
53
|
+
end
|
54
|
+
|
55
|
+
context "should handle 'CRM 197" do
|
56
|
+
# 1 Prevenar 13, Suspension in Fertigspritzen
|
57
|
+
string = "proteinum corynebacteriae diphtheriae CRM 197 ca. 32 µg"
|
58
|
+
composition = ParseComposition.from_string(string)
|
59
|
+
specify { expect( composition.substances.size).to eq 1 }
|
60
|
+
specify { expect( composition.substances.first.name).to eq "Proteinum Corynebacteriae Diphtheriae Crm 197" }
|
61
|
+
end
|
62
|
+
|
63
|
+
context "should handle ', Corresp. '" do
|
64
|
+
# 65427 1 Adlers Bronchialpastillen, Pastillen
|
65
|
+
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"
|
66
|
+
composition = ParseComposition.from_string(string)
|
67
|
+
specify { expect( composition.substances.size).to eq 6 }
|
68
|
+
specify { expect( composition.substances.first.name).to eq "Liquiritiae Extractum Ethanolicum Liquidum" }
|
69
|
+
end
|
70
|
+
|
71
|
+
context "should handle ',,'" do
|
72
|
+
# 52433 1 Botox 100 Allergan-Einheiten, Pulver zur Herstellung einer Injektionslösung
|
73
|
+
string = "Praeparatio cryodesiccata: toxinum botulinicum A 100 U. Botox,, albuminum humanum, natrii chloridum, pro vitro."
|
36
74
|
composition = ParseComposition.from_string(string)
|
37
|
-
specify { expect(composition.source).to eq string}
|
38
75
|
specify { expect( composition.substances.size).to eq 3 }
|
39
|
-
specify { expect( composition.substances.first.name).to eq
|
76
|
+
specify { expect( composition.substances.first.name).to eq 'Toxinum Botulinicum A' }
|
77
|
+
specify { expect( composition.excipiens.name).to match /vitro/i }
|
78
|
+
end
|
79
|
+
|
80
|
+
context "should handle corresp. excipiens" do
|
81
|
+
string = "petasina 8 mg corresp. excipiens pro compresso obducto"
|
82
|
+
composition = ParseComposition.from_string(string)
|
83
|
+
specify { expect( composition.substances.size).to eq 1 }
|
84
|
+
specify { expect( composition.substances.first.name).to eq 'Petasina' }
|
85
|
+
specify { expect( composition.excipiens.name).to match /excipiens/i }
|
40
86
|
end
|
41
87
|
|
42
88
|
context "should handle missing Label A:) in pollinis allergeni extractu" do
|
43
|
-
|
89
|
+
# 62573 2 Staloral 300 3 Bäume (300 IR/ml) , sublinguale Lösung
|
90
|
+
string = 'III): pro usu: I) et II) recenter radioactivatum 99m-technetio ut natrii pertechnetas'
|
44
91
|
composition = ParseComposition.from_string(string)
|
45
92
|
specify { expect(composition.source).to eq string}
|
46
93
|
specify { expect( composition.substances.size).to eq 0 }
|
47
|
-
specify { expect( composition.label).to eq
|
48
|
-
specify { expect( composition.
|
94
|
+
specify { expect( composition.label).to eq nil }
|
95
|
+
specify { expect( composition.corresp).to eq 'III): pro usu: I) et II) recenter radioactivatum 99m-technetio ut natrii pertechnetas' }
|
49
96
|
end
|
50
97
|
|
51
|
-
context "should handle
|
52
|
-
string =
|
98
|
+
context "should handle Tela cum praeparatione" do
|
99
|
+
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'
|
53
100
|
composition = ParseComposition.from_string(string)
|
54
101
|
specify { expect(composition.source).to eq string}
|
55
|
-
specify { expect( composition.substances.first.name).to eq "
|
56
|
-
specify { expect( composition.
|
102
|
+
specify { expect( composition.substances.first.name).to eq "Niccoli Sulfas" }
|
103
|
+
specify { expect( composition.label).to eq "Tela cum praeparatione (Panel 1):" }
|
57
104
|
end
|
58
105
|
|
59
|
-
context "should handle
|
60
|
-
string = '
|
106
|
+
context "should handle '&' and 'deklr.'" do
|
107
|
+
string = 'TM: cardiospermum halicacabum 100 mg, cetearyl octanoat & isopropylmyristat deklar., alcohol benzylicus, aqua q.s. ad unguentum pro'
|
108
|
+
composition = ParseComposition.from_string(string)
|
109
|
+
specify { expect( composition.substances.first.name).to eq "Tm: Cardiospermum Halicacabum" }
|
110
|
+
end
|
111
|
+
|
112
|
+
context "should handle '150 U.I. hFSH et 150 U.I. hLH'" do
|
113
|
+
string = 'Praeparatio cryodesiccata: menotropinum 150 U.I. hFSH et 150 U.I. hLH, gonadotropinum chorionicum 7-21 U.I. hCG, lactosum monohydricum, pro vitro'
|
61
114
|
composition = ParseComposition.from_string(string)
|
62
115
|
specify { expect(composition.source).to eq string}
|
63
|
-
specify { expect( composition.substances.first.name).to eq "
|
116
|
+
specify { expect( composition.substances.first.name).to eq "Menotropinum" }
|
117
|
+
specify { expect( composition.substances.first.dose.to_s).to eq "150 U.I. hFSH et 150 U.I. hLH" }
|
64
118
|
end
|
65
119
|
|
66
|
-
context "should handle
|
67
|
-
string =
|
120
|
+
context "should handle missing arom.: before excipiens" do
|
121
|
+
string = "nicotinum 4 mg ut nicotini resinas, aromatica, antiox.: E 321, arom.: excipiens pro praeparatione"
|
68
122
|
composition = ParseComposition.from_string(string)
|
69
123
|
specify { expect(composition.source).to eq string}
|
70
|
-
specify { expect(
|
71
|
-
specify { expect( composition.
|
124
|
+
specify { expect(composition.substances.size).to eq 3 }
|
125
|
+
specify { expect( composition.substances.first.name).to eq "Nicotinum" }
|
72
126
|
end
|
73
127
|
|
74
|
-
context "should handle
|
75
|
-
|
128
|
+
context "should handle missing Label A:) in pollinis allergeni extractu" do
|
129
|
+
# 62573 2 Staloral 300 3 Bäume (300 IR/ml) , sublinguale Lösung
|
130
|
+
string = 'pollinis allergeni extractum (alnus glutinosa, betula alba, corylus avellana) 300 U.: excipiens ad solutionem pro 1 ml'
|
76
131
|
composition = ParseComposition.from_string(string)
|
77
132
|
specify { expect(composition.source).to eq string}
|
78
|
-
specify { expect( composition.substances.
|
79
|
-
specify { expect( composition.substances.first.
|
133
|
+
specify { expect( composition.substances.size).to eq 1 }
|
134
|
+
specify { expect( composition.substances.first.name).to eq "Pollinis Allergeni Extractum (alnus Glutinosa, Betula Alba, Corylus Avellana)" }
|
135
|
+
specify { expect( composition.label).to eq nil }
|
80
136
|
end
|
81
137
|
|
82
|
-
context "
|
83
|
-
string =
|
138
|
+
context "handle 39541 A. Vogel Entspannungs-Tropfen" do
|
139
|
+
string = "passiflorae herbae recentis tinctura, ratio: 1:12, corresp. ethanolum 65 % V/V"
|
140
|
+
composition = ParseComposition.from_string(string)
|
141
|
+
specify { expect(composition.substances.size).to eq 1 }
|
142
|
+
specify { expect(composition.substances.first.name).to eq "Passiflorae Herbae Recentis Tinctura" }
|
143
|
+
specify { expect(composition.substances.first.more_info).to eq "ratio: 1:12" }
|
144
|
+
end
|
145
|
+
|
146
|
+
context "handle II) Aprotininlösung:" do
|
147
|
+
string = "II) Aprotininlösung: aprotininum 1000 U.K.I., natrii chloridum, aqua q.s. ad solutionem, pro vitro 1 ml"
|
148
|
+
composition = ParseComposition.from_string(string)
|
149
|
+
specify { expect(composition.substances.size).to eq 2 }
|
150
|
+
specify { expect(composition.substances.first.name).to eq "Aprotininum" }
|
151
|
+
end
|
152
|
+
|
153
|
+
context "handle ut aqua ad" do
|
154
|
+
string = 'natrii oleas ut aqua ad iniectabilia q.s. ad emulsionem pro 250 ml'
|
84
155
|
composition = ParseComposition.from_string(string)
|
85
156
|
specify { expect(composition.source).to eq string}
|
86
|
-
specify { expect( composition.substances.
|
87
|
-
specify { expect( composition.
|
157
|
+
specify { expect( composition.substances.size).to eq 1 }
|
158
|
+
specify { expect( composition.substances.first.name).to eq 'Natrii Oleas' }
|
88
159
|
end
|
89
160
|
|
90
|
-
context
|
91
|
-
string =
|
92
|
-
'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'
|
161
|
+
context 'find unit for aqua q.s. ad emulsionem pro 250 ml' do
|
162
|
+
string = "q.s. ad emulsionem pro 250 ml."
|
93
163
|
composition = ParseComposition.from_string(string)
|
94
164
|
specify { expect(composition.source).to eq string}
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
specify { expect( composition.label).to eq "Tela cum praeparatione (Panel 1):" }
|
165
|
+
specify { expect(composition.substances.size).to eq 0}
|
166
|
+
specify { expect( composition.excipiens.dose.to_s).to eq "250 ml" }
|
167
|
+
specify { expect( composition.excipiens.name).to match /emulsionem/i }
|
99
168
|
end
|
100
169
|
|
101
170
|
context "should handle '150 U.I. hFSH et 150 U.I. hLH'" do
|
@@ -106,11 +175,11 @@ describe ParseComposition do
|
|
106
175
|
specify { expect( composition.substances.first.dose.to_s).to eq "150 U.I. hFSH et 150 U.I. hLH" }
|
107
176
|
end
|
108
177
|
|
109
|
-
context "should handle
|
110
|
-
string = '
|
178
|
+
context "should handle per centum" do
|
179
|
+
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'
|
111
180
|
composition = ParseComposition.from_string(string)
|
112
|
-
|
113
|
-
specify { expect( composition.substances.first.name).to eq "
|
181
|
+
specify { expect(composition.source).to eq string}
|
182
|
+
specify { expect( composition.substances.first.name).to eq "Acidum Nitricum 70 Per Centum" }
|
114
183
|
end
|
115
184
|
|
116
185
|
context "should handle 'potenziert mit: excipiens pro compresso'" do
|
@@ -121,76 +190,170 @@ describe ParseComposition do
|
|
121
190
|
specify { expect(composition.label_description).to eq nil }
|
122
191
|
specify { expect(composition.galenic_form).to eq nil }
|
123
192
|
specify { expect(composition.route_of_administration).to eq nil }
|
124
|
-
specify { expect( composition.substances.first.name).to eq "
|
193
|
+
specify { expect( composition.substances.first.name).to eq "Ambra Grisea D6" }
|
194
|
+
end
|
195
|
+
|
196
|
+
context "allow ut followed by et" do
|
197
|
+
# 49417 1 Burgerstein EPA-Kapseln 500mg, Kapseln
|
198
|
+
string =
|
199
|
+
"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."
|
200
|
+
composition = ParseComposition.from_string(string)
|
201
|
+
specify { expect(composition.substances.first.name).to eq 'Piscis Oleum' } # TODO:
|
202
|
+
specify { expect(composition.substances.first.chemical_substance.name).to eq 'Acida Carboxylica Omega-3 Oligoinsaturata' } # TODO:
|
203
|
+
specify { expect(composition.substances.size).to eq 2 }
|
204
|
+
specify { expect(composition.substances.first.salts.size).to eq 0 }
|
205
|
+
specify { expect(composition.substances.first.chemical_substance.salts.size).to eq 1 }
|
206
|
+
specify { expect(composition.substances.first.chemical_substance.salts.first.name).to eq "Acidum Eicosapentaenoicum" }
|
207
|
+
end
|
208
|
+
|
209
|
+
context 'find correct result Solvens (i.m.)' do
|
210
|
+
string = "Solvens (i.m.): aqua ad iniectabilia 2 ml pro vitro"
|
211
|
+
composition = ParseComposition.from_string(string)
|
212
|
+
specify { expect(composition.substances.size).to eq 0 }
|
213
|
+
specify { expect(composition.corresp).to eq 'aqua ad iniectabilia 2 ml pro vitro' }
|
125
214
|
end
|
126
215
|
|
127
216
|
context "allow substancename with 'ethanol.'" do
|
128
217
|
string = "mandragora ethanol. decoctum D1 30 mg"
|
129
218
|
composition = ParseComposition.from_string(string)
|
130
|
-
specify { expect(composition.substances.size).to eq
|
219
|
+
specify { expect(composition.substances.size).to eq 1 }
|
131
220
|
specify { expect(composition.substances.first.name).to eq "Mandragora Ethanol. Decoctum D1" }
|
132
221
|
specify { expect(composition.substances.first.dose.to_s).to eq "30 mg" }
|
133
222
|
end
|
134
223
|
|
135
224
|
context "allow substance complicated, calculated dose '6.0 +/-1.2 µg'" do
|
136
225
|
string =
|
137
|
-
"
|
226
|
+
"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"
|
138
227
|
composition = ParseComposition.from_string(string)
|
139
|
-
specify { expect(composition.substances.first.name).to eq '
|
140
|
-
specify { expect(composition.substances.first.chemical_substance
|
141
|
-
specify { expect(composition.substances.
|
228
|
+
specify { expect(composition.substances.first.name).to eq 'Enzephalitidis Japanensis Virus Antigenum (stamm: Sa-14-2)' }
|
229
|
+
specify { expect(composition.substances.first.chemical_substance).to eq nil }
|
230
|
+
specify { expect(composition.substances.first.dose.to_s).to eq '6.0 +/-1.2 µg/0.5 ml' }
|
231
|
+
specify { expect(composition.substances.size).to eq 5 }
|
142
232
|
end
|
143
233
|
|
144
|
-
context "
|
145
|
-
string =
|
146
|
-
|
234
|
+
context "should handle 'aqua ad iniectabilia ad solutionem'" do
|
235
|
+
string = "aqua ad iniectabilia ad solutionem"
|
236
|
+
composition = ParseComposition.from_string(string)
|
237
|
+
specify { expect(composition.substances.size).to eq 0 }
|
238
|
+
specify { expect(composition.corresp).to match /ad iniectabilia/ }
|
239
|
+
end
|
240
|
+
|
241
|
+
context "should handle Corresp. ca. 8370 kJ" do
|
242
|
+
string = "Corresp. ca. 8370 kJ"
|
243
|
+
composition = ParseComposition.from_string(string)
|
244
|
+
specify { expect(composition.substances.size).to eq 0 }
|
245
|
+
specify { expect(composition.corresp).to match /8370 kJ/i }
|
246
|
+
end
|
247
|
+
|
248
|
+
context "should handle Praeparatio sicca and polysorbatum" do
|
249
|
+
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'
|
250
|
+
composition = ParseComposition.from_string(string)
|
251
|
+
specify { expect(composition.source).to eq string}
|
252
|
+
specify { expect( composition.substances.first.name).to eq "Albiglutidum" }
|
253
|
+
specify { expect( composition.label).to eq "Praeparatio sicca cum solvens: praeparatio sicca:" }
|
254
|
+
end
|
255
|
+
|
256
|
+
context "handle placebo compressa: excipiens pro compresso obducto" do
|
257
|
+
string = "II) placebo compressa: excipiens pro compresso obducto"
|
258
|
+
composition = ParseComposition.from_string(string)
|
259
|
+
specify { expect(composition.substances.size).to eq 0 }
|
260
|
+
specify { expect(composition.label).to eq "II" }
|
261
|
+
specify { expect(composition.label_description).to eq "placebo compressa" }
|
262
|
+
end
|
263
|
+
|
264
|
+
context "handle 46489 Polvac Gräser+Roggen" do
|
265
|
+
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."
|
147
266
|
composition = ParseComposition.from_string(string)
|
148
|
-
specify { expect(composition.substances.first.name).to eq 'Magnesii Aspartas Dihydricus' }
|
149
|
-
specify { expect(composition.substances.first.chemical_substance.name).to eq 'Magnesium' }
|
150
267
|
specify { expect(composition.substances.size).to eq 5 }
|
268
|
+
tyrosinum = composition.substances.find{ |x| /Tyrosinum/i.match(x.name) }
|
269
|
+
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)" }
|
270
|
+
specify { expect(tyrosinum.name).to eq "Tyrosinum" }
|
271
|
+
specify { expect(composition.label).to eq "A" }
|
151
272
|
end
|
152
|
-
|
273
|
+
|
274
|
+
context "handle ratio" do
|
275
|
+
string =
|
276
|
+
"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"
|
277
|
+
composition = ParseComposition.from_string(string)
|
278
|
+
substance = composition.substances.find{ |x| /Scolopendrium/i.match(x.name) }
|
279
|
+
specify { expect(substance.name).to eq "Phyllitis Scolopendrium Ex Herba Recenti" }
|
280
|
+
specify { expect(substance.more_info).to eq "ratio: 1:4,1" }
|
281
|
+
end
|
282
|
+
|
283
|
+
context "should skip lines containing I) et II)" do
|
284
|
+
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'
|
285
|
+
composition = ParseComposition.from_string(string)
|
286
|
+
specify { expect(composition.source).to eq string }
|
287
|
+
specify { expect(composition.substances.size).to eq 0 }
|
288
|
+
specify { expect(composition.corresp).to eq string }
|
289
|
+
end
|
290
|
+
|
291
|
+
context "should handle dose with /" do
|
292
|
+
string = 'poly(dl-lactidum-co-glycolidum) 75/25'
|
293
|
+
composition = ParseComposition.from_string(string)
|
294
|
+
specify { expect(composition.source).to eq string}
|
295
|
+
specify { expect( composition.substances.first.name).to eq "Poly(dl-lactidum-co-glycolidum)" }
|
296
|
+
specify { expect( composition.substances.first.dose.to_s).to eq '75/25' }
|
297
|
+
end
|
298
|
+
|
299
|
+
context "should handle dose with +/-" do
|
300
|
+
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'
|
301
|
+
composition = ParseComposition.from_string(string)
|
302
|
+
specify { expect(composition.source).to eq string}
|
303
|
+
specify { expect( composition.substances.first.name).to eq "Enzephalitidis Japanensis Virus Antigenum (stamm: Sa-14-2)" }
|
304
|
+
specify { expect( composition.substances.first.dose.to_s).to eq '6.0 +/-1.2 µg/0.5 ml' }
|
305
|
+
end
|
306
|
+
|
307
|
+
context "should handle label Praeparatio cryodesiccata (Thrombin)" do
|
308
|
+
string = 'Praeparatio cryodesiccata (Thrombin): thrombinum humanum 500 U.I., natrii chloridum, natrii citras dihydricus, pro vitro'
|
309
|
+
composition = ParseComposition.from_string(string)
|
310
|
+
specify { expect(composition.source).to eq string}
|
311
|
+
specify { expect( composition.substances.first.name).to eq "Thrombinum Humanum" }
|
312
|
+
specify { expect( composition.label).to eq "Praeparatio cryodesiccata (Thrombin):" }
|
313
|
+
end
|
314
|
+
|
315
|
+
end
|
153
316
|
|
154
317
|
describe ParseComposition do
|
155
318
|
context "allow 2,2'-methylen-bis(6-tert.-butyl-4-methyl-phenolum)" do
|
156
319
|
string = "2,2'-methylen-bis(6-tert.-butyl-4-methyl-phenolum)"
|
157
320
|
composition = ParseComposition.from_string(string)
|
158
321
|
specify { expect(composition.substances.first.name).to eq "2,2'-methylen-bis(6-tert.-butyl-4-methyl-phenolum)" }
|
159
|
-
specify { expect(composition.substances.size).to eq
|
322
|
+
specify { expect(composition.substances.size).to eq 1 }
|
160
323
|
end
|
161
324
|
|
162
325
|
context "allow substancename with 90 % " do
|
163
326
|
string =
|
164
327
|
"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"
|
165
328
|
composition = ParseComposition.from_string(string)
|
166
|
-
specify { expect(composition.substances.size).to eq
|
329
|
+
specify { expect(composition.substances.size).to eq 5 }
|
167
330
|
substance = composition.substances.find{ |x| /lacticum/i.match(x.name) }
|
168
331
|
specify { expect(composition.substances.first.name).to eq "Acidum Nitricum 70 Per Centum" }
|
169
332
|
specify { expect(composition.substances.first.dose.to_s).to eq "580.66 mg/ml" }
|
170
333
|
specify { expect(substance.name).to eq 'Acidum Lacticum 90 %' }
|
171
334
|
specify { expect(substance.dose.to_s).to eq '4.55 mg/ml' }
|
172
335
|
end
|
336
|
+
|
173
337
|
context "allow substance with two corresp" do
|
174
338
|
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"
|
175
339
|
composition = ParseComposition.from_string(string)
|
176
340
|
context "with correct names" do
|
177
|
-
|
178
|
-
|
341
|
+
skip { expect(composition.substances.first.name).to eq 'Magnesii Aspartas Dihydricus' }
|
342
|
+
skip { expect(composition.substances.first.chemical_substance.name).to eq 'Magnesium' }
|
179
343
|
end
|
180
|
-
specify { expect(composition.substances.size).to eq
|
344
|
+
specify { expect(composition.substances.size).to eq 6 }
|
181
345
|
end
|
182
346
|
|
183
347
|
context "allow substances containing ut, corresp, arom," do
|
184
|
-
string =
|
185
|
-
"calcii carbonas 3 g corresp. calcium 1.2 g, cholecalciferolum 800 U.I. ut cholecalciferoli pulvis corresp. arom.: saccharinum, natrii cyclamas et alia, excipiens pro compresso"
|
348
|
+
string = "calcii carbonas 3 g corresp. calcium 1.2 g, cholecalciferolum 800 U.I. ut cholecalciferoli pulvis corresp. arom.: saccharinum, natrii cyclamas et alia, excipiens pro compresso"
|
186
349
|
composition = ParseComposition.from_string(string)
|
187
|
-
specify { expect(composition.substances.size).to eq
|
350
|
+
specify { expect(composition.substances.size).to eq 4 }
|
188
351
|
end
|
189
352
|
|
190
353
|
context "allow substances containing 'A + '" do
|
191
354
|
string = "sennosida 20 mg corresp. sennosida A + B calcica 12 mg, excipiens pro compresso obducto"
|
192
355
|
composition = ParseComposition.from_string(string)
|
193
|
-
specify { expect(composition.substances.size).to eq
|
356
|
+
specify { expect(composition.substances.size).to eq 1 }
|
194
357
|
specify { expect(composition.substances.first.name).to eq 'Sennosida' }
|
195
358
|
specify { expect(composition.substances.first.chemical_substance.name).to eq 'Sennosida A + B Calcica' }
|
196
359
|
end
|
@@ -198,13 +361,15 @@ describe ParseComposition do
|
|
198
361
|
context "allow substances separted by ', et'" do
|
199
362
|
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"
|
200
363
|
composition = ParseComposition.from_string(string)
|
201
|
-
specify { expect(composition.substances.size).to eq
|
364
|
+
specify { expect(composition.substances.size).to eq 2 }
|
365
|
+
specify { expect(composition.substances.first.name).to eq 'Echinaceae Purpureae Herbae Recentis Tinctura' }
|
366
|
+
specify { expect(composition.substances.last.name).to eq 'Echinaceae Purpureae Radicis Recentis Tinctura' }
|
202
367
|
end
|
203
368
|
|
204
369
|
context 'find kalium 40 mmol/l' do
|
205
370
|
string = "kalium 40 mmol/l, chloridum 194 mmol/l, natrium 154 mmol/l, aqua ad iniectabilia q.s. ad solutionem pro 1000 ml"
|
206
371
|
composition = ParseComposition.from_string(string)
|
207
|
-
specify { expect(composition.substances.size).to eq
|
372
|
+
specify { expect(composition.substances.size).to eq 3 }
|
208
373
|
specify { expect(composition.substances.first.name).to eq 'Kalium' }
|
209
374
|
specify { expect(composition.substances.first.dose.to_s).to eq "40 mmol/l/1000 ml" }
|
210
375
|
end
|
@@ -212,7 +377,7 @@ describe ParseComposition do
|
|
212
377
|
context 'find corresp doses pro vase.' do
|
213
378
|
string = "farfarae folii recentis succus ratio: 1:0.68-0.95"
|
214
379
|
composition = ParseComposition.from_string(string)
|
215
|
-
specify { expect(composition.substances.size).to eq
|
380
|
+
specify { expect(composition.substances.size).to eq 1 }
|
216
381
|
specify { expect(composition.substances.last.name).to eq 'Farfarae Folii Recentis Succus' }
|
217
382
|
specify { expect(composition.substances.last.more_info).to eq "ratio: 1:0.68-0.95" }
|
218
383
|
end
|
@@ -220,15 +385,15 @@ describe ParseComposition do
|
|
220
385
|
context 'find corresp doses pro vase.' do
|
221
386
|
string = "doses pro vase 30/60"
|
222
387
|
composition = ParseComposition.from_string(string)
|
223
|
-
specify { expect(
|
224
|
-
|
225
|
-
# specify { expect( composition.substances.first.dose.to_s).to eq '30/60' }
|
388
|
+
specify { expect(composition.substances.size).to eq 0 }
|
389
|
+
specify { expect(composition.corresp).to match /pro vase/i }
|
226
390
|
end
|
227
391
|
|
392
|
+
|
228
393
|
context 'find corresp. ca.' do
|
229
394
|
string = "sal ems 100 % m/m, corresp. ca., natrium 308.7 mg/g"
|
230
395
|
composition = ParseComposition.from_string(string)
|
231
|
-
specify { expect(composition.substances.size).to eq
|
396
|
+
specify { expect(composition.substances.size).to eq 1 }
|
232
397
|
specify { expect(composition.substances.last.name).to eq 'Sal Ems' }
|
233
398
|
end
|
234
399
|
|
@@ -241,7 +406,7 @@ describe ParseComposition do
|
|
241
406
|
context 'find correct result for dose 1 Mio U.I.' do
|
242
407
|
string = "phenoxymethylpenicillinum kalicum 1 Mio U.I., conserv.: E 200, excipiens pro compresso obducto"
|
243
408
|
composition = ParseComposition.from_string(string)
|
244
|
-
specify { expect(composition.substances.size).to eq
|
409
|
+
specify { expect(composition.substances.size).to eq 2 }
|
245
410
|
specify { expect(composition.substances.first.name).to eq 'Phenoxymethylpenicillinum Kalicum' }
|
246
411
|
specify { expect(composition.substances.first.dose.to_s).to eq '1 Mio U.I.' }
|
247
412
|
specify { expect(composition.substances.last.name).to eq 'E 200' }
|
@@ -285,10 +450,9 @@ describe ParseComposition do
|
|
285
450
|
end
|
286
451
|
|
287
452
|
context 'find correct result Überzug: E 132' do
|
288
|
-
# 16863 1 Salvia Wild, Tropfen
|
289
453
|
string = "olanzapinum 15 mg, Überzug: E 132, excipiens pro compresso obducto."
|
290
454
|
composition = ParseComposition.from_string(string)
|
291
|
-
specify { expect(composition.substances.size).to eq
|
455
|
+
specify { expect(composition.substances.size).to eq 2 }
|
292
456
|
specify { expect(composition.substances.first.name).to eq 'Olanzapinum' }
|
293
457
|
specify { expect(composition.substances.last.name).to eq 'E 132' }
|
294
458
|
specify { expect(composition.substances.last.more_info).to eq 'Überzug' }
|
@@ -300,17 +464,17 @@ describe ParseComposition do
|
|
300
464
|
composition = ParseComposition.from_string(string)
|
301
465
|
specify { expect(composition.label).to eq nil }
|
302
466
|
specify { expect(composition.label_description).to eq nil }
|
303
|
-
specify { expect(composition.substances.size).to eq 1
|
467
|
+
specify { expect(composition.substances.size).to eq 1 }
|
304
468
|
specify { expect(composition.substances.first.name).to eq 'Dasabuvirum' }
|
305
469
|
specify { expect(composition.substances.first.salts.size).to eq 1 }
|
306
|
-
specify { expect(composition.substances.first.salts.first.name).to eq 'Dasabuvirum Natricum
|
470
|
+
specify { expect(composition.substances.first.salts.first.name).to eq 'Dasabuvirum Natricum' }
|
471
|
+
specify { expect(composition.substances.first.salts.first.chemical_substance.name).to eq 'Dasabuvirum Natricum Monohydricum' }
|
307
472
|
end
|
308
473
|
|
309
474
|
context 'find correct result for ut excipiens' do
|
310
|
-
# 16863 1 Salvia Wild, Tropfen
|
311
475
|
string = "drospirenonum 3 mg, ethinylestradiolum 20 µg ut excipiens pro compresso obducto"
|
312
476
|
composition = ParseComposition.from_string(string)
|
313
|
-
specify { expect(composition.substances.size).to eq
|
477
|
+
specify { expect(composition.substances.size).to eq 2 }
|
314
478
|
specify { expect(composition.substances.last.name).to eq 'Ethinylestradiolum' }
|
315
479
|
end
|
316
480
|
|
@@ -318,10 +482,11 @@ describe ParseComposition do
|
|
318
482
|
# 16863 1 Salvia Wild, Tropfen
|
319
483
|
string = "salviae extractum ethanolicum liquidum, DER: 1:4.2-5.0 corresp. ethanolum 40 % V/V"
|
320
484
|
composition = ParseComposition.from_string(string)
|
321
|
-
specify { expect(composition.substances.size).to eq
|
322
|
-
specify { expect(composition.substances.
|
485
|
+
specify { expect(composition.substances.size).to eq 2 }
|
486
|
+
specify { expect(composition.substances[1].name).to eq 'DER: 1:4.2-5.0' }
|
323
487
|
end
|
324
488
|
|
489
|
+
|
325
490
|
context 'find correct result compositions for 00613 Pentavac' do
|
326
491
|
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."
|
327
492
|
line_2 = "II) Hib-Komponente (Lyophilisat): haemophilus influenzae Typ B polysaccharida T-conjugatum 10 µg, trometamolum, saccharum, pro praeparatione."
|
@@ -345,7 +510,7 @@ describe ParseComposition do
|
|
345
510
|
context 'find correct result compositions for fluticasoni with chemical_dose' do
|
346
511
|
string = 'fluticasoni-17 propionas 100 µg, lactosum monohydricum q.s. ad pulverem pro 25 mg.'
|
347
512
|
composition = ParseComposition.from_string(string)
|
348
|
-
specify { expect(composition.substances.size).to eq
|
513
|
+
specify { expect(composition.substances.size).to eq 2 }
|
349
514
|
fluticasoni = composition.substances.find{ |x| x.name.match(/Fluticasoni/i) }
|
350
515
|
specify { expect(fluticasoni.name).to eq 'Fluticasoni-17 Propionas' }
|
351
516
|
specify { expect(fluticasoni.qty.to_f).to eq 100.0 }
|
@@ -353,13 +518,14 @@ describe ParseComposition do
|
|
353
518
|
specify { expect(fluticasoni.dose.to_s).to eq "100 µg/25 mg" }
|
354
519
|
lactosum = composition.substances.find{ |x| x.name.match(/Lactosum/i) }
|
355
520
|
specify { expect(lactosum.name).to eq "Lactosum Monohydricum" }
|
356
|
-
|
521
|
+
skip { expect(lactosum.dose.to_s).to eq "25 mg" }
|
357
522
|
end
|
358
523
|
|
359
524
|
context 'find correct result Solvens (i.m.)' do
|
360
525
|
string = "Solvens (i.m.): aqua ad iniectabilia 2 ml pro vitro"
|
361
526
|
composition = ParseComposition.from_string(string)
|
362
|
-
specify { expect(composition.substances.
|
527
|
+
specify { expect(composition.substances.size).to eq 0}
|
528
|
+
specify { expect(composition.corresp).to eq 'aqua ad iniectabilia 2 ml pro vitro' }
|
363
529
|
end
|
364
530
|
|
365
531
|
context "should handle Iscador" do
|
@@ -380,10 +546,10 @@ describe ParseComposition do
|
|
380
546
|
# 47657 1 Nanocoll, Markierungsbesteck
|
381
547
|
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."
|
382
548
|
composition = ParseComposition.from_string(string)
|
383
|
-
specify { expect(composition.substances.size).to eq
|
549
|
+
specify { expect(composition.substances.size).to eq 6 }
|
384
550
|
poloxamerum = composition.substances.find{ |x| x.name.match(/poloxamerum/i) }
|
385
|
-
|
386
|
-
|
551
|
+
specify { expect(poloxamerum.name).to eq 'Poloxamerum 238' }
|
552
|
+
specify { expect(poloxamerum.qty.to_f).to eq 0.0 }
|
387
553
|
specify { expect(poloxamerum.unit).to eq nil }
|
388
554
|
end
|
389
555
|
|
@@ -439,16 +605,6 @@ describe ParseComposition do
|
|
439
605
|
specify { expect(composition.substances.size).to eq 1 }
|
440
606
|
end
|
441
607
|
|
442
|
-
|
443
|
-
context "should skip lines containing I) et II)" do
|
444
|
-
skip { "should skip lines containing I) et II)"
|
445
|
-
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'
|
446
|
-
composition = ParseComposition.from_string(string)
|
447
|
-
specify { expect(composition.source).to eq string }
|
448
|
-
specify { expect(composition.substances.size).to eq 0 }
|
449
|
-
}
|
450
|
-
end
|
451
|
-
|
452
608
|
context "should treat correctly CFU units" do
|
453
609
|
# 56015 Perskindol Cool avec consoude, gel
|
454
610
|
string = 'lactobacillus acidophilus cryodesiccatus min. 10^9 CFU'
|
@@ -516,20 +672,20 @@ describe ParseComposition do
|
|
516
672
|
specify { expect(composition.substances.size).to eq 1 }
|
517
673
|
specify { expect(composition.substances.first.more_info).to eq "mineralia" }
|
518
674
|
specify { expect(composition.substances.first.salts.size).to eq 6 }
|
519
|
-
|
520
|
-
specify { expect(
|
521
|
-
specify { expect(
|
675
|
+
substance = composition.substances.first.salts.find{ |x| /Magnesium/i.match(x.name) }
|
676
|
+
specify { expect(substance.name).to eq 'Magnesium' }
|
677
|
+
specify { expect(substance.qty).to eq 120.0 }
|
678
|
+
specify { expect(substance.unit).to eq 'mg' }
|
522
679
|
specify { expect(composition.substances.first.name).to eq 'Calcium' } # TODO:
|
523
680
|
# TODO: specify { expect(composition.substances.first.dose.to_s).to eq '9 g/L 5 ml' }
|
524
681
|
end
|
525
682
|
|
526
|
-
context "should handle
|
683
|
+
context "should handle Solvens line" do
|
527
684
|
string = 'Solvens: natrii chloridi solutio 9 g/L 5 ml.'
|
528
685
|
composition = ParseComposition.from_string(string)
|
529
|
-
specify { expect(composition.substances.size).to eq
|
530
|
-
specify { expect(composition.
|
531
|
-
|
532
|
-
# TODO: specify { expect(composition.substances.first.dose.to_s).to eq '9 g/L 5 ml' }
|
686
|
+
specify { expect(composition.substances.size).to eq 0 }
|
687
|
+
specify { expect(composition.corresp).to eq 'natrii chloridi solutio 9 g/L 5 ml' }
|
688
|
+
skip { expect(composition.excipiens.substance.name).to eq 'Natrii Chloridi Solutio' }
|
533
689
|
end
|
534
690
|
|
535
691
|
context "should parse a complex composition" do
|
@@ -545,7 +701,7 @@ describe ParseComposition do
|
|
545
701
|
string = "acari allergeni extractum (acarus siro) 50'000 U., conserv.: phenolum, excipiens ad solutionem pro 1 ml."
|
546
702
|
composition = ParseComposition.from_string(string)
|
547
703
|
specify { expect(composition.source).to eq string }
|
548
|
-
specify { expect(composition.substances.size).to eq
|
704
|
+
specify { expect(composition.substances.size).to eq 2 } # got only 1
|
549
705
|
specify { expect(composition.substances.first.more_info).to eq nil }
|
550
706
|
specify { expect(composition.substances.first.name).to eq 'Acari Allergeni Extractum (acarus Siro)' }
|
551
707
|
specify { expect(composition.substances.last.name).to eq 'Phenolum' } # was Acari Allergeni Extractum (acarus Siro)
|
@@ -561,11 +717,11 @@ describe ParseComposition do
|
|
561
717
|
specify { expect(composition.label).to eq "A" }
|
562
718
|
specify { expect(composition.label_description).to eq "acari allergeni extractum 50 U." }
|
563
719
|
specify { expect(composition.source).to eq string }
|
564
|
-
specify { expect(composition.substances.size).to eq
|
720
|
+
specify { expect(composition.substances.size).to eq 5 }
|
565
721
|
pteronyssinus = composition.substances.find{ |x| /pteronyssinus/i.match(x.name) }
|
566
722
|
specify { expect(composition.substances.first.name).to eq 'Dermatophagoides Farinae' }
|
567
723
|
specify { expect(pteronyssinus.name).to eq 'Dermatophagoides Pteronyssinus' }
|
568
|
-
specify { expect(pteronyssinus.more_info).to eq nil
|
724
|
+
specify { expect(pteronyssinus.more_info).to eq nil}
|
569
725
|
end
|
570
726
|
|
571
727
|
context "should return correct composition for containing 'virus rabiei inactivatum" do
|
@@ -584,110 +740,67 @@ describe ParseComposition do
|
|
584
740
|
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.'
|
585
741
|
composition = ParseComposition.from_string(string)
|
586
742
|
specify { expect(composition.source).to eq string }
|
587
|
-
specify { expect(composition.substances.size).to eq
|
743
|
+
specify { expect(composition.substances.size).to eq 4 }
|
588
744
|
specify { expect(composition.substances.first.name).to eq 'Pollinis Allergeni Extractum (phleum Pratense)' }
|
589
745
|
end
|
590
746
|
|
591
|
-
if RunExcipiensTest
|
592
747
|
context "should handle aqua ad iniectabilia" do
|
593
|
-
string = "aqua ad iniectabilia q.s. ad solutionem pro 5 ml"
|
748
|
+
string = "any_substance, aqua ad iniectabilia q.s. ad solutionem pro 5 ml"
|
594
749
|
composition = ParseComposition.from_string(string)
|
595
|
-
substance = composition.substances.
|
596
|
-
|
597
|
-
|
598
|
-
|
599
|
-
|
600
|
-
specify { expect(substance.unit).to eq 'ml' }
|
601
|
-
else
|
602
|
-
specify { expect(substance).to eq nil }
|
603
|
-
end
|
750
|
+
substance = composition.substances.last
|
751
|
+
specify { expect(composition.excipiens.name).to eq 'aqua ad iniectabilia q.s. ad solutionem' }
|
752
|
+
specify { expect(composition.excipiens.chemical_substance).to eq nil }
|
753
|
+
specify { expect(composition.excipiens.qty).to eq 5.0}
|
754
|
+
specify { expect(composition.excipiens.unit).to eq 'ml' }
|
604
755
|
end
|
605
756
|
|
606
757
|
context "should return correct substance for 'excipiens ad solutionem pro 1 ml corresp. ethanolum 59.5 % V/V'" do
|
607
|
-
string = "excipiens ad solutionem pro 1 ml corresp. ethanolum 59.5 % V/V"
|
758
|
+
string = "any_substance, excipiens ad solutionem pro 1 ml corresp. ethanolum 59.5 % V/V"
|
608
759
|
composition = ParseComposition.from_string(string)
|
609
760
|
substance = composition.substances.first
|
610
|
-
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
|
615
|
-
|
616
|
-
specify { expect(substance.unit).to eq '% V/V' }
|
617
|
-
else
|
618
|
-
specify { expect(substance).to eq nil }
|
619
|
-
end
|
761
|
+
# TODO: what should we report here? dose = pro 1 ml or 59.5 % V/V, chemical_substance = ethanolum?
|
762
|
+
# or does it only make sense as part of a composition?
|
763
|
+
skip { expect(composition.excipiens.name).to eq 'Ethanolum' }
|
764
|
+
specify { expect(composition.excipiens.cdose).to eq nil }
|
765
|
+
skip { expect(composition.excipiens.qty).to eq 59.5}
|
766
|
+
skip { expect(composition.excipiens.unit).to eq '% V/V' }
|
620
767
|
end
|
621
768
|
|
622
769
|
context "should return correct composition for 'excipiens ad emulsionem'" do
|
623
|
-
string = 'excipiens ad emulsionem pro 1 g"'
|
624
|
-
composition = ParseComposition.from_string(string)
|
625
|
-
substance = composition.substances.first
|
626
|
-
if ExcipiensIs_a_Substance
|
627
|
-
specify { expect(composition.source).to eq string }
|
628
|
-
specify { expect(composition.substances.size).to eq 0 }
|
629
|
-
else
|
630
|
-
specify { expect(substance).to eq nil }
|
631
|
-
end
|
632
|
-
end
|
633
|
-
|
634
|
-
context "should return correct substance for 'excipiens ad solutionem pro 1 ml corresp. ethanolum 59.5 % V/V'" do
|
635
|
-
string = "excipiens ad solutionem pro 1 ml corresp. ethanolum 59.5 % V/V"
|
770
|
+
string = 'something, excipiens ad emulsionem pro 1 g"'
|
636
771
|
composition = ParseComposition.from_string(string)
|
637
772
|
substance = composition.substances.first
|
638
|
-
|
639
|
-
|
640
|
-
specify { expect(substance.chemical_substance.name).to eq 'Ethanolum' }
|
641
|
-
specify { expect(substance.cdose.to_s).to eq ParseDose.new('59.5', '% V/V').to_s }
|
642
|
-
specify { expect(substance.qty).to eq 1.0}
|
643
|
-
specify { expect(substance.unit).to eq 'ml' }
|
644
|
-
else
|
645
|
-
specify { expect(substance).to eq nil }
|
646
|
-
end
|
773
|
+
specify { expect(composition.source).to eq string }
|
774
|
+
specify { expect(composition.substances.size).to eq 1 }
|
647
775
|
end
|
648
776
|
|
649
777
|
context "should return correct substance for 'aqua q.s. ad suspensionem pro 0.5 ml'" do
|
650
|
-
string = "aqua q.s. ad suspensionem pro 0.5 ml"
|
778
|
+
string = "natrii dihydrogenophosphas dihydricus, aqua q.s. ad suspensionem pro 0.5 ml."
|
651
779
|
composition = ParseComposition.from_string(string)
|
652
|
-
|
653
|
-
|
654
|
-
|
655
|
-
specify { expect(substance.qty).to eq 0.5}
|
656
|
-
specify { expect(substance.unit).to eq 'ml' }
|
657
|
-
else
|
658
|
-
specify { expect(substance).to eq nil }
|
659
|
-
end
|
780
|
+
specify { expect(composition.excipiens.name).to match /aqua|excipiens/ }
|
781
|
+
specify { expect(composition.excipiens.qty).to eq 0.5}
|
782
|
+
specify { expect(composition.excipiens.unit).to eq 'ml' }
|
660
783
|
end
|
661
784
|
|
662
785
|
context "should return correct substance for 'excipiens ad solutionem pro 3 ml corresp. 50 µg'" do
|
663
|
-
string = "excipiens ad solutionem pro 3 ml corresp. 50 µg"
|
786
|
+
string = "any_substance, excipiens ad solutionem pro 3 ml corresp. 50 µg"
|
664
787
|
composition = ParseComposition.from_string(string)
|
665
|
-
|
666
|
-
|
667
|
-
|
668
|
-
|
669
|
-
|
670
|
-
specify { expect(substance.cdose.qty).to eq 50.0}
|
671
|
-
specify { expect(substance.cdose.unit).to eq 'µg' }
|
672
|
-
else
|
673
|
-
specify { expect(substance).to eq nil}
|
674
|
-
end
|
788
|
+
specify { expect(composition.excipiens.name).to match /Excipiens/i }
|
789
|
+
specify { expect(composition.excipiens.qty).to eq 3.0}
|
790
|
+
specify { expect(composition.excipiens.unit).to eq 'ml' }
|
791
|
+
specify { expect(composition.excipiens.cdose.qty).to eq 50.0}
|
792
|
+
specify { expect(composition.excipiens.cdose.unit).to eq 'µg' }
|
675
793
|
end
|
676
794
|
|
677
795
|
context "should return correct substance for 'excipiens ad pulverem pro 1000 mg'" do
|
678
|
-
string = "excipiens ad pulverem pro 1000 mg"
|
796
|
+
string = "any_substance, excipiens ad pulverem pro 1000 mg"
|
679
797
|
CompositionTransformer.clear_substances
|
680
798
|
composition = ParseComposition.from_string(string)
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
specify { expect(substance.qty).to eq 1000.0 }
|
685
|
-
specify { expect(substance.unit).to eq 'mg' }
|
686
|
-
else
|
687
|
-
specify { expect(substance).to eq nil }
|
688
|
-
end
|
799
|
+
specify { expect(composition.excipiens.name).to match /Excipiens/ }
|
800
|
+
specify { expect(composition.excipiens.qty).to eq 1000.0 }
|
801
|
+
specify { expect(composition.excipiens.unit).to eq 'mg' }
|
689
802
|
end
|
690
|
-
|
803
|
+
|
691
804
|
context "should pass with 'etinoli 7900 U.I'" do
|
692
805
|
string = "retinoli 7900 U.I."
|
693
806
|
composition = ParseComposition.from_string(string)
|
@@ -702,7 +815,7 @@ describe ParseComposition do
|
|
702
815
|
string = "absinthii herba 1.2 g pro charta"
|
703
816
|
composition = ParseComposition.from_string(string)
|
704
817
|
specify { expect(composition.source).to eq string }
|
705
|
-
specify { expect(composition.substances.size).to eq
|
818
|
+
specify { expect(composition.substances.size).to eq 1 }
|
706
819
|
specify { expect(composition.substances.first.name).to eq 'Absinthii Herba' }
|
707
820
|
end
|
708
821
|
|
@@ -757,7 +870,7 @@ describe ParseComposition do
|
|
757
870
|
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.'
|
758
871
|
composition = ParseComposition.from_string(string)
|
759
872
|
specify { expect(composition.source).to eq string }
|
760
|
-
specify { expect(composition.substances.size).to eq
|
873
|
+
specify { expect(composition.substances.size).to eq 7 }
|
761
874
|
e104 = composition.substances.find{ |x| x.name.eql?('E 104') }
|
762
875
|
|
763
876
|
specify { expect(e104.name).to eq 'E 104' }
|
@@ -773,9 +886,6 @@ describe ParseComposition do
|
|
773
886
|
specify { expect(composition.substances.last.name).to eq 'E 171' }
|
774
887
|
end
|
775
888
|
|
776
|
-
|
777
|
-
if RunMostImportantParserTests
|
778
|
-
|
779
889
|
context "should parse a Praeparatio with a label/galenic form?" do
|
780
890
|
string = "Praeparatio cryodesiccata: pollinis allergeni extractum 25'000 U.: urtica dioica"
|
781
891
|
composition = ParseComposition.from_string(string)
|
@@ -851,7 +961,7 @@ Corresp. 5190 kJ pro 1 l."
|
|
851
961
|
composition = ParseComposition.from_string(line_1)
|
852
962
|
|
853
963
|
composition = ParseComposition.from_string(line_1)
|
854
|
-
specify { expect(composition.substances.size).to eq 3}
|
964
|
+
specify { expect(composition.substances.size).to eq 3 }
|
855
965
|
specify { expect(composition.label).to eq 'I' }
|
856
966
|
specify { expect(composition.label_description).to eq 'Glucoselösung' }
|
857
967
|
dihydricum = composition.substances.find{ |x| /dihydricum/i.match(x.name) }
|
@@ -890,7 +1000,7 @@ Corresp. 5190 kJ pro 1 l."
|
|
890
1000
|
context "should return correct substance ut (IKSNR 44744)" do
|
891
1001
|
string = "zuclopenthixolum 2 mg ut zuclopenthixoli dihydrochloridum, excipiens pro compresso obducto."
|
892
1002
|
composition = ParseComposition.from_string(string)
|
893
|
-
specify { expect(composition.substances.size).to eq
|
1003
|
+
specify { expect(composition.substances.size).to eq 1}
|
894
1004
|
specify { expect(composition.substances.first.name).to eq 'Zuclopenthixolum' }
|
895
1005
|
specify { expect(composition.substances.first.qty).to eq 2.0}
|
896
1006
|
specify { expect(composition.substances.first.salts.size).to eq 1}
|
@@ -937,7 +1047,7 @@ Corresp. 5190 kJ pro 1 l."
|
|
937
1047
|
context "should return correct substance for 'E 120'" do
|
938
1048
|
string = "E 120"
|
939
1049
|
composition = ParseComposition.from_string(string)
|
940
|
-
|
1050
|
+
substance = composition.substances.first
|
941
1051
|
specify { expect(substance.name).to eq string }
|
942
1052
|
specify { expect(substance.qty).to eq nil }
|
943
1053
|
specify { expect(substance.unit).to eq nil }
|
@@ -961,21 +1071,19 @@ Corresp. 5190 kJ pro 1 l."
|
|
961
1071
|
specify { expect(substance.unit).to eq 'µg' }
|
962
1072
|
end
|
963
1073
|
|
964
|
-
|
965
|
-
|
966
|
-
|
967
|
-
|
968
|
-
|
969
|
-
|
970
|
-
|
971
|
-
|
972
|
-
|
973
|
-
|
974
|
-
|
975
|
-
|
976
|
-
|
977
|
-
specify { expect(substance.unit).to eq 'mg' }
|
978
|
-
end
|
1074
|
+
context "should return correct substance Rote Filmtablett 54819 Beriplast" do
|
1075
|
+
string = "A) Rote Filmtablette: estradiolum 1 mg ut estradiolum hemihydricum, excipiens pro compresso obducto"
|
1076
|
+
string = "estradiolum 1 mg ut estradiolum hemihydricum, excipiens pro compresso obducto"
|
1077
|
+
composition = ParseComposition.from_string(string)
|
1078
|
+
substance = composition.substances.first
|
1079
|
+
specify { expect(composition.substances.size).to eq 1 }
|
1080
|
+
# specify { expect(composition.substances.last.name).to eq 'Obducto' }
|
1081
|
+
specify { expect(substance.name).to eq 'Estradiolum' }
|
1082
|
+
specify { expect(composition.substances.first.salts.first.name).to eq 'Estradiolum Hemihydricum' }
|
1083
|
+
specify { expect(substance.cdose.to_s).to eq "" }
|
1084
|
+
specify { expect(substance.qty).to eq 1.0}
|
1085
|
+
specify { expect(substance.unit).to eq 'mg' }
|
1086
|
+
end
|
979
1087
|
|
980
1088
|
context "should return correct composition for containing ut IKSNR 613" do
|
981
1089
|
string = 'aluminium ut aluminii hydroxidum hydricum ad adsorptionem'
|
@@ -1001,7 +1109,6 @@ Corresp. 5190 kJ pro 1 l."
|
|
1001
1109
|
specify { expect(haemagglutininum.unit).to eq 'µg' }
|
1002
1110
|
end
|
1003
1111
|
|
1004
|
-
if RunSpecificTests
|
1005
1112
|
context "should return correct composition for containing parenthesis in substance name abd 40 U. (e.g IKSNR 613)" do
|
1006
1113
|
string = 'virus poliomyelitis typus 1 inactivatum (D-Antigen) 40 U.'
|
1007
1114
|
composition = ParseComposition.from_string(string)
|
@@ -1171,9 +1278,9 @@ if RunSpecificTests
|
|
1171
1278
|
specify { expect(glucosum.name).to eq 'Glucosum Anhydricum' }
|
1172
1279
|
specify { expect(glucosum.qty.to_f).to eq 150.0}
|
1173
1280
|
specify { expect(glucosum.unit).to eq 'g/500 ml'}
|
1174
|
-
specify { expect(compositions[0].substances.size).to eq
|
1175
|
-
specify { expect(compositions[1].substances.size).to eq
|
1176
|
-
specify { expect(compositions[2].substances.size).to eq
|
1281
|
+
specify { expect(compositions[0].substances.size).to eq 3 }
|
1282
|
+
specify { expect(compositions[1].substances.size).to eq 5 } # should have glycerolum, natrii oleas, aqua
|
1283
|
+
specify { expect(compositions[2].substances.size).to eq 4 }
|
1177
1284
|
specify { expect(compositions[1].source).to eq line_2}
|
1178
1285
|
specify { expect(compositions[2].source).to eq line_3}
|
1179
1286
|
specify { expect(compositions[3].source).to eq line_4}
|
@@ -1209,7 +1316,7 @@ if RunSpecificTests
|
|
1209
1316
|
|
1210
1317
|
end
|
1211
1318
|
|
1212
|
-
|
1319
|
+
|
1213
1320
|
|
1214
1321
|
describe ParseUtil::HandleSwissmedicErrors do
|
1215
1322
|
context 'should handle fixes' do
|
@@ -1239,7 +1346,7 @@ describe ParseUtil::HandleSwissmedicErrors do
|
|
1239
1346
|
end
|
1240
1347
|
|
1241
1348
|
end
|
1242
|
-
end
|
1349
|
+
end
|
1243
1350
|
|
1244
1351
|
describe ParseComposition do
|
1245
1352
|
context "should parse a complex composition" do
|
@@ -1264,5 +1371,5 @@ describe ParseComposition do
|
|
1264
1371
|
}
|
1265
1372
|
at_exit { puts "Testing whether #{nr} composition lines can be parsed. Found #{@nrErrors} errors in #{(Time.now - start_time).to_i} seconds" }
|
1266
1373
|
|
1267
|
-
end
|
1268
|
-
end
|
1374
|
+
end
|
1375
|
+
end if RunAllCompositionsTests
|