<< | Index | >>
Test
# new algorithm puts "New algorithm" name = 'Iscador M 0,0001 mg, Injektionslösung, anthroposophisches Arzneimittel' #name = 'Helixor A 0,01 mg Injektionslösung, anthrop. Arzneimittel' parts = name.split(/\s*,(?!\d|[^(]+\))\s*/u) base = parts.shift descr = parts.join(', ') =begin descr = unless parts.empty? parts.pop else nil end ## some names have dosage data after the galenic form if /[\d\s][m]?[glL]\b/.match(descr) && parts.size > 1 descr = parts.join(', ') << ', ' << descr end =end parts = descr.split(/\s*,(?!\d|[^(]+\))\s*/u) gal = parts.first[/[^\d]{3,}/].strip print "name(Column C) = '", name, "'\n" print "base(:name_base, Product name) = '", base, "'\n" print "descr(:name_descr, Description) = '", descr, "'\n" print "galenic_form = '", gal, "'\n" puts # old algorithm puts "Old algorithm" name = 'Iscador M 0,0001 mg, Injektionslösung, anthroposophisches Arzneimittel' #name = 'Helixor A 0,01 mg Injektionslösung, anthrop. Arzneimittel' parts = name.split(/\s*,(?!\d|[^(]+\))\s*/u) descr = parts.pop if /[\d\s][m]?[glL]\b/.match(descr) && parts.size > 1 descr = parts.pop << ', ' << descr end base = parts.join(', ') base, descr = descr, nil if base.empty? parts = descr.split(/\s*,(?!\d|[^(]+\))\s*/u) gal = parts.first[/[^\d]{3,}/].strip print "name(Column C) = '", name, "'\n" print "base(:name_base, Product name) = '", base, "'\n" print "descr(:name_descr, Description) = '", descr, "'\n" print "galenic_form = '", gal, "'\n"
Result
New algorithm name(Column C) = 'Iscador M 0,0001 mg, Injektionslösung, anthroposophisches Arzneimittel' base(:name_base, Product name) = 'Iscador M 0,0001 mg' descr(:name_descr, Description) = 'Injektionslösung, anthroposophisches Arzneimittel' galenic_form = 'Injektionslösung' Old algorithm name(Column C) = 'Iscador M 0,0001 mg, Injektionslösung, anthroposophisches Arzneimittel' base(:name_base, Product name) = 'Iscador M 0,0001 mg, Injektionslösung' descr(:name_descr, Description) = 'anthroposophisches Arzneimittel' galenic_form = 'anthroposophisches Arzneimittel'
Note
Experiment (src/plugin/swissmedic.rb#update_compositions)
def update_sequence(registration, row, opts={:create_only => false})
seqnr = "%02i" % cell(row, column(:seqnr)).to_i
ptr = if(sequence = registration.sequence(seqnr))
return sequence if opts[:create_only]
sequence.pointer
else
(registration.pointer + [:sequence, seqnr]).creator
end
## some names use commas for dosage
parts = cell(row, column(:name_base)).split(/\s*,(?!\d|[^(]+\))\s*/u)
base = parts.shift
descr = parts.join(', ')
=begin
descr = unless parts.empty?
parts.pop
else
nil
end
## some names have dosage data after the galenic form
if /[\d\s][m]?[glL]\b/.match(descr) && parts.size > 1
descr = parts.join(', ') << ', ' << descr
end
=end
if ctext = cell(row, column(:composition))
ctext = ctext.gsub(/\r\n?/u, "\n")
end
...
Run
masa@masa ~/ywesee/oddb.org $ bin/admin ch.oddb> ODDB::SwissmedicPlugin.new(self).fix_packages({:fix_galenic_form => true})
Result
NoMethodError when fixing {:seqnr=>"01", :indication_sequence=>nil, :ikscat=>"B", :unit=>"Tablette(n)", :sequence_date=>Thu, 16 Nov 2006, :import_date=>Wed, 08 Jun 2011, :production_science=>"Synthetika human", :composition=> "ondansetronum 4 mg ut ondansetroni hydrochloridum dihydricum, vanillinum, color.: E 104, conserv.: E 200, excipiens pro compresso obducto.", :name_base=>"Ondansetron-Teva, 4mg, Filmtabletten", :substances=>"ondansetronum", :atc_class=>"A04AA01", :iksnr=>"57202", :expiry_date=>Tue, 15 Nov 2011, :index_therapeuticus=>"01.09.0.", :size=>"10", :ikscd=>"004", :registration_date=>Thu, 16 Nov 2006, :indication_registration=>"Antiemetikum", :company=>"Teva Pharma AG"} undefined method `strip' for nil:NilClass /home/masa/ywesee/oddb.org/src/plugin/swissmedic.rb:527:in `_update_galenic_form'
Note
Ondansetron-Teva, 4mg, Filmtabletten
Test
Result
name(Column C) = 'Iscador M 0,0001 mg, Injektionslösung, anthroposophisches Arzneimittel' base(:name_base, Product name) = 'Iscador M 0,0001 mg' descr(:name_descr, Description) = 'Injektionslösung, anthroposophisches Arzneimittel' galenic_form = 'Injektionslösung' name(Column C) = 'Helixor A 0,01 mg Injektionslösung, anthrop. Arzneimittel' base(:name_base, Product name) = 'Helixor A 0,01 mg Injektionslösung' descr(:name_descr, Description) = 'anthrop. Arzneimittel' galenic_form = 'anthrop. Arzneimittel' name(Column C) = 'Ondansetron-Teva, 4mg, Filmtabletten' base(:name_base, Product name) = 'Ondansetron-Teva, 4mg' descr(:name_descr, Description) = 'Filmtabletten' galenic_form = 'Filmtabletten'
Experiment (src/plugin/swissmedic.rb#update_sequence)
def update_sequence(registration, row, opts={:create_only => false}) seqnr = "%02i" % cell(row, column(:seqnr)).to_i ptr = if(sequence = registration.sequence(seqnr)) return sequence if opts[:create_only] sequence.pointer else (registration.pointer + [:sequence, seqnr]).creator end ## some names use commas for dosage parts = cell(row, column(:name_base)).split(/\s*,(?!\d|[^(]+\))\s*/u) base = parts.shift## some names have dosage data before the galenic form
# ex. 'Ondansetron-Teva, 4mg, Filmtabletten'
if /[\d\s][m]?[glL]\b/.match(parts.first)
base << ', ' << parts.shift unless parts.empty?
end
descr = parts.join(', ') unless parts.empty?
=begin descr = unless parts.empty? parts.pop else nil end ## some names have dosage data after the galenic form if /[\d\s][m]?[glL]\b/.match(descr) && parts.size > 1 descr = parts.join(', ') << ', ' << descr end =end if ctext = cell(row, column(:composition)) ctext = ctext.gsub(/\r\n?/u, "\n") end ...
src/plugin/swissmedic.rb#update_galenic_form
def _update_galenic_form(comp, lang, name) # remove counts and doses from the name - this is assuming name looks # (in the worst case) something like this: "10 Filmtabletten" # or: "Infusionsemulsion, 1875ml" parts = name.split(/\s*,(?!\d|[^(]+\))\s*/u) #name = parts.first[/[^\d]{3,}/].stripunless name = parts.first[/[^\d]{3,}/]
name = parts.last[/[^\d]{3,}/]
end
name.strip! if name
Run
masa@masa ~/ywesee/oddb.org $ bin/admin ch.oddb> ODDB::SwissmedicPlugin.new(self).fix_packages({:fix_galenic_form => true})
Result
Note
Commit
Experiment
ch.oddb> ODDB::Package.find_by_pharmacode('3767452').galenic_forms -> Heilmittel auf Grundlage anthroposophischer Erkenntnis ch.oddb> update(ODDB::Package.find_by_pharmacode('3767452').sequence.compositions[0].pointer, {:galenic_form => 'Tabletten'}, :swissmedic) -> Tabletten: Viscum Album (Pini) Recens 50 mg/ml
Result
Note
But!
Experiment
ch.oddb> update(ODDB::Package.find_by_pharmacode('3767452').sequence.compositions[0].pointer, {:galenic_form => 'anthrop. Arzneimittel'}, :swissmedic) -> Heilmittel auf Grundlage anthroposophischer Erkenntnis: Viscum Album (Pini) Recens 50 mg/ml
Result
Consideration
Check all the galenic group and galenic form
masa@masa ~/ywesee/oddb.org $ bin/admin ch.oddb> open("/home/masa/work/test.dat","w"){|f| galenic_groups.values.each_with_index{|gg,i| f.print "\n\n", i, ", ", gg, "(",gg.oid,")\n"; gg.each_galenic_form{|g| f.print "\t", g, "(", g.oid, "), "}}}
Result
Experiment
masa@masa ~/ywesee/oddb.org $ bin/admin ch.oddb> galenic_group(1).delete_galenic_form(278) -> Heilmittel auf Grundlage anthroposophischer Erkenntnis ch.oddb> ODDB::SwissmedicPlugin.new(self).fix_packages({:fix_galenic_form => true})
Commit