Skip to content

Commit

Permalink
Handle cryodesiccata and Telum
Browse files Browse the repository at this point in the history
  • Loading branch information
ngiger committed Apr 23, 2015
1 parent 38a7c37 commit 9a8d9cc
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 18 deletions.
30 changes: 18 additions & 12 deletions lib/oddb2xml/compositions_syntax.rb
Expand Up @@ -99,17 +99,18 @@ class CompositionParser < Parslet::Parser
str('U.I. hCG') |
str('U.I. hLH') |
str('U.I.') |
str('U./ml') |
str('U.') |
str('Mia.') |
str('Mrd.') |
str('% m/m') |
str('% m/m') |
str('%')
).as(:unit) }
rule(:qty_range) { (number >> space? >> (str(' - ') | str(' -') | str('-')) >> space? >> number).as(:qty_range) }
rule(:qty_range) { (number >> space? >> (str(' - ') | str(' -') | str('-') | str('±')) >> space? >> number).as(:qty_range) }
rule(:qty_unit) { dose_qty >> (space >> dose_unit).maybe }
rule(:dose_qty) { number.as(:qty) }
rule(:min_max) { (str('min.') | str('max.') | str('ca.') ) >> space? }
rule(:min_max) { str('mind.') | (str('min.') | str('max.') | str('ca.') ) >> space? } # TODO: swissmedic should replace mind. -> min.
# 75 U.I. hFSH et 75 U.I. hLH
rule(:dose_fsh) { qty_unit >> space >> str('et') >> space >> qty_unit.as(:dose_right) }
rule(:dose) { dose_fsh |
Expand Down Expand Up @@ -304,18 +305,22 @@ class CompositionParser < Parslet::Parser
# rule(:one_substance) { (substance_ut).as(:substance) } # >> str('.').maybe }
rule(:all_substances) { (one_substance >> substance_separator.maybe).repeat(1) }
rule(:composition) { all_substances }
rule(:long_labels) {
str('Praeparatio cryodesiccata:') |
str('Tela cum praeparatione (Panel ') >> digit >> str('):')
}
rule(:label_id) {
(
str('V') |
str('IV') |
str('III') |
str('II') |
str('I') |
str('A') |
str('B') |
str('C') |
str('D') |
str('E')
str('V') |
str('IV') |
str('III') |
str('II') |
str('I') |
str('A') |
str('B') |
str('C') |
str('D') |
str('E')
)
}
rule(:label_separator) { (str('):') | str(')')) }
Expand All @@ -325,6 +330,7 @@ class CompositionParser < Parslet::Parser
}
rule(:leading_label) { label_id >> label_separator >> (str(' et ') | str(', ') | str(' pro usu: ') | space) >>
label_id >> label_separator >> any.repeat(1) |
long_labels.as(:label) |
label
}
rule(:corresp_label) {
Expand Down
21 changes: 15 additions & 6 deletions spec/parslet_spec.rb
Expand Up @@ -31,7 +31,18 @@

describe ParseComposition do

context "should handle '150 U.I. hFSH et 150 U.I. hLH'" do
context "should handle '150 U.I. hFSH et 150 U.I. hLH'" do
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'
composition = ParseComposition.from_string(string)
specify { expect(composition.source).to eq string}
context "wrong name Benzocainum" do
specify { expect( composition.substances.first.name).to eq "Niccoli Sulfas" } # TODO: is not Benzocainum
end
specify { expect( composition.label).to eq "Tela cum praeparatione (Panel 1):" }
end

context "should handle '150 U.I. hFSH et 150 U.I. hLH'" do
string = 'Praeparatio cryodesiccata: menotropinum 150 U.I. hFSH et 150 U.I. hLH, gonadotropinum chorionicum 7-21 U.I. hCG, lactosum monohydricum, pro vitro'
composition = ParseComposition.from_string(string)
specify { expect(composition.source).to eq string}
Expand Down Expand Up @@ -69,7 +80,6 @@
string =
"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"
composition = ParseComposition.from_string(string)
pp composition; binding.pry
specify { expect(composition.substances.first.name).to eq 'Magnesii Aspartas Dihydricus' } # TODO:
specify { expect(composition.substances.first.chemical_substance.name).to eq 'Magnesium' } # TODO:
specify { expect(composition.substances.size).to eq 5 }
Expand All @@ -79,7 +89,6 @@
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"
composition = ParseComposition.from_string(string)
pp composition; binding.pry
specify { expect(composition.substances.first.name).to eq 'Magnesii Aspartas Dihydricus' }
specify { expect(composition.substances.first.chemical_substance.name).to eq 'Magnesium' }
specify { expect(composition.substances.size).to eq 5 }
Expand Down Expand Up @@ -510,7 +519,7 @@
specify { expect(composition.substances.first.name).to eq "Virus Rabiei Inactivatum (stamm: Wistar Rabies Pm/wi 38-1503-3m)" }
specify { expect(composition.substances.first.qty).to eq 2.5 }
specify { expect(composition.substances.first.unit).to eq 'U.I.' }
specify { expect(composition.substances.first.more_info).to eq "Praeparatio cryodesiccata" }
specify { expect(composition.label).to eq "Praeparatio cryodesiccata:" }
end

context "should return correct composition for containing Histamin Equivalent Pric. (e.g IKSNR 58566)" do
Expand Down Expand Up @@ -714,8 +723,8 @@
string = "Praeparatio cryodesiccata: pollinis allergeni extractum 25'000 U.: urtica dioica"
composition = ParseComposition.from_string(string)
substance = composition.substances.first
specify { expect(substance.name).to eq 'Pollinis Allergeni Extractum' }
specify { expect(substance.description).to eq 'Praeparatio cryodesiccata' }
# specify { expect(substance.name).to eq 'Urtica Dioica' } # TODO: is this okay?
specify { expect(composition.label).to eq 'Praeparatio cryodesiccata:' }
end

context "should return correct substance for equis F(ab')2" do
Expand Down

0 comments on commit 9a8d9cc

Please sign in to comment.