oddb2xml 1.3.5 → 1.3.6
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +6 -0
- data/lib/oddb2xml/builder.rb +358 -356
- data/lib/oddb2xml/extractor.rb +27 -7
- data/lib/oddb2xml/version.rb +1 -1
- metadata +28 -28
data/History.txt
CHANGED
data/lib/oddb2xml/builder.rb
CHANGED
@@ -58,26 +58,26 @@ module Oddb2xml
|
|
58
58
|
@articles = nil if reset
|
59
59
|
unless @articles
|
60
60
|
@articles = [] # base is 'DE'
|
61
|
-
@index['DE'].each_pair do |
|
62
|
-
|
63
|
-
:de
|
64
|
-
:fr
|
61
|
+
@index['DE'].each_pair do |phar, indices|
|
62
|
+
obj = {
|
63
|
+
:de => indices,
|
64
|
+
:fr => @index['FR'][phar],
|
65
65
|
}
|
66
|
-
if migel = @migel[
|
66
|
+
if migel = @migel[phar]
|
67
67
|
# delete duplicates
|
68
|
-
@migel[
|
68
|
+
@migel[phar] = nil
|
69
69
|
end
|
70
|
-
if seq = @items[
|
71
|
-
|
70
|
+
if seq = @items[phar]
|
71
|
+
obj[:seq] = seq
|
72
72
|
end
|
73
|
-
@articles <<
|
73
|
+
@articles << obj
|
74
74
|
end
|
75
75
|
# add
|
76
76
|
@migel.values.compact.each do |migel|
|
77
77
|
next if migel[:pharmacode].empty?
|
78
|
-
|
78
|
+
obj = {}
|
79
79
|
%w[de fr].each do |lang|
|
80
|
-
|
80
|
+
entry = {
|
81
81
|
:ean => migel[:ean],
|
82
82
|
:pharmacode => migel[:pharmacode],
|
83
83
|
:status => 'I',
|
@@ -89,9 +89,9 @@ module Oddb2xml
|
|
89
89
|
:company_ean => migel[:company_ean],
|
90
90
|
:company_name => migel[:company_name],
|
91
91
|
}
|
92
|
-
|
92
|
+
obj[lang.intern] = [entry]
|
93
93
|
end
|
94
|
-
@articles <<
|
94
|
+
@articles << obj
|
95
95
|
end
|
96
96
|
end
|
97
97
|
end
|
@@ -144,38 +144,41 @@ module Oddb2xml
|
|
144
144
|
def prepare_products
|
145
145
|
unless @products
|
146
146
|
@products = []
|
147
|
-
@
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
147
|
+
@index['DE'].each_pair do |phar, indices|
|
148
|
+
indices.each_with_index do |index, i|
|
149
|
+
obj = {}
|
150
|
+
obj = {
|
151
|
+
:ean => index[:ean],
|
152
|
+
:atc => index[:atc_code],
|
153
|
+
# additional tags
|
154
|
+
:ith => '',
|
155
|
+
:seq => @items[phar],
|
156
|
+
:pac => nil,
|
157
|
+
:no8 => nil,
|
158
|
+
:de => index,
|
159
|
+
:fr => @index['FR'][phar][i],
|
160
|
+
:st => index[:status],
|
161
|
+
}
|
162
|
+
if obj[:seq] and obj[:pac] = obj[:seq][:packages][phar]
|
163
|
+
obj[:no8] = obj[:pac][:swissmedic_number8].to_s
|
164
|
+
obj[:atc] = obj[:pac][:atc_code].to_s
|
165
|
+
obj[:ith] = obj[:pac][:it_code].to_s # first one
|
166
|
+
unless obj[:ean]
|
167
|
+
if obj[:no8] and ppac = @packs[obj[:no8].intern] # Packungen.xls
|
168
|
+
obj[:ean] = ppac[:ean].to_s
|
169
|
+
obj[:atc] = ppac[:atc_code].to_s
|
170
|
+
obj[:ith] = ppac[:ith_swissmedic].to_s
|
171
|
+
obj[:st] = 'I'
|
169
172
|
end
|
170
|
-
seq[:atc_code] = index[:atc_code]
|
171
|
-
seq[:it_code] = it_code
|
172
|
-
seq[:packages][phar][:ean] = index[:ean]
|
173
173
|
end
|
174
174
|
end
|
175
|
+
if obj[:ean][0..3] == '7680'
|
176
|
+
@products << obj
|
177
|
+
end
|
175
178
|
end
|
176
|
-
seq
|
177
179
|
end
|
178
180
|
end
|
181
|
+
@products
|
179
182
|
end
|
180
183
|
def build_substance
|
181
184
|
prepare_substances
|
@@ -369,13 +372,15 @@ module Oddb2xml
|
|
369
372
|
'PROD_DATE' => datetime,
|
370
373
|
'VALID_DATE' => datetime,
|
371
374
|
) {
|
375
|
+
list = []
|
372
376
|
length = 0
|
373
|
-
@products.each do |
|
374
|
-
seq[:
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
377
|
+
@products.each do |obj|
|
378
|
+
seq = obj[:seq]
|
379
|
+
next unless seq # option
|
380
|
+
length += 1
|
381
|
+
xml.PRD('DT' => '') {
|
382
|
+
xml.GTIN obj[:ean].to_s
|
383
|
+
if seq
|
379
384
|
%w[de fr].each do |l|
|
380
385
|
name = "name_#{l}".intern
|
381
386
|
desc = "desc_#{l}".intern
|
@@ -383,73 +388,77 @@ module Oddb2xml
|
|
383
388
|
if !seq[name].empty? and !seq[desc].empty?
|
384
389
|
xml.send(elem, seq[name] + ' ' + seq[desc])
|
385
390
|
elsif !seq[desc].empty?
|
386
|
-
xml.send(elem,
|
391
|
+
xml.send(elem, [desc])
|
387
392
|
end
|
388
393
|
end
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
+
end
|
395
|
+
#xml.BNAMD
|
396
|
+
#xml.BNAMF
|
397
|
+
#xml.ADNAMD
|
398
|
+
#xml.ADNAMF
|
399
|
+
#xml.SIZE
|
400
|
+
if seq
|
394
401
|
xml.ADINFD seq[:comment_de] unless seq[:comment_de].empty?
|
395
402
|
xml.ADINFF seq[:comment_fr] unless seq[:comment_fr].empty?
|
396
403
|
xml.GENCD seq[:org_gen_code] unless seq[:org_gen_code].empty?
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
404
|
+
end
|
405
|
+
#xml.GENGRP
|
406
|
+
xml.ATC obj[:atc] unless obj[:atc].empty?
|
407
|
+
xml.IT obj[:ith] unless obj[:ith].empty?
|
408
|
+
#xml.ITBAG
|
409
|
+
#xml.KONO
|
410
|
+
#xml.TRADE
|
411
|
+
#xml.PRTNO
|
412
|
+
#xml.MONO
|
413
|
+
#xml.CDGALD
|
414
|
+
#xml.CDGALF
|
415
|
+
#xml.FORMD
|
416
|
+
#xml.FORMF
|
417
|
+
#xml.DOSE
|
418
|
+
#xml.DOSEU
|
419
|
+
#xml.DRGFD
|
420
|
+
#xml.DRGFF
|
421
|
+
obj[:no8] =~ /(\d{5})(\d{3})/
|
422
|
+
if @orphans.include?($1.to_s)
|
423
|
+
xml.ORPH true
|
424
|
+
end
|
425
|
+
#xml.BIOPHA
|
426
|
+
#xml.BIOSIM
|
427
|
+
#xml.BFS
|
428
|
+
#xml.BLOOD
|
429
|
+
#xml.MSCD # always empty
|
430
|
+
#xml.DEL
|
431
|
+
xml.CPT {
|
432
|
+
#xml.CPTLNO
|
433
|
+
#xml.CNAMED
|
434
|
+
#xml.CNAMEF
|
435
|
+
#xml.IDXIND
|
436
|
+
#xml.DDDD
|
437
|
+
#xml.DDDU
|
438
|
+
#xml.DDDA
|
439
|
+
#xml.IDXIA
|
440
|
+
#xml.IXREL
|
441
|
+
#xml.GALF
|
442
|
+
#xml.DRGGRPCD
|
443
|
+
#xml.PRBSUIT
|
444
|
+
#xml.CSOLV
|
445
|
+
#xml.CSOLVQ
|
446
|
+
#xml.CSOLVQU
|
447
|
+
#xml.PHVAL
|
448
|
+
#xml.LSPNSOL
|
449
|
+
#xml.APDURSOL
|
450
|
+
#xml.EXCIP
|
451
|
+
#xml.EXCIPQ
|
452
|
+
#xml.EXCIPCD
|
453
|
+
#xml.EXCIPCF
|
454
|
+
#xml.PQTY
|
455
|
+
#xml.PQTYU
|
456
|
+
#xml.SIZEMM
|
457
|
+
#xml.WEIGHT
|
458
|
+
#xml.LOOKD
|
459
|
+
#xml.LOOKF
|
460
|
+
#xml.IMG2
|
461
|
+
if seq
|
453
462
|
seq[:substances].each do |sub|
|
454
463
|
xml.CPTCMP {
|
455
464
|
xml.LINE sub[:index] unless sub[:index].empty?
|
@@ -468,20 +477,20 @@ module Oddb2xml
|
|
468
477
|
}
|
469
478
|
end
|
470
479
|
end
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
#
|
475
|
-
}
|
476
|
-
#xml.PRDICD { # currently empty
|
477
|
-
#xml.ICD
|
478
|
-
#xml.RTYP
|
479
|
-
#xml.RSIG
|
480
|
-
#xml.REMD
|
481
|
-
#xml.REMF
|
480
|
+
end
|
481
|
+
#xml.CPTROA {
|
482
|
+
#xml.SYSLOC
|
483
|
+
#xml.ROA
|
482
484
|
#}
|
483
485
|
}
|
484
|
-
|
486
|
+
#xml.PRDICD { # currently empty
|
487
|
+
#xml.ICD
|
488
|
+
#xml.RTYP
|
489
|
+
#xml.RSIG
|
490
|
+
#xml.REMD
|
491
|
+
#xml.REMF
|
492
|
+
#}
|
493
|
+
}
|
485
494
|
end
|
486
495
|
xml.RESULT {
|
487
496
|
xml.OK_ERROR 'OK'
|
@@ -508,153 +517,152 @@ module Oddb2xml
|
|
508
517
|
'VALID_DATE' => datetime,
|
509
518
|
) {
|
510
519
|
@articles.each do |obj|
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
bg_pac = obj[:seq][:packages][de_pac[:pharmacode]]
|
516
|
-
end
|
517
|
-
if de_pac[:ean].length == 13
|
518
|
-
num = de_pac[:ean][4,8].intern # :swissmedic_number5
|
519
|
-
elsif bg_pac
|
520
|
-
num = bg_pac[:swissmedic_number8].intern
|
521
|
-
end
|
522
|
-
xml.ART('DT' => '') {
|
523
|
-
xml.PHAR de_pac[:pharmacode] unless de_pac[:pharmacode].empty?
|
524
|
-
#xml.GRPCD
|
525
|
-
#xml.CDS01
|
526
|
-
#xml.CDS02
|
527
|
-
#xml.PRDNO
|
528
|
-
if bg_pac # bag xml
|
529
|
-
xml.SMCAT bg_pac[:swissmedic_category] unless bg_pac[:swissmedic_category].empty?
|
530
|
-
elsif @packs[num] and @packs[num][:swissmedic_category] # Packungen.xls
|
531
|
-
xml.SMCAT @packs[num][:swissmedic_category]
|
532
|
-
end
|
533
|
-
if bg_pac
|
534
|
-
xml.SMNO bg_pac[:swissmedic_number8] unless bg_pac[:swissmedic_number8].empty?
|
535
|
-
end
|
536
|
-
#xml.HOSPCD
|
537
|
-
#xml.CLINCD
|
538
|
-
#xml.ARTTYP
|
539
|
-
#xml.VAT
|
540
|
-
if de_pac
|
541
|
-
xml.SALECD de_pac[:status].empty? ? 'N' : de_pac[:status]
|
542
|
-
end
|
543
|
-
if bg_pac
|
544
|
-
#xml.INSLIM
|
545
|
-
xml.LIMPTS bg_pac[:limitation_points] unless bg_pac[:limitation_points].empty?
|
546
|
-
end
|
547
|
-
#xml.GRDFR
|
548
|
-
if bg_pac
|
549
|
-
if !bg_pac[:swissmedic_number8].empty? and
|
550
|
-
bg_pac[:swissmedic_number8].to_s =~ /(\d{5})(\d{3})/
|
551
|
-
xml.COOL 1 if @fridges.include?($1.to_s)
|
552
|
-
end
|
553
|
-
end
|
554
|
-
#xml.TEMP
|
555
|
-
unless de_pac[:ean].empty?
|
556
|
-
flag = @flags[de_pac[:ean]]
|
557
|
-
# as same flag
|
558
|
-
xml.CDBG (flag ? 'Y' : 'N')
|
559
|
-
xml.BG (flag ? 'Y' : 'N')
|
560
|
-
end
|
561
|
-
#xml.EXP
|
562
|
-
xml.QTY de_pac[:additional_desc] unless de_pac[:additional_desc].empty?
|
563
|
-
xml.DSCRD de_pac[:desc] unless de_pac[:desc].empty?
|
564
|
-
xml.DSCRF fr_pac[:desc] unless fr_pac[:desc].empty?
|
565
|
-
xml.SORTD de_pac[:desc].upcase unless de_pac[:desc].empty?
|
566
|
-
xml.SORTF fr_pac[:desc].upcase unless fr_pac[:desc].empty?
|
567
|
-
#xml.QTYUD
|
568
|
-
#xml.QTYUF
|
569
|
-
#xml.IMG
|
570
|
-
#xml.IMG2
|
571
|
-
#xml.PCKTYPD
|
572
|
-
#xml.PCKTYPF
|
573
|
-
#xml.MULT
|
574
|
-
if obj[:seq]
|
575
|
-
xml.SYN1D obj[:seq][:name_de] unless obj[:seq][:name_de].empty?
|
576
|
-
xml.SYN1F obj[:seq][:name_fr] unless obj[:seq][:name_fr].empty?
|
577
|
-
end
|
520
|
+
obj[:de].each_with_index do |de_idx, i|
|
521
|
+
fr_idx = obj[:fr][i] # swiss index FR
|
522
|
+
pac,no8 = nil,nil # BAG XML (additional data)
|
523
|
+
ppac = nil # Packungen
|
578
524
|
if obj[:seq]
|
579
|
-
|
580
|
-
|
581
|
-
|
582
|
-
|
525
|
+
pac = obj[:seq][:packages][de_idx[:pharmacode]]
|
526
|
+
if pac
|
527
|
+
no8 = pac[:swissmedic_number8].intern
|
528
|
+
ppac = @packs[no8]
|
583
529
|
end
|
584
530
|
end
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
|
592
|
-
|
593
|
-
if de_pac[:status] == "I"
|
594
|
-
xml.OUTSAL de_pac[:stat_date] unless de_pac[:stat_date].empty?
|
595
|
-
end
|
596
|
-
#xml.STTOX
|
597
|
-
#xml.NOTI
|
598
|
-
#xml.GGL
|
599
|
-
#xml.CE
|
600
|
-
#xml.SMDAT
|
601
|
-
#xml.SMCDAT
|
602
|
-
#xml.SIST
|
603
|
-
#xml.ESIST
|
604
|
-
#xml.BIOCID
|
605
|
-
#xml.BAGNO
|
606
|
-
#xml.LIGHT
|
607
|
-
#xml.DEL
|
608
|
-
xml.ARTCOMP {
|
609
|
-
# use ean13(gln) as COMPNO
|
610
|
-
xml.COMPNO de_pac[:company_ean] unless de_pac[:company_ean].empty?
|
611
|
-
#xml.ROLE
|
612
|
-
#xml.ARTNO1
|
613
|
-
#xml.ARTNO2
|
614
|
-
#xml.ARTNO3
|
615
|
-
}
|
616
|
-
xml.ARTBAR {
|
617
|
-
xml.CDTYP 'E13'
|
618
|
-
xml.BC de_pac[:ean] unless de_pac[:ean].empty?
|
619
|
-
xml.BCSTAT 'A' # P is alternative
|
620
|
-
#xml.PHAR2
|
621
|
-
}
|
622
|
-
#xml.ARTCH {
|
623
|
-
#xml.PHAR2
|
624
|
-
#xml.CHTYPE
|
625
|
-
#xml.LINENO
|
626
|
-
#xml.NOUNITS
|
627
|
-
#}
|
628
|
-
if bg_pac
|
629
|
-
bg_pac[:prices].each_pair do |key, price|
|
630
|
-
xml.ARTPRI {
|
631
|
-
xml.VDAT price[:valid_date] unless price[:valid_date].empty?
|
632
|
-
xml.PTYP price[:price_code] unless price[:price_code].empty?
|
633
|
-
xml.PRICE price[:price] unless price[:price].empty?
|
634
|
-
}
|
531
|
+
xml.ART('DT' => '') {
|
532
|
+
xml.PHAR de_idx[:pharmacode] unless de_idx[:pharmacode].empty?
|
533
|
+
#xml.GRPCD
|
534
|
+
#xml.CDS01
|
535
|
+
#xml.CDS02
|
536
|
+
#xml.PRDNO
|
537
|
+
if pac && ppac && ppac[:swissmedic_category]
|
538
|
+
xml.SMCAT ppac[:swissmedic_category]
|
635
539
|
end
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
#xml.
|
640
|
-
#xml.
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
|
651
|
-
|
652
|
-
|
653
|
-
|
654
|
-
|
540
|
+
if pac
|
541
|
+
xml.SMNO no8.to_s unless no8.to_s.empty?
|
542
|
+
end
|
543
|
+
#xml.HOSPCD
|
544
|
+
#xml.CLINCD
|
545
|
+
#xml.ARTTYP
|
546
|
+
#xml.VAT
|
547
|
+
if de_idx
|
548
|
+
xml.SALECD de_idx[:status].empty? ? 'N' : de_idx[:status]
|
549
|
+
end
|
550
|
+
if pac
|
551
|
+
#xml.INSLIM
|
552
|
+
xml.LIMPTS pac[:limitation_points] unless pac[:limitation_points].empty?
|
553
|
+
end
|
554
|
+
#xml.GRDFR
|
555
|
+
if pac
|
556
|
+
if no8.empty? and
|
557
|
+
no8.to_s =~ /(\d{5})(\d{3})/
|
558
|
+
xml.COOL 1 if @fridges.include?($1.to_s)
|
559
|
+
end
|
560
|
+
end
|
561
|
+
#xml.TEMP
|
562
|
+
unless de_idx[:ean].empty?
|
563
|
+
flag = @flags[de_idx[:ean]]
|
564
|
+
# as same flag
|
565
|
+
xml.CDBG (flag ? 'Y' : 'N')
|
566
|
+
xml.BG (flag ? 'Y' : 'N')
|
567
|
+
end
|
568
|
+
#xml.EXP
|
569
|
+
xml.QTY de_idx[:additional_desc] unless de_idx[:additional_desc].empty?
|
570
|
+
xml.DSCRD de_idx[:desc] unless de_idx[:desc].empty?
|
571
|
+
xml.DSCRF fr_idx[:desc] unless fr_idx[:desc].empty?
|
572
|
+
xml.SORTD de_idx[:desc].upcase unless de_idx[:desc].empty?
|
573
|
+
xml.SORTF fr_idx[:desc].upcase unless fr_idx[:desc].empty?
|
574
|
+
#xml.QTYUD
|
575
|
+
#xml.QTYUF
|
576
|
+
#xml.IMG
|
577
|
+
#xml.IMG2
|
578
|
+
#xml.PCKTYPD
|
579
|
+
#xml.PCKTYPF
|
580
|
+
#xml.MULT
|
581
|
+
if obj[:seq]
|
582
|
+
xml.SYN1D obj[:seq][:name_de] unless obj[:seq][:name_de].empty?
|
583
|
+
xml.SYN1F obj[:seq][:name_fr] unless obj[:seq][:name_fr].empty?
|
584
|
+
end
|
585
|
+
if obj[:seq]
|
586
|
+
case obj[:seq][:deductible]
|
587
|
+
when 'Y'; xml.SLOPLUS 1; # 20%
|
588
|
+
when 'N'; xml.SLOPLUS 2; # 10%
|
589
|
+
else xml.SLOPLUS '' # k.A.
|
590
|
+
end
|
591
|
+
end
|
592
|
+
#xml.NOPCS
|
593
|
+
#xml.HSCD
|
594
|
+
#xml.MINI
|
595
|
+
#xml.DEPCD
|
596
|
+
#xml.DEPOT
|
597
|
+
#xml.BAGSL
|
598
|
+
#xml.BAGSLC
|
599
|
+
#xml.LOACD
|
600
|
+
if de_idx[:status] == "I"
|
601
|
+
xml.OUTSAL de_idx[:stat_date] unless de_idx[:stat_date].empty?
|
602
|
+
end
|
603
|
+
#xml.STTOX
|
604
|
+
#xml.NOTI
|
605
|
+
#xml.GGL
|
606
|
+
#xml.CE
|
607
|
+
#xml.SMDAT
|
608
|
+
#xml.SMCDAT
|
609
|
+
#xml.SIST
|
610
|
+
#xml.ESIST
|
611
|
+
#xml.BIOCID
|
612
|
+
#xml.BAGNO
|
613
|
+
#xml.LIGHT
|
614
|
+
#xml.DEL
|
615
|
+
xml.ARTCOMP {
|
616
|
+
# use ean13(gln) as COMPNO
|
617
|
+
xml.COMPNO de_idx[:company_ean] unless de_idx[:company_ean].empty?
|
618
|
+
#xml.ROLE
|
619
|
+
#xml.ARTNO1
|
620
|
+
#xml.ARTNO2
|
621
|
+
#xml.ARTNO3
|
655
622
|
}
|
656
|
-
|
657
|
-
|
623
|
+
xml.ARTBAR {
|
624
|
+
xml.CDTYP 'E13'
|
625
|
+
xml.BC de_idx[:ean] unless de_idx[:ean].empty?
|
626
|
+
xml.BCSTAT 'A' # P is alternative
|
627
|
+
#xml.PHAR2
|
628
|
+
}
|
629
|
+
#xml.ARTCH {
|
630
|
+
#xml.PHAR2
|
631
|
+
#xml.CHTYPE
|
632
|
+
#xml.LINENO
|
633
|
+
#xml.NOUNITS
|
634
|
+
#}
|
635
|
+
if pac
|
636
|
+
pac[:prices].each_pair do |key, price|
|
637
|
+
xml.ARTPRI {
|
638
|
+
xml.VDAT price[:valid_date] unless price[:valid_date].empty?
|
639
|
+
xml.PTYP price[:price_code] unless price[:price_code].empty?
|
640
|
+
xml.PRICE price[:price] unless price[:price].empty?
|
641
|
+
}
|
642
|
+
end
|
643
|
+
end
|
644
|
+
#xml.ARTMIG {
|
645
|
+
#xml.VDAT
|
646
|
+
#xml.MIGCD
|
647
|
+
#xml.LINENO
|
648
|
+
#}
|
649
|
+
#xml.ARTDAN {
|
650
|
+
#xml.CDTYP
|
651
|
+
#xml.LINENO
|
652
|
+
#xml.CDVAL
|
653
|
+
#}
|
654
|
+
#xml.ARTLIM {
|
655
|
+
# xml.LIMCD
|
656
|
+
#}
|
657
|
+
if @lppvs[de_idx[:ean]]
|
658
|
+
xml.ARTINS {
|
659
|
+
#xml.VDAT
|
660
|
+
#xml.INCD
|
661
|
+
xml.NINCD 20
|
662
|
+
}
|
663
|
+
end
|
664
|
+
}
|
665
|
+
end
|
658
666
|
end
|
659
667
|
xml.RESULT {
|
660
668
|
xml.OK_ERROR 'OK'
|
@@ -728,18 +736,14 @@ module Oddb2xml
|
|
728
736
|
info_index[info[:monid]] = i
|
729
737
|
end
|
730
738
|
end
|
731
|
-
@products.
|
732
|
-
each_pair do |monid, products|
|
739
|
+
@products.select{|obj| obj[:seq] }.
|
740
|
+
group_by{|obj| obj[:seq][:swissmedic_number5] }.each_pair do |monid, products|
|
733
741
|
if info_index[monid]
|
734
742
|
xml.KP('DT' => '') {
|
735
743
|
xml.MONID monid
|
736
|
-
products.each do |
|
737
|
-
|
738
|
-
|
739
|
-
length += 1
|
740
|
-
xml.GTIN pac[:ean]
|
741
|
-
end
|
742
|
-
end
|
744
|
+
products.each do |obj|
|
745
|
+
xml.GTIN obj[:ean]
|
746
|
+
length += 1
|
743
747
|
end
|
744
748
|
# as orphans ?
|
745
749
|
xml.DEL @orphans.include?(monid) ? true : false
|
@@ -800,68 +804,65 @@ module Oddb2xml
|
|
800
804
|
prepare_articles
|
801
805
|
rows = []
|
802
806
|
@articles.each do |obj|
|
803
|
-
|
804
|
-
|
805
|
-
|
806
|
-
|
807
|
-
|
808
|
-
|
809
|
-
|
810
|
-
|
811
|
-
|
812
|
-
|
813
|
-
|
814
|
-
|
815
|
-
|
807
|
+
obj[:de].each_with_index do |idx, i|
|
808
|
+
row = ''
|
809
|
+
# Oddb2tdat.parse
|
810
|
+
if idx[:status] =~ /A|I/
|
811
|
+
pac,no8 = nil,nil
|
812
|
+
if obj[:seq]
|
813
|
+
pac = obj[:seq][:packages][idx[:pharmacode]]
|
814
|
+
end
|
815
|
+
# :swissmedic_numbers
|
816
|
+
if pac
|
817
|
+
no8 = pac[:swissmedic_number8].intern
|
818
|
+
end
|
819
|
+
row << "%#{DAT_LEN[:RECA]}s" % '11'
|
820
|
+
row << "%#{DAT_LEN[:CMUT]}s" % if (phar = idx[:pharmacode] and phar.size > 3) # does not check expiration_date
|
821
|
+
idx[:status] == "I" ? '3' : '1'
|
822
|
+
else
|
823
|
+
'3'
|
824
|
+
end
|
825
|
+
row << "%0#{DAT_LEN[:PHAR]}d" % idx[:pharmacode].to_i
|
826
|
+
row << "%-#{DAT_LEN[:ABEZ]}s" % (
|
827
|
+
idx[:desc].to_s.gsub(/"/, '') + " " +
|
828
|
+
(pac ? pac[:name_de].to_s : '') +
|
829
|
+
idx[:additional_desc]
|
830
|
+
).to_s[0, DAT_LEN[:ABEZ]].gsub(/"/, '')
|
831
|
+
row << "%#{DAT_LEN[:PRMO]}s" % (pac ? format_price(pac[:prices][:exf_price][:price].to_s) : ('0' * DAT_LEN[:PRMO]))
|
832
|
+
row << "%#{DAT_LEN[:PRPU]}s" % (pac ? format_price(pac[:prices][:pub_price][:price].to_s) : ('0' * DAT_LEN[:PRPU]))
|
833
|
+
row << "%#{DAT_LEN[:CKZL]}s" % if (@lppvs[idx[:ean]])
|
834
|
+
'2'
|
835
|
+
elsif pac # sl_entry
|
836
|
+
'1'
|
837
|
+
else
|
838
|
+
'3'
|
839
|
+
end
|
840
|
+
row << "%#{DAT_LEN[:CLAG]}s" % if ((no8 && no8.to_s =~ /(\d{5})(\d{3})/) and
|
841
|
+
@fridges.include?($1.to_s))
|
842
|
+
'1'
|
843
|
+
else
|
844
|
+
'0'
|
845
|
+
end
|
846
|
+
row << "%#{DAT_LEN[:CBGG]}s" % if ((pac && pac[:narcosis_flag] == 'Y') or # BAGXml
|
847
|
+
(@flags[idx[:ean]])) # ywesee BM_update
|
848
|
+
'3'
|
849
|
+
else
|
850
|
+
'0'
|
851
|
+
end
|
852
|
+
row << "%#{DAT_LEN[:CIKS]}s" % if (no8 && @packs[no8]) # Packungen.xls
|
853
|
+
@packs[no8][:swissmedic_category]
|
854
|
+
else
|
855
|
+
'0'
|
856
|
+
end.gsub(/(\+|\s)/, '')
|
857
|
+
row << "%0#{DAT_LEN[:ITHE]}d" % if (no8 && @packs[no8])
|
858
|
+
format_date(@packs[no8][:ith_swissmedic])
|
859
|
+
else
|
860
|
+
('0' * DAT_LEN[:ITHE])
|
861
|
+
end.to_i
|
862
|
+
row << "%0#{DAT_LEN[:CEAN]}d" % idx[:ean].to_i
|
863
|
+
row << "%#{DAT_LEN[:CMWS]}s" % '2' # pharma
|
864
|
+
rows << row
|
816
865
|
end
|
817
|
-
row << "%#{DAT_LEN[:RECA]}s" % '11'
|
818
|
-
row << "%#{DAT_LEN[:CMUT]}s" % if (phar = de_pac[:pharmacode] and phar.size > 3) # does not check expiration_date
|
819
|
-
obj[:de][:status] == "I" ? '3' : '1'
|
820
|
-
else
|
821
|
-
'3'
|
822
|
-
end
|
823
|
-
row << "%0#{DAT_LEN[:PHAR]}d" % de_pac[:pharmacode].to_i
|
824
|
-
row << "%-#{DAT_LEN[:ABEZ]}s" % (
|
825
|
-
de_pac[:desc].to_s.gsub(/"/, '') + " " +
|
826
|
-
(pac ? pac[:name_de].to_s : '') +
|
827
|
-
de_pac[:additional_desc]
|
828
|
-
).to_s[0, DAT_LEN[:ABEZ]].gsub(/"/, '')
|
829
|
-
row << "%#{DAT_LEN[:PRMO]}s" % (pac ? format_price(pac[:prices][:exf_price][:price].to_s) : ('0' * DAT_LEN[:PRMO]))
|
830
|
-
row << "%#{DAT_LEN[:PRPU]}s" % (pac ? format_price(pac[:prices][:pub_price][:price].to_s) : ('0' * DAT_LEN[:PRPU]))
|
831
|
-
row << "%#{DAT_LEN[:CKZL]}s" % if (@lppvs[de_pac[:ean]])
|
832
|
-
'2'
|
833
|
-
elsif pac # sl_entry
|
834
|
-
'1'
|
835
|
-
else
|
836
|
-
'3'
|
837
|
-
end
|
838
|
-
row << "%#{DAT_LEN[:CLAG]}s" % if ((num && num.to_s =~ /(\d{5})(\d{3})/) and
|
839
|
-
@fridges.include?($1.to_s))
|
840
|
-
'1'
|
841
|
-
else
|
842
|
-
'0'
|
843
|
-
end
|
844
|
-
row << "%#{DAT_LEN[:CBGG]}s" % if ((pac && pac[:narcosis_flag] == 'Y') or # BAGXml
|
845
|
-
(@flags[de_pac[:ean]])) # ywesee BM_update
|
846
|
-
'3'
|
847
|
-
else
|
848
|
-
'0'
|
849
|
-
end
|
850
|
-
row << "%#{DAT_LEN[:CIKS]}s" % if (pac && pac[:swissmedic_category] =~ /^[ABCDE]$/) # BAGXml
|
851
|
-
pac[:swissmedic_category]
|
852
|
-
elsif (@packs[num]) # Packungen.xls
|
853
|
-
@packs[num][:swissmedic_category]
|
854
|
-
else
|
855
|
-
'0'
|
856
|
-
end.gsub(/(\+|\s)/, '')
|
857
|
-
row << "%0#{DAT_LEN[:ITHE]}d" % if (@packs[num])
|
858
|
-
format_date(@packs[num][:ith_swissmedic])
|
859
|
-
else
|
860
|
-
('0' * DAT_LEN[:ITHE])
|
861
|
-
end.to_i
|
862
|
-
row << "%0#{DAT_LEN[:CEAN]}d" % de_pac[:ean].to_i
|
863
|
-
row << "%#{DAT_LEN[:CMWS]}s" % '2' # pharma
|
864
|
-
rows << row
|
865
866
|
end
|
866
867
|
end
|
867
868
|
rows.join("\n")
|
@@ -871,31 +872,32 @@ module Oddb2xml
|
|
871
872
|
prepare_articles(reset)
|
872
873
|
rows = []
|
873
874
|
@articles.each do |obj|
|
874
|
-
|
875
|
-
|
876
|
-
|
877
|
-
|
878
|
-
|
879
|
-
|
880
|
-
|
881
|
-
|
882
|
-
|
883
|
-
|
884
|
-
|
885
|
-
|
886
|
-
|
887
|
-
|
888
|
-
|
889
|
-
|
890
|
-
|
891
|
-
|
892
|
-
|
893
|
-
|
894
|
-
|
895
|
-
|
896
|
-
|
897
|
-
|
898
|
-
|
875
|
+
obj[:de].each_with_index do |idx, i|
|
876
|
+
row = ''
|
877
|
+
next if (!ean14 && idx[:ean].to_s.length != 13)
|
878
|
+
# Oddb2tdat.parse_migel
|
879
|
+
row << "%#{DAT_LEN[:RECA]}s" % '11'
|
880
|
+
row << "%#{DAT_LEN[:CMUT]}s" % if (phar = idx[:pharmacode] and phar.size > 3)
|
881
|
+
'1'
|
882
|
+
else
|
883
|
+
'3'
|
884
|
+
end
|
885
|
+
row << "%0#{DAT_LEN[:PHAR]}d" % idx[:pharmacode].to_i
|
886
|
+
row << "%-#{DAT_LEN[:ABEZ]}s" % (
|
887
|
+
idx[:desc].to_s.gsub(/"/, '') + " " +
|
888
|
+
idx[:additional_desc]
|
889
|
+
).to_s[0, DAT_LEN[:ABEZ]].gsub(/"/, '')
|
890
|
+
row << "%#{DAT_LEN[:PRMO]}s" % ('0' * DAT_LEN[:PRMO])
|
891
|
+
row << "%#{DAT_LEN[:PRPU]}s" % ('0' * DAT_LEN[:PRPU])
|
892
|
+
row << "%#{DAT_LEN[:CKZL]}s" % '3' # sl_entry and lppv
|
893
|
+
row << "%#{DAT_LEN[:CLAG]}s" % '0'
|
894
|
+
row << "%#{DAT_LEN[:CBGG]}s" % '0'
|
895
|
+
row << "%#{DAT_LEN[:CIKS]}s" % ' ' # no category
|
896
|
+
row << "%0#{DAT_LEN[:ITHE]}d" % 0
|
897
|
+
row << "%0#{DAT_LEN[:CEAN]}d" % (idx[:ean] ? idx[:ean].to_i : 0)
|
898
|
+
row << "%#{DAT_LEN[:CMWS]}s" % '1' # nonpharma
|
899
|
+
rows << row
|
900
|
+
end
|
899
901
|
end
|
900
902
|
rows.join("\n")
|
901
903
|
end
|
data/lib/oddb2xml/extractor.rb
CHANGED
@@ -22,7 +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
|
+
item[:swissmedic_number5] = (num5 = seq.at_xpath('.//SwissmedicNo5')) ? (num5.text.rjust(5,'0')) : ''
|
26
26
|
item[:org_gen_code] = (orgc = seq.at_xpath('.//OrgGenCode')) ? orgc.text : ''
|
27
27
|
item[:deductible] = (ddbl = seq.at_xpath('.//FlagSB20')) ? ddbl.text : ''
|
28
28
|
item[:atc_code] = (atcc = seq.at_xpath('.//AtcCode')) ? atcc.text : ''
|
@@ -55,7 +55,7 @@ module Oddb2xml
|
|
55
55
|
item[:packages][phar] = {
|
56
56
|
:pharmacode => phar,
|
57
57
|
:swissmedic_category => (cat = pac.at_xpath('.//SwissmedicCategory')) ? cat.text : '',
|
58
|
-
:swissmedic_number8 => (num = pac.at_xpath('.//SwissmedicNo8')) ? num.text : '',
|
58
|
+
:swissmedic_number8 => (num = pac.at_xpath('.//SwissmedicNo8')) ? num.text.rjust(8, '0') : '',
|
59
59
|
:narcosis_flag => (flg = pac.at_xpath('.//FlagNarcosis')) ? flg.text : '',
|
60
60
|
:prices => {
|
61
61
|
:exf_price => {
|
@@ -147,7 +147,7 @@ module Oddb2xml
|
|
147
147
|
item[:stat_date] = (date = pac.at_xpath('.//SDATE')) ? date.text : ''
|
148
148
|
item[:lang] = (lang = pac.at_xpath('.//LANG')) ? lang.text : ''
|
149
149
|
item[:desc] = (dscr = pac.at_xpath('.//DSCR')) ? dscr.text : ''
|
150
|
-
item[:atc_code] = (code = pac.at_xpath('.//ATC')) ? code.text : ''
|
150
|
+
item[:atc_code] = (code = pac.at_xpath('.//ATC')) ? code.text.to_s : ''
|
151
151
|
# as quantity text
|
152
152
|
item[:additional_desc] = (dscr = pac.at_xpath('.//ADDSCR')) ? dscr.text : ''
|
153
153
|
if comp = pac.xpath('.//COMP')
|
@@ -155,7 +155,10 @@ module Oddb2xml
|
|
155
155
|
item[:company_ean] = (gln = comp.at_xpath('.//GLN')) ? gln.text : ''
|
156
156
|
end
|
157
157
|
unless item[:pharmacode].empty?
|
158
|
-
data[item[:pharmacode]]
|
158
|
+
unless data[item[:pharmacode]] # pharmacode => GTINs
|
159
|
+
data[item[:pharmacode]] = []
|
160
|
+
end
|
161
|
+
data[item[:pharmacode]] << item
|
159
162
|
end
|
160
163
|
end
|
161
164
|
data
|
@@ -188,19 +191,25 @@ module Oddb2xml
|
|
188
191
|
end
|
189
192
|
data.uniq
|
190
193
|
end
|
191
|
-
def to_hash
|
194
|
+
def to_hash # Packungen.xls
|
192
195
|
data = {}
|
193
196
|
case @type
|
194
197
|
when :packages
|
195
198
|
i_5,i_3 = 0,10 # :swissmedic_numbers
|
196
199
|
cat = 13 # :swissmedic_category
|
197
200
|
ith = 4 # :ith_swissmedic IT-Code (swissmedic-diff)
|
198
|
-
|
201
|
+
atc = 5 # :atc_code
|
202
|
+
typ = 6 # Heilmittelcode
|
203
|
+
@sheet.each_with_index do |row, i|
|
204
|
+
next if (i== 0 or row[typ] == 'Tierarzneimittel')
|
199
205
|
no8 = extract_number(row, i_5).to_s + extract_number(row, i_3, /^\d{3}$/).to_s
|
200
206
|
unless no8.empty?
|
207
|
+
ean_base12 = "7680#{no8}"
|
201
208
|
data[no8.intern] = {
|
209
|
+
:ean => (ean_base12.ljust(12, '0') + calc_checksum(ean_base12)),
|
202
210
|
:ith_swissmedic => row[ith].to_s,
|
203
211
|
:swissmedic_category => row[cat].to_s,
|
212
|
+
:atc_code => row[atc].to_s,
|
204
213
|
}
|
205
214
|
end
|
206
215
|
end
|
@@ -211,7 +220,8 @@ module Oddb2xml
|
|
211
220
|
def extract_number(row, i, ptrn=/^\d{5}$/)
|
212
221
|
begin
|
213
222
|
return nil unless row[i]
|
214
|
-
|
223
|
+
row[i] = row[i].to_i if row[i].is_a? Float
|
224
|
+
number = row[i].to_s.gsub(/[^0-9]/, '')
|
215
225
|
number = number.rjust(5, '0') if ptrn == /^\d{5}$/
|
216
226
|
if number =~ ptrn
|
217
227
|
return number
|
@@ -222,6 +232,16 @@ module Oddb2xml
|
|
222
232
|
nil
|
223
233
|
end
|
224
234
|
end
|
235
|
+
def calc_checksum(str)
|
236
|
+
str = str.strip
|
237
|
+
sum = 0
|
238
|
+
val = str.split(//u)
|
239
|
+
12.times do |idx|
|
240
|
+
fct = ((idx%2)*2)+1
|
241
|
+
sum += fct*val[idx].to_i
|
242
|
+
end
|
243
|
+
((10-(sum%10))%10).to_s
|
244
|
+
end
|
225
245
|
end
|
226
246
|
class MigelExtractor < Extractor
|
227
247
|
def initialize(bin)
|
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.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-02-
|
12
|
+
date: 2013-02-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rubyzip
|
16
|
-
requirement: &
|
16
|
+
requirement: &7438920 !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: *7438920
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: archive-tar-minitar
|
27
|
-
requirement: &
|
27
|
+
requirement: &7438340 !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: *7438340
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: mechanize
|
38
|
-
requirement: &
|
38
|
+
requirement: &7437620 !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: *7437620
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: nokogiri
|
49
|
-
requirement: &
|
49
|
+
requirement: &7436920 !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: *7436920
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: savon
|
60
|
-
requirement: &
|
60
|
+
requirement: &7435960 !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: *7435960
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: spreadsheet
|
71
|
-
requirement: &
|
71
|
+
requirement: &7435040 !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: *7435040
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: rspec
|
82
|
-
requirement: &
|
82
|
+
requirement: &7432740 !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: *7432740
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: webmock
|
93
|
-
requirement: &
|
93
|
+
requirement: &7430920 !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: *7430920
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: ZenTest
|
104
|
-
requirement: &
|
104
|
+
requirement: &7429180 !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: *7429180
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: hoe
|
115
|
-
requirement: &
|
115
|
+
requirement: &7425900 !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: *7425900
|
124
124
|
- !ruby/object:Gem::Dependency
|
125
125
|
name: rdoc
|
126
|
-
requirement: &
|
126
|
+
requirement: &7421480 !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: *7421480
|
135
135
|
- !ruby/object:Gem::Dependency
|
136
136
|
name: rdoc
|
137
|
-
requirement: &
|
137
|
+
requirement: &7420100 !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: *7420100
|
146
146
|
- !ruby/object:Gem::Dependency
|
147
147
|
name: hoe
|
148
|
-
requirement: &
|
148
|
+
requirement: &7418960 !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: *7418960
|
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:
|