cobol-sample-app/src/cobol/AUTH.CBL

71 lines
2.4 KiB
COBOL

IDENTIFICATION DIVISION.
PROGRAM-ID. AUTH.
*****************************************************************
* PROGRAM: AUTH - Transaction Authorization
* PURPOSE: Validate and authorize card transactions
* AUTHOR: Sample Application
*****************************************************************
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-TRANSACTION-DATA.
05 WS-CARD-NUMBER PIC X(16).
05 WS-TRANSACTION-AMOUNT PIC 9(11)V99.
05 WS-AVAILABLE-BALANCE PIC 9(11)V99.
05 WS-RESPONSE-CODE PIC 9(2).
05 WS-MERCHANT-ID PIC X(15).
01 WS-HOST-RESPONSE.
05 WS-HOST-BALANCE PIC 9(11)V99.
05 WS-HOST-STATUS PIC X(2).
01 WS-FLAGS.
05 WS-VALID-CARD PIC X VALUE 'N'.
05 WS-SUFFICIENT-FUNDS PIC X VALUE 'N'.
PROCEDURE DIVISION.
0000-MAIN-PROCESS.
PERFORM 1000-INITIALIZE
PERFORM 2000-VALIDATE-CARD
IF WS-VALID-CARD = 'Y'
PERFORM 3000-CHECK-BALANCE
IF WS-SUFFICIENT-FUNDS = 'Y'
PERFORM 4000-AUTHORIZE
ELSE
MOVE 51 TO WS-RESPONSE-CODE
END-IF
ELSE
MOVE 14 TO WS-RESPONSE-CODE
END-IF
PERFORM 9000-FINALIZE
STOP RUN.
1000-INITIALIZE.
INITIALIZE WS-TRANSACTION-DATA
INITIALIZE WS-HOST-RESPONSE
MOVE 'N' TO WS-VALID-CARD
MOVE 'N' TO WS-SUFFICIENT-FUNDS.
2000-VALIDATE-CARD.
IF WS-CARD-NUMBER NOT = SPACES
MOVE 'Y' TO WS-VALID-CARD
END-IF.
3000-CHECK-BALANCE.
* BUG: WS-AVAILABLE-BALANCE is PIC 9(11)V99 but HOST returns
* PIC 9(11)V99, causing truncation on amounts > 9,999,999.99
MOVE WS-HOST-BALANCE TO WS-AVAILABLE-BALANCE
IF WS-AVAILABLE-BALANCE >= WS-TRANSACTION-AMOUNT
MOVE 'Y' TO WS-SUFFICIENT-FUNDS
ELSE
MOVE 'N' TO WS-SUFFICIENT-FUNDS
END-IF.
4000-AUTHORIZE.
MOVE 00 TO WS-RESPONSE-CODE.
9000-FINALIZE.
CONTINUE.