oddb2xml 2.7.1 → 2.7.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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