oddb2xml 2.7.1 → 2.7.5

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