oddb2xml 1.2.5 → 1.2.6
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/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:
|