oddb2xml 1.2.5 → 1.2.6
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +8 -0
- data/bin/oddb2xml +13 -6
- data/lib/oddb2xml/builder.rb +15 -11
- data/lib/oddb2xml/cli.rb +4 -1
- data/lib/oddb2xml/extractor.rb +32 -21
- data/lib/oddb2xml/version.rb +1 -1
- metadata +28 -28
data/History.txt
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
=== 1.2.6 / 30.01.2013
|
2
|
+
|
3
|
+
* Update to exclude 14-EAN for oddb_with_migel.dat
|
4
|
+
* Create LIMNAMEABAG for code into limitations.xml
|
5
|
+
* Create LIMNIV in limitation.xml
|
6
|
+
* Add lims at parent level into limitations.xml
|
7
|
+
* Fix typo Fr as De
|
8
|
+
|
1
9
|
=== 1.2.5 / 27.01.2013
|
2
10
|
|
3
11
|
* Add missing line break into dat
|
data/bin/oddb2xml
CHANGED
@@ -18,7 +18,9 @@ Usage:
|
|
18
18
|
-f F, --format=F File format F, default is xml. {xml|dat}
|
19
19
|
If F is given, -o option is ignored.
|
20
20
|
-o O, --optional=O Optional output. O, only 'fi' is available.
|
21
|
-
-
|
21
|
+
-i I, --include=I Include target option for 'dat' format. only 'ean14' is available.
|
22
|
+
'xml' format includes always ean14 records.
|
23
|
+
-t S, --tag-suffix=S XML tag suffix S. Default is none. [A-z0-9]
|
22
24
|
If S is given, it is also used as prefix of filename.
|
23
25
|
-h, --help Show this help message.
|
24
26
|
EOS
|
@@ -32,13 +34,15 @@ opts = {
|
|
32
34
|
:fi => false,
|
33
35
|
:tag_suffix => nil,
|
34
36
|
:debug => false,
|
37
|
+
:ean14 => false,
|
35
38
|
}
|
36
39
|
|
37
|
-
parser.on('-a v', '--append v',
|
38
|
-
parser.on('-c v', '--compress v',
|
39
|
-
parser.on('-f v', '--format v',
|
40
|
-
parser.on('-o v', '--optional v',
|
41
|
-
parser.on('-
|
40
|
+
parser.on('-a v', '--append v', /^nonpharma$/) {|v| opts[:nonpharma] = true }
|
41
|
+
parser.on('-c v', '--compress v', /^tar\.gz|zip$/){|v| opts[:compress_ext] = v }
|
42
|
+
parser.on('-f v', '--format v', /^xml|dat$/) {|v| opts[:format] = v.intern }
|
43
|
+
parser.on('-o v', '--optional v', /^fi$/) {|v| opts[:fi] = true }
|
44
|
+
parser.on('-i v', '--include v', /^ean14$/) {|v| opts[:ean14] = true }
|
45
|
+
parser.on('-t v', '--tag-suffix v', /^[A-z0-9]*$/i) {|v| opts[:tag_suffix] = v.upcase }
|
42
46
|
#parser.on('--debug') {|v| opts[:debug] = true }
|
43
47
|
parser.on_tail('-h', '--help') { puts help; exit }
|
44
48
|
|
@@ -54,6 +58,9 @@ end
|
|
54
58
|
|
55
59
|
ui = Oddb2xml::Cli.new(opts)
|
56
60
|
begin
|
61
|
+
if opts[:format] == :xml
|
62
|
+
opts[:ean14] = true # force
|
63
|
+
end
|
57
64
|
#puts opts if opts[:debug]
|
58
65
|
ui.run
|
59
66
|
rescue Interrupt
|
data/lib/oddb2xml/builder.rb
CHANGED
@@ -20,7 +20,7 @@ module Oddb2xml
|
|
20
20
|
attr_accessor :subject, :index, :items, :flags,
|
21
21
|
:actions,
|
22
22
|
:orphans, :fridges,
|
23
|
-
:infos, :packs,
|
23
|
+
:infos, :packs, :ean14,
|
24
24
|
:tag_suffix
|
25
25
|
def initialize
|
26
26
|
@subject = nil
|
@@ -32,6 +32,7 @@ module Oddb2xml
|
|
32
32
|
@actions = []
|
33
33
|
@orphans = []
|
34
34
|
@fridges = []
|
35
|
+
@ean14 = true
|
35
36
|
@tag_suffix = nil
|
36
37
|
if block_given?
|
37
38
|
yield self
|
@@ -88,7 +89,7 @@ module Oddb2xml
|
|
88
89
|
@limitations += pac[:limitations]
|
89
90
|
end
|
90
91
|
end
|
91
|
-
@limitations.uniq!
|
92
|
+
@limitations.uniq! {|lim| lim[:code] + lim[:type] }
|
92
93
|
@limitations.sort_by!{|lim| lim[:code] }
|
93
94
|
end
|
94
95
|
end
|
@@ -178,10 +179,12 @@ module Oddb2xml
|
|
178
179
|
) {
|
179
180
|
@limitations.each do |lim|
|
180
181
|
xml.LIM('DT' => '') {
|
181
|
-
xml.LIMCD lim[:
|
182
|
+
xml.LIMCD lim[:key] # swissmedic_number8 or swissmedic_number5
|
182
183
|
xml.IT lim[:it]
|
183
184
|
xml.LIMTYP lim[:type]
|
184
185
|
xml.LIMVAL lim[:value]
|
186
|
+
xml.LIMNAMEBAG lim[:code] # LIMCD
|
187
|
+
xml.LIMNIV lim[:niv]
|
185
188
|
xml.DSCRD lim[:desc_de]
|
186
189
|
xml.DSCRF lim[:desc_fr]
|
187
190
|
xml.VDAT lim[:vdate]
|
@@ -351,7 +354,7 @@ module Oddb2xml
|
|
351
354
|
#xml.DOSEU
|
352
355
|
#xml.DRGFD
|
353
356
|
#xml.DRGFF
|
354
|
-
seq[:packages].values.first[:
|
357
|
+
seq[:packages].values.first[:swissmedic_number8] =~ /(\d{5})(\d{3})/
|
355
358
|
xml.ORPH @orphans.include?($1.to_s) ? true : false
|
356
359
|
#xml.BIOPHA
|
357
360
|
#xml.BIOSIM
|
@@ -462,7 +465,7 @@ module Oddb2xml
|
|
462
465
|
end
|
463
466
|
if bg_pac
|
464
467
|
xml.SMCAT bg_pac[:swissmedic_category] unless bg_pac[:swissmedic_category].empty?
|
465
|
-
xml.SMNO bg_pac[:
|
468
|
+
xml.SMNO bg_pac[:swissmedic_number8] unless bg_pac[:swissmedic_number8].empty?
|
466
469
|
end
|
467
470
|
#xml.HOSPCD
|
468
471
|
#xml.CLINCD
|
@@ -477,8 +480,8 @@ module Oddb2xml
|
|
477
480
|
end
|
478
481
|
#xml.GRDFR
|
479
482
|
if bg_pac
|
480
|
-
if !bg_pac[:
|
481
|
-
bg_pac[:
|
483
|
+
if !bg_pac[:swissmedic_number8].empty? and
|
484
|
+
bg_pac[:swissmedic_number8].to_s =~ /(\d{5})(\d{3})/
|
482
485
|
xml.COOL 1 if @fridges.include?($1.to_s)
|
483
486
|
end
|
484
487
|
end
|
@@ -663,7 +666,7 @@ module Oddb2xml
|
|
663
666
|
# prod
|
664
667
|
@products.each do |seq|
|
665
668
|
seq[:packages].values.each do |pac|
|
666
|
-
if pac[:
|
669
|
+
if pac[:swissmedic_number8] =~ /(\d{5})(\d{3})/
|
667
670
|
number = $1.to_s
|
668
671
|
if i = info_index[number]
|
669
672
|
length += 1
|
@@ -740,11 +743,11 @@ module Oddb2xml
|
|
740
743
|
if obj[:seq]
|
741
744
|
pac = obj[:seq][:packages][de_pac[:pharmacode]]
|
742
745
|
end
|
743
|
-
# :
|
746
|
+
# :swissmedic_numbers
|
744
747
|
if de_pac[:ean].length == 13
|
745
|
-
num = de_pac[:ean][4,8].intern
|
748
|
+
num = de_pac[:ean][4,8].intern # :swissmedic_number5
|
746
749
|
elsif pac
|
747
|
-
num = pac[:
|
750
|
+
num = pac[:swissmedic_number8].intern
|
748
751
|
end
|
749
752
|
row << "%#{DAT_LEN[:RECA]}s" % '11'
|
750
753
|
row << "%#{DAT_LEN[:CMUT]}s" % if (phar = de_pac[:pharmacode] and phar.size > 3) # does not check expiration_date
|
@@ -799,6 +802,7 @@ module Oddb2xml
|
|
799
802
|
@articles.each do |obj|
|
800
803
|
row = ''
|
801
804
|
de_pac = obj[:de]
|
805
|
+
next if (!ean14 && de_pac[:ean].to_s.length != 13)
|
802
806
|
# Oddb2tdat.parse_migel
|
803
807
|
row << "%#{DAT_LEN[:RECA]}s" % '11'
|
804
808
|
row << "%#{DAT_LEN[:CMUT]}s" % if (phar = de_pac[:pharmacode] and phar.size > 3)
|
data/lib/oddb2xml/cli.rb
CHANGED
@@ -162,7 +162,10 @@ module Oddb2xml
|
|
162
162
|
builder.index = index
|
163
163
|
_sbj = (type == :pharma ? :dat : :with_migel_dat)
|
164
164
|
builder.subject = _sbj
|
165
|
-
|
165
|
+
if type == :nonpharma
|
166
|
+
output << "\n"
|
167
|
+
builder.ean14 = @options[:ean14]
|
168
|
+
end
|
166
169
|
output << builder.to_dat
|
167
170
|
end
|
168
171
|
else
|
data/lib/oddb2xml/extractor.rb
CHANGED
@@ -22,6 +22,7 @@ module Oddb2xml
|
|
22
22
|
item[:desc_fr] = (desc = seq.at_xpath('.//DescriptionFr')) ? desc.text : ''
|
23
23
|
item[:name_de] = (name = seq.at_xpath('.//NameDe')) ? name.text : ''
|
24
24
|
item[:name_fr] = (name = seq.at_xpath('.//NameFr')) ? name.text : ''
|
25
|
+
item[:swissmedic_number5] = (num5 = seq.at_xpath('.//SwissmedicNo5')) ? num5.text : ''
|
25
26
|
item[:org_gen_code] = (orgc = seq.at_xpath('.//OrgGenCode')) ? orgc.text : ''
|
26
27
|
item[:deductible] = (ddbl = seq.at_xpath('.//FlagSB20')) ? ddbl.text : ''
|
27
28
|
item[:atc_code] = (atcc = seq.at_xpath('.//AtcCode')) ? atcc.text : ''
|
@@ -54,7 +55,7 @@ module Oddb2xml
|
|
54
55
|
item[:packages][phar] = {
|
55
56
|
:pharmacode => phar,
|
56
57
|
:swissmedic_category => (cat = pac.at_xpath('.//SwissmedicCategory')) ? cat.text : '',
|
57
|
-
:
|
58
|
+
:swissmedic_number8 => (num = pac.at_xpath('.//SwissmedicNo8')) ? num.text : '',
|
58
59
|
:narcosis_flag => (flg = pac.at_xpath('.//FlagNarcosis')) ? flg.text : '',
|
59
60
|
:prices => {
|
60
61
|
:exf_price => {
|
@@ -69,28 +70,38 @@ module Oddb2xml
|
|
69
70
|
}
|
70
71
|
}
|
71
72
|
}
|
72
|
-
#
|
73
|
+
# limitations
|
73
74
|
item[:packages][phar][:limitations] = []
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
75
|
+
limitations = Hash.new{|h,k| h[k] = [] }
|
76
|
+
# seq - level
|
77
|
+
limitations[:seq] = (lims = seq.xpath('.//Limitations/Limitation')) ? lims.to_a : nil
|
78
|
+
# pac - level
|
79
|
+
limitations[:pac] = (lims = pac.xpath('.//Limitations/Limitation')) ? lims.to_a : nil
|
80
|
+
limitations.each_pair do |key, lims|
|
81
|
+
key = (key == :pac ? item[:packages][phar][:swissmedic_number8] : item[:swissmedic_number5])
|
82
|
+
lims.each do |lim|
|
83
|
+
limitation = {
|
84
|
+
:it => item[:it_code],
|
85
|
+
:key => key,
|
86
|
+
:code => (lic = lim.at_xpath('.//LimitationCode')) ? lic.text : '',
|
87
|
+
:type => (lit = lim.at_xpath('.//LimitationType')) ? lit.text : '',
|
88
|
+
:value => (liv = lim.at_xpath('.//LimitationValue')) ? liv.text : '',
|
89
|
+
:niv => (niv = lim.at_xpath('.//LimitationNiveau')) ? niv.text : '',
|
90
|
+
:desc_de => (dsc = lim.at_xpath('.//DescriptionDe')) ? dsc.text : '',
|
91
|
+
:desc_fr => (dsc = lim.at_xpath('.//DescriptionFr')) ? dsc.text : '',
|
92
|
+
:vdate => (dat = lim.at_xpath('.//ValidFromDate')) ? dat.text : '',
|
93
|
+
}
|
94
|
+
deleted = false
|
95
|
+
if upto = ((thr = lim.at_xpath('.//ValidThruDate')) ? thr.text : nil) and
|
96
|
+
upto =~ /\d{2}\.\d{2}\.\d{2}/
|
97
|
+
begin
|
98
|
+
deleted = true if Date.strptime(upto, '%d.%m.%y') >= Date.today
|
99
|
+
rescue ArgumentError
|
100
|
+
end
|
90
101
|
end
|
102
|
+
limitation[:del] = deleted
|
103
|
+
item[:packages][phar][:limitations] << limitation
|
91
104
|
end
|
92
|
-
limitation[:del] = deleted
|
93
|
-
item[:packages][phar][:limitations] << limitation
|
94
105
|
end
|
95
106
|
# limitation points
|
96
107
|
pts = pac.at_xpath('.//PointLimitations/PointLimitation/Points') # only first points
|
@@ -165,7 +176,7 @@ module Oddb2xml
|
|
165
176
|
data = {}
|
166
177
|
case @type
|
167
178
|
when :packages
|
168
|
-
i_5,i_3 = 0,10 # :
|
179
|
+
i_5,i_3 = 0,10 # :swissmedic_numbers
|
169
180
|
cat = 13 # :swissmedic_category
|
170
181
|
ith = 4 # :ith_swissmedic (swissmedic-diff)
|
171
182
|
@sheet.each do |row|
|
data/lib/oddb2xml/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oddb2xml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-01-
|
12
|
+
date: 2013-01-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rubyzip
|
16
|
-
requirement: &
|
16
|
+
requirement: &7579920 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *7579920
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: archive-tar-minitar
|
27
|
-
requirement: &
|
27
|
+
requirement: &7579260 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *7579260
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: mechanize
|
38
|
-
requirement: &
|
38
|
+
requirement: &7578660 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *7578660
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: nokogiri
|
49
|
-
requirement: &
|
49
|
+
requirement: &7578060 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *7578060
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: savon
|
60
|
-
requirement: &
|
60
|
+
requirement: &7577380 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '2.0'
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *7577380
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: spreadsheet
|
71
|
-
requirement: &
|
71
|
+
requirement: &7576740 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *7576740
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: rspec
|
82
|
-
requirement: &
|
82
|
+
requirement: &7576020 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *7576020
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: webmock
|
93
|
-
requirement: &
|
93
|
+
requirement: &7575460 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *7575460
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: ZenTest
|
104
|
-
requirement: &
|
104
|
+
requirement: &7574940 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
@@ -109,10 +109,10 @@ dependencies:
|
|
109
109
|
version: '0'
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *7574940
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: hoe
|
115
|
-
requirement: &
|
115
|
+
requirement: &7574380 !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
118
118
|
- - ! '>='
|
@@ -120,10 +120,10 @@ dependencies:
|
|
120
120
|
version: '3.4'
|
121
121
|
type: :development
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: *
|
123
|
+
version_requirements: *7574380
|
124
124
|
- !ruby/object:Gem::Dependency
|
125
125
|
name: rdoc
|
126
|
-
requirement: &
|
126
|
+
requirement: &7573720 !ruby/object:Gem::Requirement
|
127
127
|
none: false
|
128
128
|
requirements:
|
129
129
|
- - ! '>='
|
@@ -131,10 +131,10 @@ dependencies:
|
|
131
131
|
version: '0'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
|
-
version_requirements: *
|
134
|
+
version_requirements: *7573720
|
135
135
|
- !ruby/object:Gem::Dependency
|
136
136
|
name: rdoc
|
137
|
-
requirement: &
|
137
|
+
requirement: &7572680 !ruby/object:Gem::Requirement
|
138
138
|
none: false
|
139
139
|
requirements:
|
140
140
|
- - ~>
|
@@ -142,10 +142,10 @@ dependencies:
|
|
142
142
|
version: '3.10'
|
143
143
|
type: :development
|
144
144
|
prerelease: false
|
145
|
-
version_requirements: *
|
145
|
+
version_requirements: *7572680
|
146
146
|
- !ruby/object:Gem::Dependency
|
147
147
|
name: hoe
|
148
|
-
requirement: &
|
148
|
+
requirement: &7570120 !ruby/object:Gem::Requirement
|
149
149
|
none: false
|
150
150
|
requirements:
|
151
151
|
- - ~>
|
@@ -153,7 +153,7 @@ dependencies:
|
|
153
153
|
version: '2.13'
|
154
154
|
type: :development
|
155
155
|
prerelease: false
|
156
|
-
version_requirements: *
|
156
|
+
version_requirements: *7570120
|
157
157
|
description: oddb2xml creates xml files using swissINDEX, BAG-XML and Swissmedic.
|
158
158
|
email: yasaka@ywesee.com, zdavatz@ywesee.com
|
159
159
|
executables:
|