hippo 0.1.2 → 0.2.0

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.
Files changed (68) hide show
  1. data/CHANGELOG +7 -0
  2. data/README.md +58 -7
  3. data/lib/hippo/exceptions.rb +2 -1
  4. data/lib/hippo/field.rb +87 -1
  5. data/lib/hippo/parser/segment.rb +2 -2
  6. data/lib/hippo/segments/AK1.rb +1 -2
  7. data/lib/hippo/segments/AK3.rb +1 -2
  8. data/lib/hippo/segments/AK4.rb +4 -8
  9. data/lib/hippo/segments/AK9.rb +3 -6
  10. data/lib/hippo/segments/AMT.rb +1 -1
  11. data/lib/hippo/segments/BPR.rb +1 -1
  12. data/lib/hippo/segments/CAS.rb +12 -12
  13. data/lib/hippo/segments/CLM.rb +1 -1
  14. data/lib/hippo/segments/CLP.rb +5 -5
  15. data/lib/hippo/segments/CN1.rb +3 -3
  16. data/lib/hippo/segments/CR1.rb +2 -2
  17. data/lib/hippo/segments/CR2.rb +4 -5
  18. data/lib/hippo/segments/CR3.rb +1 -1
  19. data/lib/hippo/segments/CR4.rb +16 -16
  20. data/lib/hippo/segments/CR5.rb +7 -7
  21. data/lib/hippo/segments/CR7.rb +2 -4
  22. data/lib/hippo/segments/CTP.rb +15 -16
  23. data/lib/hippo/segments/CTX.rb +6 -12
  24. data/lib/hippo/segments/CUR.rb +1 -1
  25. data/lib/hippo/segments/DMG.rb +1 -1
  26. data/lib/hippo/segments/DN1.rb +2 -2
  27. data/lib/hippo/segments/DN2.rb +1 -1
  28. data/lib/hippo/segments/DSB.rb +2 -2
  29. data/lib/hippo/segments/FRM.rb +1 -1
  30. data/lib/hippo/segments/GE.rb +2 -2
  31. data/lib/hippo/segments/GS.rb +6 -6
  32. data/lib/hippo/segments/HCP.rb +5 -5
  33. data/lib/hippo/segments/HI.rb +24 -24
  34. data/lib/hippo/segments/HSD.rb +3 -4
  35. data/lib/hippo/segments/IEA.rb +2 -2
  36. data/lib/hippo/segments/IK3.rb +1 -2
  37. data/lib/hippo/segments/IK4.rb +4 -8
  38. data/lib/hippo/segments/ISA.rb +10 -10
  39. data/lib/hippo/segments/K3.rb +10 -10
  40. data/lib/hippo/segments/LX.rb +1 -2
  41. data/lib/hippo/segments/MEA.rb +13 -13
  42. data/lib/hippo/segments/MIA.rb +19 -19
  43. data/lib/hippo/segments/MOA.rb +4 -4
  44. data/lib/hippo/segments/PAT.rb +1 -1
  45. data/lib/hippo/segments/PLB.rb +6 -6
  46. data/lib/hippo/segments/PS1.rb +1 -1
  47. data/lib/hippo/segments/PWK.rb +1 -2
  48. data/lib/hippo/segments/QTY.rb +11 -11
  49. data/lib/hippo/segments/SE.rb +1 -2
  50. data/lib/hippo/segments/STC.rb +2 -2
  51. data/lib/hippo/segments/SV1.rb +8 -12
  52. data/lib/hippo/segments/SV2.rb +4 -4
  53. data/lib/hippo/segments/SV3.rb +6 -10
  54. data/lib/hippo/segments/SV5.rb +3 -3
  55. data/lib/hippo/segments/SV6.rb +6 -10
  56. data/lib/hippo/segments/SVC.rb +4 -4
  57. data/lib/hippo/segments/SVD.rb +3 -4
  58. data/lib/hippo/segments/TA1.rb +5 -5
  59. data/lib/hippo/segments/TS2.rb +19 -19
  60. data/lib/hippo/segments/TS3.rb +21 -21
  61. data/lib/hippo/segments/UR.rb +1 -1
  62. data/lib/hippo/segments/base.rb +12 -14
  63. data/lib/hippo/version.rb +1 -1
  64. data/lib/hippo.rb +4 -0
  65. data/test/test_helper.rb +4 -0
  66. data/test/test_parser.rb +3 -3
  67. data/test/test_segments_base.rb +42 -0
  68. metadata +6 -6
