oddb2xml 1.8.5 → 1.8.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,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- oddb2xml (1.8.5)
4
+ oddb2xml (1.8.6)
5
5
  archive-tar-minitar (~> 0.5.2)
6
6
  mechanize (~> 2.5.1)
7
7
  nokogiri (~> 1.5.10)
@@ -31,7 +31,7 @@ GEM
31
31
  debugger-linecache (1.2.0)
32
32
  debugger-ruby_core_source (1.3.2)
33
33
  diff-lcs (1.2.5)
34
- domain_name (0.5.18)
34
+ domain_name (0.5.19)
35
35
  unf (>= 0.0.5, < 1.0.0)
36
36
  gyoku (1.1.1)
37
37
  builder (>= 2.1.2)
@@ -78,7 +78,7 @@ GEM
78
78
  nokogiri (>= 1.4.4)
79
79
  rubyzip (>= 1.0.0)
80
80
  rubyntlm (0.3.4)
81
- rubyzip (1.1.3)
81
+ rubyzip (1.1.6)
82
82
  safe_yaml (1.0.3)
83
83
  savon (2.4.0)
84
84
  akami (~> 1.2.0)
@@ -1,3 +1,8 @@
1
+ === 1.8.6 / 04.08.2014
2
+
3
+ * Always fetch additionals (price) information from ZurRose
4
+ * SALECD field is generated from the field CMUT for zurrose_transfer.dat
5
+
1
6
  === 1.8.5 / 04.06.2014
2
7
 
3
8
  * Added element REF_DATA when generating oddb_article.xml.
@@ -26,7 +26,7 @@ module Oddb2xml
26
26
  class Builder
27
27
  attr_accessor :subject, :index, :items, :flags, :lppvs,
28
28
  :actions, :migel, :orphans, :fridges,
29
- :infos, :packs, :prices,
29
+ :infos, :packs, :infos_zur_rose,
30
30
  :ean14, :tag_suffix,
31
31
  :companies, :people,
32
32
  :xsd
@@ -40,7 +40,7 @@ module Oddb2xml
40
40
  @infos = {}
41
41
  @packs = {}
42
42
  @migel = {}
43
- @prices = {} # zurrose
43
+ @infos_zur_rose = {} # zurrose
44
44
  @actions = []
45
45
  @orphans = []
46
46
  @fridges = []
@@ -98,7 +98,6 @@ module Oddb2xml
98
98
  entry = {
99
99
  :ean => migel[:ean],
100
100
  :pharmacode => migel[:pharmacode],
101
- :status => 'I',
102
101
  :stat_date => '',
103
102
  :lang => lang.capitalize,
104
103
  :desc => migel["desc_#{lang}".intern],
@@ -126,7 +125,7 @@ module Oddb2xml
126
125
  }
127
126
  }
128
127
  Oddb2xml.log("prepare_articles extended")
