bai2 1.0.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.
@@ -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