data/CHANGELOG CHANGED
@@ -1,3 +1,10 @@
1
+ 0.2.0 - 2012/01/21
2
+ * Updated segment definitions to differentiate between
3
+ Integer and Decimal.
4
+ * Add field level datatype conversion. Date, Time, Integer,
5
+ and Decimal fields will be stored internally as their
6
+ appropriate type and converted to a properly formatted
7
+ string representation when needed.
1
8
  0.1.2 - 2012/01/18
2
9
  * Add RepeatingComponent to Outputters.
3
10
  * Add HIPAA_997 to list of supported transaction sets.
data/README.md CHANGED
@@ -96,6 +96,10 @@ Transaction Sets/Loops and Segments are defined with a very straight forward DSL
96
96
  field :name => 'Field4'
97
97
  field :name => 'CommonName'
98
98
  field :name => 'CommonName'
99
+ field :name => 'DateField', :datatype => :date
100
+ field :name => 'TimeField', :datatype => :time
101
+ field :name => 'IntegerField', :datatype => :integer
102
+ field :name => 'DecimalField', :datatype => :decimal
99
103
  end
100
104
 
101
105
  class TestCompoundSegment < Hippo::Segments::Base
@@ -223,8 +227,8 @@ composite field you can optionally pass the index of the field to access.
223
227
  ts.TCS do |tcs|
224
228
  tcs.Field1 = 'Foo' # use the field name
225
229
  tcs.TCS01_01 = 'Bar' # use shorthand notation:
226
- # TCS01 refers to the composite field
227
- # _01 refers to the first field within the composite
230
+ # TCS01 refers to the first field within the current segment
231
+ # _01 refers to the first field within the composite field
228
232
  end
229
233
  ```
230
234
 
@@ -235,9 +239,9 @@ but if you need to access the second instance of TSS in the transaction set you
235
239
  TSS_02 instead.
236
240
 
237
241
  ```ruby
238
- ts.TCS.Field1 = 'Foo'
239
- ts.TSS.Field2 = 'Bar'
240
- ts.TSS_02.Field2 = 'Baz'
242
+ ts.TCS.Field1 = 'Foo'
243
+ ts.TSS.Field2 = 'Bar'
244
+ ts.TSS_02.Field2 = 'Baz'
241
245
 
242
246
  # ts.to_s => 'TSS*Blah*Bar~TCS*Foo**Preset Field 7~TSS*Last Segment*Baz~'
243
247
  ```
@@ -248,12 +252,12 @@ on the name provided in the TransactionSet definition. You can either pass the
248
252
  a Regexp to search with.
249
253
 
250
254
  ```ruby
251
- ts.find\_by\_name('Test Simple Segment #1') do |tss|
255
+ ts.find_by_name('Test Simple Segment #1') do |tss|
252
256
  tss.Field2 = 'Baz'
253
257
  end
254
258
 
255
259
  # which is essentially equivilent (because the search occurs in order of declaration)
256
- ts.find\_by\_name(/Segment/) do |tss|
260
+ ts.find_by_name(/Segment/) do |tss|
257
261
  tss.Field2 = 'Baz'
258
262
  end
259
263
 
@@ -269,6 +273,53 @@ The same technique can be used to reference fields within a segment that have th
269
273
  # ts.to_s => 'TSS*Blah*Bar***Value1*Value2~TCS*Foo**Preset Field 7~TSS*Last Segment*Baz~'
