oddb2xml 1.2.5 → 1.2.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -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
- -t S, --tag-suffix=S XML tag suffix S. Default is none. [A-z0-9_]
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', /nonpharma/) {|v| opts[:nonpharma] = true }
38
- parser.on('-c v', '--compress v', /tar\.gz|zip/) {|v| opts[:compress_ext] = v }
39
- parser.on('-f v', '--format v', /dat/) {|v| opts[:format] = :dat }
40
- parser.on('-o v', '--optional v', /fi/) {|v| opts[:fi] = true }
41
- parser.on('-t v', '--tag-suffix v', /^[A-z0-9_]*$/i) {|v| opts[:tag_suffix] = v.upcase }
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
@@ -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[:code]
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[:swissmedic_number] =~ /(\d{5})(\d{3})/
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[:swissmedic_number] unless bg_pac[:swissmedic_number].empty?
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[:swissmedic_number].empty? and
481
- bg_pac[:swissmedic_number].to_s =~ /(\d{5})(\d{3})/
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[:swissmedic_number] =~ /(\d{5})(\d{3})/
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
- # :swissmedic_number
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[:swissmedic_number].intern
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)
@@ -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
- output << "\n" if type == :nonpharma
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
@@ -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
- :swissmedic_number => (num = pac.at_xpath('.//SwissmedicNo8')) ? num.text : '',
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
- # limitation
73
+ # limitations
73
74
  item[:packages][phar][:limitations] = []
74
- pac.xpath('.//Limitation').each do |lim|
75
- limitation = {
76
- :it => item[:it_code],
77
- :code => (lic = lim.at_xpath('.//LimitationCode')) ? lic.text : '',
78
- :type => (lit = lim.at_xpath('.//LimitationType')) ? lit.text : '',
79
- :value => (liv = lim.at_xpath('.//LimitationValue')) ? liv.text : '',
80
- :desc_de => (dsc = lim.at_xpath('.//DescriptionDe')) ? dsc.text : '',
81
- :desc_fr => (dsc = lim.at_xpath('.//DescriptionDe')) ? dsc.text : '',
82
- :vdate => (dat = lim.at_xpath('.//ValidFromDate')) ? dat.text : '',
83
- }
84
- deleted = false
85
- if upto = ((thr = lim.at_xpath('.//ValidThruDate')) ? thr.text : nil) and
86
- upto =~ /\d{2}\.\d{2}\.\d{2}/
87
- begin
88
- deleted = true if Date.strptime(upto, '%d.%m.%y') >= Date.today
89
- rescue ArgumentError
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 # :swissmedic_number
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|
@@ -1,3 +1,3 @@
1
1
  module Oddb2xml
2
- VERSION = "1.2.5"
2
+ VERSION = "1.2.6"
3
3
  end
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.5
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-27 00:00:00.000000000 Z
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: &7769140 !ruby/object:Gem::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: *7769140
24
+ version_requirements: *7579920
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: archive-tar-minitar
27
- requirement: &7768600 !ruby/object:Gem::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: *7768600
35
+ version_requirements: *7579260
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: mechanize
38
- requirement: &7768000 !ruby/object:Gem::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: *7768000
46
+ version_requirements: *7578660
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: nokogiri
49
- requirement: &7842440 !ruby/object:Gem::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: *7842440
57
+ version_requirements: *7578060
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: savon
60
- requirement: &7841360 !ruby/object:Gem::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: *7841360
68
+ version_requirements: *7577380
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: spreadsheet
71
- requirement: &7840800 !ruby/object:Gem::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: *7840800
79
+ version_requirements: *7576740
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rspec
82
- requirement: &7840060 !ruby/object:Gem::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: *7840060
90
+ version_requirements: *7576020
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: webmock
93
- requirement: &7839060 !ruby/object:Gem::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: *7839060
101
+ version_requirements: *7575460
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: ZenTest
104
- requirement: &7837800 !ruby/object:Gem::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: *7837800
112
+ version_requirements: *7574940
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: hoe
115
- requirement: &7836020 !ruby/object:Gem::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: *7836020
123
+ version_requirements: *7574380
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: rdoc
126
- requirement: &7835320 !ruby/object:Gem::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: *7835320
134
+ version_requirements: *7573720
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: rdoc
137
- requirement: &7756700 !ruby/object:Gem::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: *7756700
145
+ version_requirements: *7572680
146
146
  - !ruby/object:Gem::Dependency
147
147
  name: hoe
148
- requirement: &7755060 !ruby/object:Gem::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: *7755060
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: