oddb2xml 2.0.6 → 2.0.7
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 +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
|