270
274
  ```
271
275
 
276
+ Type Conversion
277
+ ---------------
278
+
279
+ As of Hippo version 0.2.0 values are stored in the native format, and coverted back to the
280
+ appropriate string representation when required. This means that you can set and access date,
281
+ time, integer, and decimal fields without having to convert back and forth between strings.
282
+
283
+ As part of the type conversion process we are also validating that a fields value is being set
284
+ with a valid value for that particular data type.
285
+
286
+ Just a few examples using the type conversion:
287
+
288
+ ```ruby
289
+ seg = Hippo::Segments::TSS.new # Please review definition from above.
290
+
291
+ # Date fields:
292
+ seg.DateField = Date.new(2012, 01, 20)
293
+ seg.DateField = "20120120"
294
+ seg.DateField = Time.new(2012, 01, 20, 10, 15, 20)
295
+
296
+ # all of these formats result in the same internal representation
297
+ puts seg.DateField.inspect # => #<Date: 2012-01-20 ((2455947j,0s,0n),+0s,2299161j)>
298
+
299
+ # To set the field back to a blank/empty value simply assign it to nil
300
+ seg.DateField = nil
301
+
302
+ # Time fields:
303
+ seg.TimeField = "0120" # => 1:20 am (HHMM)
304
+ seg.TimeField = "012023" # => 1:20:23 am (HHMMSS)
305
+ seg.TimeField = "01202322" # => 1:20:23.22 am (HHMMSSDD)
306
+ seg.TimeField = Time.now
307
+
308
+ # Integer fields:
309
+ seg.IntegerField = "10" # => 10
310
+ seg.IntegerField = 10 # => 10
311
+ seg.IntegerField = "10blah" # => 10
312
+
313
+ # Decimal fields:
314
+ seg.DecimalField = "123.45" # => #<BigDecimal:7fe83c315750,'0.12345E3',18(18)>
315
+ seg.DecimalField = 123.45 # => #<BigDecimal:7fe83c315750,'0.12345E3',18(18)>
316
+ seg.DecimalField = 123 # => #<BigDecimal:7fe83b9dd4f8,'0.123E3',9(18)>
317
+ seg.DecimalField = 123.0 # => #<BigDecimal:7fe83b9dd4f8,'0.123E3',9(18)>
318
+ ```
319
+
320
+ __Please Note__: Due to issues with floating point representation of currency values we have
321
+ chosen to use BigDecimal internally to store all fields with a decimal datatype.
322
+
272
323
  For more example please review the test suite.
273
324
 
274
325
  License
@@ -2,8 +2,9 @@ module Hippo
2
2
  module Exceptions
3
3
  class Exception < StandardError; end
4
4
 
5
+ class InvalidValue < Exception; end
5
6
  class InvalidField < Exception; end
6
7
  class InvalidSegment < Exception; end
7
- class ParseError < Exception; end
8
+ class ParseError < Exception; end
8
9
  end
9
10
  end
data/lib/hippo/field.rb CHANGED
@@ -1,6 +1,92 @@
1
+ require 'date'
2
+ require 'time'
3
+ require 'bigdecimal'
4
+
1
5
  module Hippo
2
6
  class Field
3
- attr_accessor :name, :sequence, :datatype, :options, :restrictions, :minimum, :maximum, :required, :separator, :composite, :composite_sequence
7
+ attr_accessor :name, :sequence, :datatype, :options,
8
+ :restrictions, :minimum, :maximum, :required,
9
+ :separator, :composite, :composite_sequence
10
+
11
+ def minimum
12
+ @minimum ||= 0
13
+ end
14
+
15
+ def formatted_value(value)
16
+ return nil if value.nil?
17
+
18
+ case datatype
19
+ when :binary then value
20
+ when :integer then value.to_i
21
+ when :decimal then BigDecimal.new(value.to_s)
22
+ when :date then parse_date(value)
23
+ when :time then parse_time(value)
24
+ else value.to_s
25
+ end
26
+ end
27
+
28
+ def string_value(value)
29
+ return '' if value.nil? || value == ''
30
+
31
+ case datatype
32
+ when :binary then value
33
+ when :integer then value.to_s.rjust(minimum, '0')
34
+ when :decimal then value.to_s('F').sub(/\.0\z/,'').rjust(minimum, '0')
35
+ when :date
36
+ if maximum == 6
37
+ value.strftime('%y%m%d')
38
+ else
39
+ value.strftime('%Y%m%d')
40
+ end
41
+ when :time
42
+ if maximum == 4 || value.sec == 0
43
+ value.strftime('%H%M')
44
+ else
45
+ value.strftime('%H%M%S')
46
+ end
47
+ else value.to_s.ljust(minimum)
48
+ end
49
+ end
50
+
51
+ def parse_time(value)
52
+ case value.class.to_s
53
+ when 'Time' then value
54
+ when 'String'
55
+ format = case value
56
+ when /\A\d{4}\z/ then '%H%M'
57
+ when /\A\d{6}\z/ then '%H%M%S'
58
+ when /\A\d{7,8}\z/ then '%H%M%S%N'
59
+ else invalid!
60
+ end
61
+
62
+ Time.strptime(value, format)
63
+ else invalid!
64
+ end
65
+ rescue
66
+ invalid!
67
+ end
68
+
69
+ def parse_date(value)
70
+ case value.class.to_s
71
+ when "Date" then value
72
+ when "Time" then value.to_date
73
+ when "String"
74
+ format = case value
75
+ when /\A\d{6}\z/ then '%y%m%d'
76
+ when /\A\d{8}\z/ then '%Y%m%d'
77
+ else invalid!
78
+ end
79
+
80
+ Date.parse(value, format)
81
+ else
82
+ invalid! "Invalid datatype(#{value.class}) for date field."
83
+ end
84
+ rescue
85
+ invalid!
86
+ end
4
87
 
88
+ def invalid!(message = "Invalid value specified for #{self.datatype} field.")
89
+ raise Hippo::Exceptions::InvalidValue.new message
90
+ end
5
91
  end
6
92
  end
@@ -21,10 +21,10 @@ module Hippo
21
21
  composite_fields.each_with_index do |comp_value, comp_index|
22
22
  composite_field = field[comp_index]
23
23
 
24
- self.values[composite_sequence][composite_field.sequence] = comp_value
24
+ self.values[composite_sequence][composite_field.sequence] = composite_field.formatted_value(comp_value)
25
25
  end
26
26
  else
27
- self.values[field.sequence] = value
27
+ self.values[field.sequence] = field.formatted_value(value)
28
28
  end
29
29
  end
30
30
 
@@ -13,8 +13,7 @@ module Hippo::Segments
13
13
 
14
14
  field :name => 'GroupControlNumber',
15
15
  :sequence => 2,
16
- :datatype => :numeric,
17
- :decimal => 0,
16
+ :datatype => :integer,
18
17
  :minimum => 1,
19
18
  :maximum => 9,
20
19
  :required => true,
@@ -13,8 +13,7 @@ module Hippo::Segments
13
13
 
14
14
  field :name => 'SegmentPositionInTransactionSet',
15
15
  :sequence => 2,
16
- :datatype => :numeric,
17
- :decimal => 0,
16
+ :datatype => :integer,
18
17
  :minimum => 1,
19
18
  :maximum => 10,
20
19
  :required => true,
@@ -7,8 +7,7 @@ module Hippo::Segments
7
7
 
8
8
  field :name => 'ElementPositionInSegment',
9
9
  :sequence => 1,
10
- :datatype => :numeric,
11
- :decimal => 0,
10
+ :datatype => :integer,
12
11
  :minimum => 1,
13
12
  :maximum => 2,
14
13
  :required => true,
@@ -16,8 +15,7 @@ module Hippo::Segments
16
15
 
17
16
  field :name => 'ComponentDataElementPositionInComposite',
18
17
  :sequence => 2,
19
- :datatype => :numeric,
20
- :decimal => 0,
18
+ :datatype => :integer,
21
19
  :minimum => 1,
22
20
  :maximum => 2,
23
21
  :required => false,
@@ -25,8 +23,7 @@ module Hippo::Segments
25
23
 
26
24
  field :name => 'RepeatingDataElementPosition',
27
25
  :sequence => 3,
28
- :datatype => :numeric,
29
- :decimal => 0,
26
+ :datatype => :integer,
30
27
  :minimum => 1,
31
28
  :maximum => 4,
32
29
  :required => false,
@@ -36,8 +33,7 @@ module Hippo::Segments
36
33
 
37
34
  field :name => 'DataElementReferenceNumber',
38
35
  :sequence => 2,
39
- :datatype => :numeric,
40
- :decimal => 0,
36
+ :datatype => :integer,
41
37
  :minimum => 1,
42
38
  :maximum => 4,
43
39
  :required => false,
@@ -13,8 +13,7 @@ module Hippo::Segments
13
13
 
14
14
  field :name => 'NumberOfTransactionSetsIncluded',
15
15
  :sequence => 2,
16
- :datatype => :numeric,
17
- :decimal => 0,
16
+ :datatype => :integer,
18
17
  :minimum => 1,
19
18
  :maximum => 6,
20
19
  :required => true,
@@ -22,8 +21,7 @@ module Hippo::Segments
22
21
 
23
22
  field :name => 'NumberOfReceivedTransactionSets',
24
23
  :sequence => 3,
25
- :datatype => :numeric,
26
- :decimal => 0,
24
+ :datatype => :integer,
27
25
  :minimum => 1,
28
26
  :maximum => 6,
29
27
  :required => true,
@@ -31,8 +29,7 @@ module Hippo::Segments
31
29
 
32
30
  field :name => 'NumberOfAcceptedTransactionSets',
33
31
  :sequence => 4,
34
- :datatype => :numeric,
35
- :decimal => 0,
32
+ :datatype => :integer,
36
33
  :minimum => 1,
37
34
  :maximum => 6,
38
35
  :required => true,
@@ -13,7 +13,7 @@ module Hippo::Segments
13
13
 
14
14
  field :name => 'MonetaryAmount',
15
15
  :sequence => 2,
16
- :datatype => :numeric,
16
+ :datatype => :decimal,
17
17
  :minimum => 1,
18
18
  :maximum => 18,
19
19
  :required => true,
@@ -13,7 +13,7 @@ module Hippo::Segments
13
13
 
14
14
  field :name => 'MonetaryAmount',
15
15
  :sequence => 2,
16
- :datatype => :numeric,
16
+ :datatype => :decimal,
17
17
  :minimum => 1,
18
18
  :maximum => 18,
19
19
  :required => true,
@@ -21,7 +21,7 @@ module Hippo::Segments
21
21
 
22
22
  field :name => 'MonetaryAmount',
23
23
  :sequence => 3,
24
- :datatype => :numeric,
24
+ :datatype => :decimal,
25
25
  :minimum => 1,
26
26
  :maximum => 18,
27
27
  :required => true,
@@ -29,7 +29,7 @@ module Hippo::Segments
29
29
 
30
30
  field :name => 'Quantity',
31
31
  :sequence => 4,
32
- :datatype => :numeric,
32
+ :datatype => :decimal,
33
33
  :minimum => 1,
34
34
  :maximum => 15,
35
35
  :required => false,
@@ -45,7 +45,7 @@ module Hippo::Segments
45
45
 
46
46
  field :name => 'MonetaryAmount',
47
47
  :sequence => 6,
48
- :datatype => :numeric,
48
+ :datatype => :decimal,
49
49
  :minimum => 1,
50
50
  :maximum => 18,
51
51
  :required => false,
@@ -53,7 +53,7 @@ module Hippo::Segments
53
53
 
54
54
  field :name => 'Quantity',
55
55
  :sequence => 7,
56
- :datatype => :numeric,
56
+ :datatype => :decimal,
57
57
  :minimum => 1,
58
58
  :maximum => 15,
59
59
  :required => false,
@@ -69,7 +69,7 @@ module Hippo::Segments
69
69
 
70
70
  field :name => 'MonetaryAmount',
71
71
  :sequence => 9,
72
- :datatype => :numeric,
72
+ :datatype => :decimal,
73
73
  :minimum => 1,
74
74
  :maximum => 18,
75
75
  :required => false,
@@ -77,7 +77,7 @@ module Hippo::Segments
77
77
 
78
78
  field :name => 'Quantity',
79
79
  :sequence => 10,
80
- :datatype => :numeric,
80
+ :datatype => :decimal,
81
81
  :minimum => 1,
82
82
  :maximum => 15,
83
83
  :required => false,
@@ -93,7 +93,7 @@ module Hippo::Segments
93
93
 
94
94
  field :name => 'MonetaryAmount',
95
95
  :sequence => 12,
96
- :datatype => :numeric,
96
+ :datatype => :decimal,
97
97
  :minimum => 1,
98
98
  :maximum => 18,
99
99
  :required => false,
@@ -101,7 +101,7 @@ module Hippo::Segments
101
101
 
102
102
  field :name => 'Quantity',
103
103
  :sequence => 13,
104
- :datatype => :numeric,
104
+ :datatype => :decimal,
105
105
  :minimum => 1,
106
106
  :maximum => 15,
107
107
  :required => false,
@@ -117,7 +117,7 @@ module Hippo::Segments
117
117
 
118
118
  field :name => 'MonetaryAmount',
119
119
  :sequence => 15,
120
- :datatype => :numeric,
120
+ :datatype => :decimal,
121
121
  :minimum => 1,
122
122
  :maximum => 18,
123
123
  :required => false,
@@ -125,7 +125,7 @@ module Hippo::Segments
125
125
 
126
126
  field :name => 'Quantity',
127
127
  :sequence => 16,
128
- :datatype => :numeric,
128
+ :datatype => :decimal,
129
129
  :minimum => 1,
130
130
  :maximum => 15,
131
131
  :required => false,
@@ -141,7 +141,7 @@ module Hippo::Segments
141
141
 
142
142
  field :name => 'MonetaryAmount',
143
143
  :sequence => 18,
144
- :datatype => :numeric,
144
+ :datatype => :decimal,
145
145
  :minimum => 1,
146
146
  :maximum => 18,
147
147
  :required => false,
@@ -149,7 +149,7 @@ module Hippo::Segments
149
149
 
150
150
  field :name => 'Quantity',
151
151
  :sequence => 19,
152
- :datatype => :numeric,
152
+ :datatype => :decimal,
153
153
  :minimum => 1,
154
154
  :maximum => 15,
155
155
  :required => false,
@@ -13,7 +13,7 @@ module Hippo::Segments
13
13
 
14
14
  field :name => 'MonetaryAmount',
15
15
  :sequence => 2,
16
- :datatype => :numeric,
16
+ :datatype => :decimal,
17
17
  :minimum => 1,
18
18
  :maximum => 18,
19
19
  :required => false,
@@ -21,7 +21,7 @@ module Hippo::Segments
21
21
 
22
22
  field :name => 'MonetaryAmount',
23
23
  :sequence => 3,
24
- :datatype => :numeric,
24
+ :datatype => :decimal,
25
25
  :minimum => 1,
26
26
  :maximum => 18,
27
27
  :required => true,
@@ -29,7 +29,7 @@ module Hippo::Segments
29
29
 
30
30
  field :name => 'MonetaryAmount',
31
31
  :sequence => 4,
32
- :datatype => :numeric,
32
+ :datatype => :decimal,
33
33
  :minimum => 1,
34
34
  :maximum => 18,
35
35
  :required => true,
@@ -37,7 +37,7 @@ module Hippo::Segments
37
37
 
38
38
  field :name => 'MonetaryAmount',
39
39
  :sequence => 5,
40
- :datatype => :numeric,
40
+ :datatype => :decimal,
41
41
  :minimum => 1,
42
42
  :maximum => 18,
43
43
  :required => false,
@@ -93,7 +93,7 @@ module Hippo::Segments
93
93
 
94
94
  field :name => 'Quantity',
95
95
  :sequence => 12,
96
- :datatype => :numeric,
96
+ :datatype => :decimal,
97
97
  :minimum => 1,
98
98
  :maximum => 15,
99
99
  :required => false,
@@ -101,7 +101,7 @@ module Hippo::Segments
101
101
 
102
102
  field :name => 'PercentageAsDecimal',
103
103
  :sequence => 13,
104
- :datatype => :numeric,
104
+ :datatype => :decimal,
105
105
  :minimum => 1,
106
106
  :maximum => 10,
107
107
  :required => false,
@@ -13,7 +13,7 @@ module Hippo::Segments
13
13
 
14
14
  field :name => 'MonetaryAmount',
15
15
  :sequence => 2,
16
- :datatype => :numeric,
16
+ :datatype => :decimal,
17
17
  :minimum => 1,
18
18
  :maximum => 18,
19
19
  :required => false,
@@ -21,7 +21,7 @@ module Hippo::Segments
21
21
 
22
22
  field :name => 'PercentDecimalFormat',
23
23
  :sequence => 3,
24
- :datatype => :numeric,
24
+ :datatype => :decimal,
25
25
  :minimum => 1,
26
26
  :maximum => 6,
27
27
  :required => false,
@@ -37,7 +37,7 @@ module Hippo::Segments
37
37
 
38
38
  field :name => 'TermsDiscountPercent',
39
39
  :sequence => 5,
40
- :datatype => :numeric,
40
+ :datatype => :decimal,
41
41
  :minimum => 1,
42
42
  :maximum => 6,
43
43
  :required => false,
@@ -13,7 +13,7 @@ module Hippo::Segments
13
13
 
14
14
  field :name => 'Weight',
15
15
  :sequence => 2,
16
- :datatype => :numeric,
16
+ :datatype => :decimal,
17
17
  :minimum => 1,
18
18
  :maximum => 10,
19
19
  :required => false,
@@ -45,7 +45,7 @@ module Hippo::Segments
45
45
 
46
46
  field :name => 'Quantity',
47
47
  :sequence => 6,
48
- :datatype => :numeric,
48
+ :datatype => :decimal,
49
49
  :minimum => 1,
50
50
  :maximum => 15,
51
51
  :required => false,
@@ -5,8 +5,7 @@ module Hippo::Segments
5
5
 
6
6
  field :name => 'Count',
7
7
  :sequence => 1,
8
- :datatype => :numeric,
9
- :decimal => 0,
8
+ :datatype => :integer,
10
9
  :minimum => 1,
11
10
  :maximum => 9,
12
11
  :required => false,
@@ -14,7 +13,7 @@ module Hippo::Segments
14
13
 
15
14
  field :name => 'Quantity',
16
15
  :sequence => 2,
17
- :datatype => :numeric,
16
+ :datatype => :decimal,
18
17
  :minimum => 1,
19
18
  :maximum => 15,
20
19
  :required => false,
@@ -46,7 +45,7 @@ module Hippo::Segments
46
45
 
47
46
  field :name => 'Quantity',
48
47
  :sequence => 6,
49
- :datatype => :numeric,
48
+ :datatype => :decimal,
50
49
  :minimum => 1,
51
50
  :maximum => 15,
52
51
  :required => false,
@@ -54,7 +53,7 @@ module Hippo::Segments
54
53
 
55
54
  field :name => 'Quantity',
56
55
  :sequence => 7,
57
- :datatype => :numeric,
56
+ :datatype => :decimal,
58
57
  :minimum => 1,
59
58
  :maximum => 15,
60
59
  :required => false,
@@ -21,7 +21,7 @@ module Hippo::Segments
21
21
 
22
22
  field :name => 'Quantity',
23
23
  :sequence => 3,
24
- :datatype => :numeric,
24
+ :datatype => :decimal,
25
25
  :minimum => 1,
26
26
  :maximum => 15,
27
27
  :required => false,