<< | Index | >>
Fixed an error in my code for the case where new products don't have an ATC-Code. Added lists of new IKSNR to reports. Reloaded the DB.
Running the import and checking with bin/admin shows, that the info for Xeljanz is correctly extracted from AIPS.xml.
2013-09-25 08:11:38 +0200: create_registration info #<struct Struct::SwissmedicMetaInfo iksnr="62630", atcCode="L04AA29", title="Xeljanz", authHolder="Pfizer AG", substances="Tofacitinibum">
2013-09-25 08:11:38 +0200: create_registration set company 'Pfizer AG'
2013-09-25 08:11:44 +0200: create_registration created atc L04AA29
2013-09-25 08:11:45 +0200: create_registration 62630 :!create,:!registration,62630..
2013-09-25 08:11:45 +0200: Check 1 atcCode not found
2013-09-25 08:11:45 +0200: Check 3 registration company Pfizer AG
2013-09-25 08:11:45 +0200: Check 4 registration iksnr 62630
2013-09-25 08:11:45 +0200: Check 5 registration name_base Xeljanz
ch.oddb> self.registration('34921').name_base
-> Furadantin retard
ch.oddb> registration('62630').class
-> NilClass
ch.oddb>
Code to insert was
def create_registration(info)
puts_sync "create_registration info #{info.inspect}"
# should probably be similar to method update_registration in src/plugin/swissmedic.rb
reg_ptr = Persistence::Pointer.new([:registration, info.iksnr]).creator
args = {
:ith_swissmedic => nil,
:production_science => nil,
:vaccine => nil,
:registration_date => nil,
:expiration_date => nil,
:renewal_flag => false,
:renewal_flag_swissmedic => false,
:inactive_date => nil,
:export_flag => nil,
}
company_args = { :name => info.authHolder, :business_area => 'ba_pharma' }
company = nil
if(company = @app.company_by_name(info.authHolder, 0.8))
puts_sync "create_registration set company '#{info.authHolder}'"
@app.update company.pointer, args
else
puts_sync "create_registration created company #{info.authHolder}"
company_ptr = Persistence::Pointer.new(:company).creator
company = @app.update company_ptr, company_args
end
args.store :company, company.pointer
registration = @app.update reg_ptr, args, :swissmedic_text_info
# create dummy sequence 00 TODO: remove this sequence when Packungen.xls contains this iksnr
# seq_ptr = Persistence::Pointer.new([:sequence, 0]).creator
seq_ptr = (registration.pointer + [:sequence, 0]).creator
unless seq_ptr
puts_sync "Failed to create"
exit 2
end
seq_args = {
:composition_text => nil,
:name_base => info.title,
:name_descr => nil,
:dose => nil,
:sequence_date => nil,
:export_flag => nil,
}
if info.atcCode and atc = @app.unique_atc_class(info.atcCode)
puts_sync "create_registration found atc #{info.atcCode}"
seq_args.store :atc_class, atc.code
else
puts_sync "create_registration created atc #{info.atcCode}"
seq_args.store :atc_class, info.atcCode
end
res = @app.update seq_ptr, seq_args, :swissmedic_text_info
puts_sync "create_registration #{info.iksnr} #{reg_ptr.inspect}"
if @app.atc_classes and info.atcCode and @app.atc_classes[info.atcCode]
puts_sync "Check 1 atcCode #{@app.atc_classes[info.atcCode].id}"
else
puts_sync "Check 1 atcCode not found"
end
# puts_sync "Check 2 registration substance_names #{@app.registration(info.iksnr).substance_names}"
if reg = @app.registration(info.iksnr) and not defined?(MiniTest)
puts_sync "Check 3 registration company #{reg.company}"
puts_sync "Check 4 registration iksnr #{reg.iksnr}"
puts_sync "Check 5 registration name_base #{reg.name_base}"
end
@new_iksnrs[info.iksnr] = info.title
end
The received E-Mail contained the list of the new iksnr and showed:
Create Iks-Numbers: 28 Aprokam® (63029) Desloratadin Spirig HC® (63030) Isoniazid USP (62438) Latuda (62785) Levocetirizin Spirig HC® (62920) Lorado® Pollen Sandoz (57515) Natrium-Bicarbonat B. Braun (33709) Nicorette® Spray zur Anwendung in der Mundhöhle (62566) Prick-Test (67769) Rebalance® Rx (62658) Simvastatin-Mepha® 20/40/80 (62612) STALORAL Pollen, Lösung zur sublingualen Anwendung (69870) Synalar®-N (29300) Torasemid Helvepharm (57487) Xeljanz (62630) Yellox (62786) Co-Losartan Spirig® (58458) Diencéphale/Zwischenhirn Sérocytol® (00828) Dr. Brand Salbe (17644) Infludo® Tropfen (12498) Magnesia S. Pellegrino® (10754) Memoria® Tropfen (62470) Mucoseptal® (42180) NovoNorm® (54371) Practomil® (31919) Sanukehl® Staph D5, Injektionslösung (72736) Vinceel, Spray zur Anwendung in der Mundhöhle (62583) Weleda Fieberbläschen-Salbe (52265) <..> New/Updates FI/PI from swissmedicinfo.ch Skipped FI/PI form swissmedicinfo.ch [] ISKNR : Fachinfo - DE - Xeljanz [] ISKNR : Fachinfo - FR - Xeljanz® [] ISKNR : Patinfo - DE - Xeljanz [] ISKNR : Patinfo - FR - Xeljanz® Invalid FI/PI from swissmedicXML Not found FI/PI in swissmedicXML
After double checking I could see that the data was correctly filled, except for SwissmedicMetaInfo iksnr="54371", atcCode=nil, title="NovoNorm®", authHolder="Novo Nordisk Pharma AG", substances=nil>
Banged my head, but I don't understand why I am unable to avoid this error. Finally found it. 54371 is an 'old' number. Therefore I looked it up in Packungen.xls and found that it is an "ad us. vet." product. I suspect that we have relicts of a sequence belonging to 54371 laying around in our database.
No. This is not the case. Simply there is a missmatch between Packungen.xls which has
54371 1 Clomicalm 5 ad us.vet., Tabletten Novartis Tiergesundheit AG QN06AA04 Tierarzneimittel 05.09.1997 05.09.1997 26.02.2018 012 30 Tablette(n) B clomipramini hydrochloridum clomipramini hydrochloridum 5 mg, aromatica, excipients per tablet. Serotonin Wiederaufnahmehemmer für Hunde
and Aips_download.xml, which has no occurrence of "Rimadyl", but has
<medicalInformation type="pi" version="4" lang="de" safetyRelevant="false">
<title>NovoNorm®</title>
<authHolder>Novo Nordisk Pharma AG</authHolder>
<authNrs>54371</authNrs>
Conclusion: MetaTag 54371 are edited by Hand and wrongly copied from the HTML, where they show up correctly '54571'.
Pushed commits:
Wanting to understand what is happening I tried to run the unit-tests for oddbapp.rb. They fail without giving the minitest out
The only output I see when running test/util/oddbapp.rb is like this
Eprocess: test/test_util/oddbapp.rb init system init system: 0.000481796 setup drb-delegation reset reset: 0.000515884
Adding a line in $stdout.puts "teardown name is #{name}"; $stdout.flush in the teardown showed that it happened again even when disabling the named test.
After adding a counter to get the number occurrences in App.initialize src/util/oddbapp.rb I see that it fails exactly after 200 occurrences. Therefore it probably hits a limitation counter.
When removing about a third of tests in test/test_util/oddbapp.rb. I get errors of the kind
123) Error:
TestOddbApp#test_delete_registration:
DRb::DRbConnError: drbssl://localhost:9997 - #<Errno::ECONNREFUSED: Connection refused - connect(2)>
/home/niklaus/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/drb/drb.rb:736:in `rescue in block in open'
/home/niklaus/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/drb/drb.rb:730:in `block in open'
/home/niklaus/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/drb/drb.rb:729:in `each'
/home/niklaus/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/drb/drb.rb:729:in `open'
/home/niklaus/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/drb/drb.rb:1191:in `initialize'
/home/niklaus/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/drb/drb.rb:1171:in `new'
/home/niklaus/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/drb/drb.rb:1171:in `open'
/home/niklaus/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/drb/drb.rb:1087:in `block in method_missing'
/home/niklaus/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/drb/drb.rb:1105:in `with_friend'
/home/niklaus/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/drb/drb.rb:1086:in `method_missing'
/home/niklaus/.rvm/gems/ruby-1.9.3-p448/gems/sbsm-1.2.3/lib/sbsm/drb.rb:17:in `respond_to?'
/home/niklaus/.rvm/gems/ruby-1.9.3-p448/gems/flexmock-1.3.2/lib/flexmock/partial_mock.rb:265:in `create_alias_for_existing_method'
/home/niklaus/.rvm/gems/ruby-1.9.3-p448/gems/flexmock-1.3.2/lib/flexmock/partial_mock.rb:245:in `stow_existing_definition'
/home/niklaus/.rvm/gems/ruby-1.9.3-p448/gems/flexmock-1.3.2/lib/flexmock/partial_mock.rb:99:in `add_mock_method'
/home/niklaus/.rvm/gems/ruby-1.9.3-p448/gems/flexmock-1.3.2/lib/flexmock/partial_mock.rb:48:in `initialize'
/home/niklaus/.rvm/gems/ruby-1.9.3-p448/gems/flexmock-1.3.2/lib/flexmock/mock_container.rb:271:in `new'
/home/niklaus/.rvm/gems/ruby-1.9.3-p448/gems/flexmock-1.3.2/lib/flexmock/mock_container.rb:271:in `make_partial_proxy'
/home/niklaus/.rvm/gems/ruby-1.9.3-p448/gems/flexmock-1.3.2/lib/flexmock/mock_container.rb:153:in `flexmock'
test/test_util/oddbapp.rb:209:in `setup'
Now I add a call to pry in ~/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/test/unit.rb at line 167 (before RaiseException) in non_options, then the unit tests run and inspecting the _run variable of the pry debugger I see the cause. See Attach:debug.txt.
Opened an issue for this problem. See https://github.com/jimweirich/flexmock/issues/16. The problem is not present with Ruby 2.0.0
Worked one hour or so on commit Fixes some failure and accelerating the Unit-test. Introducing some small changes (sleeping only) in ext/meddata/src/session.rb brings the time needed to run its corresponding unit test down from 200 seconds to 2!