oddb2xml 1.3.0 → 1.3.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.
@@ -1,3 +1,7 @@
1
+ === 1.3.1 / 04.02.2013
2
+
3
+ * Update product.xml with swissINDEX and Packungen.xls
4
+
1
5
  === 1.3.0 / 04.02.2013
2
6
 
3
7
  * Change PRDNO in product.xml to GTIN from INDEX
@@ -141,17 +141,33 @@ module Oddb2xml
141
141
  end
142
142
  def prepare_products
143
143
  unless @products
144
- # merge company info from swissINDEX
145
144
  @products = []
146
145
  @products = @items.values.uniq.map do |seq|
147
146
  %w[de fr].each do |lang|
147
+ # Values come from swissINDEX and Packungen.xls
148
+ # * company_name
149
+ # * atc_code
150
+ # * it_code
151
+ it_code = ''
152
+ if ppac = @packs[seq[:swissmedic_number5]]
153
+ ht_code = ppac[:ith_swissmedic]
154
+ end
148
155
  name_key = "company_name_#{lang}".intern
149
- seq[name_key] = ''
150
- if pharmacode = seq[:pharmacodes].first
151
- indices = @index[lang.upcase]
152
- if index = indices[pharmacode]
153
- seq[:ean] = index[:ean]
154
- seq[name_key] = index[:company_name]
156
+ seq[name_key] = ''
157
+ indices = @index[lang.upcase]
158
+ seq[:packages].each_pair do |phar, pac|
159
+ if index = indices[phar]
160
+ if seq[name_key].empty?
161
+ seq[name_key] = index[:company_name]
162
+ end
163
+ if it_code.empty? and
164
+ num = pac[:swissmedic_number8] and
165
+ ppac = @packs[num]
166
+ it_code = ppac[:ith_swissmedic]
167
+ end
168
+ seq[:atc_code] = index[:atc_code]
169
+ seq[:it_code] = it_code
170
+ seq[:packages][phar][:ean] = index[:ean]
155
171
  end
156
172
  end
157
173
  end
@@ -344,116 +360,121 @@ module Oddb2xml
344
360
  'PROD_DATE' => datetime,
345
361
  'VALID_DATE' => datetime,
