bai2 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,142 @@
1
+ require 'bai2/record'
2
+
3
+ module Bai2
4
+
5
+ class ParseError < Exception; end
6
+
7
+ module Parser
8
+
9
+ # Wrapper object to represent a tree node.
10
+ #
11
+ class ParseNode
12
+
13
+ def initialize(record)
14
+ @code, @records = record.code, [record]
15
+ @children = []
16
+ end
17
+ attr_reader :code
18
+ attr_accessor :records, :children
19
+ end
20
+
21
+
22
+ class << self
23
+
24
+ # Parsing is a two-step process:
25
+ #
26
+ # 1. Build a tree
27
+ # 2. Parse the tree
28
+ #
29
+ def parse(data)
30
+
31
+ # split records, handle stupid DOS-format files, instantiate records
32
+ records = data.split("\n").map(&:strip).map {|l| Record.new(l) }
33
+
34
+ # merge continuations
35
+ records = merge_continuations(records)
36
+
37
+ # build the tree
38
+ root = parse_tree(records)
39
+
40
+ root
41
+ end
42
+
43
+
44
+ # =========================================================================
45
+ # Parsing implementation
46
+ #
47
+
48
+ private
49
+
50
+ # Merges continuations
51
+ #
52
+ def merge_continuations(records)
53
+ merged = []
54
+ records.each do |record|
55
+ if record.code == :continuation
56
+ last = merged.pop
57
+ new_record = Record.new(last.raw + ",\n" + record.fields[:continuation],
58
+ last.physical_record_count + 1)
59
+ merged << new_record
60
+ else
61
+ merged << record
62
+ end
63
+ end
64
+ merged
65
+ end
66
+
67
+
68
+ # Builds the tree of nodes
69
+ #
70
+ def parse_tree(records)
71
+
72
+ # build tree, should return a file_header node
73
+ first, *records = *records
74
+ unless first.code == :file_header
75
+ raise ParseError.new('Expecting file header record (01).')
76
+ end
77
+ root = ParseNode.new(first)
78
+ stack = [root]
79
+
80
+ records.each do |record|
81
+ raise ParseError.new('Unexpected record.') if stack.empty?
82
+
83
+ case record.code
84
+
85
+ # handling headers
86
+ when :group_header, :account_identifier
87
+
88
+ parent = {group_header: :file_header,
89
+ account_identifier: :group_header}[record.code]
90
+ unless stack.last.code == parent
91
+ raise ParseError.new("Parsing #{record.code}, expecting #{parent} parent.")
92
+ end
93
+
94
+ n = ParseNode.new(record)
95
+ stack.last.children << n
96
+ stack << n
97
+
98
+ # handling trailers
99
+ when :account_trailer, :group_trailer, :file_trailer
100
+
101
+ parent = {account_trailer: :account_identifier,
102
+ group_trailer: :group_header,
103
+ file_trailer: :file_header}[record.code]
104
+ unless stack.last.code == parent
105
+ raise ParseError.new("Parsing #{record.code}, expecting #{parent} parent.")
106
+ end
107
+
108
+ stack.last.records << record
109
+ stack.pop
110
+
111
+ # handling continuations
112
+ when :continuation
113
+
114
+ n = (stack.last.children.last || stack.last)
115
+ n.records << record
116
+
117
+ # handling transactions
118
+ when :transaction_detail
119
+
120
+ unless stack.last.code == :account_identifier
121
+ raise ParseError.new("Parsing #{record.code}, expecting account_identifier parent.")
122
+ end
123
+
124
+ stack.last.children << ParseNode.new(record)
125
+
126
+ # handling special known errors
127
+ else # nil
128
+ raise ParseError.new('Unknown or unexpected record code.')
129
+ end
130
+ end
131
+
132
+ unless stack == []
133
+ raise ParseError.new('Reached unexpected end of input (EOF).')
134
+ end
135
+
136
+ # root now contains our parsed tree
137
+ root
138
+ end
139
+
140
+ end
141
+ end
142
+ end
@@ -0,0 +1,260 @@
1
+ require 'bai2/parser'
2
+ require 'bai2/type-code-data.rb'
3
+
4
+ require 'time'
5
+
6
+ module Bai2
7
+
8
+ # This class represents a record. It knows how to parse the single record
9
+ # information, but has no knowledge of the structure of the file.
10
+ #
11
+ class Record
12
+
13
+ RECORD_CODES = {'01' => :file_header,
14
+ '02' => :group_header,
15
+ '03' => :account_identifier,
16
+ '16' => :transaction_detail,
17
+ '49' => :account_trailer,
18
+ '88' => :continuation,
19
+ '98' => :group_trailer,
20
+ '99' => :file_trailer }
21
+
22
+
23
+ # These parsing blocks are used below for the special date format BAI2 uses.
24
+ # Assumes UTC, because we do not have timezone information.
25
+
26
+ # Returns a date object
27
+ ParseDate = ->(v) do
28
+ Time.strptime("#{v} utc", '%y%m%d %Z')
29
+ end
30
+
31
+ # Returns a time interval in seconds, to be added to the date
32
+ ParseMilitaryTime = -> (v) do
33
+ v = '2400' if v == '9999'
34
+ Time.strptime("#{v} utc", '%H%M %Z').to_i % 86400
35
+ end
36
+
37
+ # Parses a type code, returns a structured informative hash
38
+ ParseTypeCode = -> (code) do
39
+ meaning = TypeCodeData[code.to_i] || [nil, nil, nil]
40
+ {
41
+ code: code.to_i,
42
+ transaction: meaning[0],
43
+ scope: meaning[1],
44
+ description: meaning[2],
45
+ }
46
+ end
47
+
48
+ # Cleans up text in continuations, removing leading commas
49
+ CleanContinuedText = -> (text) do
50
+ text.gsub(/,?,\n/, "\n").gsub(/^\n/, '')
51
+ end
52
+
53
+ # This block ensures that only version 2 of the BAI standard is accepted
54
+ AssertVersion2 = ->(v) do
55
+ unless v == "2"
56
+ raise ParseError.new("Unsupported BAI version (#{v} != 2)")
57
+ end
58
+ v.to_i
59
+ end
60
+
61
+ # For each record code, this defines a simple way to automatically parse the
62
+ # fields. Each field has a list of the keys. Some keys are not simply string
63
+ # types, in which case they will be formatted as a tuple (key, fn), where fn
64
+ # is a block (or anything that responds to `to_proc`) that will be called to
65
+ # cast the value (e.g. `:to_i`).
66
+ #
67
+ SIMPLE_FIELD_MAP = {
68
+ file_header: [
69
+ :record_code,
70
+ :sender,
71
+ :receiver,
72
+ [:file_creation_date, ParseDate],
73
+ [:file_creation_time, ParseMilitaryTime],
74
+ :file_identification_number,
75
+ [:physical_record_length, :to_i],
76
+ [:block_size, :to_i],
77
+ [:version_number, AssertVersion2],
78
+ ],
79
+ group_header: [
80
+ :record_code,
81
+ :destination,
82
+ :originator,
83
+ :group_status,
84
+ [:as_of_date, ParseDate],
85
+ [:as_of_time, ParseMilitaryTime],
86
+ :currency_code,
87
+ :as_of_date_modifier,
88
+ ],
89
+ group_trailer: [
90
+ :record_code,
91
+ [:group_control_total, :to_i],
92
+ [:number_of_accounts, :to_i],
93
+ [:number_of_records, :to_i],
94
+ ],
95
+ account_trailer: [
96
+ :record_code,
97
+ [:account_control_total, :to_i],
98
+ [:number_of_records, :to_i],
99
+ ],
100
+ file_trailer: [
101
+ :record_code,
102
+ [:file_control_total, :to_i],
103
+ [:number_of_groups, :to_i],
104
+ [:number_of_records, :to_i],
105
+ ],
106
+ continuation: [ # TODO: could continue any record at any point...
107
+ :record_code,
108
+ :continuation,
109
+ ],
110
+ # NOTE: transaction_detail is not present here, because it is too complex
111
+ # for a simple mapping like this.
112
+ }
113
+
114
+
115
+ def initialize(line, physical_record_count = 1)
116
+ @code = RECORD_CODES[line[0..1]]
117
+ @physical_record_count = physical_record_count
118
+ # clean / delimiter
119
+ @raw = line.sub(/,\/.+$/, '').sub(/\/$/, '')
120
+ end
121
+
122
+ attr_reader :code, :raw, :physical_record_count
123
+
124
+ # NOTE: fields is called upon first use, so as not to parse records right
125
+ # away in case they might be merged with a continuation.
126
+ #
127
+ def fields
128
+ @fields ||= parse_raw(@code, @raw)
129
+ end
130
+
131
+ # A record can be accessed like a hash.
132
+ #
133
+ def [](key)
134
+ fields[key]
135
+ end
136
+
137
+ private
138
+
139
+ def parse_raw(code, line)
140
+
141
+ fields = (SIMPLE_FIELD_MAP[code] || [])
142
+ if !fields.empty?
143
+ split = line.split(',', fields.count).map(&:strip)
144
+ Hash[fields.zip(split).map do |k,v|
145
+ next [k,v] if k.is_a?(Symbol)
146
+ key, block = k
147
+ [key, block.to_proc.call(v)]
148
+ end]
149
+ elsif respond_to?("parse_#{code}_fields".to_sym, true)
150
+ send("parse_#{code}_fields".to_sym, line)
151
+ else
152
+ raise ParseError.new('Unknown record code.')
153
+ end
154
+ end
155
+
156
+ # Special cases need special implementations.
157
+ #
158
+ # The rules here are pulled from the specification at this URL:
159
+ # http://www.bai.org/Libraries/Site-General-Downloads/Cash_Management_2005.sflb.ashx
160
+ #
161
+ def parse_transaction_detail_fields(record)
162
+
163
+ # split out the constant bits
164
+ record_code, type_code, amount, funds_type, rest = record.split(',', 5).map(&:strip)
165
+
166
+ common = {
167
+ record_code: record_code,
168
+ type: ParseTypeCode[type_code],
169
+ amount: amount.to_i,
170
+ funds_type: funds_type,
171
+ }
172
+
173
+ # handle funds_type logic
174
+ funds_info, rest = *parse_funds_type(funds_type, rest)
175
+ with_funds_availability = common.merge(funds_info)
176
+
177
+ # split the rest of the constant fields
178
+ bank_ref, customer_ref, text = rest.split(',', 3).map(&:strip)
179
+
180
+ with_funds_availability.merge(
181
+ bank_reference: bank_ref,
182
+ customer_reference: customer_ref,
183
+ text: CleanContinuedText[text],
184
+ )
185
+ end
186
+
187
+ def parse_account_identifier_fields(record)
188
+
189
+ # split out the constant bits
190
+ record_code, customer, currency_code, rest = record.split(',', 4).map(&:strip)
191
+
192
+ common = {
193
+ record_code: record_code,
194
+ customer: customer,
195
+ currency_code: currency_code,
196
+ summaries: [],
197
+ }
198
+
199
+ # sadly, imperative style seems cleaner. would prefer it functional.
200
+ until rest.nil? || rest.empty?
201
+
202
+ type_code, amount, items_count, funds_type, rest \
203
+ = rest.split(',', 5).map(&:strip)
204
+
205
+ amount_details = {
206
+ type: ParseTypeCode[type_code],
207
+ amount: amount.to_i,
208
+ items_count: items_count,
209
+ funds_type: funds_type,
210
+ }
211
+
212
+ # handle funds_type logic
213
+ funds_info, rest = *parse_funds_type(funds_type, rest)
214
+ with_funds_availability = amount_details.merge(funds_info)
215
+
216
+ common[:summaries] << with_funds_availability
217
+ end
218
+
219
+ common
220
+ end
221
+
222
+ # Takes a `fund_type` field, and the rest, and return a hashed of
223
+ # interpreted values, and the new rest.
224
+ #
225
+ # funds_type, rest = ...
226
+ # funds_info, rest = *parse_funds_type(funds_type, rest)
227
+ #
228
+ def parse_funds_type(funds_type, rest)
229
+ info = \
230
+ case funds_type
231
+ when 'S'
232
+ now, next_day, later, rest = rest.split(',', 4).map(&:strip)
233
+ {
234
+ availability: [
235
+ {day: 0, amount: now},
236
+ {day: 1, amount: now},
237
+ {day: '>1', amount: now},
238
+ ]
239
+ }
240
+ when 'V'
241
+ value_date, value_hour, rest = rest.split(',', 3).map(&:strip)
242
+ value_hour = '2400' if value_hour == '9999'
243
+ {
244
+ value_dated: {date: value_date, hour: value_hour}
245
+ }
246
+ when 'D'
247
+ field_count, rest = rest.split(',', 2).map(&:strip)
248
+ availability = field_count.to_i.times.map do
249
+ days, amount, rest = rest.split(',', 3).map(&:strip)
250
+ {days: days.to_i, amount: amount}
251
+ end
252
+ {availability: availability}
253
+ else
254
+ {}
255
+ end
256
+ [info, rest]
257
+ end
258
+
259
+ end
260
+ end
@@ -0,0 +1,473 @@
1
+ module Bai2
2
+ TypeCodeData = {
3
+ 10 => [:NA, :status, %q{Opening Ledger}],
4
+ 11 => [:NA, :status, %q{Average Opening Ledger MTD}],
5
+ 12 => [:NA, :status, %q{Average Opening Ledger YTD}],
6
+ 15 => [:NA, :status, %q{Closing Ledger}],
7
+ 20 => [:NA, :status, %q{Average Closing Ledger MTD}],
8
+ 21 => [:NA, :status, %q{Average Closing Ledger – Previous Month}],
9
+ 22 => [:NA, :status, %q{Aggregate Balance Adjustments}],
10
+ 24 => [:NA, :status, %q{Average Closing Ledger YTD – Previous Month}],
11
+ 25 => [:NA, :status, %q{Average Closing Ledger YTD}],
12
+ 30 => [:NA, :status, %q{Current Ledger}],
13
+ 37 => [:NA, :status, %q{ACH Net Position}],
14
+ 39 => [:NA, :status, %q{Opening Available + Total Same-Day ACH DTC Deposit}],
15
+ 40 => [:NA, :status, %q{Opening Available}],
16
+ 41 => [:NA, :status, %q{Average Opening Available MTD}],
17
+ 42 => [:NA, :status, %q{Average Opening Available YTD}],
18
+ 43 => [:NA, :status, %q{Average Available – Previous Month}],
19
+ 44 => [:NA, :status, %q{Disbursing Opening Available Balance}],
20
+ 45 => [:NA, :status, %q{Closing Available}],
21
+ 50 => [:NA, :status, %q{Average Closing Available MTD}],
22
+ 51 => [:NA, :status, %q{Average Closing Available – Last Month}],
23
+ 54 => [:NA, :status, %q{Average Closing Available YTD – Last Month}],
24
+ 55 => [:NA, :status, %q{Average Closing Available YTD}],
25
+ 56 => [:NA, :status, %q{Loan Balance}],
26
+ 57 => [:NA, :status, %q{Total Investment Position}],
27
+ 59 => [:NA, :status, %q{Current Available (CRS Supressed)}],
28
+ 60 => [:NA, :status, %q{Current Available}],
29
+ 61 => [:NA, :status, %q{Average Current Available MTD}],
30
+ 62 => [:NA, :status, %q{Average Current Available YTD}],
31
+ 63 => [:NA, :status, %q{Total Float}],
32
+ 65 => [:NA, :status, %q{Target Balance}],
33
+ 66 => [:NA, :status, %q{Adjusted Balance}],
34
+ 67 => [:NA, :status, %q{Adjusted Balance MTD}],
35
+ 68 => [:NA, :status, %q{Adjusted Balance YTD}],
36
+ 70 => [:NA, :status, %q{0-Day Float}],
37
+ 72 => [:NA, :status, %q{1-Day Float}],
38
+ 73 => [:NA, :status, %q{Float Adjustment}],
39
+ 74 => [:NA, :status, %q{2 or More Days Float}],
40
+ 75 => [:NA, :status, %q{3 or More Days Float}],
41
+ 76 => [:NA, :status, %q{Adjustment to Balances}],
42
+ 77 => [:NA, :status, %q{Average Adjustment to Balances MTD}],
43
+ 78 => [:NA, :status, %q{Average Adjustment to Balances YTD}],
44
+ 79 => [:NA, :status, %q{4-Day Float}],
45
+ 80 => [:NA, :status, %q{5-Day Float}],
46
+ 81 => [:NA, :status, %q{6-Day Float}],
47
+ 82 => [:NA, :status, %q{Average 1-Day Float MTD}],
48
+ 83 => [:NA, :status, %q{Average 1-Day Float YTD}],
49
+ 84 => [:NA, :status, %q{Average 2-Day Float MTD}],
50
+ 85 => [:NA, :status, %q{Average 2-Day Float YTD}],
51
+ 86 => [:NA, :status, %q{Transfer Calculation}],
52
+ 100 => [:credit, :summary, %q{Total Credits}],
53
+ 101 => [:credit, :summary, %q{Total Credit Amount MTD}],
54
+ 105 => [:credit, :summary, %q{Credits Not Detailed}],
55
+ 106 => [:credit, :summary, %q{Deposits Subject to Float}],
56
+ 107 => [:credit, :summary, %q{Total Adjustment Credits YTD}],
57
+ 108 => [:credit, :detail, %q{Credit (Any Type)}],
58
+ 109 => [:credit, :summary, %q{Current Day Total Lockbox Deposits}],
59
+ 110 => [:credit, :summary, %q{Total Lockbox Deposits}],
60
+ 115 => [:credit, :detail, %q{Lockbox Deposit}],
61
+ 116 => [:credit, :detail, %q{Item in Lockbox Deposit}],
62
+ 118 => [:credit, :detail, %q{Lockbox Adjustment Credit}],
63
+ 120 => [:credit, :summary, %q{EDI* Transaction Credit}],
64
+ 121 => [:credit, :detail, %q{EDI Transaction Credit}],
65
+ 122 => [:credit, :detail, %q{EDIBANX Credit Received}],
66
+ 123 => [:credit, :detail, %q{EDIBANX Credit Return}],
67
+ 130 => [:credit, :summary, %q{Total Concentration Credits}],
68
+ 131 => [:credit, :summary, %q{Total DTC Credits}],
69
+ 135 => [:credit, :detail, %q{DTC Concentration Credit}],
70
+ 136 => [:credit, :detail, %q{Item in DTC Deposit}],
71
+ 140 => [:credit, :summary, %q{Total ACH Credits}],
72
+ 142 => [:credit, :detail, %q{ACH Credit Received}],
73
+ 143 => [:credit, :detail, %q{Item in ACH Deposit}],
74
+ 145 => [:credit, :detail, %q{ACH Concentration Credit}],
75
+ 146 => [:credit, :summary, %q{Total Bank Card Deposits}],
76
+ 147 => [:credit, :detail, %q{Individual Bank Card Deposit}],
77
+ 150 => [:credit, :summary, %q{Total Preauthorized Payment Credits}],
78
+ 155 => [:credit, :detail, %q{Preauthorized Draft Credit}],
79
+ 156 => [:credit, :detail, %q{Item in PAC Deposit}],
80
+ 160 => [:credit, :summary, %q{Total ACH Disbursing Funding Credits}],
81
+ 162 => [:credit, :summary, %q{Corporate Trade Payment Settlement}],
82
+ 163 => [:credit, :summary, %q{Corporate Trade Payment Credits}],
83
+ 164 => [:credit, :detail, %q{Corporate Trade Payment Credit}],
84
+ 165 => [:credit, :detail, %q{Preauthorized ACH Credit}],
85
+ 166 => [:credit, :detail, %q{ACH Settlement}],
86
+ 167 => [:credit, :summary, %q{ACH Settlement Credits}],
87
+ 168 => [:credit, :detail, %q{ACH Return Item or Adjustment Settlement}],
88
+ 169 => [:credit, :detail, %q{Miscellaneous ACH Credit}],
89
+ 170 => [:credit, :summary, %q{Total Other Check Deposits}],
90
+ 171 => [:credit, :detail, %q{Individual Loan Deposit}],
91
+ 172 => [:credit, :detail, %q{Deposit Correction}],
92
+ 173 => [:credit, :detail, %q{Bank-Prepared Deposit}],
93
+ 174 => [:credit, :detail, %q{Other Deposit}],
94
+ 175 => [:credit, :detail, %q{Check Deposit Package}],
95
+ 176 => [:credit, :detail, %q{Re-presented Check Deposit}],
96
+ 178 => [:credit, :summary, %q{List Post Credits}],
97
+ 180 => [:credit, :summary, %q{Total Loan Proceeds}],
98
+ 182 => [:credit, :summary, %q{Total Bank-Prepared Deposits}],
99
+ 184 => [:credit, :detail, %q{Draft Deposit}],
100
+ 185 => [:credit, :summary, %q{Total Miscellaneous Deposits}],
101
+ 186 => [:credit, :summary, %q{Total Cash Letter Credits}],
102
+ 187 => [:credit, :detail, %q{Cash Letter Credit}],
103
+ 188 => [:credit, :summary, %q{Total Cash Letter Adjustments}],
104
+ 189 => [:credit, :detail, %q{Cash Letter Adjustment}],
105
+ 190 => [:credit, :summary, %q{Total Incoming Money Transfers}],
106
+ 191 => [:credit, :detail, %q{Individual Incoming Internal Money Transfer}],
107
+ 195 => [:credit, :detail, %q{Incoming Money Transfer}],
108
+ 196 => [:credit, :detail, %q{Money Transfer Adjustment}],
109
+ 198 => [:credit, :detail, %q{Compensation}],
110
+ 200 => [:credit, :summary, %q{Total Automatic Transfer Credits}],
111
+ 201 => [:credit, :detail, %q{Individual Automatic Transfer Credit}],
112
+ 202 => [:credit, :detail, %q{Bond Operations Credit}],
113
+ 205 => [:credit, :summary, %q{Total Book Transfer Credits}],
114
+ 206 => [:credit, :detail, %q{Book Transfer Credit}],
115
+ 207 => [:credit, :summary, %q{Total International Money Transfer Credits}],
116
+ 208 => [:credit, :detail, %q{Individual International Money Transfer Credit}],
117
+ 210 => [:credit, :summary, %q{Total International Credits}],
118
+ 212 => [:credit, :detail, %q{Foreign Letter of Credit}],
119
+ 213 => [:credit, :detail, %q{Letter of Credit}],
120
+ 214 => [:credit, :detail, %q{Foreign Exchange of Credit}],
121
+ 215 => [:credit, :summary, %q{Total Letters of Credit}],
122
+ 216 => [:credit, :detail, %q{Foreign Remittance Credit}],
123
+ 218 => [:credit, :detail, %q{Foreign Collection Credit}],
124
+ 221 => [:credit, :detail, %q{Foreign Check Purchase}],
125
+ 222 => [:credit, :detail, %q{Foreign Checks Deposited}],
126
+ 224 => [:credit, :detail, %q{Commission}],
127
+ 226 => [:credit, :detail, %q{International Money Market Trading}],
128
+ 227 => [:credit, :detail, %q{Standing Order}],
129
+ 229 => [:credit, :detail, %q{Miscellaneous International Credit}],
130
+ 230 => [:credit, :summary, %q{Total Security Credits}],
131
+ 231 => [:credit, :summary, %q{Total Collection Credits}],
132
+ 232 => [:credit, :detail, %q{Sale of Debt Security}],
133
+ 233 => [:credit, :detail, %q{Securities Sold}],
134
+ 234 => [:credit, :detail, %q{Sale of Equity Security}],
135
+ 235 => [:credit, :detail, %q{Matured Reverse Repurchase Order}],
136
+ 236 => [:credit, :detail, %q{Maturity of Debt Security}],
137
+ 237 => [:credit, :detail, %q{Individual Collection Credit}],
138
+ 238 => [:credit, :detail, %q{Collection of Dividends}],
139
+ 239 => [:credit, :summary, %q{Total Bankers’ Acceptance Credits}],
140
+ 240 => [:credit, :detail, %q{Coupon Collections – Banks}],
141
+ 241 => [:credit, :detail, %q{Bankers’ Acceptances}],
142
+ 242 => [:credit, :detail, %q{Collection of Interest Income}],
143
+ 243 => [:credit, :detail, %q{Matured Fed Funds Purchased}],
144
+ 244 => [:credit, :detail, %q{Interest/Matured Principal Payment}],
145
+ 245 => [:credit, :summary, %q{Monthly Dividends}],
146
+ 246 => [:credit, :detail, %q{Commercial Paper}],
147
+ 247 => [:credit, :detail, %q{Capital Change}],
148
+ 248 => [:credit, :detail, %q{Savings Bonds Sales Adjustment}],
149
+ 249 => [:credit, :detail, %q{Miscellaneous Security Credit}],
150
+ 250 => [:credit, :summary, %q{Total Checks Posted and Returned}],
151
+ 251 => [:credit, :summary, %q{Total Debit Reversals}],
152
+ 252 => [:credit, :detail, %q{Debit Reversal}],
153
+ 254 => [:credit, :detail, %q{Posting Error Correction Credit}],
154
+ 255 => [:credit, :detail, %q{Check Posted and Returned}],
155
+ 256 => [:credit, :summary, %q{Total ACH Return Items}],
156
+ 257 => [:credit, :detail, %q{Individual ACH Return Item}],
157
+ 258 => [:credit, :detail, %q{ACH Reversal Credit}],
158
+ 260 => [:credit, :summary, %q{Total Rejected Credits}],
159
+ 261 => [:credit, :detail, %q{Individual Rejected Credit}],
160
+ 263 => [:credit, :detail, %q{Overdraft}],
161
+ 266 => [:credit, :detail, %q{Return Item}],
162
+ 268 => [:credit, :detail, %q{Return Item Adjustment}],
163
+ 270 => [:credit, :summary, %q{Total ZBA Credits}],
164
+ 271 => [:credit, :summary, %q{Net Zero-Balance Amount}],
165
+ 274 => [:credit, :detail, %q{Cumulative** ZBA or Disbursement Credits}],
166
+ 275 => [:credit, :detail, %q{ZBA Credit}],
167
+ 276 => [:credit, :detail, %q{ZBA Float Adjustment}],
168
+ 277 => [:credit, :detail, %q{ZBA Credit Transfer}],
169
+ 278 => [:credit, :detail, %q{ZBA Credit Adjustment}],
170
+ 280 => [:credit, :summary, %q{Total Controlled Disbursing Credits}],
171
+ 281 => [:credit, :detail, %q{Individual Controlled Disbursing Credit}],
172
+ 285 => [:credit, :summary, %q{Total DTC Disbursing Credits}],
173
+ 286 => [:credit, :detail, %q{Individual DTC Disbursing Credit}],
174
+ 294 => [:credit, :summary, %q{Total ATM Credits}],
175
+ 295 => [:credit, :detail, %q{ATM Credit}],
176
+ 301 => [:credit, :detail, %q{Commercial Deposit}],
177
+ 302 => [:credit, :summary, %q{Correspondent Bank Deposit}],
178
+ 303 => [:credit, :summary, %q{Total Wire Transfers In – FF}],
179
+ 304 => [:credit, :summary, %q{Total Wire Transfers In – CHF}],
180
+ 305 => [:credit, :summary, %q{Total Fed Funds Sold}],
181
+ 306 => [:credit, :detail, %q{Fed Funds Sold}],
182
+ 307 => [:credit, :summary, %q{Total Trust Credits}],
183
+ 308 => [:credit, :detail, %q{Trust Credit}],
184
+ 309 => [:credit, :summary, %q{Total Value - Dated Funds}],
185
+ 310 => [:credit, :summary, %q{Total Commercial Deposits}],
186
+ 315 => [:credit, :summary, %q{Total International Credits – FF}],
187
+ 316 => [:credit, :summary, %q{Total International Credits – CHF}],
188
+ 318 => [:credit, :summary, %q{Total Foreign Check Purchased}],
189
+ 319 => [:credit, :summary, %q{Late Deposit}],
190
+ 320 => [:credit, :summary, %q{Total Securities Sold – FF}],
191
+ 321 => [:credit, :summary, %q{Total Securities Sold – CHF}],
192
+ 324 => [:credit, :summary, %q{Total Securities Matured – FF}],
193
+ 325 => [:credit, :summary, %q{Total Securities Matured – CHF}],
194
+ 326 => [:credit, :summary, %q{Total Securities Interest}],
195
+ 327 => [:credit, :summary, %q{Total Securities Matured}],
196
+ 328 => [:credit, :summary, %q{Total Securities Interest – FF}],
197
+ 329 => [:credit, :summary, %q{Total Securities Interest – CHF}],
198
+ 330 => [:credit, :summary, %q{Total Escrow Credits}],
199
+ 331 => [:credit, :detail, %q{Individual Escrow Credit}],
200
+ 332 => [:credit, :summary, %q{Total Miscellaneous Securities Credits – FF}],
201
+ 336 => [:credit, :summary, %q{Total Miscellaneous Securities Credits – CHF}],
202
+ 338 => [:credit, :summary, %q{Total Securities Sold}],
203
+ 340 => [:credit, :summary, %q{Total Broker Deposits}],
204
+ 341 => [:credit, :summary, %q{Total Broker Deposits – FF}],
205
+ 342 => [:credit, :detail, %q{Broker Deposit}],
206
+ 343 => [:credit, :summary, %q{Total Broker Deposits – CHF}],
207
+ 344 => [:credit, :detail, %q{Individual Back Value Credit}],
208
+ 345 => [:credit, :detail, %q{Item in Brokers Deposit}],
209
+ 346 => [:credit, :detail, %q{Sweep Interest Income}],
210
+ 347 => [:credit, :detail, %q{Sweep Principal Sell}],
211
+ 348 => [:credit, :detail, %q{Futures Credit}],
212
+ 349 => [:credit, :detail, %q{Principal Payments Credit}],
213
+ 350 => [:credit, :summary, %q{Investment Sold}],
214
+ 351 => [:credit, :detail, %q{Individual Investment Sold}],
215
+ 352 => [:credit, :summary, %q{Total Cash Center Credits}],
216
+ 353 => [:credit, :detail, %q{Cash Center Credit}],
217
+ 354 => [:credit, :detail, %q{Interest Credit}],
218
+ 355 => [:credit, :summary, %q{Investment Interest}],
219
+ 356 => [:credit, :summary, %q{Total Credit Adjustment}],
220
+ 357 => [:credit, :detail, %q{Credit Adjustment}],
221
+ 358 => [:credit, :detail, %q{YTD Adjustment Credit}],
222
+ 359 => [:credit, :detail, %q{Interest Adjustment Credit}],
223
+ 360 => [:credit, :summary, %q{Total Credits Less Wire Transfer and Returned Checks}],
224
+ 361 => [:credit, :summary, %q{Grand Total Credits Less Grand Total Debits}],
225
+ 362 => [:credit, :detail, %q{Correspondent Collection}],
226
+ 363 => [:credit, :detail, %q{Correspondent Collection Adjustment}],
227
+ 364 => [:credit, :detail, %q{Loan Participation}],
228
+ 366 => [:credit, :detail, %q{Currency and Coin Deposited}],
229
+ 367 => [:credit, :detail, %q{Food Stamp Letter}],
230
+ 368 => [:credit, :detail, %q{Food Stamp Adjustment}],
231
+ 369 => [:credit, :detail, %q{Clearing Settlement Credit}],
232
+ 370 => [:credit, :summary, %q{Total Back Value Credits}],
233
+ 372 => [:credit, :detail, %q{Back Value Adjustment}],
234
+ 373 => [:credit, :detail, %q{Customer Payroll}],
235
+ 374 => [:credit, :detail, %q{FRB Statement Recap}],
236
+ 376 => [:credit, :detail, %q{Savings Bond Letter or Adjustment}],
237
+ 377 => [:credit, :detail, %q{Treasury Tax and Loan Credit}],
238
+ 378 => [:credit, :detail, %q{Transfer of Treasury Credit}],
239
+ 379 => [:credit, :detail, %q{FRB Government Checks Cash Letter Credit}],
240
+ 381 => [:credit, :detail, %q{FRB Government Check Adjustment}],
241
+ 382 => [:credit, :detail, %q{FRB Postal Money Order Credit}],
242
+ 383 => [:credit, :detail, %q{FRB Postal Money Order Adjustment}],
243
+ 384 => [:credit, :detail, %q{FRB Cash Letter Auto Charge Credit}],
244
+ 385 => [:credit, :summary, %q{Total Universal Credits}],
245
+ 386 => [:credit, :detail, %q{FRB Cash Letter Auto Charge Adjustment}],
246
+ 387 => [:credit, :detail, %q{FRB Fine-Sort Cash Letter Credit}],
247
+ 388 => [:credit, :detail, %q{FRB Fine-Sort Adjustment}],
248
+ 389 => [:credit, :summary, %q{Total Freight Payment Credits}],
249
+ 390 => [:credit, :summary, %q{Total Miscellaneous Credits}],
250
+ 391 => [:credit, :detail, %q{Universal Credit}],
251
+ 392 => [:credit, :detail, %q{Freight Payment Credit}],
252
+ 393 => [:credit, :detail, %q{Itemized Credit Over $10,000}],
253
+ 394 => [:credit, :detail, %q{Cumulative** Credits}],
254
+ 395 => [:credit, :detail, %q{Check Reversal}],
255
+ 397 => [:credit, :detail, %q{Float Adjustment}],
256
+ 398 => [:credit, :detail, %q{Miscellaneous Fee Refund}],
257
+ 399 => [:credit, :detail, %q{Miscellaneous Credit}],
258
+ 400 => [:debit, :summary, %q{Total Debits}],
259
+ 401 => [:debit, :summary, %q{Total Debit Amount MTD}],
260
+ 403 => [:debit, :summary, %q{Today’s Total Debits}],
261
+ 405 => [:debit, :summary, %q{Total Debit Less Wire Transfers and ChargeBacks}],
262
+ 406 => [:debit, :summary, %q{Debits not Detailed}],
263
+ 408 => [:debit, :detail, %q{Float Adjustment}],
264
+ 409 => [:debit, :detail, %q{Debit (Any Type)}],
265
+ 410 => [:debit, :summary, %q{Total YTD Adjustment}],
266
+ 412 => [:debit, :summary, %q{Total Debits (Excluding Returned Items)}],
267
+ 415 => [:debit, :detail, %q{Lockbox Debit}],
268
+ 416 => [:debit, :summary, %q{Total Lockbox Debits}],
269
+ 420 => [:debit, :summary, %q{EDI Transaction Debits}],
270
+ 421 => [:debit, :detail, %q{EDI Transaction Debit}],
271
+ 422 => [:debit, :detail, %q{EDIBANX Settlement Debit}],
272
+ 423 => [:debit, :detail, %q{EDIBANX Return Item Debit}],
273
+ 430 => [:debit, :summary, %q{Total Payable–Through Drafts}],
274
+ 435 => [:debit, :detail, %q{Payable–Through Draft}],
275
+ 445 => [:debit, :detail, %q{ACH Concentration Debit}],
276
+ 446 => [:debit, :summary, %q{Total ACH Disbursement Funding Debits}],
277
+ 447 => [:debit, :detail, %q{ACH Disbursement Funding Debit}],
278
+ 450 => [:debit, :summary, %q{Total ACH Debits}],
279
+ 451 => [:debit, :detail, %q{ACH Debit Received}],
280
+ 452 => [:debit, :detail, %q{Item in ACH Disbursement or Debit}],
281
+ 455 => [:debit, :detail, %q{Preauthorized ACH Debit}],
282
+ 462 => [:debit, :detail, %q{Account Holder Initiated ACH Debit}],
283
+ 463 => [:debit, :summary, %q{Corporate Trade Payment Debits}],
284
+ 464 => [:debit, :detail, %q{Corporate Trade Payment Debit}],
285
+ 465 => [:debit, :summary, %q{Corporate Trade Payment Settlement}],
286
+ 466 => [:debit, :detail, %q{ACH Settlement}],
287
+ 467 => [:debit, :summary, %q{ACH Settlement Debits}],
288
+ 468 => [:debit, :detail, %q{ACH Return Item or Adjustment Settlement}],
289
+ 469 => [:debit, :detail, %q{Miscellaneous ACH Debit}],
290
+ 470 => [:debit, :summary, %q{Total Check Paid}],
291
+ 471 => [:debit, :summary, %q{Total Check Paid – Cumulative MTD}],
292
+ 472 => [:debit, :detail, %q{Cumulative** Checks Paid}],
293
+ 474 => [:debit, :detail, %q{Certified Check Debit}],
294
+ 475 => [:debit, :detail, %q{Check Paid}],
295
+ 476 => [:debit, :detail, %q{Federal Reserve Bank Letter Debit}],
296
+ 477 => [:debit, :detail, %q{Bank Originated Debit}],
297
+ 478 => [:debit, :summary, %q{List Post Debits}],
298
+ 479 => [:debit, :detail, %q{List Post Debit}],
299
+ 480 => [:debit, :summary, %q{Total Loan Payments}],
300
+ 481 => [:debit, :detail, %q{Individual Loan Payment}],
301
+ 482 => [:debit, :summary, %q{Total Bank-Originated Debits}],
302
+ 484 => [:debit, :detail, %q{Draft}],
303
+ 485 => [:debit, :detail, %q{DTC Debit}],
304
+ 486 => [:debit, :summary, %q{Total Cash Letter Debits}],
305
+ 487 => [:debit, :detail, %q{Cash Letter Debit}],
306
+ 489 => [:debit, :detail, %q{Cash Letter Adjustment}],
307
+ 490 => [:debit, :summary, %q{Total Outgoing Money Transfers}],
308
+ 491 => [:debit, :detail, %q{Individual Outgoing Internal Money Transfer}],
309
+ 493 => [:debit, :detail, %q{Customer Terminal Initiated Money Transfer}],
310
+ 495 => [:debit, :detail, %q{Outgoing Money Transfer}],
311
+ 496 => [:debit, :detail, %q{Money Transfer Adjustment}],
312
+ 498 => [:debit, :detail, %q{Compensation}],
313
+ 500 => [:debit, :summary, %q{Total Automatic Transfer Debits}],
314
+ 501 => [:debit, :detail, %q{Individual Automatic Transfer Debit}],
315
+ 502 => [:debit, :detail, %q{Bond Operations Debit}],
316
+ 505 => [:debit, :summary, %q{Total Book Transfer Debits}],
317
+ 506 => [:debit, :detail, %q{Book Transfer Debit}],
318
+ 507 => [:debit, :summary, %q{Total International Money Transfer Debits}],
319
+ 508 => [:debit, :detail, %q{Individual International Money Transfer Debits}],
320
+ 510 => [:debit, :summary, %q{Total International Debits}],
321
+ 512 => [:debit, :detail, %q{Letter of Credit Debit}],
322
+ 513 => [:debit, :detail, %q{Letter of Credit}],
323
+ 514 => [:debit, :detail, %q{Foreign Exchange Debit}],
324
+ 515 => [:debit, :summary, %q{Total Letters of Credit}],
325
+ 516 => [:debit, :detail, %q{Foreign Remittance Debit}],
326
+ 518 => [:debit, :detail, %q{Foreign Collection Debit}],
327
+ 522 => [:debit, :detail, %q{Foreign Checks Paid}],
328
+ 524 => [:debit, :detail, %q{Commission}],
329
+ 526 => [:debit, :detail, %q{International Money Market Trading}],
330
+ 527 => [:debit, :detail, %q{Standing Order}],
331
+ 529 => [:debit, :detail, %q{Miscellaneous International Debit}],
332
+ 530 => [:debit, :summary, %q{Total Security Debits}],
333
+ 531 => [:debit, :detail, %q{Securities Purchased}],
334
+ 532 => [:debit, :summary, %q{Total Amount of Securities Purchased}],
335
+ 533 => [:debit, :detail, %q{Security Collection Debit}],
336
+ 534 => [:debit, :summary, %q{Total Miscellaneous Securities DB – FF}],
337
+ 535 => [:debit, :detail, %q{Purchase of Equity Securities}],
338
+ 536 => [:debit, :summary, %q{Total Miscellaneous Securities Debit – CHF}],
339
+ 537 => [:debit, :summary, %q{Total Collection Debit}],
340
+ 538 => [:debit, :detail, %q{Matured Repurchase Order}],
341
+ 539 => [:debit, :summary, %q{Total Bankers’ Acceptances Debit}],
342
+ 540 => [:debit, :detail, %q{Coupon Collection Debit}],
343
+ 541 => [:debit, :detail, %q{Bankers’ Acceptances}],
344
+ 542 => [:debit, :detail, %q{Purchase of Debt Securities}],
345
+ 543 => [:debit, :detail, %q{Domestic Collection}],
346
+ 544 => [:debit, :detail, %q{Interest/Matured Principal Payment}],
347
+ 546 => [:debit, :detail, %q{Commercial paper}],
348
+ 547 => [:debit, :detail, %q{Capital Change}],
349
+ 548 => [:debit, :detail, %q{Savings Bonds Sales Adjustment}],
350
+ 549 => [:debit, :detail, %q{Miscellaneous Security Debit}],
351
+ 550 => [:debit, :summary, %q{Total Deposited Items Returned}],
352
+ 551 => [:debit, :summary, %q{Total Credit Reversals}],
353
+ 552 => [:debit, :detail, %q{Credit Reversal}],
354
+ 554 => [:debit, :detail, %q{Posting Error Correction Debit}],
355
+ 555 => [:debit, :detail, %q{Deposited Item Returned}],
356
+ 556 => [:debit, :summary, %q{Total ACH Return Items}],
357
+ 557 => [:debit, :detail, %q{Individual ACH Return Item}],
358
+ 558 => [:debit, :detail, %q{ACH Reversal Debit}],
359
+ 560 => [:debit, :summary, %q{Total Rejected Debits}],
360
+ 561 => [:debit, :detail, %q{Individual Rejected Debit}],
361
+ 563 => [:debit, :detail, %q{Overdraft}],
362
+ 564 => [:debit, :detail, %q{Overdraft Fee}],
363
+ 566 => [:debit, :detail, %q{Return Item}],
364
+ 567 => [:debit, :detail, %q{Return Item Fee}],
365
+ 568 => [:debit, :detail, %q{Return Item Adjustment}],
366
+ 570 => [:debit, :summary, %q{Total ZBA Debits}],
367
+ 574 => [:debit, :detail, %q{Cumulative ZBA Debits}],
368
+ 575 => [:debit, :detail, %q{ZBA Debit}],
369
+ 577 => [:debit, :detail, %q{ZBA Debit Transfer}],
370
+ 578 => [:debit, :detail, %q{ZBA Debit Adjustment}],
371
+ 580 => [:debit, :summary, %q{Total Controlled Disbursing Debits}],
372
+ 581 => [:debit, :detail, %q{Individual Controlled Disbursing Debit}],
373
+ 583 => [:debit, :summary, %q{Total Disbursing Checks Paid – Early Amount}],
374
+ 584 => [:debit, :summary, %q{Total Disbursing Checks Paid – Later Amount}],
375
+ 585 => [:debit, :summary, %q{Disbursing Funding Requirement}],
376
+ 586 => [:debit, :summary, %q{FRB Presentment Estimate (Fed Estimate)}],
377
+ 587 => [:debit, :summary, %q{Late Debits (After Notification)}],
378
+ 588 => [:debit, :summary, %q{Total Disbursing Checks Paid-Last Amount}],
379
+ 590 => [:debit, :summary, %q{Total DTC Debits}],
380
+ 594 => [:debit, :summary, %q{Total ATM Debits}],
381
+ 595 => [:debit, :detail, %q{ATM Debit}],
382
+ 596 => [:debit, :summary, %q{Total APR Debits}],
383
+ 597 => [:debit, :detail, %q{ARP Debit}],
384
+ 601 => [:debit, :summary, %q{Estimated Total Disbursement}],
385
+ 602 => [:debit, :summary, %q{Adjusted Total Disbursement}],
386
+ 610 => [:debit, :summary, %q{Total Funds Required}],
387
+ 611 => [:debit, :summary, %q{Total Wire Transfers Out- CHF}],
388
+ 612 => [:debit, :summary, %q{Total Wire Transfers Out – FF}],
389
+ 613 => [:debit, :summary, %q{Total International Debit – CHF}],
390
+ 614 => [:debit, :summary, %q{Total International Debit – FF}],
391
+ 615 => [:debit, :summary, %q{Total Federal Reserve Bank – Commercial Bank Debit}],
392
+ 616 => [:debit, :detail, %q{Federal Reserve Bank – Commercial Bank Debit}],
393
+ 617 => [:debit, :summary, %q{Total Securities Purchased – CHF}],
394
+ 618 => [:debit, :summary, %q{Total Securities Purchased – FF}],
395
+ 621 => [:debit, :summary, %q{Total Broker Debits – CHF}],
396
+ 622 => [:debit, :detail, %q{Broker Debit}],
397
+ 623 => [:debit, :summary, %q{Total Broker Debits – FF}],
398
+ 625 => [:debit, :summary, %q{Total Broker Debits}],
399
+ 626 => [:debit, :summary, %q{Total Fed Funds Purchased}],
400
+ 627 => [:debit, :detail, %q{Fed Funds Purchased}],
401
+ 628 => [:debit, :summary, %q{Total Cash Center Debits}],
402
+ 629 => [:debit, :detail, %q{Cash Center Debit}],
403
+ 630 => [:debit, :summary, %q{Total Debit Adjustments}],
404
+ 631 => [:debit, :detail, %q{Debit Adjustment}],
405
+ 632 => [:debit, :summary, %q{Total Trust Debits}],
406
+ 633 => [:debit, :detail, %q{Trust Debit}],
407
+ 634 => [:debit, :detail, %q{YTD Adjustment Debit}],
408
+ 640 => [:debit, :summary, %q{Total Escrow Debits}],
409
+ 641 => [:debit, :detail, %q{Individual Escrow Debit}],
410
+ 644 => [:debit, :detail, %q{Individual Back Value Debit}],
411
+ 646 => [:debit, :summary, %q{Transfer Calculation Debit}],
412
+ 650 => [:debit, :summary, %q{Investments Purchased}],
413
+ 651 => [:debit, :detail, %q{Individual Investment purchased}],
414
+ 654 => [:debit, :detail, %q{Interest Debit}],
415
+ 655 => [:debit, :summary, %q{Total Investment Interest Debits}],
416
+ 656 => [:debit, :detail, %q{Sweep Principal Buy}],
417
+ 657 => [:debit, :detail, %q{Futures Debit}],
418
+ 658 => [:debit, :detail, %q{Principal Payments Debit}],
419
+ 659 => [:debit, :detail, %q{Interest Adjustment Debit}],
420
+ 661 => [:debit, :detail, %q{Account Analysis Fee}],
421
+ 662 => [:debit, :detail, %q{Correspondent Collection Debit}],
422
+ 663 => [:debit, :detail, %q{Correspondent Collection Adjustment}],
423
+ 664 => [:debit, :detail, %q{Loan Participation}],
424
+ 665 => [:debit, :summary, %q{Intercept Debits}],
425
+ 666 => [:debit, :detail, %q{Currency and Coin Shipped}],
426
+ 667 => [:debit, :detail, %q{Food Stamp Letter}],
427
+ 668 => [:debit, :detail, %q{Food Stamp Adjustment}],
428
+ 669 => [:debit, :detail, %q{Clearing Settlement Debit}],
429
+ 670 => [:debit, :summary, %q{Total Back Value Debits}],
430
+ 672 => [:debit, :detail, %q{Back Value Adjustment}],
431
+ 673 => [:debit, :detail, %q{Customer Payroll}],
432
+ 674 => [:debit, :detail, %q{FRB Statement Recap}],
433
+ 676 => [:debit, :detail, %q{Savings Bond Letter or Adjustment}],
434
+ 677 => [:debit, :detail, %q{Treasury Tax and Loan Debit}],
435
+ 678 => [:debit, :detail, %q{Transfer of Treasury Debit}],
436
+ 679 => [:debit, :detail, %q{FRB Government Checks Cash Letter Debit}],
437
+ 681 => [:debit, :detail, %q{FRB Government Check Adjustment}],
438
+ 682 => [:debit, :detail, %q{FRB Postal Money Order Debit}],
439
+ 683 => [:debit, :detail, %q{FRB Postal Money Order Adjustment}],
440
+ 684 => [:debit, :detail, %q{FRB Cash Letter Auto Charge Debit}],
441
+ 685 => [:debit, :summary, %q{Total Universal Debits}],
442
+ 686 => [:debit, :detail, %q{FRB Cash Letter Auto Charge Adjustment}],
443
+ 687 => [:debit, :detail, %q{FRB Fine-Sort Cash Letter Debit}],
444
+ 688 => [:debit, :detail, %q{FRB Fine-Sort Adjustment}],
445
+ 689 => [:debit, :summary, %q{FRB Freight Payment Debits}],
446
+ 690 => [:debit, :summary, %q{Total Miscellaneous Debits}],
447
+ 691 => [:debit, :detail, %q{Universal Debit}],
448
+ 692 => [:debit, :detail, %q{Freight Payment Debit}],
449
+ 693 => [:debit, :detail, %q{Itemized Debit Over $10,000}],
450
+ 694 => [:debit, :detail, %q{Deposit Reversal}],
451
+ 695 => [:debit, :detail, %q{Deposit Correction Debit}],
452
+ 696 => [:debit, :detail, %q{Regular Collection Debit}],
453
+ 697 => [:debit, :detail, %q{Cumulative** Debits}],
454
+ 698 => [:debit, :detail, %q{Miscellaneous Fees}],
455
+ 699 => [:debit, :detail, %q{Miscellaneous Debit}],
456
+ 701 => [:NA, :status, %q{Principal Loan Balance}],
457
+ 703 => [:NA, :status, %q{Available Commitment Amount}],
458
+ 705 => [:NA, :status, %q{Payment Amount Due}],
459
+ 707 => [:NA, :status, %q{Principal Amount Past Due}],
460
+ 709 => [:NA, :status, %q{Interest Amount Past Due}],
461
+ 720 => [:credit, :summary, %q{Total Loan Payment}],
462
+ 721 => [:credit, :detail, %q{Amount Applied to Interest}],
463
+ 722 => [:credit, :detail, %q{Amount Applied to Principal}],
464
+ 723 => [:credit, :detail, %q{Amount Applied to Escrow}],
465
+ 724 => [:credit, :detail, %q{Amount Applied to Late Charges}],
466
+ 725 => [:credit, :detail, %q{Amount Applied to Buydown}],
467
+ 726 => [:credit, :detail, %q{Amount Applied to Misc. Fees}],
468
+ 727 => [:credit, :detail, %q{Amount Applied to Deferred Interest Detail}],
469
+ 728 => [:credit, :detail, %q{Amount Applied to Service Charge}],
470
+ 760 => [:debit, :summary, %q{Loan Disbursement}],
471
+ 890 => [:misc, :detail, %q{Contains Non-monetary Information}],
472
+ }
473
+ end