129
- @prices.each{
128
+ @infos_zur_rose.each{
130
129
  |ean13, info|
131
130
  pharmacode = info[:pharmacode]
132
131
  if @pharmacode[pharmacode]
@@ -147,7 +146,7 @@ module Oddb2xml
147
146
  else
148
147
  entry = {
149
148
  :desc => info[:description],
150
- :status => 'A', # for ZurRose 'A' means aktive, aka available in trade
149
+ :status => info[:status] == '3' ? 'I' : 'A', # from ZurRose, we got 1,2 or 3 means aktive, aka available in trade
151
150
  :atc_code => '',
152
151
  :ean => ean13,
153
152
  :lang => lang.capitalize,
@@ -605,9 +604,9 @@ module Oddb2xml
605
604
  if no8
606
605
  ppac = ((_ppac = pack_info and !_ppac[:is_tier]) ? _ppac : nil)
607
606
  end
608
- price = nil
609
- if !@prices.empty? && ean && @prices[ean]
610
- price = @prices[ean] # zurrose
607
+ info_zur_rose = nil
608
+ if !@infos_zur_rose.empty? && ean && @infos_zur_rose[ean]
609
+ info_zur_rose = @infos_zur_rose[ean] # zurrose
611
610
  end
612
611
  xml.ART('DT' => '') {
613
612
  xml.REF_DATA (de_idx[:refdata] || @migel[pharma_code]) ? '1' : '0'
@@ -629,13 +628,11 @@ module Oddb2xml
629
628
  #xml.HOSPCD
630
629
  #xml.CLINCD
631
630
  #xml.ARTTYP
632
- if price
633
- xml.VAT price[:vat]
631
+ if info_zur_rose
632
+ xml.VAT info_zur_rose[:vat]
634
633
  end
635
634
 
636
- if de_idx
637
- xml.SALECD(de_idx[:status].empty? ? 'N' : de_idx[:status]) # XML_OPTIONS
638
- end
635
+ xml.SALECD( (info_zur_rose && info_zur_rose[:cmut] != '3') ? 'A' : 'I') # XML_OPTIONS
639
636
  if pac and pac[:limitation_points]
640
637
  #xml.INSLIM
641
638
  xml.LIMPTS pac[:limitation_points] unless pac[:limitation_points].empty?
@@ -684,7 +681,7 @@ module Oddb2xml
684
681
  #xml.BAGSL
685
682
  #xml.BAGSLC
686
683
  #xml.LOACD
687
- if de_idx[:status] == 'I'
684
+ if de_idx[:stat_date]
688
685
  xml.OUTSAL de_idx[:stat_date] if de_idx[:stat_date] and not de_idx[:stat_date].empty?
689
686
  end
690
687
  #xml.STTOX
@@ -728,16 +725,16 @@ module Oddb2xml
728
725
  }
729
726
  end
730
727
  end
731
- if price
728
+ if info_zur_rose
732
729
  xml.ARTPRI {
733
730
  xml.VDAT Time.parse(datetime).strftime("%d.%m.%Y")
734
731
  xml.PTYP "ZURROSE"
735
- xml.PRICE price[:price]
732
+ xml.PRICE info_zur_rose[:price]
736
733
  }
737
734
  xml.ARTPRI {
738
735
  xml.VDAT Time.parse(datetime).strftime("%d.%m.%Y")
739
736
  xml.PTYP "ZURROSEPUB"
740
- xml.PRICE price[:pub_price]
737
+ xml.PRICE info_zur_rose[:pub_price]
741
738
  }
742
739
  end
743
740
  #xml.ARTMIG {
@@ -996,71 +993,70 @@ module Oddb2xml
996
993
  row = ''
997
994
  pack_info = nil
998
995
  # Oddb2tdat.parse
999
- if idx[:status] =~ /A|I/
1000
- pac,no8 = nil,nil
1001
- if obj[:seq] and obj[:seq][:packages]
1002
- pac = obj[:seq][:packages][idx[:pharmacode]]
1003
- pac = obj[:seq][:packages][ean] unless pac
1004
- else
1005
- pac = @items[ean][:packages][ean] if @items and @items[ean] and @items[ean][:packages]
1006
- end
1007
- # :swissmedic_numbers
1008
- if pac
1009
- no8 = pac[:swissmedic_number8].intern
1010
- pack_info = @packs[no8.intern] if no8
1011
- end
1012
- if pac and pac[:prices] == nil and no8
1013
- ppac = ((ppac = pack_info and ppac[:is_tier]) ? ppac : nil)
1014
- pac = ppac if ppac
1015
- end
1016
- row << "%#{DAT_LEN[:RECA]}s" % '11'
1017
- row << "%#{DAT_LEN[:CMUT]}s" % if (phar = idx[:pharmacode] and phar.size > 3) # does not check expiration_date
1018
- idx[:status] == 'I' ? '3' : '1'
1019
- else
1020
- '3'
1021
- end
1022
- row << "%0#{DAT_LEN[:PHAR]}d" % idx[:pharmacode].to_i
1023
- abez = ( # de name
1024
- idx[:desc].to_s + " " +
1025
- (pac ? pac[:name_de].to_s : '') +
1026
- (idx[:additional_desc] ? idx[:additional_desc] : '')
1027
- ).gsub(/"/, '')
1028
- row << format_name(abez)
1029
- row << "%#{DAT_LEN[:PRMO]}s" % (pac ? format_price(pac[:prices][:exf_price][:price].to_s) : ('0' * DAT_LEN[:PRMO]))
1030
- row << "%#{DAT_LEN[:PRPU]}s" % (pac ? format_price(pac[:prices][:pub_price][:price].to_s) : ('0' * DAT_LEN[:PRPU]))
1031
- row << "%#{DAT_LEN[:CKZL]}s" % if (@lppvs[ean])
1032
- '2'
1033
- elsif pac # sl_entry
1034
- '1'
1035
- else
1036
- '3'
1037
- end
1038
- row << "%#{DAT_LEN[:CLAG]}s" % if ((no8 && no8.to_s =~ /(\d{5})(\d{3})/) and
1039
- @fridges.include?($1.to_s))
1040
- '1'
1041
- else
1042
- '0'
1043
- end
1044
- row << "%#{DAT_LEN[:CBGG]}s" % if ((pac && pac[:narcosis_flag] == 'Y') or # BAGXml
1045
- (@flags[ean])) # ywesee BM_update
1046
- '3'
1047
- else
1048
- '0'
1049
- end
1050
- row << "%#{DAT_LEN[:CIKS]}s" % if (no8 && pack_info && !pack_info[:is_tier]) # Packungen.xls
1051
- pack_info[:swissmedic_category]
1052
- else
1053
- '0'
1054
- end.gsub(/(\+|\s)/, '')
1055
- row << "%0#{DAT_LEN[:ITHE]}d" % if (no8 && pack_info && !pack_info[:is_tier])
1056
- format_date(pack_info[:ith_swissmedic])
1057
- else
1058
- ('0' * DAT_LEN[:ITHE])
1059
- end.to_i
1060
- row << "%0#{DAT_LEN[:CEAN]}d" % (ean.match(/^000000/) ? 0 : ean.to_i)
1061
- row << "%#{DAT_LEN[:CMWS]}s" % '2' # pharma
1062
- rows << row
996
+ pac,no8 = nil,nil
997
+ if obj[:seq] and obj[:seq][:packages]
998
+ pac = obj[:seq][:packages][idx[:pharmacode]]
999
+ pac = obj[:seq][:packages][ean] unless pac
1000
+ else
1001
+ pac = @items[ean][:packages][ean] if @items and @items[ean] and @items[ean][:packages]
1002
+ end
1003
+ # :swissmedic_numbers
1004
+ if pac
1005
+ no8 = pac[:swissmedic_number8].intern
1006
+ pack_info = @packs[no8.intern] if no8
1007
+ end
1008
+ if pac and pac[:prices] == nil and no8
1009
+ ppac = ((ppac = pack_info and ppac[:is_tier]) ? ppac : nil)
1010
+ pac = ppac if ppac
1063
1011
  end
1012
+ row << "%#{DAT_LEN[:RECA]}s" % '11'
1013
+ info_zur_rose = @infos_zur_rose[ean] # zurrose
1014
+ if info_zur_rose && info_zur_rose[:cmut]
1015
+ row << info_zur_rose[:cmut]
1016
+ else
1017
+ row << '1'
1018
+ end
1019
+ row << "%0#{DAT_LEN[:PHAR]}d" % idx[:pharmacode].to_i
1020
+ abez = ( # de name
1021
+ idx[:desc].to_s + " " +
1022
+ (pac ? pac[:name_de].to_s : '') +
1023
+ (idx[:additional_desc] ? idx[:additional_desc] : '')
1024
+ ).gsub(/"/, '')
1025
+ row << format_name(abez)
1026
+ row << "%#{DAT_LEN[:PRMO]}s" % (pac ? format_price(pac[:prices][:exf_price][:price].to_s) : ('0' * DAT_LEN[:PRMO]))
1027
+ row << "%#{DAT_LEN[:PRPU]}s" % (pac ? format_price(pac[:prices][:pub_price][:price].to_s) : ('0' * DAT_LEN[:PRPU]))
1028
+ row << "%#{DAT_LEN[:CKZL]}s" % if (@lppvs[ean])
1029
+ '2'
1030
+ elsif pac # sl_entry
1031
+ '1'
1032
+ else
1033
+ '3'
1034
+ end
1035
+ row << "%#{DAT_LEN[:CLAG]}s" % if ((no8 && no8.to_s =~ /(\d{5})(\d{3})/) and
1036
+ @fridges.include?($1.to_s))
1037
+ '1'
1038
+ else
1039
+ '0'
1040
+ end
1041
+ row << "%#{DAT_LEN[:CBGG]}s" % if ((pac && pac[:narcosis_flag] == 'Y') or # BAGXml
1042
+ (@flags[ean])) # ywesee BM_update
1043
+ '3'
1044
+ else
1045
+ '0'
1046
+ end
1047
+ row << "%#{DAT_LEN[:CIKS]}s" % if (no8 && pack_info && !pack_info[:is_tier]) # Packungen.xls
1048
+ pack_info[:swissmedic_category]
1049
+ else
1050
+ '0'
1051
+ end.gsub(/(\+|\s)/, '')
1052
+ row << "%0#{DAT_LEN[:ITHE]}d" % if (no8 && pack_info && !pack_info[:is_tier])
1053
+ format_date(pack_info[:ith_swissmedic])
1054
+ else
1055
+ ('0' * DAT_LEN[:ITHE])
1056
+ end.to_i
1057
+ row << "%0#{DAT_LEN[:CEAN]}d" % (ean.match(/^000000/) ? 0 : ean.to_i)
1058
+ row << "%#{DAT_LEN[:CMWS]}s" % '2' # pharma
1059
+ rows << row
1064
1060
  end
1065
1061
  end
1066
1062
  rows.join("\n")
@@ -26,7 +26,7 @@ module Oddb2xml
26
26
  @lppvs = {} # lppv.txt from files repo
27
27
  @infos = {} # [option] FI from SwissmedicInfo
28
28
  @packs = {} # [option] Packungen from Swissmedic for dat
29
- @prices = {} # [addition] prices from zurrose transfer.txt
29
+ @infos_zur_rose = {} # [addition] infos_zur_rose and other infos from zurrose transfer.txt
30
30
  @migel = {} # [addition] additional Non Pharma products from files repo
31
31
  @actions = [] # [addition] interactions from epha
32
32
  @orphans = [] # [addition] Orphaned drugs from Swissmedic xls
@@ -58,9 +58,7 @@ module Oddb2xml
58
58
  if @options[:nonpharma]
59
59
  threads << download(:migel) # oddb2xml_files
60
60
  end
61
- if @options[:price] # zurrose
62
- threads << download(@options[:price])
63
- end
61
+ threads << download(:zurrose)
64
62
  threads << download(:package) # swissmedic
65
63
  threads << download(:bm_update) # oddb2xml_files
66
64
  threads << download(:lppv) # oddb2xml_files
@@ -118,7 +116,7 @@ module Oddb2xml
118
116
  builder.infos = @infos
119
117
  builder.packs = @packs
120
118
  # additional sources
121
- %w[actions orphans fridges migel prices].each do |addition|
119
+ %w[actions orphans fridges migel infos_zur_rose].each do |addition|
122
120
  builder.send("#{addition}=".intern, self.instance_variable_get("@#{addition}"))
123
121
  end
124
122
  end
@@ -249,8 +247,8 @@ module Oddb2xml
249
247
  Oddb2xml.log("zurrose xml #{xml.size} bytes")
250
248
  @mutex.synchronize do
251
249
  hsh = ZurroseExtractor.new(xml, @options[:extended]).to_hash
252
- @prices = hsh
253
- Oddb2xml.log("zurrose added #{@prices.size} prices from xml with #{xml.size} bytes")
250
+ @infos_zur_rose = hsh
251
+ Oddb2xml.log("zurrose added #{@infos_zur_rose.size} items from xml with #{xml.size} bytes")
254
252
  end
255
253
  end
256
254
  when :index
@@ -332,7 +330,7 @@ module Oddb2xml
332
330
  end
333
331
  end
334
332
  if @options[:extended]
335
- lines << sprintf("\tPrices zur Rose: %i", @prices.length)
333
+ lines << sprintf("\tInformation items zur Rose: %i", @infos_zur_rose.length)
336
334
  end
337
335
  else
338
336
  {
@@ -193,7 +193,6 @@ module Oddb2xml
193
193
  item[:_type] = @type.downcase.intern
194
194
  item[:ean] = (gtin = pac.GTIN) ? gtin: ''
195
195
  item[:pharmacode] = (phar = pac.PHAR) ? phar: ''
196
- item[:status] = (stat = pac.STATUS) ? stat: ''
197
196
  item[:stat_date] = (date = pac.SDATE) ? date: ''
198
197
  item[:lang] = (lang = pac.LANG) ? lang: ''
199
198
  item[:desc] = (dscr = pac.DSCR) ? dscr: ''
@@ -503,6 +502,7 @@ module Oddb2xml
503
502
  :price => sprintf("%.2f", line[60,6].gsub(/(\d{2})$/, '.\1').to_f),
504
503
  :pub_price => sprintf("%.2f", line[66,6].gsub(/(\d{2})$/, '.\1').to_f),
505
504
  :type => :nonpharma,
505
+ :cmut => line[2],
506
506
  }
507
507
  @@zur_rose_items += 1
508
508
  end if @io
@@ -1,3 +1,3 @@
1
1
  module Oddb2xml
2
- VERSION = "1.8.5"
2
+ VERSION = "1.8.6"
3
3
  end
@@ -29,11 +29,10 @@ def check_validation_via_xsd
29
29
  xsd.validate(doc).each do |error| error.message.should be_nil end
30
30
  }
31
31
  end
32
-
33
32
  describe Oddb2xml::Builder do
34
- NrExtendedArticles = 70
35
- NrPharmaAndNonPharmaArticles = 61
36
- NrPharmaArticles = 4
33
+ NrExtendedArticles = 71
34
+ NrPharmaAndNonPharmaArticles = 62
35
+ NrPharmaArticles = 5
37
36
  include ServerMockHelper
38
37
  before(:each) do
39
38
  @savedDir = Dir.pwd
@@ -119,6 +118,28 @@ describe Oddb2xml::Builder do
119
118
  end
120
119
  end
121
120
 
121
+ context 'when -f dat is given' do
122
+ let(:cli) do
123
+ opts = {
124
+ :format => :dat,
125
+ }
126
+ Oddb2xml::Cli.new(opts)
127
+ end
128
+
129
+ it 'should contain the correct values fo CMUT from zurrose_transfer.dat' do
130
+ puts Oddb2xml::WorkDir
131
+ res = buildr_capture(:stdout){ cli.run }
132
+ res.should match(/products/)
133
+ dat_filename = File.join(Oddb2xml::WorkDir, 'oddb.dat')
134
+ File.exists?(dat_filename).should be_true
135
+ oddb_dat = IO.read(dat_filename)
136
+ oddb_dat.should match(/^..2/), "should have a record with '2' in CMUT field"
137
+ oddb_dat.should match(/^..3/), "should have a record with '3' in CMUT field"
138
+ oddb_dat.should match(/1115819012LEVETIRACETAM DESITIN Filmtabl 250 mg 30 Stk/), "should have Desitin"
139
+ # oddb_dat.should match(/^..1/), "should have a record with '1' in CMUT field" # we have no
140
+ end
141
+ end
142
+
122
143
  context 'when -a nonpharma -f dat is given' do
123
144
  let(:cli) do
124
145
  opts = {
@@ -137,8 +158,17 @@ describe Oddb2xml::Builder do
137
158
  oddb_dat.should match(/1115819012LEVETIRACETAM DESITIN Filmtabl 250 mg 30 Stk/), "should have Desitin"
138
159
  # oddb_dat.should match(/001349002780100B010710076806206900842/), "should match EAN of Desitin"
139
160
  end
140
- it "pending should match EAN of Desitin. returns 0 at the moment"
161
+
162
+ it "should match EAN of Desitin. returns 0 at the moment" do
163
+ res = buildr_capture(:stdout){ cli.run }
164
+ res.should match(/products/)
165
+ dat_filename = File.join(Oddb2xml::WorkDir, 'oddb_with_migel.dat')
166
+ File.exists?(dat_filename).should be_true
167
+ oddb_dat = IO.read(dat_filename)
168
+ oddb_dat.should match(/76806206900842/), "should match EAN of Desitin"
169
+ end
141
170
  end
171
+
142
172
  context 'when option -e is given' do
143
173
  let(:cli) do
144
174
  opts = {
@@ -312,9 +342,32 @@ describe Oddb2xml::Builder do
312
342
  product_xml.should_not match(/ZYVOXID/i)
313
343
  end
314
344
  doc = REXML::Document.new File.new(product_filename)
315
- XPath.match( doc, "//PRD" ).find_all{|x| true}.size.should == 3
316
- XPath.match( doc, "//GTIN" ).find_all{|x| true}.size.should == 3
345
+ XPath.match( doc, "//PRD" ).find_all{|x| true}.size.should == 4
346
+ XPath.match( doc, "//GTIN" ).find_all{|x| true}.size.should == 4
317
347
  XPath.match( doc, "//PRODNO" ).find_all{|x| true}.size.should == 1
318
348
  end
349
+
350
+ def checkItemForSALECD(doc, pharmacode, expected)
351
+ article = XPath.match( doc, "//ART[PHAR=#{pharmacode.to_s}]").first
352
+ name = article.elements['DSCRD'].text
353
+ salecd = article.elements['SALECD'].text
354
+ if $VERBOSE or article.elements['SALECD'].text != expected.to_s
355
+ puts "checking doc for pharmacode #{pharmacode} expected #{expected} == #{salecd}. #{name}"
356
+ puts article.text
357
+ end
358
+ article.elements['SALECD'].text.should == expected.to_s
359
+ end
360
+ it 'should generate the flag SALECD' do
361
+ res = buildr_capture(:stdout){ cli.run }
362
+ @article_xml = File.expand_path(File.join(Oddb2xml::WorkDir, 'oddb_article.xml'))
363
+ puts @article_xml
364
+ File.exists?(@article_xml).should be_true
365
+ FileUtils.cp(@article_xml, '/opt/src/oddb2xml/tst.xml', :verbose => true)
366
+ article_xml = IO.read(@article_xml)
367
+ doc = REXML::Document.new File.new(@article_xml)
368
+ XPath.match( doc, "//REF_DATA" ).size.should > 0
369
+ checkItemForSALECD(doc, "0020244", 'A') # FERRO-GRADUMET Depottabl 30 Stk
370
+ checkItemForSALECD(doc, "0598003", 'I') # SOFRADEX
371
+ end
319
372
  end
320
373
  end
@@ -59,7 +59,21 @@
59
59
  <GLN>7601001010604</GLN>
60
60
  </COMP>
61
61
  </ITEM>
62
- <RESULT>
62
+ <ITEM DT="2013-12-06T00:00:00">
63
+ <GTIN>7680316950157</GTIN>
64
+ <PHAR>598003</PHAR>
65
+ <STATUS>A</STATUS>
66
+ <STDATE>2012-04-13T00:00:00</STDATE>
67
+ <LANG>DE</LANG>
68
+ <DSCR>SOFRADEX Gtt Auric</DSCR>
69
+ <ADDSCR>8 ml</ADDSCR>
70
+ <ATC>S02CA06</ATC>
71
+ <COMP>
72
+ <NAME>Sanofi-Aventis (Suisse) SA</NAME>
73
+ <GLN>7601001002340</GLN>
74
+ </COMP>
75
+ </ITEM>
76
+ <RESULT>
63
77
  <OK_ERROR>OK</OK_ERROR>
64
78
  <NBR_RECORD>2</NBR_RECORD>
65
79
  </RESULT>
@@ -15,3 +15,4 @@
15
15
  1122871472CANIPHEDRIN Tabl 50 mg ad us vet. 500 Stk 005443007580400C000000000000000000002
16
16
  1132867163TOTALIN Plv ad us. vet. 5 kg 000535000900400C000000000000000000002
17
17
  1138110429Forthyron 400 mcg 50 Tabl (vet) 0081120015800000000000000000000000002
18
+ 1130598003SOFRADEX Gtt Auric 8 ml 000718001545300B120130076803169501572
@@ -17,7 +17,7 @@ describe Oddb2xml::BagXmlExtractor do
17
17
  dat = File.read(File.join(Oddb2xml::SpecData, 'Preparations.xml'))
18
18
  Oddb2xml::BagXmlExtractor.new(dat).to_hash
19
19
  end
20
- it {
20
+ it "should handle pub_price for 1699947 correctly" do
21
21
  @items = subject.to_hash
22
22
  with_pharma = @items['1699947']
23
23
  expect(with_pharma).not_to be_nil
@@ -27,6 +27,9 @@ describe Oddb2xml::BagXmlExtractor do
27
27
  expect(with_pharma[:packages].first[0]).to eq('1699947')
28
28
  expect(with_pharma[:packages].first[1][:prices][:pub_price][:price]).to eq('205.3')
29
29
  expect(@items.size).to eq(5)
30
+ end
31
+ it "should handle pub_price for 7680620690084 correctly" do
32
+ @items = subject.to_hash
30
33
  no_pharma = @items['7680620690084']
31
34
  expect(no_pharma).not_to be_nil
32
35
  expect(no_pharma[:atc_code]).not_to be_nil
@@ -34,7 +37,7 @@ describe Oddb2xml::BagXmlExtractor do
34
37
  expect(no_pharma[:packages].size).to eq(1)
35
38
  expect(no_pharma[:packages].first[0]).to eq('7680620690084')
36
39
  expect(no_pharma[:packages].first[1][:prices][:pub_price][:price]).to eq('27.8')
37
- }
40
+ end
38
41
  end
39
42
  end
40
43
 
@@ -172,14 +175,16 @@ describe Oddb2xml::ZurroseExtractor do
172
175
  it { expect(subject.to_hash.values.first[:price]).to eq("15.76") }
173
176
  it { expect(subject.to_hash.values.first[:pub_price]).to eq("24.30") }
174
177
  it { expect(subject.to_hash.values.first[:pharmacode]).to eq("0020652") }
175
-
178
+ it 'should set the correct SALECD cmut code' do expect(subject.to_hash.values.first[:cmut]).to eq("2") end
179
+ end
180
+ context 'when SOFRADEX is given' do
181
+ subject do
182
+ dat = <<-DAT
183
+ 1130598003SOFRADEX Gtt Auric 8 ml 000718001545300B120130076803169501572\r\n
184
+ DAT
185
+ Oddb2xml::ZurroseExtractor.new(dat)
186
+ end
187
+ #it { expect(subject.to_hash.keys.first).to eq("7680316950157") }
188
+ it "should set the correct SALECD cmut code" do expect(subject.to_hash.values.first[:cmut]).to eq("3") end
176
189
  end
177
-
178
- x =%(
179
- Record-Art 1 Länge 97
180
- :vat => $2.to_s,
181
- :price => sprintf("%.2f", line[60,6].gsub(/(\d{2})$/, '.\1').to_f),
182
- :pub_price => sprintf("%.2f", line[66,6].gsub(/(\d{2})$/, '.\1').to_f),
183
- =
184
- )
185
190
  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.8.5
4
+ version: 1.8.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-06-04 00:00:00.000000000 Z
12
+ date: 2014-08-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rubyzip