Chapter 34 Quiz: Banking and Payment Systems

Test your understanding of COBOL banking and payment system concepts. Each question is followed by a hidden answer -- try to answer before revealing it.


Question 1

What is the primary purpose of the Customer Information File (CIF) in a core banking system?

  • a) To store account balances and transaction history
  • b) To serve as the master database of customer data, linking all accounts belonging to a single customer
  • c) To process ACH payments and wire transfers
  • d) To generate regulatory compliance reports
Show Answer **b) To serve as the master database of customer data, linking all accounts belonging to a single customer.** The CIF stores names, addresses, Social Security numbers, tax IDs, and relationship data. A single customer may have multiple accounts (checking, savings, mortgage, credit card), but appears only once in the CIF.

Question 2

Why do banking systems use USAGE COMP-3 (packed decimal) for monetary fields instead of USAGE DISPLAY or USAGE COMP?

Show Answer COMP-3 (packed decimal) provides **exact decimal arithmetic**, which is essential for financial calculations. Unlike binary (COMP), packed decimal can represent decimal fractions like $0.01 exactly, without floating-point rounding errors. Unlike DISPLAY format (one byte per digit), COMP-3 is more space-efficient (two digits per byte plus a sign nibble). For example, `PIC S9(11)V99 COMP-3` stores amounts up to $99,999,999,999.99 in only 7 bytes, compared to 14 bytes in DISPLAY format.

Question 3

True or False: In a banking system, when a debit transaction causes an account balance to go negative, the account master record should always be rejected and left unchanged.

Show Answer **False.** Whether a negative balance is permitted depends on the account's overdraft limit. If the account has overdraft protection (an overdraft limit greater than zero), the transaction may be posted as long as the resulting negative balance does not exceed the overdraft limit. Some debit transactions (such as fee assessments) may be posted even without overdraft protection, resulting in a negative balance that triggers an overdraft fee.

Question 4

What is the correct order for posting transactions during the nightly batch cycle?

  • a) Debits first, then credits, in descending amount order
  • b) Credits first, then debits, in ascending amount order
  • c) Credits first, then debits; specific debit order varies by bank policy
  • d) Chronological order regardless of transaction type
Show Answer **c) Credits first, then debits; specific debit order varies by bank policy.** Credits are posted before debits to maximize the available balance before debits are applied, reducing overdraft situations. This posting order is governed by Regulation E and the bank's deposit agreement. The ordering of debits (largest first, chronological, etc.) varies by institution and has been subject to regulatory scrutiny.

Question 5

What is the difference between a memo post and a final post?

Show Answer A **memo post** temporarily adjusts the available balance to reflect a pending transaction without changing the ledger balance. It is used for ATM authorizations, debit card holds, and check holds. A **final post** permanently updates both the ledger balance and the available balance, creates a permanent transaction history record, and generates general ledger entries. Final posting typically occurs during the nightly batch cycle.

Question 6

In the NACHA ACH file format, what does the two-digit transaction code "27" represent?

  • a) Savings account credit (deposit)
  • b) Checking account credit (deposit)
  • c) Savings account debit (withdrawal)
  • d) Checking account debit (withdrawal)
Show Answer **d) Checking account debit (withdrawal).** The NACHA transaction codes follow a pattern: 22/23 = checking credit/prenote, 27/28 = checking debit/prenote, 32/33 = savings credit/prenote, 37/38 = savings debit/prenote. Code 27 debits (withdraws from) a checking account.

Question 7

What is the fixed record length for all records in a NACHA-format ACH file?

Show Answer **94 bytes.** All five record types in the NACHA format (File Header, Batch Header, Entry Detail, Batch Control, and File Control) are exactly 94 bytes long. This fixed-length format is a natural fit for COBOL's fixed-length record processing capabilities.

Question 8

True or False: A "prenote" in ACH processing is a zero-dollar test transaction used to verify that a routing number and account number are valid before sending actual payments.

Show Answer **True.** Prenotes (prenotification entries) are zero-dollar transactions with transaction codes 23, 28, 33, or 38. They are sent by the originating bank to verify that the receiving bank can locate the specified account. If no return is received within the prenote waiting period (typically 3 business days for ACH credits, 6 business days for ACH debits), the originator can begin sending live transactions.

Question 9

What are the weights used in the ABA routing number validation algorithm?

  • a) 1, 2, 3, 4, 5, 6, 7, 8, 9
  • b) 3, 7, 1, 3, 7, 1, 3, 7, 1
  • c) 7, 6, 5, 4, 3, 2, 7, 6, 5
  • d) 2, 1, 2, 1, 2, 1, 2, 1, 2
Show Answer **b) 3, 7, 1, 3, 7, 1, 3, 7, 1.** The nine-digit ABA routing number is validated by multiplying each digit by the corresponding weight (3, 7, 1, repeating), summing the products, and checking that the sum is evenly divisible by 10. For example, routing number 021000021: (0*3)+(2*7)+(1*1)+(0*3)+(0*7)+(0*1)+(0*3)+(2*7)+(1*1) = 0+14+1+0+0+0+0+14+1 = 30; 30 mod 10 = 0, so it is valid.

Question 10

Analyze the following COBOL code for validating a credit card number. What algorithm is being implemented, and what does a result of zero indicate?

       MOVE ZEROS TO WS-CHECK-SUM
       PERFORM VARYING WS-I FROM 16 BY -1
           UNTIL WS-I < 1
           ADD 1 TO WS-POS-FROM-RIGHT
           IF FUNCTION MOD(WS-POS-FROM-RIGHT 2) = 0
               COMPUTE WS-DBL = WS-DIGIT(WS-I) * 2
               IF WS-DBL > 9
                   SUBTRACT 9 FROM WS-DBL
               END-IF
               ADD WS-DBL TO WS-CHECK-SUM
           ELSE
               ADD WS-DIGIT(WS-I) TO WS-CHECK-SUM
           END-IF
       END-PERFORM
       IF FUNCTION MOD(WS-CHECK-SUM 10) = 0
           SET WS-CARD-VALID TO TRUE
       END-IF
Show Answer This code implements the **Luhn algorithm** (also known as the Modulus 10 or Mod 10 algorithm). It processes the card number from right to left, doubling every second digit and subtracting 9 if the result exceeds 9, then summing all digits. A result of zero when the total is divided by 10 indicates that the card number is **valid**. The Luhn algorithm detects all single-digit errors and most transpositions of adjacent digits (except the swap of 09 and 90). It was created by IBM scientist Hans Peter Luhn in 1954 and is used for credit cards, IMEI numbers, and other identification numbers.

Question 11

What is the Service Class Code in an ACH Batch Header record, and what do the values 200, 220, and 225 represent?

Show Answer The **Service Class Code** (positions 2-4 of the Batch Header record, Record Type 5) indicates the type of entries contained in the batch: - **200**: Mixed debits and credits - **220**: Credits only (e.g., payroll direct deposits) - **225**: Debits only (e.g., loan payments, utility bill collections) This code allows the ACH Operator and receiving banks to quickly categorize batches and apply appropriate processing rules.

Question 12

True or False: Fedwire transfers are settled on a net basis at the end of the day, similar to ACH transactions.

Show Answer **False.** Fedwire transfers are settled in **real time on a gross basis**. Each transfer settles individually as it is processed, not netted against other transfers. This is one of the key differences between Fedwire and ACH. Fedwire processes over 800,000 transfers per day with a total daily value exceeding $4 trillion, and each transfer is final and irrevocable upon settlement.

Question 13

A bank must file a Currency Transaction Report (CTR) under which circumstance?

  • a) Any electronic transfer exceeding $5,000
  • b) Any cash transaction exceeding $10,000, including aggregated same-day transactions by the same customer
  • c) Any wire transfer to a foreign country
  • d) Any transaction flagged by the fraud detection system
Show Answer **b) Any cash transaction exceeding $10,000, including aggregated same-day transactions by the same customer.** Under the Bank Secrecy Act, banks must file a CTR for any cash transaction (deposit, withdrawal, exchange) exceeding $10,000. Critically, multiple cash transactions by the same customer on the same day must be aggregated -- if a customer makes three cash deposits of $4,000 each at different branches on the same day, the total ($12,000) triggers a CTR. Deliberately splitting transactions to avoid the threshold is called "structuring" and is a federal crime.

Question 14

What is the difference between SWIFT and Fedwire?

Show Answer **SWIFT** (Society for Worldwide Interbank Financial Telecommunication) is a **messaging network** that transmits standardized messages between financial institutions in over 200 countries. SWIFT does not transfer funds directly -- it sends instructions that tell banks to move money. The most common message type for customer wire transfers is the MT103. **Fedwire** is a **value-transfer system** operated by the Federal Reserve for domestic (U.S.) real-time gross settlement. Fedwire actually moves funds between banks' reserve accounts at the Federal Reserve. In an international wire transfer, SWIFT messages instruct the banks, and Fedwire (or a corresponding system in another country) handles the actual fund movement for the domestic leg.

Question 15

Examine the following available balance calculation. Under what circumstances would the available balance be higher than the ledger balance?

           COMPUTE ACCT-AVAIL-BAL =
               ACCT-LEDGER-BAL
             - ACCT-HOLD-AMT
             + ACCT-PENDING-CR
             - ACCT-PENDING-DR
           END-COMPUTE
Show Answer The available balance would be higher than the ledger balance when `ACCT-PENDING-CR` (pending credits) exceeds the sum of `ACCT-HOLD-AMT` (holds) and `ACCT-PENDING-DR` (pending debits). This occurs when a deposit has been provisionally credited (under Regulation CC, the first $225 of a check deposit must be made available by the next business day) but has not yet been posted to the ledger balance. For example, if the ledger balance is $500, holds are $0, pending credits are $200 (from a mobile deposit), and pending debits are $0, the available balance would be $700 -- higher than the $500 ledger balance.

Question 16

True or False: Under Regulation CC, a bank must make the full amount of a check deposit available to the customer on the next business day.

Show Answer **False.** Regulation CC requires **next-day availability** only for certain items: cash deposits, electronic payments (including ACH and wire transfers), U.S. Treasury checks, and the first $225 of a check deposit. Local checks must be made available within 2 business days. Non-local checks have a 5-business-day hold period. Extended holds (up to 7-9 business days) are permitted for new accounts, large deposits over $5,525, redeposited checks, and accounts with repeated overdrafts.

Question 17

What is the purpose of the 50-byte filler field at the end of the account master record layout?

  • a) To align the record to a half-word boundary
  • b) To store encrypted customer data
  • c) To provide room for future field expansion without requiring file restructuring
  • d) To store the check digit for the account number
Show Answer **c) To provide room for future field expansion without requiring file restructuring.** This is standard practice in banking VSAM files. When a new field needs to be added to the record (for example, a new regulatory requirement), it can be carved out of the filler space. This avoids the expensive and risky process of unloading the entire VSAM file, redefining the record layout, and reloading -- a process that in a large bank could take hours and requires careful coordination with all programs that access the file.

Question 18

A COBOL program uses the following EVALUATE statement to process transactions. What happens if the transaction type code is 'ADJ' (adjustment)?

       EVALUATE TRUE
           WHEN TRAN-DEPOSIT
           WHEN TRAN-TRANSFER-IN
           WHEN TRAN-INTEREST
               ADD TRAN-AMOUNT TO ACCT-LEDGER-BAL
               ADD TRAN-AMOUNT TO ACCT-AVAIL-BAL

           WHEN TRAN-WITHDRAWAL
           WHEN TRAN-TRANSFER-OUT
           WHEN TRAN-PAYMENT
           WHEN TRAN-FEE
               SUBTRACT TRAN-AMOUNT FROM ACCT-LEDGER-BAL
               SUBTRACT TRAN-AMOUNT FROM ACCT-AVAIL-BAL

           WHEN TRAN-REVERSAL
               PERFORM 3100-PROCESS-REVERSAL
       END-EVALUATE
Show Answer If the transaction type code is 'ADJ' (adjustment), **nothing happens**. The EVALUATE statement has no WHEN clause that matches the `TRAN-ADJUSTMENT` condition, and there is no `WHEN OTHER` clause to catch unmatched values. The adjustment transaction would silently be ignored -- no balance update, no error message, no audit trail entry. This is a bug. The code should include either a `WHEN TRAN-ADJUSTMENT` clause with specific handling logic, or a `WHEN OTHER` clause that logs an error for unexpected transaction types. In a production banking system, this kind of silent failure could result in unposted transactions and reconciliation discrepancies.

Question 19

What is "structuring" in the context of BSA/AML compliance, and how would a COBOL program detect it?

Show Answer **Structuring** is the illegal practice of deliberately splitting cash transactions into amounts below the $10,000 Currency Transaction Report (CTR) threshold to avoid triggering a CTR filing. For example, a person depositing $28,000 in cash might make three separate deposits of $9,000, $9,500, and $9,500 at different branches. A COBOL program detects structuring during the nightly batch cycle by: 1. Aggregating all cash transactions by customer ID for the day. 2. Checking if the total exceeds $10,000 while each individual transaction is below $10,000. 3. Flagging additional suspicious patterns: multiple transactions at different branches, transactions clustered just below $10,000, transactions on consecutive days that total well above $10,000. 4. Generating a Suspicious Activity Report (SAR) trigger record when patterns suggest intentional structuring. The program typically maintains a daily cash activity accumulator for each customer and applies threshold checks at the end of the day.

Question 20

The following JCL step runs the transaction posting program. Identify three potential issues with this JCL.

//POST     EXEC PGM=TRANPOST
//ACCTMAST DD DSN=BANK.ACCT.MASTER,DISP=OLD
//TRANSIN  DD DSN=BANK.DAILY.TRANS,DISP=SHR
//SYSOUT   DD SYSOUT=*
Show Answer Three potential issues: 1. **Missing STEPLIB**: There is no STEPLIB DD statement pointing to the load library where the TRANPOST program resides. Unless the program is in a LINKLIST library or the JOBLIB is defined at the JOB level, the step will fail with S806 (module not found). 2. **DISP=OLD on ACCTMAST prevents concurrent access**: Using DISP=OLD grants exclusive access to the account master file, blocking all other jobs (including online CICS transactions) from accessing it during the posting run. For a posting program that updates the file, DISP=SHR with VSAM SHAREOPTIONS should be used if concurrent access is needed, or the batch window must be carefully scheduled when online systems are not accessing the file. 3. **No SYSPRINT DD**: Most COBOL programs write report output to SYSPRINT. Without this DD statement, any DISPLAY statements or WRITE statements directed to a report file will fail. Additionally, there is no DD for the transaction history file or a reject file, which are typically needed for audit trail and error handling.

Question 21

True or False: The Check 21 Act requires banks to accept only physical paper checks for clearing.

Show Answer **False.** The Check Clearing for the 21st Century Act (Check 21), enacted in 2003, does the opposite: it allows banks to exchange **digital images** of checks instead of physical paper checks. A substitute check (Image Replacement Document, or IRD) is the legal equivalent of the original check. Check 21 dramatically accelerated check clearing by eliminating the need to physically transport paper checks between banks. Banks can now capture a check image at the point of deposit and transmit it electronically for clearing.

Question 22

In the context of card authorization, what is the purpose of the Luhn algorithm check, and what types of errors does it NOT detect?

Show Answer The Luhn algorithm serves as a **first-pass validation** to detect common transcription errors in card numbers before sending the authorization request to the card network. It catches: - All single-digit errors (any one digit changed) - Most transpositions of adjacent digits It does **NOT** detect: - The transposition of "09" to "90" (or vice versa) - Transpositions of non-adjacent digits - Multiple-digit errors that happen to produce a valid checksum - Fraudulent use of a valid card number (the Luhn check only validates format, not authorization) The Luhn check is performed at the issuing bank (and often at the merchant terminal) as an inexpensive filter before the more expensive database lookup and authorization logic.

Question 23

What is the Standard Entry Class (SEC) Code in an ACH Batch Header, and what is the difference between PPD and CCD?

Show Answer The **Standard Entry Class (SEC) Code** (positions 51-53 of the Batch Header record) identifies the type of ACH entry and determines the rules that govern it. **PPD (Prearranged Payment and Deposit)**: Used for consumer transactions where the consumer has authorized the payment in advance. Examples include payroll direct deposit, recurring mortgage payments, and utility bill payments. PPD entries require written authorization from the consumer. **CCD (Corporate Credit or Debit)**: Used for business-to-business transactions. CCDs move funds between corporate accounts for purposes such as cash concentration, vendor payments, and intercompany transfers. CCD entries require an agreement between the originating and receiving companies. Other common SEC codes include CTX (Corporate Trade Exchange, which supports addenda records for remittance information), WEB (Internet-initiated entries), and TEL (telephone-initiated entries).

Question 24

Analyze the following interest accrual code. What potential issue exists with the calculation, and how would you fix it?

       6000-ACCRUE-INTEREST.
           IF ACCT-SAVINGS OR ACCT-MONEY-MARKET
               COMPUTE WS-DAILY-INTEREST =
                   ACCT-LEDGER-BAL *
                   (ACCT-INT-RATE / 365)
               ADD WS-DAILY-INTEREST TO ACCT-INT-ACCRUED
           END-IF
           .
Show Answer There are three issues: 1. **Missing ROUNDED phrase**: The COMPUTE statement does not use ROUNDED, so the daily interest will be truncated rather than rounded to the nearest cent. For financial calculations, banker's rounding is required. Over millions of accounts and hundreds of days, truncation creates a systematic downward bias in interest paid. 2. **Missing ON SIZE ERROR**: There is no overflow protection. If the accrued interest field overflows (unlikely but possible for long accrual periods or high balances), the error would go undetected, corrupting the accrued interest amount. 3. **No check for positive balance**: The code does not verify that `ACCT-LEDGER-BAL > ZEROES` before calculating interest. If the ledger balance is zero or negative, the program would calculate zero or negative interest and add it to the accrued field, which is wasteful for zero balances and incorrect for negative balances. Corrected code:
       6000-ACCRUE-INTEREST.
           IF ACCT-SAVINGS OR ACCT-MONEY-MARKET
               IF ACCT-LEDGER-BAL > ZEROES
                   COMPUTE WS-DAILY-INTEREST ROUNDED =
                       ACCT-LEDGER-BAL *
                       (ACCT-INT-RATE / 365)
                       ON SIZE ERROR
                           PERFORM 9100-LOG-OVERFLOW
                   END-COMPUTE
                   ADD WS-DAILY-INTEREST TO ACCT-INT-ACCRUED
                       ON SIZE ERROR
                           PERFORM 9100-LOG-OVERFLOW
                   END-ADD
               END-IF
           END-IF
           .

Question 25

What is the relationship between the Originating Depository Financial Institution (ODFI) and the Receiving Depository Financial Institution (RDFI) in ACH processing?

Show Answer The **ODFI** is the bank that initiates the ACH transaction on behalf of its customer (the originator). The ODFI validates the file format, verifies the originator's authorization, and transmits the file to the ACH Operator (the Federal Reserve or EPN/The Clearing House). The **RDFI** is the bank that receives the ACH transaction and posts it to the recipient's account. If the transaction cannot be posted (account closed, insufficient funds, invalid account number), the RDFI returns it to the ODFI with a return reason code. The ACH Operator acts as the intermediary: it receives files from ODFIs, sorts transactions by receiving bank, and delivers them to each RDFI. Settlement occurs through the Federal Reserve, which debits the ODFI's reserve account and credits the RDFI's reserve account (for credits) or vice versa (for debits).

Question 26

True or False: In a COBOL banking system, the REWRITE statement can be used to update an account master record in a VSAM KSDS file without first reading the record.

Show Answer **False.** The REWRITE statement can only be used after a successful READ of the record being updated. In VSAM, a REWRITE replaces the last record that was successfully read. Attempting to REWRITE without a prior READ results in a runtime error (typically a file status of 43). This requirement ensures data integrity: the program must read the current state of the record before modifying it, preventing blind overwrites that could corrupt data if the record was changed by another process between operations.

Question 27

What are the six steps in the ACH processing flow, from origination through settlement?

Show Answer 1. **Origination**: A company (the originator) submits an ACH file to its bank (the ODFI). The file contains payment instructions in NACHA format. 2. **Validation**: The ODFI validates the file format, checks routing numbers, and verifies the originator's authorization to send ACH transactions. 3. **Transmission**: The ODFI transmits the file to the ACH Operator (the Federal Reserve or EPN/The Clearing House). 4. **Distribution**: The ACH Operator sorts transactions by receiving bank and delivers them to each RDFI. 5. **Posting**: The RDFI posts the transactions to customer accounts, applying credits (deposits) and debits (withdrawals). 6. **Return Processing**: If a transaction cannot be posted (account closed, insufficient funds, invalid account), the RDFI returns it to the ODFI with a return reason code. Settlement of net amounts occurs through the Federal Reserve.

Question 28

A batch posting program processes 2 million transactions per night. Each transaction requires one READ of the account master (VSAM KSDS), one REWRITE of the account master, and one WRITE to the transaction history file. If each I/O operation takes an average of 2 milliseconds, how long will the batch run take for just the I/O operations? What strategies could reduce this time?

Show Answer **Calculation**: 2,000,000 transactions x 3 I/O operations x 2 milliseconds = 12,000,000 milliseconds = 12,000 seconds = **200 minutes (3 hours 20 minutes)**. **Strategies to reduce batch processing time**: 1. **Buffering and BUFNI/BUFND**: Increase VSAM buffer allocation. More buffers reduce physical I/O by caching frequently accessed index and data components in memory. 2. **Local Shared Resources (LSR)**: Use VSAM LSR buffering to share buffers across multiple files, improving cache hit rates for randomly accessed files. 3. **Sort transactions by account number**: If transactions are sorted by account key before processing, sequential access patterns improve buffer utilization and reduce seek time. Multiple transactions for the same account can be processed with a single READ/REWRITE pair. 4. **Batch deferred write**: Use the BUFFERSPACE option to allow VSAM to defer physical writes, reducing the number of actual I/O operations. 5. **Parallel processing**: Split the account master into ranges and process each range in a separate job step or address space simultaneously. 6. **DASD striping**: Distribute the VSAM file across multiple volumes to allow parallel I/O.