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.
- data/History.txt +4 -0
- data/lib/oddb2xml/builder.rb +133 -110
- data/lib/oddb2xml/extractor.rb +3 -3
- data/lib/oddb2xml/version.rb +1 -1
- metadata +27 -27
data/History.txt
CHANGED
data/lib/oddb2xml/builder.rb
CHANGED
@@ -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
|
-
|
151
|
-
|
152
|
-
if index = indices[
|
153
|
-
seq[
|
154
|
-
|
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
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
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
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
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
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
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
|
-
|
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
|
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.
|
729
|
+
xml.GTIN pac[:ean]
|
730
|
+
xml.LANG lang
|
708
731
|
# as orphans ?
|
709
732
|
xml.DEL @orphans.include?(number) ? true : false
|
710
733
|
}
|
data/lib/oddb2xml/extractor.rb
CHANGED
@@ -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
|
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.3.
|
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: &
|
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: *
|
24
|
+
version_requirements: *8803620
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: archive-tar-minitar
|
27
|
-
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: *
|
35
|
+
version_requirements: *8802860
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: mechanize
|
38
|
-
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: *
|
46
|
+
version_requirements: *8802240
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: nokogiri
|
49
|
-
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: *
|
57
|
+
version_requirements: *8801360
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: savon
|
60
|
-
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: *
|
68
|
+
version_requirements: *8800260
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: spreadsheet
|
71
|
-
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: *
|
79
|
+
version_requirements: *8799500
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: rspec
|
82
|
-
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: *
|
90
|
+
version_requirements: *8798780
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: webmock
|
93
|
-
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: *
|
101
|
+
version_requirements: *8797940
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: ZenTest
|
104
|
-
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: *
|
112
|
+
version_requirements: *8797360
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: hoe
|
115
|
-
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: *
|
123
|
+
version_requirements: *8796800
|
124
124
|
- !ruby/object:Gem::Dependency
|
125
125
|
name: rdoc
|
126
|
-
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: *
|
134
|
+
version_requirements: *8796360
|
135
135
|
- !ruby/object:Gem::Dependency
|
136
136
|
name: rdoc
|
137
|
-
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: *
|
145
|
+
version_requirements: *8795540
|
146
146
|
- !ruby/object:Gem::Dependency
|
147
147
|
name: hoe
|
148
|
-
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: *
|
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:
|