feat: Initial COBOL sample application
- AUTH.CBL: Transaction authorization (with deliberate bug) - VALIDATE.CBL: Input validation module - CLEARING.CBL: Settlement batch processing - HOST.CBL: Host communication interface - Copybooks and JCLs included Bug for testing: AUTH.CBL uses PIC 9(9)V99 for balance instead of PIC 9(11)V99, causing truncation.
This commit is contained in:
parent
edefa6c450
commit
bfa168d12b
27
README.md
27
README.md
|
|
@ -1,3 +1,26 @@
|
||||||
# cobol-sample-app
|
# COBOL Sample Application
|
||||||
|
|
||||||
Sample COBOL application for JIRA AI Fixer testing
|
Sample mainframe application for testing JIRA AI Fixer.
|
||||||
|
|
||||||
|
## Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
src/
|
||||||
|
├── cobol/
|
||||||
|
│ ├── AUTH.CBL - Transaction authorization
|
||||||
|
│ ├── VALIDATE.CBL - Input validation
|
||||||
|
│ ├── CLEARING.CBL - Settlement processing
|
||||||
|
│ └── HOST.CBL - Host communication
|
||||||
|
├── copybooks/
|
||||||
|
│ └── TRANSREC.cpy - Transaction record layout
|
||||||
|
└── jcl/
|
||||||
|
├── AUTHPROC.jcl - Authorization job
|
||||||
|
└── CLEARJOB.jcl - Clearing batch job
|
||||||
|
```
|
||||||
|
|
||||||
|
## Known Issues
|
||||||
|
|
||||||
|
For testing purposes, AUTH.CBL contains a deliberate bug:
|
||||||
|
- `WS-AVAILABLE-BALANCE` is defined as `PIC 9(9)V99`
|
||||||
|
- Should be `PIC 9(11)V99` to match HOST response
|
||||||
|
- Causes truncation on balances > $9,999,999.99
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,70 @@
|
||||||
|
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(9)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(9)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.
|
||||||
|
|
@ -0,0 +1,75 @@
|
||||||
|
IDENTIFICATION DIVISION.
|
||||||
|
PROGRAM-ID. CLEARING.
|
||||||
|
*****************************************************************
|
||||||
|
* PROGRAM: CLEARING - Settlement Processing
|
||||||
|
* PURPOSE: Process daily transaction settlements
|
||||||
|
*****************************************************************
|
||||||
|
ENVIRONMENT DIVISION.
|
||||||
|
INPUT-OUTPUT SECTION.
|
||||||
|
FILE-CONTROL.
|
||||||
|
SELECT TRANS-FILE ASSIGN TO 'TRANSIN'
|
||||||
|
ORGANIZATION IS SEQUENTIAL
|
||||||
|
FILE STATUS IS WS-FILE-STATUS.
|
||||||
|
SELECT CLEAR-FILE ASSIGN TO 'CLEAROUT'
|
||||||
|
ORGANIZATION IS SEQUENTIAL
|
||||||
|
FILE STATUS IS WS-FILE-STATUS.
|
||||||
|
|
||||||
|
DATA DIVISION.
|
||||||
|
FILE SECTION.
|
||||||
|
|
||||||
|
FD TRANS-FILE.
|
||||||
|
01 TRANS-RECORD.
|
||||||
|
05 TR-CARD-NUMBER PIC X(16).
|
||||||
|
05 TR-AMOUNT PIC 9(11)V99.
|
||||||
|
05 TR-DATE PIC 9(8).
|
||||||
|
05 TR-STATUS PIC X(2).
|
||||||
|
|
||||||
|
FD CLEAR-FILE.
|
||||||
|
01 CLEAR-RECORD.
|
||||||
|
05 CR-CARD-NUMBER PIC X(16).
|
||||||
|
05 CR-AMOUNT PIC 9(11)V99.
|
||||||
|
05 CR-SETTLE-DATE PIC 9(8).
|
||||||
|
05 CR-BATCH-ID PIC 9(6).
|
||||||
|
|
||||||
|
WORKING-STORAGE SECTION.
|
||||||
|
|
||||||
|
01 WS-FILE-STATUS PIC XX.
|
||||||
|
01 WS-EOF-FLAG PIC X VALUE 'N'.
|
||||||
|
01 WS-RECORD-COUNT PIC 9(8) VALUE 0.
|
||||||
|
01 WS-BATCH-NUMBER PIC 9(6) VALUE 0.
|
||||||
|
01 WS-CURRENT-DATE PIC 9(8).
|
||||||
|
|
||||||
|
PROCEDURE DIVISION.
|
||||||
|
|
||||||
|
0000-MAIN-CLEARING.
|
||||||
|
PERFORM 1000-INITIALIZE
|
||||||
|
PERFORM 2000-PROCESS-RECORDS
|
||||||
|
UNTIL WS-EOF-FLAG = 'Y'
|
||||||
|
PERFORM 9000-FINALIZE
|
||||||
|
STOP RUN.
|
||||||
|
|
||||||
|
1000-INITIALIZE.
|
||||||
|
OPEN INPUT TRANS-FILE
|
||||||
|
OPEN OUTPUT CLEAR-FILE
|
||||||
|
ACCEPT WS-CURRENT-DATE FROM DATE YYYYMMDD
|
||||||
|
ADD 1 TO WS-BATCH-NUMBER.
|
||||||
|
|
||||||
|
2000-PROCESS-RECORDS.
|
||||||
|
READ TRANS-FILE
|
||||||
|
AT END MOVE 'Y' TO WS-EOF-FLAG
|
||||||
|
NOT AT END PERFORM 3000-CREATE-CLEARING
|
||||||
|
END-READ.
|
||||||
|
|
||||||
|
3000-CREATE-CLEARING.
|
||||||
|
IF TR-STATUS = '00'
|
||||||
|
MOVE TR-CARD-NUMBER TO CR-CARD-NUMBER
|
||||||
|
MOVE TR-AMOUNT TO CR-AMOUNT
|
||||||
|
MOVE WS-CURRENT-DATE TO CR-SETTLE-DATE
|
||||||
|
MOVE WS-BATCH-NUMBER TO CR-BATCH-ID
|
||||||
|
WRITE CLEAR-RECORD
|
||||||
|
ADD 1 TO WS-RECORD-COUNT
|
||||||
|
END-IF.
|
||||||
|
|
||||||
|
9000-FINALIZE.
|
||||||
|
CLOSE TRANS-FILE
|
||||||
|
CLOSE CLEAR-FILE.
|
||||||
|
|
@ -0,0 +1,44 @@
|
||||||
|
IDENTIFICATION DIVISION.
|
||||||
|
PROGRAM-ID. HOST.
|
||||||
|
*****************************************************************
|
||||||
|
* PROGRAM: HOST - Host Communication Module
|
||||||
|
* PURPOSE: Interface with host system for balance inquiry
|
||||||
|
*****************************************************************
|
||||||
|
ENVIRONMENT DIVISION.
|
||||||
|
DATA DIVISION.
|
||||||
|
WORKING-STORAGE SECTION.
|
||||||
|
|
||||||
|
01 WS-HOST-REQUEST.
|
||||||
|
05 WS-REQ-FUNCTION PIC X(4).
|
||||||
|
05 WS-REQ-CARD-NUMBER PIC X(16).
|
||||||
|
05 WS-REQ-TIMESTAMP PIC 9(14).
|
||||||
|
|
||||||
|
01 WS-HOST-RESPONSE.
|
||||||
|
05 WS-RSP-STATUS PIC X(2).
|
||||||
|
05 WS-RSP-BALANCE PIC 9(11)V99.
|
||||||
|
05 WS-RSP-CREDIT-LIMIT PIC 9(11)V99.
|
||||||
|
05 WS-RSP-MESSAGE PIC X(50).
|
||||||
|
|
||||||
|
01 WS-RETURN-CODE PIC 9(4) VALUE 0.
|
||||||
|
|
||||||
|
PROCEDURE DIVISION.
|
||||||
|
|
||||||
|
0000-MAIN-HOST.
|
||||||
|
PERFORM 1000-BUILD-REQUEST
|
||||||
|
PERFORM 2000-SEND-REQUEST
|
||||||
|
PERFORM 3000-RECEIVE-RESPONSE
|
||||||
|
STOP RUN.
|
||||||
|
|
||||||
|
1000-BUILD-REQUEST.
|
||||||
|
MOVE 'BALQ' TO WS-REQ-FUNCTION
|
||||||
|
ACCEPT WS-REQ-TIMESTAMP FROM TIME.
|
||||||
|
|
||||||
|
2000-SEND-REQUEST.
|
||||||
|
* Simulated host communication
|
||||||
|
CONTINUE.
|
||||||
|
|
||||||
|
3000-RECEIVE-RESPONSE.
|
||||||
|
* Simulated host response
|
||||||
|
MOVE '00' TO WS-RSP-STATUS
|
||||||
|
MOVE 150000000.00 TO WS-RSP-BALANCE
|
||||||
|
MOVE 200000000.00 TO WS-RSP-CREDIT-LIMIT.
|
||||||
|
|
@ -0,0 +1,45 @@
|
||||||
|
IDENTIFICATION DIVISION.
|
||||||
|
PROGRAM-ID. VALIDATE.
|
||||||
|
*****************************************************************
|
||||||
|
* PROGRAM: VALIDATE - Input Validation Module
|
||||||
|
* PURPOSE: Validate transaction input data
|
||||||
|
*****************************************************************
|
||||||
|
ENVIRONMENT DIVISION.
|
||||||
|
DATA DIVISION.
|
||||||
|
WORKING-STORAGE SECTION.
|
||||||
|
|
||||||
|
01 WS-VALIDATION-FLAGS.
|
||||||
|
05 WS-CARD-VALID PIC X VALUE 'N'.
|
||||||
|
05 WS-AMOUNT-VALID PIC X VALUE 'N'.
|
||||||
|
05 WS-MERCHANT-VALID PIC X VALUE 'N'.
|
||||||
|
|
||||||
|
01 WS-INPUT-DATA.
|
||||||
|
05 WS-IN-CARD-NUMBER PIC X(16).
|
||||||
|
05 WS-IN-AMOUNT PIC 9(11)V99.
|
||||||
|
05 WS-IN-MERCHANT PIC X(15).
|
||||||
|
|
||||||
|
PROCEDURE DIVISION.
|
||||||
|
|
||||||
|
0000-MAIN-VALIDATE.
|
||||||
|
PERFORM 1000-VALIDATE-CARD
|
||||||
|
PERFORM 2000-VALIDATE-AMOUNT
|
||||||
|
PERFORM 3000-VALIDATE-MERCHANT
|
||||||
|
STOP RUN.
|
||||||
|
|
||||||
|
1000-VALIDATE-CARD.
|
||||||
|
IF WS-IN-CARD-NUMBER NOT = SPACES
|
||||||
|
IF FUNCTION LENGTH(
|
||||||
|
FUNCTION TRIM(WS-IN-CARD-NUMBER)) = 16
|
||||||
|
MOVE 'Y' TO WS-CARD-VALID
|
||||||
|
END-IF
|
||||||
|
END-IF.
|
||||||
|
|
||||||
|
2000-VALIDATE-AMOUNT.
|
||||||
|
IF WS-IN-AMOUNT > 0
|
||||||
|
MOVE 'Y' TO WS-AMOUNT-VALID
|
||||||
|
END-IF.
|
||||||
|
|
||||||
|
3000-VALIDATE-MERCHANT.
|
||||||
|
IF WS-IN-MERCHANT NOT = SPACES
|
||||||
|
MOVE 'Y' TO WS-MERCHANT-VALID
|
||||||
|
END-IF.
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
*****************************************************************
|
||||||
|
* COPYBOOK: TRANSREC - Transaction Record Layout
|
||||||
|
*****************************************************************
|
||||||
|
01 TRANSACTION-RECORD.
|
||||||
|
05 TXN-HEADER.
|
||||||
|
10 TXN-TYPE PIC X(4).
|
||||||
|
10 TXN-VERSION PIC 9(2).
|
||||||
|
05 TXN-CARD-DATA.
|
||||||
|
10 TXN-CARD-NUMBER PIC X(16).
|
||||||
|
10 TXN-CARD-EXPIRY PIC 9(4).
|
||||||
|
05 TXN-AMOUNT-DATA.
|
||||||
|
10 TXN-AMOUNT PIC 9(11)V99.
|
||||||
|
10 TXN-CURRENCY PIC X(3).
|
||||||
|
05 TXN-MERCHANT-DATA.
|
||||||
|
10 TXN-MERCHANT-ID PIC X(15).
|
||||||
|
10 TXN-MERCHANT-NAME PIC X(40).
|
||||||
|
05 TXN-RESPONSE.
|
||||||
|
10 TXN-RESP-CODE PIC 9(2).
|
||||||
|
10 TXN-RESP-MESSAGE PIC X(50).
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
//AUTHPROC JOB (ACCT),'AUTH PROCESS',CLASS=A,MSGCLASS=X
|
||||||
|
//*****************************************************************
|
||||||
|
//* JCL: AUTHPROC - Transaction Authorization Process
|
||||||
|
//*****************************************************************
|
||||||
|
//STEP01 EXEC PGM=AUTH
|
||||||
|
//STEPLIB DD DSN=PROD.LOADLIB,DISP=SHR
|
||||||
|
//SYSOUT DD SYSOUT=*
|
||||||
|
//SYSPRINT DD SYSOUT=*
|
||||||
|
//TRANSIN DD DSN=PROD.TRANS.INPUT,DISP=SHR
|
||||||
|
//TRANSOUT DD DSN=PROD.TRANS.OUTPUT,DISP=(NEW,CATLG,DELETE),
|
||||||
|
// SPACE=(CYL,(10,5),RLSE),
|
||||||
|
// DCB=(RECFM=FB,LRECL=200,BLKSIZE=0)
|
||||||
|
//*
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
//CLEARJOB JOB (ACCT),'CLEARING BATCH',CLASS=A,MSGCLASS=X
|
||||||
|
//*****************************************************************
|
||||||
|
//* JCL: CLEARJOB - Daily Clearing Batch Process
|
||||||
|
//*****************************************************************
|
||||||
|
//STEP01 EXEC PGM=CLEARING
|
||||||
|
//STEPLIB DD DSN=PROD.LOADLIB,DISP=SHR
|
||||||
|
//SYSOUT DD SYSOUT=*
|
||||||
|
//SYSPRINT DD SYSOUT=*
|
||||||
|
//TRANSIN DD DSN=PROD.DAILY.TRANS,DISP=SHR
|
||||||
|
//CLEAROUT DD DSN=PROD.CLEARING.OUTPUT,DISP=(NEW,CATLG,DELETE),
|
||||||
|
// SPACE=(CYL,(50,10),RLSE),
|
||||||
|
// DCB=(RECFM=FB,LRECL=100,BLKSIZE=0)
|
||||||
|
//*
|
||||||
Loading…
Reference in New Issue