346
362
  ) {
363
+ length = 0
347
364
  @products.each do |seq|
348
- xml.PRD('DT' => '') {
349
- xml.GTIN seq[:ean] if seq[:ean] and !seq[:ean].empty?
350
- %w[de fr].each do |l|
351
- name = "name_#{l}".intern
352
- desc = "desc_#{l}".intern
353
- elem = "DSCR" + l[0].upcase
354
- if !seq[name].empty? and !seq[desc].empty?
355
- xml.send(elem, seq[name] + ' ' + seq[desc])
356
- elsif !seq[desc].empty?
357
- xml.send(elem, seq[desc])
358
- end
359
- end
360
- #xml.BNAMD
361
- #xml.BNAMF
362
- #xml.ADNAMD
363
- #xml.ADNAMF
364
- #xml.SIZE
365
- xml.ADINFD seq[:comment_de] unless seq[:comment_de].empty?
366
- xml.ADINFF seq[:comment_fr] unless seq[:comment_fr].empty?
367
- xml.GENCD seq[:org_gen_code] unless seq[:org_gen_code].empty?
368
- #xml.GENGRP
369
- xml.ATC seq[:atc_code] unless seq[:atc_code].empty?
370
- xml.IT seq[:it_code] unless seq[:it_code].empty?
371
- #xml.ITBAG
372
- #xml.KONO
373
- #xml.TRADE
374
- #xml.PRTNO
375
- #xml.MONO
376
- #xml.CDGALD
377
- #xml.CDGALF
378
- #xml.FORMD
379
- #xml.FORMF
380
- #xml.DOSE
381
- #xml.DOSEU
382
- #xml.DRGFD
383
- #xml.DRGFF
384
- seq[:packages].values.first[:swissmedic_number8] =~ /(\d{5})(\d{3})/
385
- xml.ORPH @orphans.include?($1.to_s) ? true : false
386
- #xml.BIOPHA
387
- #xml.BIOSIM
388
- #xml.BFS
389
- #xml.BLOOD
390
- #xml.MSCD # always empty
391
- #xml.DEL
392
- xml.CPT {
393
- #xml.CPTLNO
394
- #xml.CNAMED
395
- #xml.CNAMEF
396
- #xml.IDXIND
397
- #xml.DDDD
398
- #xml.DDDU
399
- #xml.DDDA
400
- #xml.IDXIA
401
- #xml.IXREL
402
- #xml.GALF
403
- #xml.DRGGRPCD
404
- #xml.PRBSUIT
405
- #xml.CSOLV
406
- #xml.CSOLVQ
407
- #xml.CSOLVQU
408
- #xml.PHVAL
409
- #xml.LSPNSOL
410
- #xml.APDURSOL
411
- #xml.EXCIP
412
- #xml.EXCIPQ
413
- #xml.EXCIPCD
414
- #xml.EXCIPCF
415
- #xml.PQTY
416
- #xml.PQTYU
417
- #xml.SIZEMM
418
- #xml.WEIGHT
419
- #xml.LOOKD
420
- #xml.LOOKF
421
- #xml.IMG2
422
- seq[:substances].each do |sub|
423
- xml.CPTCMP {
424
- xml.LINE sub[:index] unless sub[:index].empty?
425
- xml.SUBNO @substances.index(sub[:name]) + 1 if @substances.include?(sub[:name])
426
- xml.QTY sub[:quantity] unless sub[:quantity].empty?
427
- xml.QTYU sub[:unit] unless sub[:unit].empty?
428
- #xml.WHK
429
- }
365
+ seq[:packages].each_value do |pac|
366
+ next if !pac[:ean] or pac[:ean].empty?
367
+ length += 1
368
+ xml.PRD('DT' => '') {
369
+ xml.GTIN pac[:ean]
370
+ %w[de fr].each do |l|
371
+ name = "name_#{l}".intern
372
+ desc = "desc_#{l}".intern
373
+ elem = "DSCR" + l[0].upcase
374
+ if !seq[name].empty? and !seq[desc].empty?
375
+ xml.send(elem, seq[name] + ' ' + seq[desc])
376
+ elsif !seq[desc].empty?
377
+ xml.send(elem, seq[desc])
378
+ end
430
379
  end
431
- @interactions.each do |ix|
432
- if [ix[:act1], ix[:act2]].include?(seq[:atc_code])
433
- xml.CPTIX {
434
- xml.IXNO ix[:ixno]
435
- #xml.GRP
436
- xml.RLV @codes[ix[:grad]]
380
+ #xml.BNAMD
381
+ #xml.BNAMF
382
+ #xml.ADNAMD
383
+ #xml.ADNAMF
384
+ #xml.SIZE
385
+ xml.ADINFD seq[:comment_de] unless seq[:comment_de].empty?
386
+ xml.ADINFF seq[:comment_fr] unless seq[:comment_fr].empty?
387
+ xml.GENCD seq[:org_gen_code] unless seq[:org_gen_code].empty?
388
+ #xml.GENGRP
389
+ xml.ATC seq[:atc_code] unless seq[:atc_code].empty?
390
+ xml.IT seq[:it_code] unless seq[:it_code].empty?
391
+ #xml.ITBAG
392
+ #xml.KONO
393
+ #xml.TRADE
394
+ #xml.PRTNO
395
+ #xml.MONO
396
+ #xml.CDGALD
397
+ #xml.CDGALF
398
+ #xml.FORMD
399
+ #xml.FORMF
400
+ #xml.DOSE
401
+ #xml.DOSEU
402
+ #xml.DRGFD
403
+ #xml.DRGFF
404
+ pac[:swissmedic_number8] =~ /(\d{5})(\d{3})/
405
+ xml.ORPH @orphans.include?($1.to_s) ? true : false
406
+ #xml.BIOPHA
407
+ #xml.BIOSIM
408
+ #xml.BFS
409
+ #xml.BLOOD
410
+ #xml.MSCD # always empty
411
+ #xml.DEL
412
+ xml.CPT {
413
+ #xml.CPTLNO
414
+ #xml.CNAMED
415
+ #xml.CNAMEF
416
+ #xml.IDXIND
417
+ #xml.DDDD
418
+ #xml.DDDU
419
+ #xml.DDDA
420
+ #xml.IDXIA
421
+ #xml.IXREL
422
+ #xml.GALF
423
+ #xml.DRGGRPCD
424
+ #xml.PRBSUIT
425
+ #xml.CSOLV
426
+ #xml.CSOLVQ
427
+ #xml.CSOLVQU
428
+ #xml.PHVAL
429
+ #xml.LSPNSOL
430
+ #xml.APDURSOL
431
+ #xml.EXCIP
432
+ #xml.EXCIPQ
433
+ #xml.EXCIPCD
434
+ #xml.EXCIPCF
435
+ #xml.PQTY
436
+ #xml.PQTYU
437
+ #xml.SIZEMM
438
+ #xml.WEIGHT
439
+ #xml.LOOKD
440
+ #xml.LOOKF
441
+ #xml.IMG2
442
+ seq[:substances].each do |sub|
443
+ xml.CPTCMP {
444
+ xml.LINE sub[:index] unless sub[:index].empty?
445
+ xml.SUBNO @substances.index(sub[:name]) + 1 if @substances.include?(sub[:name])
446
+ xml.QTY sub[:quantity] unless sub[:quantity].empty?
447
+ xml.QTYU sub[:unit] unless sub[:unit].empty?
448
+ #xml.WHK
437
449
  }
438
450
  end
439
- end
440
- #xml.CPTROA {
441
- #xml.SYSLOC
442
- #xml.ROA
451
+ @interactions.each do |ix|
452
+ if [ix[:act1], ix[:act2]].include?(seq[:atc_code])
453
+ xml.CPTIX {
454
+ xml.IXNO ix[:ixno]
455
+ #xml.GRP
456
+ xml.RLV @codes[ix[:grad]]
457
+ }
458
+ end
459
+ end
460
+ #xml.CPTROA {
461
+ #xml.SYSLOC
462
+ #xml.ROA
463
+ #}
464
+ }
465
+ #xml.PRDICD { # currently empty
466
+ #xml.ICD
467
+ #xml.RTYP
468
+ #xml.RSIG
469
+ #xml.REMD
470
+ #xml.REMF
443
471
  #}
444
472
  }
445
- #xml.PRDICD { # currently empty
446
- #xml.ICD
447
- #xml.RTYP
448
- #xml.RSIG
449
- #xml.REMD
450
- #xml.REMF
451
- #}
452
- }
473
+ end
453
474
  end
454
475
  xml.RESULT {
455
476
  xml.OK_ERROR 'OK'
456
- xml.NBR_RECORD @products.length.to_s
477
+ xml.NBR_RECORD length.to_s
457
478
  xml.ERROR_CODE ''
458
479
  xml.MESSAGE ''
459
480
  }
@@ -700,11 +721,13 @@ module Oddb2xml
700
721
  seq[:packages].values.each do |pac|
701
722
  if pac[:swissmedic_number8] =~ /(\d{5})(\d{3})/
702
723
  number = $1.to_s
703
- if i = info_index[number]
724
+ if ((i = info_index[number]) and
725
+ (pac[:ean] and pac[:ean][0..3] == '7680'))
704
726
  length += 1
705
727
  xml.KP('DT' => '') {
706
728
  xml.MONID @infos[lang][i][:monid]
707
- xml.PRDNO seq[:product_key] unless seq[:product_key].empty?
729
+ xml.GTIN pac[:ean]
730
+ xml.LANG lang
708
731
  # as orphans ?
709
732
  xml.DEL @orphans.include?(number) ? true : false
710
733
  }
@@ -188,7 +188,7 @@ module Oddb2xml
188
188
  when :packages
189
189
  i_5,i_3 = 0,10 # :swissmedic_numbers
190
190
  cat = 13 # :swissmedic_category
191
- ith = 4 # :ith_swissmedic (swissmedic-diff)
191
+ ith = 4 # :ith_swissmedic IT-Code (swissmedic-diff)
192
192
  @sheet.each do |row|
193
193
  no8 = extract_number(row, i_5).to_s + extract_number(row, i_3, /^\d{3}$/).to_s
194
194
  unless no8.empty?
@@ -254,8 +254,8 @@ module Oddb2xml
254
254
  item[:paragraph] = "<title><p>#{item[:name]}</p></title>" +
255
255
  ((paragraph = html.xpath("///div[@class='paragraph']")) ? paragraph.to_s : '')
256
256
  if text = html.xpath("///div[@id='Section7750']/p").text
257
- if text =~ /(\d{5})[,\s]*(\d{5})?/
258
- [$1, $2].compact.each do |n|
257
+ if text =~ /(\d{5})[,\s]*(\d{5})?[,\s]*(\d{5})?/ or # max 3 numbers
258
+ [$1, $2, $3].compact.each do |n|
259
259
  item[:monid] = n
260
260
  data[lang] << item
261
261
  end
@@ -1,3 +1,3 @@
1
1
  module Oddb2xml
2
- VERSION = "1.3.0"
2
+ VERSION = "1.3.1"
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.3.0
4
+ version: 1.3.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2013-02-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rubyzip
16
- requirement: &12823180 !ruby/object:Gem::Requirement
16
+ requirement: &8803620 !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: *12823180
24
+ version_requirements: *8803620
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: archive-tar-minitar
27
- requirement: &12822440 !ruby/object:Gem::Requirement
27
+ requirement: &8802860 !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: *12822440
35
+ version_requirements: *8802860
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: mechanize
38
- requirement: &12821860 !ruby/object:Gem::Requirement
38
+ requirement: &8802240 !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: *12821860
46
+ version_requirements: *8802240
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: nokogiri
49
- requirement: &12820840 !ruby/object:Gem::Requirement
49
+ requirement: &8801360 !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: *12820840
57
+ version_requirements: *8801360
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: savon
60
- requirement: &12820000 !ruby/object:Gem::Requirement
60
+ requirement: &8800260 !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: *12820000
68
+ version_requirements: *8800260
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: spreadsheet
71
- requirement: &12819040 !ruby/object:Gem::Requirement
71
+ requirement: &8799500 !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: *12819040
79
+ version_requirements: *8799500
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rspec
82
- requirement: &12818280 !ruby/object:Gem::Requirement
82
+ requirement: &8798780 !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: *12818280
90
+ version_requirements: *8798780
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: webmock
93
- requirement: &12817400 !ruby/object:Gem::Requirement
93
+ requirement: &8797940 !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: *12817400
101
+ version_requirements: *8797940
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: ZenTest
104
- requirement: &12816780 !ruby/object:Gem::Requirement
104
+ requirement: &8797360 !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: *12816780
112
+ version_requirements: *8797360
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: hoe
115
- requirement: &12816200 !ruby/object:Gem::Requirement
115
+ requirement: &8796800 !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: *12816200
123
+ version_requirements: *8796800
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: rdoc
126
- requirement: &12815740 !ruby/object:Gem::Requirement
126
+ requirement: &8796360 !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: *12815740
134
+ version_requirements: *8796360
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: rdoc
137
- requirement: &12814940 !ruby/object:Gem::Requirement
137
+ requirement: &8795540 !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: *12814940
145
+ version_requirements: *8795540
146
146
  - !ruby/object:Gem::Dependency
147
147
  name: hoe
148
- requirement: &12814420 !ruby/object:Gem::Requirement
148
+ requirement: &8795040 !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: *12814420
156
+ version_requirements: *8795040
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: