BAI2 TRUIST
Describes how Truist BAI2 files are identified, how records are parsed, and how fund type and currency handling differ from the Citibank BAI2 variant.
How to identify this file: First line ends with 2/. Currency does not appear in the bank header — it must be set at the account level (03, record, token[2]) or fall back to the configured default.
Record parsing
02 – Bank Header
Bank ID, as-of date → [2], [4] (no currency)
03 – Account Header
Account number, currency, sign → [1], [2], [4]
16 – Transaction Detail
Type code, amount, fund type, bank ref, customer ref → [1]–[5] (varies)
88 – Continuation
Narrative text → full line
Fund type handling
Identical to BAI2 (Citibank variant)
Covers:
Standard (Z, 0, 1, 2, blank)
Value date (V)
Scheduled (S)
Currency handling
Truist uses a hardcoded static currency-to-decimal-places map (not the Java platform Currency class). The map covers most ISO 4217 currencies. If the currency code is not in the map, decimal places default to 0, meaning the amount will be treated as a whole number — this can cause incorrect amounts for unknown currencies.
Key difference vs Citibank
Truist's bank header (02) does not include a file-level currency. Currency always comes from the 03 account header or the configured default.
Configuration parameters
allowed_detail_type_codes: Process only specified transaction types
remove_preceding_zeroes_from_bank_account_no: Strip leading zeros from account number
detail_type_code_to_mode_map: Map detail type codes to payment modes (e.g., wire, ACH)
What is parsed: Same fields as Citibank BAI2
What is not parsed: Currency from bank header, FX rates, bank charges, original amounts
If your Truist file uses a currency code that is not in the static map, the amount decimal will be wrong. Citibank and Wells Fargo use the Java platform currency map which stays current with ISO 4217 updates; Truist does not.