From 42a03a32845c469b6a5c725a173ee9281aa6a241 Mon Sep 17 00:00:00 2001 From: Niklaus Giger Date: Wed, 19 Feb 2014 14:01:22 +0100 Subject: [PATCH] Updated medical_product with dummy registration. Signed-off-by: Niklaus Giger --- etc/index_definitions.yaml | 32 ++++++++++- src/model/epha_interaction.rb | 1 - src/model/medical_product.rb | 8 +-- src/plugin/medical_products.rb | 77 ++++++++++++++++++++++++++- src/util/oddbapp.rb | 50 +++++++++++++++-- test/data/medical_products/de/Sinovial_DE.xml | 2 +- test/test_util/updater.rb | 35 ++++++++++++ 7 files changed, 194 insertions(+), 11 deletions(-) diff --git a/etc/index_definitions.yaml b/etc/index_definitions.yaml index b90202c..d9bf79b 100644 --- a/etc/index_definitions.yaml +++ b/etc/index_definitions.yaml @@ -358,8 +358,38 @@ fulltext: false index_name: 'oddb_package_name_with_size_company_name_ean13_fi' origin_klass: 'ODDB::Package' target_klass: 'ODDB::Package' -resolve_search_term: 'name_with_size_company_name_and_ean13' resolve_target: '' resolve_origin: '' init_source: 'self.active_packages_has_fachinfo' fulltext: false +--- !ruby/object:ODBA::IndexDefinition +index_name: 'epha_interaction_index' +origin_klass: 'ODDB::EphaInteraction' +target_klass: 'ODDB::EphaInteraction' +resolve_search_term: 'search_text' +resolve_target: '' +resolve_origin: '' +dictionary: 'simple' +init_source: '@epha_interactions.effect' +fulltext: true +--- !ruby/object:ODBA::IndexDefinition +index_name: 'medical_product_index' +origin_klass: 'ODDB::MedicalProduct' +target_klass: 'ODDB::MedicalProduct' +resolve_search_term: 'search_text' +resolve_target: '' +resolve_origin: '' +dictionary: 'simple' +init_source: 'self.medical_product.name' +fulltext: true + +#--- !ruby/object:ODBA::IndexDefinition +#index_name: 'indication_index_atc_de' +#origin_klass: 'ODDB::Indication' +#target_klass: 'ODDB::AtcClass' +#resolve_search_term: 'search_text(:de)' +#resolve_target: 'atc_classes' +#resolve_origin: 'sequences.collect { |seq| seq.indication }.flatten.uniq' +#dictionary: 'default_german' +#init_source: '@atc_classes.values' +#fulltext: true diff --git a/src/model/epha_interaction.rb b/src/model/epha_interaction.rb index eb37bc3..234111e 100644 --- a/src/model/epha_interaction.rb +++ b/src/model/epha_interaction.rb @@ -1,6 +1,5 @@ #!/usr/bin/env ruby # encoding: utf-8 -2 require 'util/persistence' require 'util/searchterms' require 'util/language' diff --git a/src/model/medical_product.rb b/src/model/medical_product.rb index 8f52681..35a839a 100644 --- a/src/model/medical_product.rb +++ b/src/model/medical_product.rb @@ -1,6 +1,5 @@ #!/usr/bin/env ruby # encoding: utf-8 -2 require 'util/persistence' require 'util/searchterms' require 'util/language' @@ -8,10 +7,11 @@ require 'util/language' module ODDB class MedicalProduct include ODBA::Persistable + include Persistence attr_accessor :name, :ean13s, :chapters def initialize - @name = name super + @name = name end def init(app) @pointer.append(@oid) @@ -19,8 +19,8 @@ module ODDB def search_terms terms = [ @atc_code, @ean13, - @name_base, @chapters, - ] + @name_base, @chapters.flatten, + ].flatten ODDB.search_terms(terms) end def search_text diff --git a/src/plugin/medical_products.rb b/src/plugin/medical_products.rb index 36d4577..64e6fb6 100644 --- a/src/plugin/medical_products.rb +++ b/src/plugin/medical_products.rb @@ -12,6 +12,7 @@ module ODDB class MedicalProductPlugin < Plugin + @@errors = [] ChapterDef = { 'de' => { 'name' => /^Name\s+des\s+Präparates$/u, # 1 @@ -35,6 +36,7 @@ 'registration_owner' => /^Zulassungsinhaberin($|\s*\(\s*Firma\s+und\s+Sitz\s+gemäss\s*Handelsregisterauszug\s*\))/u, # 19 'date' => /^Stand\s+der\s+Information$/iu, # 20 'fabrication' => /^Herstellerin$/u, + 'company' => /^Vertriebsfirma$/u, }, 'fr' => { 'name' => /^Nom$/u, # 1 @@ -58,17 +60,67 @@ 'registration_owner' => /^Titulaire\s+de\s+l'autorisation$/u, # 19 'date' => /^Mise\s+.\s+jour$|^Etat\s+de\s+l'information/iu, # 20 'fabrication' => /^Fabricant$/u, + 'company' => /^Vertriebsfirma$/u, } } def initialize(app, opts={}) super(app) @options = opts + @@errors = [] end def report - "Read Medical Products: #{@app.medical_products.length}\n" + msg = "Read Medical Products: #{@app.medical_products.length}\n\n" + @@errors.each{ |error| msg += error + "\n" } + msg end + def create_sequence_and_package_if_necessary(number, company, name, packNr) + # similar to update_package in src/plugin/swissmedic.rb + unless number.size == 7 + msg = "File #{file} does not contain a valid 7 digit number for the registration (is #{number.inspect})" + @@errors << msg + $stdout.puts "#{Time.now}: #{msg}"; $stdout.flush + return + end + unless packNr.size == 3 + msg = "File #{file} does not contain a valid 3 digit number for the package (is #{number.inspect})" + @@errors << msg + $stdout.puts "#{Time.now}: #{msg}"; $stdout.flush + return + end + @app.create_registration(number) + registration = @app.registration(number) + if registration == nil or registration.packages == nil + $stdout.puts "Could not find a registration for #{number} #{registration.inspect}" + return + end + @app.update(registration.pointer, {:company => company} , :medical_products) + sequence = registration.create_sequence('00') unless registration.sequence('00') + sequence = registration.sequence('00') + seq_args = { + :composition_text => nil, + :name_base => name, + :name_descr => nil, + :dose => nil, + :sequence_date => nil, + :export_flag => nil, + } + package = sequence.package(packNr) + package = sequence.create_package(packNr) unless package + part = package.create_part unless package.parts and package.parts.size > 0 + seq_args.store :packages, sequence.packages + msg = "#{__FILE__} #{__LINE__}: created #{company} nr #{number} pack #{packNr} name: #{name}" + @@errors << msg + $stdout.puts "#{Time.now}: #{msg}"; $stdout.flush + res = @app.update(sequence.pointer, seq_args, :medical_products) + # package.odba_store + # sequence.odba_store + # part.odba_store + registration.odba_store + sequence.fix_pointers + end + def update(options = {:files => ['*.docx'], :lang => 'de'}) require 'ydocx/templates/fachinfo' options[:lang] = 'de' unless options[:lang] @@ -80,6 +132,7 @@ files = (Dir.glob(param) + Dir.glob(File.join(data_dir, param))).collect{ |file| File.expand_path(file) }.uniq files.each { |file| + $stdout.puts "#{Time.now}: file is #{file}" ; $stdout.flush doc = YDocx::Document.open(file) xml_file = file.sub('.docx', '.xml') @@ -108,6 +161,28 @@ } end } + unless ean13s.size > 0 + msg = "File #{file} does not contain a chapter Packages with an ean13 inside" + @@errors << msg + $stdout.puts "#{Time.now}: #{msg}"; $stdout.flush + next + end + doc_xml.xpath('//chapters/chapter').each{ + |x| + next if x.xpath('heading').size == 0; + puts "\n\n"+x.xpath('heading').text; + puts x.xpath('paragraph').text} if false + company = chapters['company'] + idx = company.index(/,|\n/) + company = company[0..idx-1] + ean13s.each{ + |ean| + number = ean[2..2+6] # 7 digits + packNr = ean[9..11] # 3 digits + create_sequence_and_package_if_necessary(number, company, name, packNr) + } + fachinfo = @app.create_fachinfo + # fachinfo.indication = chapters['indication'] medical_product = @app.create_medical_product(name) medical_product.ean13s = ean13s medical_product.chapters = chapters diff --git a/src/util/oddbapp.rb b/src/util/oddbapp.rb index 55511ab..bedadaa 100644 --- a/src/util/oddbapp.rb +++ b/src/util/oddbapp.rb @@ -207,6 +207,7 @@ class OddbPrevalence } end def atcless_sequences + $stdout.puts "#{__FILE__} #{__LINE__} retrieve_from_index" ODBA.cache.retrieve_from_index('atcless', 'true') end def atc_class(code) @@ -650,6 +651,15 @@ class OddbPrevalence def medical_product_count @medical_products.size end + def search_by_medical_product_name(name) + result = ODDB::SearchResult.new + result.search_type = :medical_product + result.atc_classes = @medical_products.find_all{ |product| product if(product.name.match(/#{name}/i)) } + result + end + def get_all_medical_product_names + return @medical_products.inject([]){ |items, product| items << product } + end def hospital(ean13) @hospitals[ean13] end @@ -724,6 +734,7 @@ class OddbPrevalence if(lang.to_s != "fr") lang = "de" end + $stdout.puts "#{__FILE__} #{__LINE__} retrieve_from_index" ODBA.cache.retrieve_from_index("fachinfo_name_#{lang}", name) end @@ -886,6 +897,7 @@ class OddbPrevalence if lang.to_s != 'fr' lang = 'de' end + $stdout.puts "#{__FILE__} #{__LINE__} retrieve_from_index" ODBA.cache.retrieve_from_index("analysis_index_#{lang}", key) end def search_analysis_alphabetical(query, lang) @@ -893,10 +905,12 @@ class OddbPrevalence lang = 'de' end index_name = "analysis_alphabetical_index_#{lang}" + $stdout.puts "#{__FILE__} #{__LINE__} retrieve_from_index" ODBA.cache.retrieve_from_index(index_name, query) end @@iks_or_ean = /(?:\d{4})?(\d{5})(?:\d{4})?/u def search_oddb(query, lang) + $stdout.puts "search_oddb #{lang}: #{query} "; $stdout.flush # current search_order: # 1. atcless # 2. iksnr or ean13 @@ -966,7 +980,7 @@ class OddbPrevalence end # indication if(atcs.empty?) - atcs = search_by_indication(key) + atcs = search_by_indication(key, lang) result.search_type = :indication end # sequence @@ -983,6 +997,11 @@ class OddbPrevalence if(result.atc_classes.empty?) result = search_by_unwanted_effect(key, lang) end + # medical products by name + if(result.atc_classes.empty?) + result = search_by_medical_product_name(key) + end + $stdout.puts "search_oddb #{lang}: result #{result.inspect} #{result.search_type} #{atcs.inspect}"; $stdout.flush result end def search_btm(query='') @@ -1008,18 +1027,25 @@ class OddbPrevalence result end def search_by_atc(key) + $stdout.puts "#{__FILE__} #{__LINE__} retrieve_from_index" ODBA.cache.retrieve_from_index('atc_index', key.dup) end def search_by_company(key) result = ODDB::SearchResult.new result.error_limit = RESULT_SIZE_LIMIT - atcs = ODBA.cache.retrieve_from_index('atc_index_company', key.dup, result) + $stdout.puts "#{__FILE__} #{__LINE__} retrieve_from_index" + atcs = ODBA.cache.retrieve_from_index('atc_index_company', key.dup, result) filtered = atcs.collect { |atc| atc.company_filter_search(key.dup) } filtered.flatten.compact.uniq end - def search_by_indication(key) + def search_by_indication(key, lang='de') + # indication_index_atc_de + pattern = key.gsub(/[^A-z0-9]/, '.') + $stdout.puts "search_by_indication #{lang} #{key} #{pattern}" + return ODBA.cache.retrieve_from_index("indication_index_atc_#{lang}", pattern) + pattern = key.gsub(/[^A-z0-9]/, '.') atcs = [] indications.map do |indication| @@ -1030,6 +1056,7 @@ class OddbPrevalence atcs.uniq end def search_by_sequence(key, result=nil) + $stdout.puts "#{__FILE__} #{__LINE__} retrieve_from_index" ODBA.cache.retrieve_from_index('sequence_index_atc', key.dup, result) end def search_by_interaction(key, lang) @@ -1038,6 +1065,7 @@ class OddbPrevalence if(lang.to_s != "fr") lang = "de" end + $stdout.puts "#{__FILE__} #{__LINE__} retrieve_from_index" sequences = ODBA.cache.retrieve_from_index("interactions_index_#{lang}", key, result) key = key.downcase @@ -1050,6 +1078,7 @@ class OddbPrevalence _search_exact_classified_result(sequences, :interaction, result) end def search_by_substance(key) + $stdout.puts "#{__FILE__} #{__LINE__} retrieve_from_index" ODBA.cache.retrieve_from_index('substance_index_atc', key.dup) end def search_by_unwanted_effect(key, lang) @@ -1057,14 +1086,17 @@ class OddbPrevalence if(lang.to_s != "fr") lang = "de" end + $stdout.puts "#{__FILE__} #{__LINE__} retrieve_from_index" sequences = ODBA.cache.retrieve_from_index("unwanted_effects_index_#{lang}", key, result) _search_exact_classified_result(sequences, :unwanted_effect, result) end def search_doctors(key) + $stdout.puts "#{__FILE__} #{__LINE__} retrieve_from_index" ODBA.cache.retrieve_from_index("doctor_index", key) end def search_companies(key) + $stdout.puts "#{__FILE__} #{__LINE__} retrieve_from_index" ODBA.cache.retrieve_from_index("company_index", key) end def search_exact_company(query) @@ -1085,12 +1117,15 @@ class OddbPrevalence lang = "de" end index_name = "narcotics_#{lang}" + $stdout.puts "#{__FILE__} #{__LINE__} retrieve_from_index" ODBA.cache.retrieve_from_index(index_name, query) end def search_patinfos(query) + $stdout.puts "#{__FILE__} #{__LINE__} retrieve_from_index" ODBA.cache.retrieve_from_index('sequence_patinfos', query) end def search_vaccines(query) + $stdout.puts "#{__FILE__} #{__LINE__} retrieve_from_index" ODBA.cache.retrieve_from_index('sequence_vaccine', query) end def search_exact_sequence(query) @@ -1098,6 +1133,7 @@ class OddbPrevalence _search_exact_classified_result(sequences, :sequence) end def search_exact_substance(query) + $stdout.puts "#{__FILE__} #{__LINE__} retrieve_from_index" sequences = ODBA.cache.\ retrieve_from_index('substance_index_sequence', query) _search_exact_classified_result(sequences, :substance) @@ -1123,18 +1159,23 @@ class OddbPrevalence result end def search_epha_interactions(key) + $stdout.puts "#{__FILE__} #{__LINE__} retrieve_from_index" ODBA.cache.retrieve_from_index("epha_interaction_index", key) end def search_medical_products(key) + $stdout.puts "#{__FILE__} #{__LINE__} retrieve_from_index" ODBA.cache.retrieve_from_index("medical_product_index", key) end def search_hospitals(key) + $stdout.puts "#{__FILE__} #{__LINE__} retrieve_from_index" ODBA.cache.retrieve_from_index("hospital_index", key) end def search_indications(query) + $stdout.puts "#{__FILE__} #{__LINE__} retrieve_from_index" ODBA.cache.retrieve_from_index("indication_index", query) end def search_interactions(query) + $stdout.puts "#{__FILE__} #{__LINE__} retrieve_from_index" result = ODBA.cache.retrieve_from_index("sequence_index_substance", query) if(subs = substance(query, false)) result.unshift(subs) @@ -1146,12 +1187,14 @@ class OddbPrevalence end def search_sequences(query, chk_all_words=true) index = (chk_all_words) ? 'sequence_index' : 'sequence_index_exact' + $stdout.puts "#{__FILE__} #{__LINE__} retrieve_from_index #{index}" ODBA.cache.retrieve_from_index(index, query) end def search_single_substance(key) result = ODDB::SearchResult.new result.exact = true key = ODDB.search_term(key) + $stdout.puts "#{__FILE__} #{__LINE__} retrieve_from_index" ODBA.cache.retrieve_from_index("substance_index", key, result).find { |sub| sub.same_as? key } @@ -1252,6 +1295,7 @@ class OddbPrevalence parts = ODDB::Text::Soundex.prepare(name).split(/\s+/u) soundex = ODDB::Text::Soundex.soundex(parts) key = soundex.join(' ') + $stdout.puts "#{__FILE__} #{__LINE__} retrieve_from_index" ODBA.cache.retrieve_from_index("substance_soundex_index", key) end def sorted_fachinfos diff --git a/test/data/medical_products/de/Sinovial_DE.xml b/test/data/medical_products/de/Sinovial_DE.xml index f540d58..417485c 100644 --- a/test/data/medical_products/de/Sinovial_DE.xml +++ b/test/data/medical_products/de/Sinovial_DE.xml @@ -1 +1 @@ -Sinovial® HighVisc 1,6%

  

IBSAMedizinprodukt
Zusammensetzung1 vorgefüllte 2,25 ml-Einweg-Fertigspritze aus Glas enthält: 32 mg Hyaluronsäure-Natriumsalz in 2 ml gepufferter physiologischer Lösung.Der Inhalt der Spritzen ist steril und pyrogenfrei.Indikationen/AnwendungsmöglichkeitenSchmerzen oder eingeschränkte Beweglichkeit bei degenerativen oder traumatisch bedingten Erkrankungen oder Gelenksveränderungen.Sinovial HighVisc eignet sich als Gelenkflüssigkeitsersatz für die Wiederherstellung der physiologischen und rheologischen Bedingungen arthrotischer Gelenke.Dosierung/AnwendungSinovial HighVisc sollte in Abständen von einer Woche insgesamt 3 mal injiziert werden. Sofern erforderlich können weitere Injektionen vorgenommen werden. Die Zweckmässigkeit und die Häufigkeit, mit der der Behandlungszyklus wiederholt werden soll, müssen vom behandelnden Arzt für jeden Patienten individuell bewertet werden, wobei das Nutzen-Risikoverhältnis der Behandlung jedesmal abgewogen werden sollte.Ein allenfalls vorhandener Gelenkerguss ist vor der Injektion von Sinovial HighVisc abzusaugen.Der mitgelieferte Halter ist so auf den Spritzenanschlussring anzubringen, dass er festsitzt.Bei der Entfernung der Spritzenkappe speziell darauf achten, die Öffnung der Einwegspritze nicht zu berühren.Eine Nadel mit geeigneter Kanülengrösse zwischen 18 und 22 G verwenden. Die Nadel fest in den Luer-Gewindeanschluss der Einwegspritze schrauben, um eine dichte Verbindung sicherzustellen und damit ein Austreten von Flüssigkeit zu verhindern.Sinovial HighVisc bei Raumtemperatur und unter strikter Wahrung von Asepsis injizieren. Sinovial HighVisc ist nur in den Gelenkspalt zu injizieren.Die intraartikuläre Injektion darf nur von einem Arzt vorgenommen werden.KontraindikationenSinovial HighVisc darf nicht in ein infiziertes oder stark entzündetes Gelenk injiziert oder bei Patienten mit einer Hauterkrankung oder einer Infektion im Bereich der Injektionsstelle angewendet werden.Warnhinweise und VorsichtsmassnahmenDie Injektionsstelle muss in einem Bereich gesunder Haut liegen.Nicht intravaskulär injizieren, nicht ausserhalb des Gelenkspaltes injizieren, nicht ins Synovialgewebe oder in die Gelenkkapsel injizieren.Bei einem schwerwiegenden intraartikulären Erguss sollte Sinovial HighVisc nicht angewendet werden.Nach der intraartikulären Injektion sollte dem Patienten empfohlen werden, jegliche körperliche Anstrengung zu unterlassen und seine normalen Aktivitäten erst nach einigen Tagen wieder aufzunehmen.Sinovial HighVisc sollte nicht mit Desinfektionsmitteln wie quartäre Ammoniumverbindungen oder Chlorhexidin vermischt werden, da die Hyaluronsäure in der Lösung präzipitieren könnte.InteraktionenBis heute sind keine Interaktionen von Sinovial HighVisc mit anderen Arzneimitteln bekannt.Unerwünschte WirkungenSinovial HighVisc kann lokal zu unerwünschten Wirkungen führen. Bei der Anwendung von Sinovial HighVisc können an der Einstichstelle Begleiterscheinungen wie Schmerzen, Hitzegefühl, Rötungen oder Schwellungen auftreten. Solche Begleiterscheinungen lassen sich durch Auflegen eines Eisbeutels auf das behandelte Gelenk mildern. Sie klingen in der Regel nach kurzer Zeit wieder ab.Der Arzt sollte sicher stellen, dass ihn seine Patienten über allfällig später auftretende unerwünschte Wirkungen informieren.Eigenschaften/WirkungenSinovial HighVisc ist eine gepufferte physiologische Lösung mit Hyaluronsäure-Natriumsalz, das ihr viscoelastische Eigenschaften verleiht.Sinovial HighVisc enthält 1,6% hochgereinigtes Hyaluronsäure-Natriumsalz mit einem Molekulargewicht zwischen 800 und 1’200 kDalton.Seine anderen Bestandteile sind Natriumchlorid, Natriumphosphat und Wasser für Injektionszwecke.Hyaluronsäure-Natriumsalz (Hyaluronan*) besteht aus sich wiederholenden Ketten von Disaccharid-Einheiten aus N-Acetylglucosamin und Natriumglucuronat. Es ist ein wesentlicher Bestandteil der Synovialflüssigkeit und verleiht dieser ihre viscoelastischen Eigenschaften.Indem Sinovial HighVisc die viscoelastischen Eigenschaften der Gelenkflüssigkeit wieder herstellt, reduziert es den Schmerz und verbessert die Beweglichkeit der Gelenke.Sinovial HighVisc wirkt nur in den Gelenken, in die es injiziert wird. Es entfaltet keinerlei systemische Wirkung. Das in Sinovial HighVisc enthaltene Hyaluronsäure-Natriumsalz wird fermentativ gewonnen und ist chemisch nicht modifiziert.Die Spritzen sind dampfsterilisiert.* Oft verwendete alternative Bezeichnung.Sonstige HinweiseDer Inhalt der vorgefüllten Spritze ist steril. Die Spritze ist in einem versiegelten Blister verpackt. Die äussere Spritzenoberfläche ist nicht steril.Sinovial HighVisc darf nur bis zu dem auf der Packung angegebenen Verfalldatum verwendet werden.Wenn die Packung bereits offen oder beschädigt ist, sollte Sinovial HighVisc nicht mehr angewendet werden.Nicht erneut sterilisieren. Der Inhalt einer Spritze ist nur zur einmaligen Anwendung bestimmt.Nicht wieder verwenden, um jegliche Kontaminationsgefahr zu vermeiden.Bei Raumtemperatur, aber auf jeden Fall unter 25 °C, sowie von Wärmequellen entfernt aufbewahren. Nicht einfrieren.Nach dem Öffnen muss Sinovial HighVisc sofort verwendet und nach Gebrauch entsorgt werden.Ausserhalb der Reichweite von Kindern aufbewahren.Das eventuelle Vorhandensein einer Luftblase beeinträchtigt keineswegs die Produkteeigenschaften.Darf nur gegen ärztliches Rezept abgegeben werden.Packungen7612291078458, Fertigspritze 2 ml7612291078472, 3 Fertigspritzen 2 mlHerstellerinIBSA Farmaceutici Italia Srl, Via Martiri di Cefalonia 2, I-26900 Lodi (LO).VertriebsfirmaIBSA Institut Biochimique SA, 6903 Lugano.Stand der InformationApril 2010.
+Sinovial® HighVisc 1,6%

  

IBSAMedizinprodukt
Zusammensetzung1 vorgefüllte 2,25 ml-Einweg-Fertigspritze aus Glas enthält: 32 mg Hyaluronsäure-Natriumsalz in 2 ml gepufferter physiologischer Lösung.Der Inhalt der Spritzen ist steril und pyrogenfrei.Indikationen/AnwendungsmöglichkeitenSchmerzen oder eingeschränkte Beweglichkeit bei degenerativen oder traumatisch bedingten Erkrankungen oder Gelenksveränderungen.Sinovial HighVisc eignet sich als Gelenkflüssigkeitsersatz für die Wiederherstellung der physiologischen und rheologischen Bedingungen arthrotischer Gelenke.Dosierung/AnwendungSinovial HighVisc sollte in Abständen von einer Woche insgesamt 3 mal injiziert werden. Sofern erforderlich können weitere Injektionen vorgenommen werden. Die Zweckmässigkeit und die Häufigkeit, mit der der Behandlungszyklus wiederholt werden soll, müssen vom behandelnden Arzt für jeden Patienten individuell bewertet werden, wobei das Nutzen-Risikoverhältnis der Behandlung jedesmal abgewogen werden sollte.Ein allenfalls vorhandener Gelenkerguss ist vor der Injektion von Sinovial HighVisc abzusaugen.Der mitgelieferte Halter ist so auf den Spritzenanschlussring anzubringen, dass er festsitzt.Bei der Entfernung der Spritzenkappe speziell darauf achten, die Öffnung der Einwegspritze nicht zu berühren.Eine Nadel mit geeigneter Kanülengrösse zwischen 18 und 22 G verwenden. Die Nadel fest in den Luer-Gewindeanschluss der Einwegspritze schrauben, um eine dichte Verbindung sicherzustellen und damit ein Austreten von Flüssigkeit zu verhindern.Sinovial HighVisc bei Raumtemperatur und unter strikter Wahrung von Asepsis injizieren. Sinovial HighVisc ist nur in den Gelenkspalt zu injizieren.Die intraartikuläre Injektion darf nur von einem Arzt vorgenommen werden.KontraindikationenSinovial HighVisc darf nicht in ein infiziertes oder stark entzündetes Gelenk injiziert oder bei Patienten mit einer Hauterkrankung oder einer Infektion im Bereich der Injektionsstelle angewendet werden.Warnhinweise und VorsichtsmassnahmenDie Injektionsstelle muss in einem Bereich gesunder Haut liegen.Nicht intravaskulär injizieren, nicht ausserhalb des Gelenkspaltes injizieren, nicht ins Synovialgewebe oder in die Gelenkkapsel injizieren.Bei einem schwerwiegenden intraartikulären Erguss sollte Sinovial HighVisc nicht angewendet werden.Nach der intraartikulären Injektion sollte dem Patienten empfohlen werden, jegliche körperliche Anstrengung zu unterlassen und seine normalen Aktivitäten erst nach einigen Tagen wieder aufzunehmen.Sinovial HighVisc sollte nicht mit Desinfektionsmitteln wie quartäre Ammoniumverbindungen oder Chlorhexidin vermischt werden, da die Hyaluronsäure in der Lösung präzipitieren könnte.InteraktionenBis heute sind keine Interaktionen von Sinovial HighVisc mit anderen Arzneimitteln bekannt.Unerwünschte WirkungenSinovial HighVisc kann lokal zu unerwünschten Wirkungen führen. Bei der Anwendung von Sinovial HighVisc können an der Einstichstelle Begleiterscheinungen wie Schmerzen, Hitzegefühl, Rötungen oder Schwellungen auftreten. Solche Begleiterscheinungen lassen sich durch Auflegen eines Eisbeutels auf das behandelte Gelenk mildern. Sie klingen in der Regel nach kurzer Zeit wieder ab.Der Arzt sollte sicher stellen, dass ihn seine Patienten über allfällig später auftretende unerwünschte Wirkungen informieren.Eigenschaften/WirkungenSinovial HighVisc ist eine gepufferte physiologische Lösung mit Hyaluronsäure-Natriumsalz, das ihr viscoelastische Eigenschaften verleiht.Sinovial HighVisc enthält 1,6% hochgereinigtes Hyaluronsäure-Natriumsalz mit einem Molekulargewicht zwischen 800 und 1’200 kDalton.Seine anderen Bestandteile sind Natriumchlorid, Natriumphosphat und Wasser für Injektionszwecke.Hyaluronsäure-Natriumsalz (Hyaluronan*) besteht aus sich wiederholenden Ketten von Disaccharid-Einheiten aus N-Acetylglucosamin und Natriumglucuronat. Es ist ein wesentlicher Bestandteil der Synovialflüssigkeit und verleiht dieser ihre viscoelastischen Eigenschaften.Indem Sinovial HighVisc die viscoelastischen Eigenschaften der Gelenkflüssigkeit wieder herstellt, reduziert es den Schmerz und verbessert die Beweglichkeit der Gelenke.Sinovial HighVisc wirkt nur in den Gelenken, in die es injiziert wird. Es entfaltet keinerlei systemische Wirkung. Das in Sinovial HighVisc enthaltene Hyaluronsäure-Natriumsalz wird fermentativ gewonnen und ist chemisch nicht modifiziert.Die Spritzen sind dampfsterilisiert.* Oft verwendete alternative Bezeichnung.Sonstige HinweiseDer Inhalt der vorgefüllten Spritze ist steril. Die Spritze ist in einem versiegelten Blister verpackt. Die äussere Spritzenoberfläche ist nicht steril.Sinovial HighVisc darf nur bis zu dem auf der Packung angegebenen Verfalldatum verwendet werden.Wenn die Packung bereits offen oder beschädigt ist, sollte Sinovial HighVisc nicht mehr angewendet werden.Nicht erneut sterilisieren. Der Inhalt einer Spritze ist nur zur einmaligen Anwendung bestimmt.Nicht wieder verwenden, um jegliche Kontaminationsgefahr zu vermeiden.Bei Raumtemperatur, aber auf jeden Fall unter 25 °C, sowie von Wärmequellen entfernt aufbewahren. Nicht einfrieren.Nach dem Öffnen muss Sinovial HighVisc sofort verwendet und nach Gebrauch entsorgt werden.Ausserhalb der Reichweite von Kindern aufbewahren.Das eventuelle Vorhandensein einer Luftblase beeinträchtigt keineswegs die Produkteeigenschaften.Darf nur gegen ärztliches Rezept abgegeben werden.Packungen7612291078458, Fertigspritze 2 ml7612291078472, 3 Fertigspritzen 2 mlHerstellerinIBSA Farmaceutici Italia Srl, Via Martiri di Cefalonia 2, I-26900 Lodi (LO).VertriebsfirmaIBSA Institut Biochimique SA, 6903 Lugano.Stand der InformationApril 2010.
diff --git a/test/test_util/updater.rb b/test/test_util/updater.rb index 1c01d43..8a7e24f 100644 --- a/test/test_util/updater.rb +++ b/test/test_util/updater.rb @@ -10,6 +10,8 @@ require 'minitest/autorun' require 'flexmock' require 'util/updater' require 'stub/odba' +require 'model/registration' +require 'model/sequence' require 'date' module ODDB module Doctors @@ -61,7 +63,38 @@ module ODDB epha_mock.should_receive(:odba_store) product_mock = FlexMock.new(@medical_products) product_mock.should_receive(:odba_store) + @fachinfo_mock = FlexMock.new(ODDB::Fachinfo) + @fachinfo_mock.should_receive(:indication=) + @part_mock = FlexMock.new(ODDB::Part) + @package_mock = FlexMock.new(ODDB::Package) + @package_mock.should_receive(:create_part).and_return(@part_mock) + @package_mock.should_receive(:parg).and_return(@part_mock) + @sequence_mock = FlexMock.new(ODDB::Sequence) + @sequence_mock.should_receive(:create_package).and_return(@package_mock) + @sequence_mock.should_receive(:package).and_return(@package_mock) + @sequence_mock.should_receive(:packages).and_return([@package_mock]) + @sequence_mock.should_receive(:pointer).and_return(@pointer) + @sequence_mock.should_receive(:fix_pointers) + @registration_mock = FlexMock.new(ODDB::Registration) + @registration_mock.should_receive(:packages).and_return([]) + @registration_mock.should_receive(:sequences).and_return([]) + @registration_mock.should_receive(:create_sequence).and_return(@sequence_mock) + @registration_mock.should_receive(:sequence).and_return(@sequence_mock) + @registration_mock.should_receive(:pointer).and_return(@pointer) + @registration_mock.should_receive(:odba_store) end + def create_registration(name) + @registration_mock + end + def registration(number) + @registration_mock + end + def sequence(number) + @sequence_mock + end + def create_fachinfo + @fachinfo_mock + end def odba_store end def create_epha_interaction(atc_code_self, atc_code_other) @@ -133,6 +166,7 @@ module ODDB klass.should_receive(:new).and_return(plugin) end end + if false def test_update_bsv_no_repeats today = Date.today() this_month = Date.new(today.year, today.month) @@ -592,6 +626,7 @@ module ODDB res = @plugin.update(options) assert_equal(1, @app.medical_products.size, 'We have 1 medical_product in Sinovial_DE.docx') end + end def test_update_medical_product_with_relative_wildcard options = {:files => [ '*.docx']} @plugin = ODDB::MedicalProductPlugin.new(@app) -- 1.8.5.3