oddb2xml 2.7.1 → 2.7.2

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