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.
@@ -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: