oddb.org 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gemtest +0 -0
- data/Guide.txt +23 -17
- data/{README → INSTALL_from_Source.txt} +64 -75
- data/Manifest.txt +110 -4
- data/README.txt +4 -2
- data/Rakefile +5 -0
- data/doc/favicon.ico +0 -0
- data/doc/index.rbx +15 -0
- data/doc/resources/anthroposophy/favicon.ico +0 -0
- data/doc/resources/anthroposophy/logo.png +0 -0
- data/doc/resources/atupri/logo.gif +0 -0
- data/doc/resources/desitin/logo.jpg +0 -0
- data/doc/resources/downloads/datadesc/analysis.csv.txt +57 -0
- data/doc/resources/downloads/datadesc/doctors.csv.txt +43 -0
- data/doc/resources/downloads/datadesc/doctors.yaml.txt +52 -0
- data/doc/resources/downloads/datadesc/fachinfo.yaml.txt +107 -0
- data/doc/resources/downloads/datadesc/generics.xls.txt +42 -0
- data/doc/resources/downloads/datadesc/index_therapeuticus.txt +38 -0
- data/doc/resources/downloads/datadesc/interactions.yaml.txt +78 -0
- data/doc/resources/downloads/datadesc/migel.csv.txt +84 -0
- data/doc/resources/downloads/datadesc/narcotics.csv.txt +49 -0
- data/doc/resources/downloads/datadesc/narcotics.yaml.txt +40 -0
- data/doc/resources/downloads/datadesc/oddb.csv.txt +98 -0
- data/doc/resources/downloads/datadesc/oddb.yaml.txt +255 -0
- data/doc/resources/downloads/datadesc/oddb2.csv.txt +94 -0
- data/doc/resources/downloads/datadesc/oddbdat.txt +228 -0
- data/doc/resources/downloads/datadesc/patents.xls.txt +29 -0
- data/doc/resources/downloads/datadesc/patinfo.yaml.txt +79 -0
- data/doc/resources/downloads/datadesc/price_history.csv.txt +43 -0
- data/doc/resources/downloads/datadesc/price_history.yaml.txt +55 -0
- data/doc/resources/downloads/datadesc/s31x.txt +40 -0
- data/doc/resources/downloads/datadesc/swissdrug-update.xls.txt +59 -0
- data/doc/resources/downloads/examples/Inderal.Preisvergleich.csv +19 -0
- data/doc/resources/downloads/examples/analysis.csv +35 -0
- data/doc/resources/downloads/examples/compendium_ch.oddb.org.firefox.epub +0 -0
- data/doc/resources/downloads/examples/compendium_ch.oddb.org.htc.prc +0 -0
- data/doc/resources/downloads/examples/compendium_ch.oddb.org.kindle.mobi +0 -0
- data/doc/resources/downloads/examples/compendium_ch.oddb.org.stanza.epub +0 -0
- data/doc/resources/downloads/examples/doctors.csv +13 -0
- data/doc/resources/downloads/examples/doctors.yaml +238 -0
- data/doc/resources/downloads/examples/fachinfo.yaml +1255 -0
- data/doc/resources/downloads/examples/fachinfos_de.pdf +51565 -0
- data/doc/resources/downloads/examples/fachinfos_fr.pdf +52072 -0
- data/doc/resources/downloads/examples/generics.xls +0 -0
- data/doc/resources/downloads/examples/index_therapeuticus.tar.gz +0 -0
- data/doc/resources/downloads/examples/interactions.yaml +161 -0
- data/doc/resources/downloads/examples/migel.csv +36 -0
- data/doc/resources/downloads/examples/narcotics.yaml +92 -0
- data/doc/resources/downloads/examples/oddb.csv +1378 -0
- data/doc/resources/downloads/examples/oddb.yaml +14976 -0
- data/doc/resources/downloads/examples/oddb2.csv +1566 -0
- data/doc/resources/downloads/examples/oddbdat.tar.gz +0 -0
- data/doc/resources/downloads/examples/patents.xls +0 -0
- data/doc/resources/downloads/examples/patinfo.yaml +2505 -0
- data/doc/resources/downloads/examples/price_history.csv +99 -0
- data/doc/resources/downloads/examples/price_history.yaml +431 -0
- data/doc/resources/downloads/examples/swissdrug-update.xls +0 -0
- data/doc/resources/errors/appdown.html +50 -0
- data/doc/resources/errors/logo.png +0 -0
- data/doc/resources/errors/logo_de.gif +0 -0
- data/doc/resources/gcc/banner.gif +0 -0
- data/doc/resources/gcc/logo.png +0 -0
- data/doc/resources/gcc/logo_de.gif +0 -0
- data/doc/resources/gcc/logo_doc.gif +0 -0
- data/doc/resources/gcc/logo_fr.gif +0 -0
- data/doc/resources/gcc/logo_rss.png +0 -0
- data/doc/resources/generika/favicon.ico +0 -0
- data/doc/resources/generika/logo.gif +0 -0
- data/doc/resources/generika/logo_de.gif +0 -0
- data/doc/resources/generika/logo_fr.gif +0 -0
- data/doc/resources/homeopathy/favicon.ico +0 -0
- data/doc/resources/homeopathy/logo.png +0 -0
- data/doc/resources/icon_twitter.gif +0 -0
- data/doc/resources/innova/logo.gif +0 -0
- data/doc/resources/innova/logo_de.gif +0 -0
- data/doc/resources/javascript/admin.js +14 -0
- data/doc/resources/javascript/autofill.js +21 -0
- data/doc/resources/javascript/bit.ly.js +29 -0
- data/doc/resources/javascript/company.js +22 -0
- data/doc/resources/javascript/dojo/Editor.js +219 -0
- data/doc/resources/javascript/dojo/HtmlEditorToolbar.html +163 -0
- data/doc/resources/javascript/dojo/sigma.gif +0 -0
- data/doc/resources/javascript/widget/SymbolPalette.js +162 -0
- data/doc/resources/javascript/widget/Tooltip.js +85 -0
- data/doc/resources/javascript/widget/__package__.js +2 -0
- data/doc/resources/livemarks16.png +0 -0
- data/doc/resources/mail.gif +0 -0
- data/doc/resources/mobile/logo.png +0 -0
- data/doc/resources/paypal_donate.gif +0 -0
- data/doc/resources/phyto-pharma/favicon.ico +0 -0
- data/doc/resources/phyto-pharma/logo.png +0 -0
- data/doc/resources/plugins/Generika.cc.gif +0 -0
- data/doc/resources/plugins/Generika.cc.html +34 -0
- data/doc/resources/plugins/Generika.cc.src +34 -0
- data/doc/resources/plugins/oddb.org.gif +0 -0
- data/doc/resources/plugins/oddb.org.html +34 -0
- data/doc/resources/plugins/oddb.org.src +34 -0
- data/doc/resources/print.css +33 -0
- data/doc/resources/provita/logo_de.gif +0 -0
- data/doc/resources/santesuisse/logo_de.gif +0 -0
- data/doc/resources/schoenenberger/logo_de.gif +0 -0
- data/doc/resources/swissmedic/logo.png +0 -0
- data/doc/resources/swissmedic/logo_de.gif +0 -0
- data/doc/resources/swissmedic/logo_doc.gif +0 -0
- data/doc/resources/swissmedic/logo_fr.gif +0 -0
- data/doc/resources/sympany/logo.gif +0 -0
- data/doc/robots.txt +29 -0
- data/ext/export/src/generics_xls.rb +29 -5
- data/ext/export/src/oddbdat.rb +1 -1
- data/ext/export/test/test_generics_xls.rb +216 -0
- data/ext/export/test/test_oddbdat.rb +880 -0
- data/lib/oddb.org.rb +1 -1
- data/src/model/package.rb +3 -2
- data/src/plugin/analysis.rb +2 -0
- data/src/plugin/bsv_xml.rb +1 -1
- data/src/plugin/hospitals.rb +1 -0
- data/src/plugin/oddbdat_export.rb +12 -2
- data/src/plugin/text_info.rb +16 -29
- data/src/util/exporter.rb +21 -1
- data/src/util/log.rb +3 -0
- data/src/util/oddbapp.rb +1 -1
- data/src/util/oddbconfig.rb +1 -1
- data/src/util/updater.rb +9 -1
- data/test/data/html/interaction/flockhart/prepared_table.asp +820 -0
- data/test/data/html/interaction/flockhart/table.asp +820 -0
- data/test/data/html/text_info/News.html +18 -93
- data/test/suite.rb +78 -4
- data/test/test_model/package.rb +38 -0
- data/test/test_plugin/bsv_xml.rb +4 -2
- data/test/test_plugin/flockhart.rb +1 -1
- data/test/test_plugin/oddbdat_export.rb +79 -658
- data/test/test_plugin/ouwerkerk.rb +2 -2
- data/test/test_plugin/suite.rb +8 -6
- data/test/test_plugin/text_info.rb +40 -52
- data/test/test_plugin/{doctors.rb → zdoctor.rb} +0 -0
- data/test/test_util/exporter.rb +500 -0
- data/test/test_util/suite.rb +8 -6
- data/test/test_util/{log.rb → zlog.rb} +19 -0
- data/test/test_view/{search.rb → asearch.rb} +0 -0
- data/test/test_view/suite.rb +8 -6
- metadata +143 -14
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
data/doc/robots.txt
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
User-agent: Mediapartners-Google*
|
|
2
|
+
Disallow: /
|
|
3
|
+
User-agent:
|
|
4
|
+
Disallow: /
|
|
5
|
+
User-agent: *
|
|
6
|
+
Disallow: /de/atupri/
|
|
7
|
+
Disallow: /fr/atupri/
|
|
8
|
+
Disallow: /en/atupri/
|
|
9
|
+
Disallow: /de/just-medical/
|
|
10
|
+
Disallow: /fr/just-medical/
|
|
11
|
+
Disallow: /en/just-medical/
|
|
12
|
+
Disallow: /de/hirslanden/
|
|
13
|
+
Disallow: /fr/hirslanden/
|
|
14
|
+
Disallow: /en/hirslanden/
|
|
15
|
+
Disallow: /de/generika/
|
|
16
|
+
Disallow: /fr/generika/
|
|
17
|
+
Disallow: /en/generika/
|
|
18
|
+
Disallow: /de/innova/
|
|
19
|
+
Disallow: /fr/innova/
|
|
20
|
+
Disallow: /en/innova/
|
|
21
|
+
Disallow: /de/provita/
|
|
22
|
+
Disallow: /fr/provita/
|
|
23
|
+
Disallow: /en/provita/
|
|
24
|
+
Disallow: /de/santesuisse/
|
|
25
|
+
Disallow: /fr/santesuisse/
|
|
26
|
+
Disallow: /en/santesuisse/
|
|
27
|
+
Disallow: /de/schoenenberger/
|
|
28
|
+
Disallow: /fr/schoenenberger/
|
|
29
|
+
Disallow: /en/schoenenberger/
|
|
@@ -9,6 +9,7 @@ require 'spreadsheet/excel'
|
|
|
9
9
|
module ODDB
|
|
10
10
|
module OdbaExporter
|
|
11
11
|
class GenericXls
|
|
12
|
+
RECIPIENTS = [ 'mhatakeyama@ywesee.com', 'zdavatz@ywesee.com' ]
|
|
12
13
|
FLAGS = {
|
|
13
14
|
:address => 'neue Herstelleradresse',
|
|
14
15
|
:comment => 'neue Bemerkung',
|
|
@@ -90,7 +91,7 @@ module ODDB
|
|
|
90
91
|
generics = []
|
|
91
92
|
comparables = []
|
|
92
93
|
@app.each_package { |pac|
|
|
93
|
-
if(pac.public? && pac.registration.active?
|
|
94
|
+
if(pac.public? && pac.registration.active?)
|
|
94
95
|
if(pac.registration.original? && (comps = pac.comparables) \
|
|
95
96
|
&& !comps.empty?)
|
|
96
97
|
originals.push(pac)
|
|
@@ -102,11 +103,28 @@ module ODDB
|
|
|
102
103
|
}
|
|
103
104
|
# Check Packages
|
|
104
105
|
# Some packages cannot be compared if package basename is nil
|
|
105
|
-
nilpackages = originals.select{|pac| pac.basename.nil?}.
|
|
106
|
+
nilpackages = originals.select{|pac| pac.basename.nil?} + generics.select{|pac| pac.basename.nil?}
|
|
106
107
|
unless nilpackages.empty?
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
108
|
+
message = "Package name may have a number in it and therefore basename becomes nil.\n"
|
|
109
|
+
message << "The following packages are skipped during export_generics, since the packages are not comparable.\n\n"
|
|
110
|
+
link = "http://#{SERVER_NAME}/de/gcc/search/zone/drugs/search_query/"
|
|
111
|
+
message << "Package (company, EAN code, link):\n"
|
|
112
|
+
message << nilpackages.map{|pac| [pac.company_name, pac.barcode, link + pac.barcode].join(", ")}.join("\n")
|
|
113
|
+
message << "\n"
|
|
114
|
+
log = Log.new(@@today)
|
|
115
|
+
log.report = [
|
|
116
|
+
"Class: #{self.class}",
|
|
117
|
+
"Method: export_generics",
|
|
118
|
+
"Message: #{message}",
|
|
119
|
+
"Backtrace:",
|
|
120
|
+
caller(0).join("\n"),
|
|
121
|
+
].join("\n")
|
|
122
|
+
log.recipients = RECIPIENTS.dup
|
|
123
|
+
log.notify("Warning: Nil basename packages")
|
|
124
|
+
|
|
125
|
+
# Remove the packages that basename is nil
|
|
126
|
+
originals -= nilpackages
|
|
127
|
+
generics -= nilpackages
|
|
110
128
|
end
|
|
111
129
|
|
|
112
130
|
originals.sort.each { |pac| export_comparables(pac) }
|
|
@@ -176,3 +194,9 @@ module ODDB
|
|
|
176
194
|
end
|
|
177
195
|
end
|
|
178
196
|
end
|
|
197
|
+
|
|
198
|
+
begin
|
|
199
|
+
require 'testenvironment2'
|
|
200
|
+
rescue LoadError
|
|
201
|
+
end
|
|
202
|
+
|
data/ext/export/src/oddbdat.rb
CHANGED
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# Odba::Exporter::TestGenericsXls -- oddb -- 22.12.2010 -- mhatakeyama@ywesee.com
|
|
3
|
+
|
|
4
|
+
$: << File.expand_path('../src', File.dirname(__FILE__))
|
|
5
|
+
$: << File.expand_path('../../../src', File.dirname(__FILE__))
|
|
6
|
+
$: << File.expand_path('../../..', File.dirname(__FILE__))
|
|
7
|
+
|
|
8
|
+
require 'test/unit'
|
|
9
|
+
require 'flexmock'
|
|
10
|
+
require 'spreadsheet'
|
|
11
|
+
require 'generics_xls'
|
|
12
|
+
require 'date'
|
|
13
|
+
|
|
14
|
+
module ODDB
|
|
15
|
+
module OdbaExporter
|
|
16
|
+
class TestGenericXls < Test::Unit::TestCase
|
|
17
|
+
include FlexMock::TestCase
|
|
18
|
+
def setup
|
|
19
|
+
@loggroup_swiss = LogGroup.new(:swissmedic_journal)
|
|
20
|
+
@loggroup_swiss.create_log(Date.today)
|
|
21
|
+
@loggroup_swiss.latest.change_flags = {123 => [:new]}
|
|
22
|
+
@loggroup_bsv = LogGroup.new(:bsv_sl)
|
|
23
|
+
@loggroup_bsv.create_log(Date.today)
|
|
24
|
+
@loggroup_bsv.latest.change_flags = {123 => [:price_cut]}
|
|
25
|
+
|
|
26
|
+
flexstub(ODBA.cache) do |cacheobj|
|
|
27
|
+
cacheobj.should_receive(:fetch_named).and_return do
|
|
28
|
+
flexmock do |appobj|
|
|
29
|
+
appobj.should_receive(:log_group).with(:swissmedic_journal).and_return(@loggroup_swiss)
|
|
30
|
+
appobj.should_receive(:log_group).with(:bsv_sl).and_return(@loggroup_bsv)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
@pac = flexmock('Package') do |pack|
|
|
36
|
+
pack.should_receive(:basename).and_return("basename")
|
|
37
|
+
pack.should_receive(:dose).and_return("dose")
|
|
38
|
+
pack.should_receive(:comparable_size).and_return(111)
|
|
39
|
+
pack.should_receive(:barcode).and_return("222")
|
|
40
|
+
pack.should_receive(:pharmacode).and_return(333)
|
|
41
|
+
pack.should_receive(:name).and_return("name")
|
|
42
|
+
pack.should_receive(:price_exfactory).and_return(444.444)
|
|
43
|
+
pack.should_receive(:price_public).and_return(555.555)
|
|
44
|
+
pack.should_receive(:company_name).and_return("company_name")
|
|
45
|
+
pack.should_receive(:ikscat).and_return(666)
|
|
46
|
+
pack.should_receive(:sl_entry).and_return(777)
|
|
47
|
+
pack.should_receive(:registration_date).and_return(Date.new(2010,12,31))
|
|
48
|
+
pack.should_receive(:"registration.pointer").and_return(123)
|
|
49
|
+
pack.should_receive(:pointer).and_return(123)
|
|
50
|
+
pack.should_receive(:comparables).and_return([@pac])
|
|
51
|
+
pack.should_receive(:"registration.generic?").and_return(true)
|
|
52
|
+
pack.should_receive(:public?).and_return(true)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
@generics_xls = GenericXls.new(".")
|
|
56
|
+
end
|
|
57
|
+
def test__remarks1
|
|
58
|
+
pac = flexstub(Package) do |pack|
|
|
59
|
+
pack.should_receive(:"registration.pointer").and_return(999)
|
|
60
|
+
pack.should_receive(:pointer).and_return(999)
|
|
61
|
+
end
|
|
62
|
+
assert_nil(@generics_xls._remarks(pac, 'Generikum'))
|
|
63
|
+
end
|
|
64
|
+
def test__remarks2
|
|
65
|
+
expect = "Generikum: neue Registration, Preissenkung"
|
|
66
|
+
assert_equal(expect, @generics_xls._remarks(@pac, 'Generikum'))
|
|
67
|
+
end
|
|
68
|
+
def test_remarks
|
|
69
|
+
expect = "Original: neue Registration, Preissenkung Generikum: neue Registration, Preissenkung"
|
|
70
|
+
assert_equal(expect, @generics_xls.remarks(@pac, @pac))
|
|
71
|
+
end
|
|
72
|
+
def test_format_price
|
|
73
|
+
price = nil
|
|
74
|
+
assert_nil(@generics_xls.format_price(price))
|
|
75
|
+
price = 12.349
|
|
76
|
+
assert_equal("12.35", @generics_xls.format_price(price))
|
|
77
|
+
end
|
|
78
|
+
def test_preprocess_fields
|
|
79
|
+
fields = [1,2,3,Date.new(2010, 12, 31)]
|
|
80
|
+
assert_equal(["1","2","3","31.12.2010"], @generics_xls.preprocess_fields(fields))
|
|
81
|
+
end
|
|
82
|
+
def test_format_original
|
|
83
|
+
expect = ["basename", "basename dose/111", "222", "333", "name", "dose", "111",
|
|
84
|
+
"444.44", "555.55", "company_name", "666", "SL", "31.12.2010"]
|
|
85
|
+
assert_equal(expect, @generics_xls.format_original(@pac))
|
|
86
|
+
end
|
|
87
|
+
def test_format_generic
|
|
88
|
+
pac = flexstub(@pac) do |pack|
|
|
89
|
+
pack.should_receive(:sl_entry).and_return(nil)
|
|
90
|
+
end
|
|
91
|
+
expect = ["222", "333", "name", "dose", "111", "444.44", "555.55", "company_name",
|
|
92
|
+
"666", "", "31.12.2010"]
|
|
93
|
+
assert_equal(expect, @generics_xls.format_generic(pac))
|
|
94
|
+
end
|
|
95
|
+
def test_format_row
|
|
96
|
+
expect = ["basename", "basename dose/111", "222", "333", "name", "dose", "111",
|
|
97
|
+
"444.44", "555.55", "company_name", "666", "SL", "31.12.2010", "222",
|
|
98
|
+
"333", "name", "dose", "111", "444.44", "555.55", "company_name",
|
|
99
|
+
"666", "SL", "31.12.2010",
|
|
100
|
+
"Original: neue Registration, Preissenkung Generikum: neue Registration, Preissenkung"]
|
|
101
|
+
assert_equal(expect, @generics_xls.format_row(@pac, @pac))
|
|
102
|
+
end
|
|
103
|
+
def assert_row(row)
|
|
104
|
+
flexstub(Spreadsheet::Excel) do |klass|
|
|
105
|
+
klass.should_receive(:new).and_return(flexmock{|book|
|
|
106
|
+
book.should_receive(:add_worksheet).and_return(flexmock{|sheet|
|
|
107
|
+
sheet.should_receive(:format_column)
|
|
108
|
+
sheet.should_receive(:write).with(0,0,Array, Spreadsheet::Format)
|
|
109
|
+
sheet.should_receive(:write).with(1,0,row) # This is the check point
|
|
110
|
+
})
|
|
111
|
+
})
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
def test_export_generic
|
|
115
|
+
expect_row = ["", "", "", "", "", "", "", "", "", "", "", "", "",
|
|
116
|
+
"222", "333", "name", "dose", "111", "444.44", "555.55",
|
|
117
|
+
"company_name", "666", "SL", "31.12.2010",
|
|
118
|
+
"Generikum: neue Registration, Preissenkung"]
|
|
119
|
+
assert_row(expect_row)
|
|
120
|
+
generics_xls = GenericXls.new(".")
|
|
121
|
+
assert_equal(2, generics_xls.export_generic(@pac))
|
|
122
|
+
end
|
|
123
|
+
def test_export_comparable
|
|
124
|
+
expect_row = ["basename", "basename dose/111", "222", "333", "name",
|
|
125
|
+
"dose", "111", "444.44", "555.55", "company_name", "666",
|
|
126
|
+
"SL", "31.12.2010", "222", "333", "name", "dose", "111",
|
|
127
|
+
"444.44", "555.55", "company_name", "666", "SL", "31.12.2010",
|
|
128
|
+
"Original: neue Registration, Preissenkung Generikum: neue Registration, Preissenkung"]
|
|
129
|
+
assert_row(expect_row)
|
|
130
|
+
generics_xls = GenericXls.new(".")
|
|
131
|
+
assert_equal(2, generics_xls.export_comparable(@pac, @pac))
|
|
132
|
+
end
|
|
133
|
+
def test_export_comparables
|
|
134
|
+
expect_row = ["basename", "basename dose/111", "222", "333", "name",
|
|
135
|
+
"dose", "111", "444.44", "555.55", "company_name", "666",
|
|
136
|
+
"SL", "31.12.2010", "222", "333", "name", "dose", "111",
|
|
137
|
+
"444.44", "555.55", "company_name", "666", "SL", "31.12.2010",
|
|
138
|
+
"Original: neue Registration, Preissenkung Generikum: neue Registration, Preissenkung"]
|
|
139
|
+
assert_row(expect_row)
|
|
140
|
+
generics_xls = GenericXls.new(".")
|
|
141
|
+
assert_equal(2, generics_xls.export_comparable(@pac, @pac))
|
|
142
|
+
|
|
143
|
+
end
|
|
144
|
+
def redefine_ODBA(package)
|
|
145
|
+
# This is a trick code, a little bit different from the flexstub in setup method
|
|
146
|
+
# That is why I can re-define the ODBA stub.
|
|
147
|
+
flexstub(ODBA) do |odba|
|
|
148
|
+
odba.should_receive(:cache).and_return(flexmock{|cache|
|
|
149
|
+
cache.should_receive(:fetch_named).and_return(flexmock{|app|
|
|
150
|
+
app.should_receive(:log_group).with(:swissmedic_journal).and_return(@loggroup_swiss)
|
|
151
|
+
app.should_receive(:log_group).with(:bsv_sl).and_return(@loggroup_bsv)
|
|
152
|
+
app.should_receive(:each_package).and_yield(package)
|
|
153
|
+
})
|
|
154
|
+
})
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
def test_export_generics__case_no_output
|
|
158
|
+
# Note:
|
|
159
|
+
# if the return value of comparables is not empty (point.1), or
|
|
160
|
+
# if the return value of registration.generics? is not false (ture) (point.2),
|
|
161
|
+
# then you have to define the other method in the flexstub(Package),
|
|
162
|
+
# since export_comparables or export_generic will be called.
|
|
163
|
+
pac = flexstub(@pac) do |pack|
|
|
164
|
+
pack.should_receive(:"registration.active?").and_return(true)
|
|
165
|
+
pack.should_receive(:"registration.original?").and_return(true)
|
|
166
|
+
pack.should_receive(:comparables).and_return([]) # point.1
|
|
167
|
+
pack.should_receive(:"registration.generic?").and_return(false) # point.2
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
redefine_ODBA(pac)
|
|
171
|
+
|
|
172
|
+
generics_xls = GenericXls.new(".")
|
|
173
|
+
assert_equal(2, generics_xls.export_generics)
|
|
174
|
+
end
|
|
175
|
+
def test_export_generics__case_warning
|
|
176
|
+
pac = flexstub(@pac) do |pack|
|
|
177
|
+
pack.should_receive(:"registration.active?").and_return(true)
|
|
178
|
+
pack.should_receive(:"registration.original?").and_return(true)
|
|
179
|
+
pack.should_receive(:basename).and_return(nil) # This is the point
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
redefine_ODBA(pac)
|
|
183
|
+
|
|
184
|
+
# Note:
|
|
185
|
+
# if the following flexstub is not defined,
|
|
186
|
+
# an actual email will be sent.
|
|
187
|
+
flexstub(Log) do |log|
|
|
188
|
+
log.should_receive(:new)
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
generics_xls = GenericXls.new(".")
|
|
192
|
+
assert_raise(NoMethodError) do # This means the report process runs if this assert passes
|
|
193
|
+
generics_xls.export_generics
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
def test_export_generics__case_export
|
|
197
|
+
pac = flexstub(@pac) do |pack|
|
|
198
|
+
pack.should_receive(:"registration.active?").and_return(true)
|
|
199
|
+
pack.should_receive(:"registration.original?").and_return(true)
|
|
200
|
+
pack.should_receive(:comparables).and_return([])
|
|
201
|
+
pack.should_receive(:basename).and_return("basename") # This is the point
|
|
202
|
+
pack.should_receive(:"registration.generic?").and_return(true) # This is the point
|
|
203
|
+
pack.should_receive(:"registration.pointer").and_return(123)
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
redefine_ODBA(pac)
|
|
207
|
+
|
|
208
|
+
# Note:
|
|
209
|
+
# The actual row value (data) is not checked here,
|
|
210
|
+
# since it is tested in test_export_generic.
|
|
211
|
+
generics_xls = GenericXls.new(".")
|
|
212
|
+
assert_equal(3, generics_xls.export_generics)
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
end
|
|
@@ -0,0 +1,880 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# ODDB::OdbaExporter::TestTable, TestLine -- oddb -- 03.02.2011 -- mhatakeyama@ywesee.com
|
|
3
|
+
|
|
4
|
+
$: << File.expand_path('../src', File.dirname(__FILE__))
|
|
5
|
+
$: << File.expand_path('../../../src', File.dirname(__FILE__))
|
|
6
|
+
$: << File.expand_path('../../..', File.dirname(__FILE__))
|
|
7
|
+
$: << File.expand_path('../../../test', File.dirname(__FILE__))
|
|
8
|
+
|
|
9
|
+
require 'stub/odba'
|
|
10
|
+
require 'test/unit'
|
|
11
|
+
require 'flexmock'
|
|
12
|
+
require 'oddbdat'
|
|
13
|
+
require 'model/package'
|
|
14
|
+
require 'model/text'
|
|
15
|
+
require 'date'
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
# This definition is called in TestMCMTable
|
|
19
|
+
class String
|
|
20
|
+
def src
|
|
21
|
+
self + ".src"
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
module ODDB
|
|
26
|
+
module OdbaExporter
|
|
27
|
+
DATE = Date.today.strftime("%Y%m%d%H%M%S")
|
|
28
|
+
# Tests for *Line classes
|
|
29
|
+
class TestLine < Test::Unit::TestCase
|
|
30
|
+
Line::LENGTH = 3
|
|
31
|
+
def setup
|
|
32
|
+
@line = Line.new
|
|
33
|
+
end
|
|
34
|
+
def test_content
|
|
35
|
+
assert_equal([], @line.content(nil))
|
|
36
|
+
structure = {1=>"1", 2=>"2", 3=>"3"}
|
|
37
|
+
assert_equal(["1", "2", "3"], @line.content(structure))
|
|
38
|
+
end
|
|
39
|
+
def test_empty?
|
|
40
|
+
assert_equal(true, @line.empty?)
|
|
41
|
+
end
|
|
42
|
+
def test_structure
|
|
43
|
+
assert_equal(nil, @line.structure)
|
|
44
|
+
end
|
|
45
|
+
def test_to_s
|
|
46
|
+
assert_equal('', @line.to_s)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
class TestAcLine < Test::Unit::TestCase
|
|
50
|
+
include FlexMock::TestCase
|
|
51
|
+
def setup
|
|
52
|
+
@package = ODDB::Package.new('12')
|
|
53
|
+
@registration = flexmock('registration') do |mock|
|
|
54
|
+
mock.should_receive(:generic_type).and_return(:generic)
|
|
55
|
+
#mock.should_receive(:registration_date).and_return(Date.today)
|
|
56
|
+
mock.should_receive(:registration_date).and_return(Date.new(2011,2,3))
|
|
57
|
+
end
|
|
58
|
+
@package.sequence = flexmock('sequence') do |seq|
|
|
59
|
+
seq.should_receive(:registration).and_return @registration
|
|
60
|
+
seq.should_receive(:iksnr).and_return('12345')
|
|
61
|
+
end
|
|
62
|
+
@package.create_sl_entry
|
|
63
|
+
@package.sl_entry.limitation = 'limitation'
|
|
64
|
+
@package.sl_entry.limitation_points = 5
|
|
65
|
+
flexstub(@package).should_receive(:oid).and_return(123)
|
|
66
|
+
flexstub(Date).should_receive(:"today.strftime").and_return('20110203000000')
|
|
67
|
+
@acline = AcLine.new(@package)
|
|
68
|
+
end
|
|
69
|
+
def test_generic_code
|
|
70
|
+
assert_equal('Y', @acline.generic_code(@registration))
|
|
71
|
+
end
|
|
72
|
+
def test_iks_date
|
|
73
|
+
expected = '20110203'
|
|
74
|
+
assert_equal(expected, @acline.iks_date(@registration))
|
|
75
|
+
end
|
|
76
|
+
def test_ikskey
|
|
77
|
+
assert_equal('12345012', @acline.ikskey)
|
|
78
|
+
end
|
|
79
|
+
def test_inscode
|
|
80
|
+
assert_equal('1', @acline.inscode)
|
|
81
|
+
end
|
|
82
|
+
def test_limitation
|
|
83
|
+
assert_equal('Y', @acline.limitation)
|
|
84
|
+
end
|
|
85
|
+
def test_limitation_points
|
|
86
|
+
assert_equal(5, @acline.limitation_points)
|
|
87
|
+
end
|
|
88
|
+
def test_structure
|
|
89
|
+
expected = {
|
|
90
|
+
1 =>"01",
|
|
91
|
+
2 =>"20110203000000",
|
|
92
|
+
3 =>"1",
|
|
93
|
+
4 =>123,
|
|
94
|
+
5 =>"4",
|
|
95
|
+
7 =>"12345012",
|
|
96
|
+
14=>nil,
|
|
97
|
+
20=>"Y",
|
|
98
|
+
22=>"20110203",
|
|
99
|
+
29=>"3",
|
|
100
|
+
32=>nil,
|
|
101
|
+
39=>"1",
|
|
102
|
+
40=>"Y",
|
|
103
|
+
41=>5,
|
|
104
|
+
47=>nil,
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
# test
|
|
108
|
+
assert_equal(expected.sort, @acline.structure.sort)
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
class TestAccompLine < Test::Unit::TestCase
|
|
112
|
+
include FlexMock::TestCase
|
|
113
|
+
def test_structure
|
|
114
|
+
package = ODDB::Package.new('12')
|
|
115
|
+
flexstub(package).should_receive(:oid).and_return(123)
|
|
116
|
+
registration = flexmock('registration') do |mock|
|
|
117
|
+
mock.should_receive(:company).and_return(flexmock('compay') do |comp|
|
|
118
|
+
comp.should_receive(:oid).and_return(111)
|
|
119
|
+
end)
|
|
120
|
+
end
|
|
121
|
+
package.sequence = flexmock('sequence') do |seq|
|
|
122
|
+
seq.should_receive(:registration).and_return registration
|
|
123
|
+
seq.should_receive(:iksnr).and_return('12345')
|
|
124
|
+
end
|
|
125
|
+
flexstub(Date).should_receive(:"today.strftime").and_return('20110203000000')
|
|
126
|
+
@accompline = AccompLine.new(package)
|
|
127
|
+
expected = {
|
|
128
|
+
1=>"19",
|
|
129
|
+
2=>"20110203000000",
|
|
130
|
+
3=>123,
|
|
131
|
+
4=>111,
|
|
132
|
+
5=>"H",
|
|
133
|
+
6=>"4",
|
|
134
|
+
}
|
|
135
|
+
assert_equal(expected.sort, @accompline.structure.sort)
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
class TestAcLimLine < Test::Unit::TestCase
|
|
139
|
+
include FlexMock::TestCase
|
|
140
|
+
def test_structure
|
|
141
|
+
flexstub(Date).should_receive(:"today.strftime").and_return('20110203000000')
|
|
142
|
+
@aclimline = AcLimLine.new(111, 222, 333)
|
|
143
|
+
expected = {
|
|
144
|
+
1=>"09",
|
|
145
|
+
2=>"20110203000000",
|
|
146
|
+
3=>111,
|
|
147
|
+
4=>333,
|
|
148
|
+
5=>222,
|
|
149
|
+
6=>"4",
|
|
150
|
+
}
|
|
151
|
+
assert_equal(expected.sort, @aclimline.structure.sort)
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
class TestAcnamLine < Test::Unit::TestCase
|
|
155
|
+
include FlexMock::TestCase
|
|
156
|
+
def setup
|
|
157
|
+
@package = ODDB::Package.new('12')
|
|
158
|
+
@package.sequence = flexmock('sequence') do |seq|
|
|
159
|
+
seq.should_receive(:galenic_forms).and_return(['galenic_forms'])
|
|
160
|
+
seq.should_receive(:dose).and_return(flexmock('dose') do |dose|
|
|
161
|
+
dose.should_receive(:is_a?).and_return(true)
|
|
162
|
+
dose.should_receive(:qty).and_return('qty')
|
|
163
|
+
dose.should_receive(:unit).and_return('unit')
|
|
164
|
+
end)
|
|
165
|
+
seq.should_receive(:name).and_return('name')
|
|
166
|
+
seq.should_receive(:name_base).and_return('name_base')
|
|
167
|
+
seq.should_receive(:name_descr).and_return('name_descr')
|
|
168
|
+
end
|
|
169
|
+
flexstub(Date).should_receive(:"today.strftime").and_return('20110203000000')
|
|
170
|
+
end
|
|
171
|
+
def test_structure__package_parts_nil_case
|
|
172
|
+
flexstub(@package) do |pack|
|
|
173
|
+
pack.should_receive(:oid).and_return(123)
|
|
174
|
+
pack.should_receive(:commercial_forms).and_return(['commercial_forms'])
|
|
175
|
+
pack.should_receive(:"comparable_size.qty").and_return('comparable_size.qty')
|
|
176
|
+
pack.should_receive(:parts).and_return([])
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
@acnamline = AcnamLine.new(@package)
|
|
180
|
+
expected = {
|
|
181
|
+
1=>"03",
|
|
182
|
+
2=>"20110203000000",
|
|
183
|
+
3=>"1",
|
|
184
|
+
4=>123,
|
|
185
|
+
5=>"D",
|
|
186
|
+
6=>"4",
|
|
187
|
+
7=>"name",
|
|
188
|
+
8=>"name_base",
|
|
189
|
+
9=>"name_descr",
|
|
190
|
+
11=>"galenic_forms",
|
|
191
|
+
12=>"qty",
|
|
192
|
+
13=>"unit",
|
|
193
|
+
16=>"",
|
|
194
|
+
17=>"commercial_forms",
|
|
195
|
+
18=>"comparable_size.qty",
|
|
196
|
+
19=>"commercial_forms",
|
|
197
|
+
}
|
|
198
|
+
assert_equal(expected.sort, @acnamline.structure.sort)
|
|
199
|
+
end
|
|
200
|
+
def test_structure__package_parts_not_nil_case
|
|
201
|
+
count = 0
|
|
202
|
+
part = flexmock('part') do |mock|
|
|
203
|
+
mock.should_receive(:measure).and_return(count+=1)
|
|
204
|
+
mock.should_receive(:multi).and_return('multi')
|
|
205
|
+
end
|
|
206
|
+
parts = [part, part, part]
|
|
207
|
+
flexstub(@package) do |pack|
|
|
208
|
+
pack.should_receive(:oid).and_return(123)
|
|
209
|
+
pack.should_receive(:commercial_forms).and_return(['commercial_forms'])
|
|
210
|
+
pack.should_receive(:"comparable_size.qty").and_return('comparable_size.qty')
|
|
211
|
+
pack.should_receive(:parts).and_return(parts)
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
@acnamline = AcnamLine.new(@package)
|
|
215
|
+
expected = {
|
|
216
|
+
1=>"03",
|
|
217
|
+
2=>"20110203000000",
|
|
218
|
+
3=>"1",
|
|
219
|
+
4=>123,
|
|
220
|
+
5=>"D",
|
|
221
|
+
6=>"4",
|
|
222
|
+
7=>"name",
|
|
223
|
+
8=>"name_base",
|
|
224
|
+
9=>"name_descr",
|
|
225
|
+
11=>"galenic_forms",
|
|
226
|
+
12=>"qty",
|
|
227
|
+
13=>"unit",
|
|
228
|
+
16=>"multi",
|
|
229
|
+
17=>"commercial_forms",
|
|
230
|
+
18=>"comparable_size.qty",
|
|
231
|
+
19=>"commercial_forms",
|
|
232
|
+
}
|
|
233
|
+
assert_equal(expected.sort, @acnamline.structure.sort)
|
|
234
|
+
end
|
|
235
|
+
end
|
|
236
|
+
class TestAcmedLine < Test::Unit::TestCase
|
|
237
|
+
include FlexMock::TestCase
|
|
238
|
+
def test_structure
|
|
239
|
+
flexstub(Date).should_receive(:"today.strftime").and_return('20110203000000')
|
|
240
|
+
package = ODDB::Package.new('12')
|
|
241
|
+
flexstub(package) do |pack|
|
|
242
|
+
pack.should_receive(:oid).and_return(123)
|
|
243
|
+
pack.should_receive(:fachinfo).and_return(flexmock('fachinfo') do |fach|
|
|
244
|
+
fach.should_receive(:oid).and_return('fachinfo.oid')
|
|
245
|
+
end)
|
|
246
|
+
end
|
|
247
|
+
package.sequence = flexmock('sequence') do |seq|
|
|
248
|
+
seq.should_receive(:atc_class).and_return(flexmock('atc_class') do |atc|
|
|
249
|
+
atc.should_receive(:code).and_return('atc.code')
|
|
250
|
+
end)
|
|
251
|
+
seq.should_receive(:galenic_forms).and_return(flexmock('galenic_forms') do |gal|
|
|
252
|
+
gal.should_receive(:first).and_return(flexmock('galform') do |form|
|
|
253
|
+
form.should_receive(:oid).and_return('galform.oid')
|
|
254
|
+
end)
|
|
255
|
+
end)
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
@acmedline = AcmedLine.new(package)
|
|
259
|
+
expected = {
|
|
260
|
+
1=>"02",
|
|
261
|
+
2=>"20110203000000",
|
|
262
|
+
3=>"1",
|
|
263
|
+
4=>123,
|
|
264
|
+
5=>"4",
|
|
265
|
+
7=>"fachinfo.oid",
|
|
266
|
+
10=>"atc.code",
|
|
267
|
+
12=>"galform.oid",
|
|
268
|
+
}
|
|
269
|
+
assert_equal(expected.sort, @acmedline.structure.sort)
|
|
270
|
+
end
|
|
271
|
+
end
|
|
272
|
+
class TestAcOddbLine < Test::Unit::TestCase
|
|
273
|
+
include FlexMock::TestCase
|
|
274
|
+
def test_structure
|
|
275
|
+
package = ODDB::Package.new('12')
|
|
276
|
+
flexstub(package).should_receive(:oid).and_return(123)
|
|
277
|
+
package.pharmacode = 223
|
|
278
|
+
@acoddbline = AcOddbLine.new(package)
|
|
279
|
+
expected = {
|
|
280
|
+
1 => 123,
|
|
281
|
+
2 => "223"
|
|
282
|
+
}
|
|
283
|
+
assert_equal(expected.sort, @acoddbline.structure.sort)
|
|
284
|
+
end
|
|
285
|
+
end
|
|
286
|
+
class TestAcpricealgPublicLine < Test::Unit::TestCase
|
|
287
|
+
include FlexMock::TestCase
|
|
288
|
+
def setup
|
|
289
|
+
@package = ODDB::Package.new('12')
|
|
290
|
+
@package.price_public = 123.45
|
|
291
|
+
flexstub(@package).should_receive(:oid).and_return(123)
|
|
292
|
+
flexstub(Date).should_receive(:"today.strftime").and_return('20110203000000')
|
|
293
|
+
@acpriceline = AcpricealgPublicLine.new(@package)
|
|
294
|
+
end
|
|
295
|
+
def test_price_public_type
|
|
296
|
+
assert_equal('PPUB', @acpriceline.price_public_type)
|
|
297
|
+
@package.create_sl_entry
|
|
298
|
+
assert_equal('PSL2', @acpriceline.price_public_type)
|
|
299
|
+
end
|
|
300
|
+
def test_structure
|
|
301
|
+
expected = {
|
|
302
|
+
1=>"07",
|
|
303
|
+
2=>"20110203000000",
|
|
304
|
+
3=>123,
|
|
305
|
+
4=>"PPUB",
|
|
306
|
+
5=>"4",
|
|
307
|
+
6=>"123.45",
|
|
308
|
+
}
|
|
309
|
+
assert_equal(expected.sort, @acpriceline.structure.sort)
|
|
310
|
+
end
|
|
311
|
+
end
|
|
312
|
+
class TestAcpricealgExfactoryLine < Test::Unit::TestCase
|
|
313
|
+
include FlexMock::TestCase
|
|
314
|
+
def test_structure
|
|
315
|
+
package = ODDB::Package.new('12')
|
|
316
|
+
flexstub(package).should_receive(:oid).and_return(123)
|
|
317
|
+
package.price_exfactory = 123.45
|
|
318
|
+
flexstub(Date).should_receive(:"today.strftime").and_return('20110203000000')
|
|
319
|
+
@acpriceline = AcpricealgExfactoryLine.new(package)
|
|
320
|
+
expected = {
|
|
321
|
+
1=>"07",
|
|
322
|
+
2=>"20110203000000",
|
|
323
|
+
3=>123,
|
|
324
|
+
4=>"PSL1",
|
|
325
|
+
5=>"4",
|
|
326
|
+
6=>"123.45",
|
|
327
|
+
}
|
|
328
|
+
assert_equal(expected.sort, @acpriceline.structure.sort)
|
|
329
|
+
end
|
|
330
|
+
end
|
|
331
|
+
class TestAcscLine < Test::Unit::TestCase
|
|
332
|
+
include FlexMock::TestCase
|
|
333
|
+
def test_structure
|
|
334
|
+
# test nil case
|
|
335
|
+
package = ODDB::Package.new('12')
|
|
336
|
+
@acscline = AcscLine.new(package, nil, 'count')
|
|
337
|
+
assert_equal(nil, @acscline.structure)
|
|
338
|
+
|
|
339
|
+
# test not nil case
|
|
340
|
+
flexstub(package).should_receive(:oid).and_return(123)
|
|
341
|
+
active_agent = flexmock('active_agent') do |act|
|
|
342
|
+
act.should_receive(:dose).and_return(flexmock('dose') do |dose|
|
|
343
|
+
dose.should_receive(:is_a?).and_return(true)
|
|
344
|
+
dose.should_receive(:qty).and_return('qty')
|
|
345
|
+
dose.should_receive(:unit).and_return('unit')
|
|
346
|
+
end)
|
|
347
|
+
act.should_receive(:substance).and_return(flexmock('oid') do |oid|
|
|
348
|
+
oid.should_receive(:oid).and_return('oid')
|
|
349
|
+
end)
|
|
350
|
+
end
|
|
351
|
+
flexstub(Date).should_receive(:"today.strftime").and_return('20110203000000')
|
|
352
|
+
@acscline =AcscLine.new(package, active_agent, 223)
|
|
353
|
+
|
|
354
|
+
expected = {
|
|
355
|
+
1=>"41",
|
|
356
|
+
2=>"20110203000000",
|
|
357
|
+
3=>123,
|
|
358
|
+
4=>223,
|
|
359
|
+
5=>"4",
|
|
360
|
+
6=>"oid",
|
|
361
|
+
7=>"qty",
|
|
362
|
+
8=>"unit",
|
|
363
|
+
9=>"W",
|
|
364
|
+
}
|
|
365
|
+
assert_equal(expected.sort, @acscline.structure.sort)
|
|
366
|
+
end
|
|
367
|
+
end
|
|
368
|
+
class TestAtcLine < Test::Unit::TestCase
|
|
369
|
+
include FlexMock::TestCase
|
|
370
|
+
def test_structure
|
|
371
|
+
# test nil case
|
|
372
|
+
@atcline = AtcLine.new(nil)
|
|
373
|
+
assert_equal(nil, @atcline.structure)
|
|
374
|
+
|
|
375
|
+
# test not nil case
|
|
376
|
+
atcclass = flexmock('atcclass') do |atc|
|
|
377
|
+
atc.should_receive(:code).and_return('code')
|
|
378
|
+
atc.should_receive(:description).and_return('description')
|
|
379
|
+
end
|
|
380
|
+
flexstub(Date).should_receive(:"today.strftime").and_return('20110203000000')
|
|
381
|
+
@atcline = AtcLine.new(atcclass)
|
|
382
|
+
expected = {
|
|
383
|
+
1=>"11",
|
|
384
|
+
2=>"20110203000000",
|
|
385
|
+
3=>"8",
|
|
386
|
+
4=>"code",
|
|
387
|
+
5=>"D",
|
|
388
|
+
6=>"4",
|
|
389
|
+
7=>"description",
|
|
390
|
+
}
|
|
391
|
+
assert_equal(expected, @atcline.structure)
|
|
392
|
+
end
|
|
393
|
+
end
|
|
394
|
+
class TestCompLine < Test::Unit::TestCase
|
|
395
|
+
include FlexMock::TestCase
|
|
396
|
+
def test_structure
|
|
397
|
+
company = flexmock('company') do |comp|
|
|
398
|
+
comp.should_receive(:oid).and_return('oid')
|
|
399
|
+
comp.should_receive(:ean13).and_return('ean13')
|
|
400
|
+
comp.should_receive(:name).and_return('name')
|
|
401
|
+
comp.should_receive(:address_email).and_return('address_email')
|
|
402
|
+
comp.should_receive(:url).and_return('url')
|
|
403
|
+
comp.should_receive(:address).and_return(flexmock('addr') do |addr|
|
|
404
|
+
addr.should_receive(:address).and_return('address')
|
|
405
|
+
addr.should_receive(:plz).and_return('plz')
|
|
406
|
+
addr.should_receive(:city).and_return('city')
|
|
407
|
+
addr.should_receive(:"fon.first").and_return('fon.first')
|
|
408
|
+
addr.should_receive(:"fax.first").and_return('fax.first')
|
|
409
|
+
end)
|
|
410
|
+
end
|
|
411
|
+
flexstub(Date).should_receive(:"today.strftime").and_return('20110203000000')
|
|
412
|
+
@compline = CompLine.new(company)
|
|
413
|
+
expected = {
|
|
414
|
+
1=>"12",
|
|
415
|
+
2=>"20110203000000",
|
|
416
|
+
3=>"oid",
|
|
417
|
+
4=>"4",
|
|
418
|
+
5=>"ean13",
|
|
419
|
+
7=>"name",
|
|
420
|
+
8=>"address",
|
|
421
|
+
9=>"CH",
|
|
422
|
+
10=>"plz",
|
|
423
|
+
11=>"city",
|
|
424
|
+
13=>"fon.first",
|
|
425
|
+
15=>"fax.first",
|
|
426
|
+
16=>"address_email",
|
|
427
|
+
17=>"url",
|
|
428
|
+
}
|
|
429
|
+
assert_equal(expected.sort, @compline.structure.sort)
|
|
430
|
+
end
|
|
431
|
+
end
|
|
432
|
+
class TestEanLine < Test::Unit::TestCase
|
|
433
|
+
include FlexMock::TestCase
|
|
434
|
+
def setup
|
|
435
|
+
packclass = flexmock('package') do |pack|
|
|
436
|
+
pack.should_receive(:new).and_return(flexmock do |mock|
|
|
437
|
+
mock.should_receive(:oid).and_return('oid')
|
|
438
|
+
mock.should_receive(:barcode).and_return('barcode')
|
|
439
|
+
end)
|
|
440
|
+
end
|
|
441
|
+
@package = packclass.new
|
|
442
|
+
flexstub(Date).should_receive(:"today.strftime").and_return('20110203000000')
|
|
443
|
+
end
|
|
444
|
+
def test_barcode
|
|
445
|
+
@eanline = EanLine.new(@package)
|
|
446
|
+
assert_equal('barcode', @eanline.barcode)
|
|
447
|
+
end
|
|
448
|
+
def test_structure
|
|
449
|
+
@eanline = EanLine.new(@package)
|
|
450
|
+
expected = {
|
|
451
|
+
1=>"06",
|
|
452
|
+
2=>"20110203000000",
|
|
453
|
+
3=>"oid",
|
|
454
|
+
4=>"E13",
|
|
455
|
+
5=>"barcode",
|
|
456
|
+
6=>"4",
|
|
457
|
+
}
|
|
458
|
+
assert_equal(expected, @eanline.structure)
|
|
459
|
+
end
|
|
460
|
+
end
|
|
461
|
+
class TestGalenicFormLine < Test::Unit::TestCase
|
|
462
|
+
include FlexMock::TestCase
|
|
463
|
+
def test_structure
|
|
464
|
+
galenic_form = flexmock('galenic_form') do |gal|
|
|
465
|
+
gal.should_receive(:oid).and_return('oid')
|
|
466
|
+
gal.should_receive(:to_s).and_return('to_s')
|
|
467
|
+
end
|
|
468
|
+
@galenicline = GalenicFormLine.new(galenic_form)
|
|
469
|
+
expected = {
|
|
470
|
+
1=>"11",
|
|
471
|
+
2=>DATE,
|
|
472
|
+
3=>"5",
|
|
473
|
+
4=>"oid",
|
|
474
|
+
5=>"D",
|
|
475
|
+
6=>"4",
|
|
476
|
+
7=>"to_s",
|
|
477
|
+
}
|
|
478
|
+
assert_equal(expected.sort, @galenicline.structure.sort)
|
|
479
|
+
end
|
|
480
|
+
end
|
|
481
|
+
class TestScLine < Test::Unit::TestCase
|
|
482
|
+
include FlexMock::TestCase
|
|
483
|
+
def test_structure
|
|
484
|
+
package = ODDB::Package.new('12')
|
|
485
|
+
substance = flexmock('substance') do |sub|
|
|
486
|
+
sub.should_receive(:oid).and_return('oid')
|
|
487
|
+
end
|
|
488
|
+
flexstub(Date).should_receive(:"today.strftime").and_return('20110203000000')
|
|
489
|
+
@scline = ScLine.new(package, substance)
|
|
490
|
+
expected = {
|
|
491
|
+
1=>"40",
|
|
492
|
+
2=>"20110203000000",
|
|
493
|
+
3=>"oid",
|
|
494
|
+
4=>"L",
|
|
495
|
+
5=>"4",
|
|
496
|
+
6=>substance,
|
|
497
|
+
}
|
|
498
|
+
assert_equal(expected.sort, @scline.structure.sort)
|
|
499
|
+
end
|
|
500
|
+
end
|
|
501
|
+
class TestLimitationLine < Test::Unit::TestCase
|
|
502
|
+
include FlexMock::TestCase
|
|
503
|
+
def test_structure
|
|
504
|
+
flexstub(Date).should_receive(:"today.strftime").and_return('20110203000000')
|
|
505
|
+
@limitationline = LimitationLine.new('lim_oid')
|
|
506
|
+
expected = {
|
|
507
|
+
1=>"16",
|
|
508
|
+
2=>"20110203000000",
|
|
509
|
+
3=>"lim_oid",
|
|
510
|
+
5=>"4",
|
|
511
|
+
6=>"COM",
|
|
512
|
+
}
|
|
513
|
+
assert_equal(expected.sort, @limitationline.structure.sort)
|
|
514
|
+
end
|
|
515
|
+
end
|
|
516
|
+
class TestLimTxtLine < Test::Unit::TestCase
|
|
517
|
+
include FlexMock::TestCase
|
|
518
|
+
def test_structure
|
|
519
|
+
flexstub(Date).should_receive(:"today.strftime").and_return('20110203000000')
|
|
520
|
+
@limtxtline = LimTxtLine.new('lim_oid', 'language', 'txt')
|
|
521
|
+
expected = {
|
|
522
|
+
1=>"10",
|
|
523
|
+
2=>"20110203000000",
|
|
524
|
+
3=>"lim_oid",
|
|
525
|
+
4=>"language",
|
|
526
|
+
5=>"4",
|
|
527
|
+
6=>"txt",
|
|
528
|
+
}
|
|
529
|
+
assert_equal(expected.sort, @limtxtline.structure.sort)
|
|
530
|
+
end
|
|
531
|
+
end
|
|
532
|
+
class TestMCMLine < Test::Unit::TestCase
|
|
533
|
+
include FlexMock::TestCase
|
|
534
|
+
def test_structure
|
|
535
|
+
flexstub(Date).should_receive(:"today.strftime").and_return('20110203000000')
|
|
536
|
+
@mcmline = MCMLine.new('fi_oid', 'line_nr', 'language', 'text')
|
|
537
|
+
expected = {
|
|
538
|
+
1=>"31",
|
|
539
|
+
7=>"text",
|
|
540
|
+
2=>"20110203000000",
|
|
541
|
+
3=>"fi_oid",
|
|
542
|
+
4=>"L",
|
|
543
|
+
5=>"line_nr",
|
|
544
|
+
6=>"4",
|
|
545
|
+
}
|
|
546
|
+
assert_equal(expected.sort, @mcmline.structure.sort)
|
|
547
|
+
end
|
|
548
|
+
end
|
|
549
|
+
|
|
550
|
+
# Tests for *Table classes
|
|
551
|
+
class TestTable < Test::Unit::TestCase
|
|
552
|
+
Table::FILENAME = 'table'
|
|
553
|
+
def test_filename
|
|
554
|
+
table = Table.new
|
|
555
|
+
assert_equal('table', table.filename)
|
|
556
|
+
end
|
|
557
|
+
end
|
|
558
|
+
class TestAcTable < Test::Unit::TestCase
|
|
559
|
+
include FlexMock::TestCase
|
|
560
|
+
def test_lines
|
|
561
|
+
flexstub(AcLine).should_receive(:new).and_return('acline')
|
|
562
|
+
@actable = AcTable.new
|
|
563
|
+
assert_equal(['acline'], @actable.lines('package'))
|
|
564
|
+
end
|
|
565
|
+
end
|
|
566
|
+
class TestAccompTable < Test::Unit::TestCase
|
|
567
|
+
include FlexMock::TestCase
|
|
568
|
+
def test_lines
|
|
569
|
+
flexstub(AccompLine).should_receive(:new).and_return('accompline')
|
|
570
|
+
@accomptable = AccompTable.new
|
|
571
|
+
assert_equal(['accompline'], @accomptable.lines('package'))
|
|
572
|
+
end
|
|
573
|
+
end
|
|
574
|
+
class TestAcLimTable < Test::Unit::TestCase
|
|
575
|
+
include FlexMock::TestCase
|
|
576
|
+
def test_lines
|
|
577
|
+
# test package.sl_entry == nil calse
|
|
578
|
+
package = ODDB::Package.new('12')
|
|
579
|
+
@aclimtable = AcLimTable.new
|
|
580
|
+
assert_equal([], @aclimtable.lines(package))
|
|
581
|
+
|
|
582
|
+
# test not nil case
|
|
583
|
+
## preparation
|
|
584
|
+
package.create_sl_entry
|
|
585
|
+
package.sl_entry.create_limitation_text
|
|
586
|
+
paragraphs = [1,2]
|
|
587
|
+
chap = flexmock('chap') do |chap|
|
|
588
|
+
chap.should_receive(:paragraphs).and_return(flexmock('paragraphs') do |para|
|
|
589
|
+
para.should_receive(:each_with_index).and_yield(paragraphs)
|
|
590
|
+
end)
|
|
591
|
+
end
|
|
592
|
+
package.sl_entry.limitation_text.descriptions[0] = chap
|
|
593
|
+
## test
|
|
594
|
+
flexstub(AcLimLine).should_receive(:new).with(1,2,1002).and_return('aclimline')
|
|
595
|
+
assert_equal(['aclimline'], @aclimtable.lines(package))
|
|
596
|
+
end
|
|
597
|
+
end
|
|
598
|
+
class TestAcmedTable < Test::Unit::TestCase
|
|
599
|
+
include FlexMock::TestCase
|
|
600
|
+
def test_lines
|
|
601
|
+
flexstub(AcmedLine).should_receive(:new).and_return('acmedline')
|
|
602
|
+
@acmedtable = AcmedTable.new
|
|
603
|
+
assert_equal(['acmedline'], @acmedtable.lines('package'))
|
|
604
|
+
end
|
|
605
|
+
end
|
|
606
|
+
class TestAcnamTable < Test::Unit::TestCase
|
|
607
|
+
include FlexMock::TestCase
|
|
608
|
+
def test_lines
|
|
609
|
+
flexstub(AcnamLine).should_receive(:new).and_return('acnamline')
|
|
610
|
+
@acnamtable = AcnamTable.new
|
|
611
|
+
assert_equal(['acnamline'], @acnamtable.lines('package'))
|
|
612
|
+
end
|
|
613
|
+
end
|
|
614
|
+
class TestAcOddbTable < Test::Unit::TestCase
|
|
615
|
+
include FlexMock::TestCase
|
|
616
|
+
def test_lines
|
|
617
|
+
# test package.pharmacode nil case
|
|
618
|
+
package = ODDB::Package.new('12')
|
|
619
|
+
@acoddbtable = AcOddbTable.new
|
|
620
|
+
assert_equal([], @acoddbtable.lines(package))
|
|
621
|
+
|
|
622
|
+
# test not nil case
|
|
623
|
+
package.pharmacode = 123
|
|
624
|
+
flexstub(AcOddbLine).should_receive(:new).and_return('acoddbline')
|
|
625
|
+
assert_equal(['acoddbline'], @acoddbtable.lines(package))
|
|
626
|
+
end
|
|
627
|
+
end
|
|
628
|
+
class TestAcpricealgTable < Test::Unit::TestCase
|
|
629
|
+
include FlexMock::TestCase
|
|
630
|
+
def test_lines
|
|
631
|
+
flexstub(AcpricealgPublicLine).should_receive(:new).and_return('acpricepublic')
|
|
632
|
+
flexstub(AcpricealgExfactoryLine).should_receive(:new).and_return('acpriceexfactory')
|
|
633
|
+
@acpricetable = AcpricealgTable.new
|
|
634
|
+
assert_equal(["acpricepublic", "acpriceexfactory"], @acpricetable.lines('package'))
|
|
635
|
+
end
|
|
636
|
+
end
|
|
637
|
+
class TestAcscTable < Test::Unit::TestCase
|
|
638
|
+
include FlexMock::TestCase
|
|
639
|
+
def test_lines
|
|
640
|
+
active_agents = ['act']
|
|
641
|
+
package = flexmock('package') do |pack|
|
|
642
|
+
pack.should_receive(:active_agents).and_return(active_agents)
|
|
643
|
+
end
|
|
644
|
+
|
|
645
|
+
# test
|
|
646
|
+
flexstub(AcscLine).should_receive(:new).with(package, 'act', 0).and_return('acscline')
|
|
647
|
+
@acsctable = AcscTable.new
|
|
648
|
+
assert_equal(['acscline'], @acsctable.lines(package))
|
|
649
|
+
end
|
|
650
|
+
end
|
|
651
|
+
class TestLimitationTable < Test::Unit::TestCase
|
|
652
|
+
include FlexMock::TestCase
|
|
653
|
+
def test_lines
|
|
654
|
+
# test package.sl_entry nil case
|
|
655
|
+
package = ODDB::Package.new('12')
|
|
656
|
+
@limitationtable = LimitationTable.new
|
|
657
|
+
assert_equal([], @limitationtable.lines(package))
|
|
658
|
+
|
|
659
|
+
# test not nil case
|
|
660
|
+
package.create_sl_entry
|
|
661
|
+
package.sl_entry.create_limitation_text
|
|
662
|
+
paragraphs = ['par']
|
|
663
|
+
chap = flexmock('chap') do |cha|
|
|
664
|
+
cha.should_receive(:paragraphs).and_return(paragraphs)
|
|
665
|
+
end
|
|
666
|
+
package.sl_entry.limitation_text.descriptions[0] = chap
|
|
667
|
+
flexstub(package).should_receive(:oid).and_return(123)
|
|
668
|
+
|
|
669
|
+
# test
|
|
670
|
+
flexstub(LimitationLine).should_receive(:new).with(123000).and_return('limitationline')
|
|
671
|
+
assert_equal(['limitationline'], @limitationtable.lines(package))
|
|
672
|
+
end
|
|
673
|
+
end
|
|
674
|
+
class TestLimTxtTable < Test::Unit::TestCase
|
|
675
|
+
include FlexMock::TestCase
|
|
676
|
+
def test_lines
|
|
677
|
+
# test package.sl_entry nil case
|
|
678
|
+
package = ODDB::Package.new('12')
|
|
679
|
+
@limtxttable = LimTxtTable.new
|
|
680
|
+
assert_equal([], @limtxttable.lines(package))
|
|
681
|
+
|
|
682
|
+
# test not nil case
|
|
683
|
+
package.create_sl_entry
|
|
684
|
+
package.sl_entry.create_limitation_text
|
|
685
|
+
flexstub(package).should_receive(:oid).and_return(123)
|
|
686
|
+
paragraph = flexmock('par') do |par|
|
|
687
|
+
par.should_receive(:text).and_return('text')
|
|
688
|
+
end
|
|
689
|
+
paragraphs = [paragraph]
|
|
690
|
+
chap = flexmock('chap') do |cha|
|
|
691
|
+
cha.should_receive(:paragraphs).and_return(paragraphs)
|
|
692
|
+
end
|
|
693
|
+
package.sl_entry.limitation_text.descriptions['lang'] = chap
|
|
694
|
+
|
|
695
|
+
# test
|
|
696
|
+
flexstub(LimTxtLine).should_receive(:new).with(123000, 'L', 'text').and_return('limtxtline')
|
|
697
|
+
assert_equal(['limtxtline'], @limtxttable.lines(package))
|
|
698
|
+
end
|
|
699
|
+
end
|
|
700
|
+
class TestEanTable < Test::Unit::TestCase
|
|
701
|
+
include FlexMock::TestCase
|
|
702
|
+
def test_lines
|
|
703
|
+
flexstub(EanLine).should_receive(:new).and_return('eanline')
|
|
704
|
+
@eantable = EanTable.new
|
|
705
|
+
assert_equal(['eanline'], @eantable.lines('package'))
|
|
706
|
+
end
|
|
707
|
+
end
|
|
708
|
+
# The following constants are necessary for TestMCMTable
|
|
709
|
+
ODDB::Text::ImageLink = 'imagelink'
|
|
710
|
+
ODDB::Text::Table = 'table'
|
|
711
|
+
SERVER_NAME = 'server_name/'
|
|
712
|
+
class TestMCMTable < Test::Unit::TestCase
|
|
713
|
+
include FlexMock::TestCase
|
|
714
|
+
def setup
|
|
715
|
+
@mcmtable = MCMTable.new
|
|
716
|
+
end
|
|
717
|
+
def test_lines
|
|
718
|
+
# test fi.description empty case
|
|
719
|
+
fi = flexmock('fi') do |f|
|
|
720
|
+
f.should_receive(:descriptions).and_return([])
|
|
721
|
+
end
|
|
722
|
+
assert_equal([], @mcmtable.lines(fi))
|
|
723
|
+
|
|
724
|
+
# test not empty case
|
|
725
|
+
flexstub(MCMLine).should_receive(:new).and_return('mcmline')
|
|
726
|
+
chapter = flexmock('chapter') do |chap|
|
|
727
|
+
chap.should_receive(:heading).and_return('')
|
|
728
|
+
chap.should_receive(:sections).and_return([])
|
|
729
|
+
end
|
|
730
|
+
doc = flexmock('doc') do |d|
|
|
731
|
+
d.should_receive(:each_chapter).and_yield(chapter)
|
|
732
|
+
end
|
|
733
|
+
fi = flexmock('fi') do |f|
|
|
734
|
+
f.should_receive(:descriptions).and_return({'lang', doc})
|
|
735
|
+
f.should_receive(:oid).and_return('oid')
|
|
736
|
+
end
|
|
737
|
+
assert_equal(['mcmline'], @mcmtable.lines(fi))
|
|
738
|
+
end
|
|
739
|
+
def test_format_lines__sections_empty
|
|
740
|
+
chapter = flexmock('chapter') do |chap|
|
|
741
|
+
chap.should_receive(:heading).and_return('')
|
|
742
|
+
chap.should_receive(:sections).and_return([])
|
|
743
|
+
end
|
|
744
|
+
|
|
745
|
+
assert_equal('', @mcmtable.format_line(chapter))
|
|
746
|
+
end
|
|
747
|
+
def test_format_lines__sections_not_empty
|
|
748
|
+
format = flexmock('format') do |form|
|
|
749
|
+
form.should_receive(:italic?).and_return(true)
|
|
750
|
+
form.should_receive(:range).and_return(0..7)
|
|
751
|
+
end
|
|
752
|
+
paragraph = flexmock('paragraph') do |par|
|
|
753
|
+
par.should_receive(:text).and_return('par.text')
|
|
754
|
+
par.should_receive(:formats).and_return([format])
|
|
755
|
+
par.should_receive(:preformatted?).and_return(true)
|
|
756
|
+
end
|
|
757
|
+
section = flexmock('section') do |sec|
|
|
758
|
+
sec.should_receive(:subheading).and_return('subhead')
|
|
759
|
+
sec.should_receive(:paragraphs).and_return([paragraph])
|
|
760
|
+
end
|
|
761
|
+
chapter = flexmock('chapter') do |chap|
|
|
762
|
+
chap.should_receive(:heading).and_return('head')
|
|
763
|
+
chap.should_receive(:sections).and_return([section])
|
|
764
|
+
end
|
|
765
|
+
|
|
766
|
+
# test
|
|
767
|
+
expected = "<BI>head<E><P><I>subhead<E><I>par.text<E><P>"
|
|
768
|
+
assert_equal(expected, @mcmtable.format_line(chapter))
|
|
769
|
+
end
|
|
770
|
+
def test_format_lines__ImageLink
|
|
771
|
+
section = flexmock('section') do |sec|
|
|
772
|
+
sec.should_receive(:subheading).and_return('subhead')
|
|
773
|
+
sec.should_receive(:paragraphs).and_return([ODDB::Text::ImageLink])
|
|
774
|
+
end
|
|
775
|
+
chapter = flexmock('chapter') do |chap|
|
|
776
|
+
chap.should_receive(:heading).and_return('head')
|
|
777
|
+
chap.should_receive(:sections).and_return([section])
|
|
778
|
+
end
|
|
779
|
+
|
|
780
|
+
# test
|
|
781
|
+
expected = "<BI>head<E><P><I>subhead<E><IMG src='http://server_name/imagelink.src'/>"
|
|
782
|
+
assert_equal(expected, @mcmtable.format_line(chapter))
|
|
783
|
+
end
|
|
784
|
+
def test_format_lines__Table
|
|
785
|
+
section = flexmock('section') do |sec|
|
|
786
|
+
sec.should_receive(:subheading).and_return('subhead')
|
|
787
|
+
sec.should_receive(:paragraphs).and_return([ODDB::Text::Table])
|
|
788
|
+
end
|
|
789
|
+
chapter = flexmock('chapter') do |chap|
|
|
790
|
+
chap.should_receive(:heading).and_return('head')
|
|
791
|
+
chap.should_receive(:sections).and_return([section])
|
|
792
|
+
end
|
|
793
|
+
|
|
794
|
+
# test
|
|
795
|
+
expected = "<BI>head<E><P><I>subhead<E><N>table<E>"
|
|
796
|
+
assert_equal(expected, @mcmtable.format_line(chapter))
|
|
797
|
+
end
|
|
798
|
+
end
|
|
799
|
+
# the followings are necessary for TestCodesTable
|
|
800
|
+
AtcClass = 'atcclass'
|
|
801
|
+
GalenicForm = 'galenicform'
|
|
802
|
+
class TestCodesTable < Test::Unit::TestCase
|
|
803
|
+
include FlexMock::TestCase
|
|
804
|
+
def setup
|
|
805
|
+
flexstub(AtcLine).should_receive(:new).and_return('atcline')
|
|
806
|
+
flexstub(GalenicFormLine).should_receive(:new).and_return('galenicformline')
|
|
807
|
+
@codestable = CodesTable.new
|
|
808
|
+
end
|
|
809
|
+
def test_atclines
|
|
810
|
+
assert_equal(['atcline'], @codestable.atclines('atcclass'))
|
|
811
|
+
end
|
|
812
|
+
def test_gallines
|
|
813
|
+
assert_equal(['galenicformline'], @codestable.gallines('galform'))
|
|
814
|
+
end
|
|
815
|
+
def test_lines
|
|
816
|
+
assert_equal(['atcline'], @codestable.lines(AtcClass))
|
|
817
|
+
assert_equal(['galenicformline'], @codestable.lines(GalenicForm))
|
|
818
|
+
end
|
|
819
|
+
end
|
|
820
|
+
class TestScTable < Test::Unit::TestCase
|
|
821
|
+
include FlexMock::TestCase
|
|
822
|
+
def test_lines
|
|
823
|
+
flexstub(ScLine).should_receive(:new).and_return('scline')
|
|
824
|
+
@sctable = ScTable.new
|
|
825
|
+
assert_equal(['scline'], @sctable.lines('substance'))
|
|
826
|
+
end
|
|
827
|
+
end
|
|
828
|
+
class TestCompTable < Test::Unit::TestCase
|
|
829
|
+
include FlexMock::TestCase
|
|
830
|
+
def test_lines
|
|
831
|
+
flexstub(CompLine).should_receive(:new).and_return('compline')
|
|
832
|
+
@comptable = CompTable.new
|
|
833
|
+
assert_equal(['compline'], @comptable.lines('company'))
|
|
834
|
+
end
|
|
835
|
+
end
|
|
836
|
+
class TestReadme < Test::Unit::TestCase
|
|
837
|
+
def test_lines
|
|
838
|
+
expected = <<-EOS
|
|
839
|
+
oddbdat.tar.gz und oddbdat.zip enthalten die täglich aktualisierten Artikelstammdaten der ODDB. Die Daten werden von ywesee in das OddbDat-Format umgewandelt und allen gewünschten Systemlieferanten von Schweizer Spitälern zur Verfügung gestellt.
|
|
840
|
+
|
|
841
|
+
Feedback bitte an zdavatz@ywesee.com
|
|
842
|
+
|
|
843
|
+
-AC (Tabelle 1) - ODDB-Code
|
|
844
|
+
-ACMED (Tabelle 2) - Weitere Produktinformationen
|
|
845
|
+
-ACNAM (Tabelle 3) - Sprachen
|
|
846
|
+
-ACBARCODE (Tabelle 6) - EAN-Artikelcode
|
|
847
|
+
-ACPRICEALG (Tabelle 7) - Preise
|
|
848
|
+
-ACLIM (Tabelle 9) - Limitationen
|
|
849
|
+
-LIMTXT (Tabelle 10) - Limitationstexte
|
|
850
|
+
-CODES (Tabelle 11) - Codebeschreibungen (ATC-Beschreibung, Galenische Form)
|
|
851
|
+
-COMP (Tabelle 12) - Hersteller
|
|
852
|
+
-LIMITATION (Tabelle 16) - Limitationen der SL
|
|
853
|
+
-ACCOMP (Tabelle 19) - Verbindungstabelle zwischen AC und COMP
|
|
854
|
+
-SC (Tabelle 40) - Substanzen
|
|
855
|
+
-ACSC (Tabelle 41) - Verbindungstabelle zwischen AC und SC
|
|
856
|
+
-ACODDB (Tabelle 99) - Verbindungstabelle zwischen ODDB-ID und Pharmacode
|
|
857
|
+
|
|
858
|
+
Folgende Tabelle mit den Fachinformationen steht wegen ihrer Grösse separat als tar.gz- oder zip-Download zur Verfügung.
|
|
859
|
+
|
|
860
|
+
-MCM (Tabelle 31) - Fachinformationen
|
|
861
|
+
|
|
862
|
+
Die Daten werden als oddbdat.tar.gz und oddbdat.zip auf unserem Server bereitgestellt - Vorzugsweise benutzen Sie einen der folgenden direkten Links.
|
|
863
|
+
|
|
864
|
+
Ganze Packages (ohne Fachinformationen):
|
|
865
|
+
http://www.oddb.org/resources/downloads/oddbdat.tar.gz
|
|
866
|
+
http://www.oddb.org/resources/downloads/oddbdat.zip
|
|
867
|
+
|
|
868
|
+
Nur Fachinformationen (sehr grosse Dateien):
|
|
869
|
+
http://www.oddb.org/resources/downloads/s31x.tar.gz
|
|
870
|
+
http://www.oddb.org/resources/downloads/s31x.zip
|
|
871
|
+
|
|
872
|
+
|
|
873
|
+
EOS
|
|
874
|
+
assert_equal(expected, Readme.new.lines)
|
|
875
|
+
end
|
|
876
|
+
end
|
|
877
|
+
|
|
878
|
+
end
|
|
879
|
+
end
|
|
880
|
+
|