Initial commit: COBOL+JCL credit card billing system with COMP-3, OCCURS, COPY REPLACING, INSPECT, and JCL runner
This commit is contained in:
@@ -0,0 +1,259 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. CRDCALC.
|
||||
|
||||
* CALCULATE INTEREST AND FEES - CREDIT CARD BATCH SYSTEM
|
||||
* DEMONSTRATES: OCCURS+SEARCH, KEY BREAK, COMPUTE,
|
||||
* EVALUATE, COMP-3, COPY REPLACING
|
||||
|
||||
ENVIRONMENT DIVISION.
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT VALID-IN ASSIGN TO "VALIDIN"
|
||||
ORGANIZATION IS LINE SEQUENTIAL.
|
||||
SELECT RATE-FILE ASSIGN TO "RATE"
|
||||
ORGANIZATION IS SEQUENTIAL.
|
||||
SELECT CALC-OUT ASSIGN TO "CALCOUT"
|
||||
ORGANIZATION IS LINE SEQUENTIAL.
|
||||
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
FD VALID-IN.
|
||||
COPY TXCPY.
|
||||
|
||||
FD RATE-FILE.
|
||||
COPY RATECPY.
|
||||
|
||||
FD CALC-OUT.
|
||||
01 CALC-RECORD PIC X(200).
|
||||
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-SWITCHES.
|
||||
05 WS-EOF-VALID PIC X VALUE 'N'.
|
||||
88 WS-END-OF-VALID VALUE 'Y'.
|
||||
05 WS-EOF-RATE PIC X VALUE 'N'.
|
||||
88 WS-END-OF-RATE VALUE 'Y'.
|
||||
|
||||
01 WS-COUNTERS.
|
||||
05 WS-TOTAL-IN PIC 9(5) VALUE 0.
|
||||
05 WS-TOTAL-OUT PIC 9(5) VALUE 0.
|
||||
05 WS-RATE-COUNT PIC 9(5) VALUE 0.
|
||||
|
||||
* INTERNAL TABLE: RATE TABLE WITH OCCURS + SEARCH
|
||||
01 WS-RATE-TABLE.
|
||||
05 WS-RATE-ENTRY OCCURS 1 TO 5 TIMES
|
||||
DEPENDING ON WS-RATE-COUNT
|
||||
INDEXED BY WS-RT-IDX.
|
||||
10 WS-RT-TYPE PIC X.
|
||||
10 WS-RT-PCT PIC 9(1)V9(8) COMP-3.
|
||||
10 WS-RT-EFF-DATE PIC 9(8).
|
||||
|
||||
* COPY REPLACING DEMO: STATEMENT DATE
|
||||
COPY DATESUB REPLACING ==:TAG:== BY ==WS-STMT==.
|
||||
|
||||
01 WS-CARD-ACCUM.
|
||||
05 WS-CURRENT-CARD PIC 9(16) VALUE 0.
|
||||
05 WS-CARD-PURCHASES PIC S9(9)V99 COMP-3 VALUE 0.
|
||||
05 WS-CARD-CASH PIC S9(9)V99 COMP-3 VALUE 0.
|
||||
05 WS-CARD-REFUNDS PIC S9(9)V99 COMP-3 VALUE 0.
|
||||
05 WS-CARD-INTEREST PIC S9(9)V99 COMP-3 VALUE 0.
|
||||
05 WS-CARD-FEE PIC S9(9)V99 COMP-3 VALUE 0.
|
||||
05 WS-CARD-TOTAL PIC S9(9)V99 COMP-3 VALUE 0.
|
||||
05 WS-TX-COUNT PIC 9(4) VALUE 0.
|
||||
|
||||
01 WS-CALC-DETAIL.
|
||||
05 WS-D-CARD PIC 9(16).
|
||||
05 WS-D-SEP1 PIC X VALUE SPACE.
|
||||
05 WS-D-TYPE PIC X.
|
||||
05 WS-D-SEP2 PIC X VALUE SPACE.
|
||||
05 WS-D-AMOUNT PIC -(9)9.99.
|
||||
05 WS-D-SEP3 PIC X VALUE SPACE.
|
||||
05 WS-D-INTEREST PIC -(7)9.99.
|
||||
05 WS-D-SEP4 PIC X VALUE SPACE.
|
||||
05 WS-D-FEE PIC -(7)9.99.
|
||||
05 WS-D-SEP5 PIC X VALUE SPACE.
|
||||
05 WS-D-DESC PIC X(30).
|
||||
|
||||
01 WS-SUMMARY.
|
||||
05 WS-S-CARD PIC 9(16).
|
||||
05 WS-S-SEP1 PIC X VALUE SPACE.
|
||||
05 WS-S-TOTAL-AMT PIC -(9)9.99.
|
||||
05 WS-S-SEP2 PIC X VALUE SPACE.
|
||||
05 WS-S-TOTAL-INT PIC -(9)9.99.
|
||||
05 WS-S-SEP3 PIC X VALUE SPACE.
|
||||
05 WS-S-TOTAL-FEE PIC -(9)9.99.
|
||||
05 WS-S-SEP4 PIC X VALUE SPACE.
|
||||
05 WS-S-GRAND-TOTAL PIC -(9)9.99.
|
||||
05 WS-S-SEP5 PIC X VALUE SPACE.
|
||||
05 WS-S-TX-COUNT PIC Z(4)9.
|
||||
|
||||
01 WS-GRAND-TOTAL PIC S9(12)V99 COMP-3 VALUE 0.
|
||||
01 WS-GRAND-INT PIC S9(12)V99 COMP-3 VALUE 0.
|
||||
01 WS-GRAND-FEE PIC S9(12)V99 COMP-3 VALUE 0.
|
||||
01 WS-GRAND-DISP.
|
||||
05 WS-GD-TOTAL PIC -(12)9.99.
|
||||
05 WS-GD-SP1 PIC X VALUE SPACE.
|
||||
05 WS-GD-INT PIC -(12)9.99.
|
||||
05 WS-GD-SP2 PIC X VALUE SPACE.
|
||||
05 WS-GD-FEE PIC -(12)9.99.
|
||||
|
||||
01 WS-DAYS-DIFF PIC 9(4).
|
||||
01 WS-INT-AMOUNT PIC S9(9)V99 COMP-3.
|
||||
01 WS-FEE-AMOUNT PIC S9(9)V99 COMP-3.
|
||||
01 WS-DAILY-RATE PIC 9(1)V9(8) COMP-3.
|
||||
01 WS-CASH-RATE PIC 9(1)V9(4) COMP-3.
|
||||
01 WS-OVERDUE-RATE PIC 9(1)V9(4) COMP-3.
|
||||
01 WS-STATEMENT-DATE PIC 9(8).
|
||||
|
||||
PROCEDURE DIVISION.
|
||||
0000-MAIN.
|
||||
OPEN INPUT VALID-IN
|
||||
INPUT RATE-FILE
|
||||
OUTPUT CALC-OUT.
|
||||
|
||||
ACCEPT WS-STATEMENT-DATE FROM DATE YYYYMMDD.
|
||||
MOVE WS-STATEMENT-DATE(1:4) TO WS-STMT-YYYY.
|
||||
MOVE WS-STATEMENT-DATE(5:2) TO WS-STMT-MM.
|
||||
MOVE WS-STATEMENT-DATE(7:2) TO WS-STMT-DD.
|
||||
|
||||
* LOAD RATES INTO OCCURS TABLE
|
||||
PERFORM 1000-LOAD-RATES.
|
||||
|
||||
* PROCESS TRANSACTIONS (KEY BREAK: CARD CHANGE)
|
||||
PERFORM 2000-PROCESS-VALID UNTIL WS-END-OF-VALID.
|
||||
|
||||
* WRITE FINAL CARD SUMMARY IF DATA REMAINS
|
||||
IF WS-TX-COUNT > 0
|
||||
PERFORM 3000-WRITE-CARD-SUMMARY.
|
||||
|
||||
* WRITE GRAND TOTAL
|
||||
PERFORM 4000-WRITE-GRAND-TOTAL.
|
||||
|
||||
CLOSE VALID-IN RATE-FILE CALC-OUT.
|
||||
DISPLAY 'CRDCALC: ' WS-TOTAL-IN ' READ, '
|
||||
WS-TOTAL-OUT ' WRITTEN'.
|
||||
GOBACK.
|
||||
|
||||
* LOAD RATES INTO OCCURS TABLE
|
||||
1000-LOAD-RATES.
|
||||
MOVE 0 TO WS-RATE-COUNT.
|
||||
PERFORM UNTIL WS-END-OF-RATE
|
||||
READ RATE-FILE
|
||||
AT END SET WS-END-OF-RATE TO TRUE
|
||||
NOT AT END
|
||||
ADD 1 TO WS-RATE-COUNT
|
||||
MOVE RATE-TYPE
|
||||
TO WS-RT-TYPE(WS-RATE-COUNT)
|
||||
MOVE RATE-PCT
|
||||
TO WS-RT-PCT(WS-RATE-COUNT)
|
||||
MOVE RATE-EFF-DATE
|
||||
TO WS-RT-EFF-DATE(WS-RATE-COUNT)
|
||||
END-READ
|
||||
END-PERFORM.
|
||||
|
||||
* SEARCH TABLE FOR CASH RATE
|
||||
SET WS-RT-IDX TO 1.
|
||||
SEARCH WS-RATE-ENTRY
|
||||
AT END MOVE 0.0005 TO WS-CASH-RATE
|
||||
WHEN WS-RT-TYPE(WS-RT-IDX) = 'C'
|
||||
MOVE WS-RT-PCT(WS-RT-IDX) TO WS-CASH-RATE
|
||||
END-SEARCH.
|
||||
|
||||
* SEARCH TABLE FOR OVERDUE RATE
|
||||
SET WS-RT-IDX TO 1.
|
||||
SEARCH WS-RATE-ENTRY
|
||||
AT END MOVE 0.0500 TO WS-OVERDUE-RATE
|
||||
WHEN WS-RT-TYPE(WS-RT-IDX) = 'O'
|
||||
MOVE WS-RT-PCT(WS-RT-IDX) TO WS-OVERDUE-RATE
|
||||
END-SEARCH.
|
||||
|
||||
IF WS-CASH-RATE = 0 MOVE 0.0005 TO WS-CASH-RATE END-IF.
|
||||
IF WS-OVERDUE-RATE = 0 MOVE 0.0500 TO WS-OVERDUE-RATE
|
||||
END-IF.
|
||||
MOVE 0 TO WS-TOTAL-IN.
|
||||
|
||||
2000-PROCESS-VALID.
|
||||
READ VALID-IN
|
||||
AT END SET WS-END-OF-VALID TO TRUE
|
||||
NOT AT END
|
||||
ADD 1 TO WS-TOTAL-IN
|
||||
IF WS-CURRENT-CARD = 0
|
||||
MOVE TX-CARD-NO TO WS-CURRENT-CARD
|
||||
END-IF
|
||||
* KEY BREAK: WHEN CARD CHANGES, OUTPUT SUMMARY
|
||||
IF TX-CARD-NO NOT = WS-CURRENT-CARD
|
||||
PERFORM 3000-WRITE-CARD-SUMMARY
|
||||
MOVE TX-CARD-NO TO WS-CURRENT-CARD
|
||||
MOVE 0 TO WS-CARD-PURCHASES
|
||||
WS-CARD-CASH
|
||||
WS-CARD-REFUNDS
|
||||
WS-CARD-INTEREST
|
||||
WS-CARD-FEE
|
||||
WS-CARD-TOTAL
|
||||
WS-TX-COUNT
|
||||
END-IF
|
||||
PERFORM 2500-ACCUMULATE-TX
|
||||
END-READ.
|
||||
|
||||
2500-ACCUMULATE-TX.
|
||||
MOVE 0 TO WS-INT-AMOUNT WS-FEE-AMOUNT.
|
||||
ADD 1 TO WS-TX-COUNT.
|
||||
EVALUATE TRUE
|
||||
WHEN TX-PURCHASE
|
||||
ADD TX-AMOUNT TO WS-CARD-PURCHASES
|
||||
MOVE 'PURCHASE' TO WS-D-DESC
|
||||
WHEN TX-CASH
|
||||
ADD TX-AMOUNT TO WS-CARD-CASH
|
||||
MOVE 'CASH ADVANCE' TO WS-D-DESC
|
||||
COMPUTE WS-INT-AMOUNT = TX-AMOUNT *
|
||||
WS-CASH-RATE * 30
|
||||
ADD WS-INT-AMOUNT TO WS-CARD-INTEREST
|
||||
WHEN TX-REFUND
|
||||
ADD TX-AMOUNT TO WS-CARD-PURCHASES
|
||||
MOVE 'REFUND' TO WS-D-DESC
|
||||
END-EVALUATE.
|
||||
|
||||
* FEE CALCULATION: 1% OF CASH ADVANCE (MIN 100)
|
||||
IF TX-CASH
|
||||
COMPUTE WS-FEE-AMOUNT = TX-AMOUNT * 0.01
|
||||
IF WS-FEE-AMOUNT < 100
|
||||
MOVE 100 TO WS-FEE-AMOUNT
|
||||
END-IF
|
||||
ADD WS-FEE-AMOUNT TO WS-CARD-FEE
|
||||
END-IF.
|
||||
|
||||
* WRITE DETAIL LINE
|
||||
MOVE TX-CARD-NO TO WS-D-CARD
|
||||
MOVE TX-TYPE TO WS-D-TYPE
|
||||
MOVE TX-AMOUNT TO WS-D-AMOUNT
|
||||
MOVE WS-INT-AMOUNT TO WS-D-INTEREST
|
||||
MOVE WS-FEE-AMOUNT TO WS-D-FEE
|
||||
WRITE CALC-RECORD FROM WS-CALC-DETAIL.
|
||||
|
||||
3000-WRITE-CARD-SUMMARY.
|
||||
COMPUTE WS-CARD-TOTAL = WS-CARD-PURCHASES + WS-CARD-CASH
|
||||
+ WS-CARD-INTEREST + WS-CARD-FEE - WS-CARD-REFUNDS.
|
||||
ADD WS-CARD-TOTAL TO WS-GRAND-TOTAL.
|
||||
ADD WS-CARD-INTEREST TO WS-GRAND-INT.
|
||||
ADD WS-CARD-FEE TO WS-GRAND-FEE.
|
||||
|
||||
MOVE WS-CURRENT-CARD TO WS-S-CARD
|
||||
MOVE WS-CARD-PURCHASES TO WS-S-TOTAL-AMT
|
||||
MOVE WS-CARD-INTEREST TO WS-S-TOTAL-INT
|
||||
MOVE WS-CARD-FEE TO WS-S-TOTAL-FEE
|
||||
MOVE WS-CARD-TOTAL TO WS-S-GRAND-TOTAL
|
||||
MOVE WS-TX-COUNT TO WS-S-TX-COUNT
|
||||
WRITE CALC-RECORD FROM WS-SUMMARY.
|
||||
ADD 1 TO WS-TOTAL-OUT.
|
||||
|
||||
4000-WRITE-GRAND-TOTAL.
|
||||
MOVE WS-GRAND-TOTAL TO WS-GD-TOTAL.
|
||||
MOVE WS-GRAND-INT TO WS-GD-INT.
|
||||
MOVE WS-GRAND-FEE TO WS-GD-FEE.
|
||||
STRING
|
||||
'GRAND TOTAL CARDS:' WS-TOTAL-OUT
|
||||
' AMOUNT:' WS-GD-TOTAL
|
||||
' INTEREST:' WS-GD-INT
|
||||
' FEE:' WS-GD-FEE
|
||||
INTO CALC-RECORD
|
||||
END-STRING.
|
||||
WRITE CALC-RECORD.
|
||||
@@ -0,0 +1,187 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. CRDRPT.
|
||||
|
||||
* GENERATE MONTHLY STATEMENT AND SUMMARY REPORT
|
||||
* INPUT: BILLING RESULT FROM CRDCALC
|
||||
* OUTPUT: MONTHLY STATEMENT (PER CARD)
|
||||
* SUMMARY REPORT (AGGREGATE)
|
||||
|
||||
ENVIRONMENT DIVISION.
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT CALC-IN ASSIGN TO "BILLING"
|
||||
ORGANIZATION IS LINE SEQUENTIAL.
|
||||
SELECT STMT-OUT ASSIGN TO "STMT"
|
||||
ORGANIZATION IS LINE SEQUENTIAL.
|
||||
SELECT SUMM-OUT ASSIGN TO "SUMMARY"
|
||||
ORGANIZATION IS LINE SEQUENTIAL.
|
||||
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
FD CALC-IN.
|
||||
01 CALC-LINE PIC X(200).
|
||||
|
||||
FD STMT-OUT.
|
||||
01 STMT-LINE PIC X(200).
|
||||
|
||||
FD SUMM-OUT.
|
||||
01 SUMM-LINE PIC X(200).
|
||||
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-SWITCHES.
|
||||
05 WS-EOF-CALC PIC X VALUE 'N'.
|
||||
88 WS-END-OF-CALC VALUE 'Y'.
|
||||
|
||||
01 WS-COUNTERS.
|
||||
05 WS-LINE-COUNT PIC 9(5) VALUE 0.
|
||||
05 WS-CARD-COUNT PIC 9(5) VALUE 0.
|
||||
05 WS-DETAIL-COUNT PIC 9(5) VALUE 0.
|
||||
|
||||
01 WS-REPORT-DATE.
|
||||
05 WS-RPT-YYYY PIC 9(4).
|
||||
05 WS-RPT-MM PIC 9(2).
|
||||
05 WS-RPT-DD PIC 9(2).
|
||||
|
||||
01 WS-HEADER1.
|
||||
05 WS-H1-DATE PIC X(8).
|
||||
05 WS-H1-SPACE PIC X(5) VALUE SPACES.
|
||||
05 WS-H1-TITLE PIC X(30)
|
||||
VALUE 'MONTHLY CREDIT CARD STATEMENT'.
|
||||
|
||||
01 WS-HEADER2.
|
||||
05 WS-H2-FILLER PIC X(50) VALUE ALL '-'.
|
||||
|
||||
01 WS-DETAIL-LINE.
|
||||
05 WS-DL-CARD PIC X(16).
|
||||
05 WS-DL-SP1 PIC X(2) VALUE SPACES.
|
||||
05 WS-DL-TYPE PIC X(8).
|
||||
05 WS-DL-SP2 PIC X(2) VALUE SPACES.
|
||||
05 WS-DL-AMOUNT PIC -(9)9.99.
|
||||
05 WS-DL-SP3 PIC X(2) VALUE SPACES.
|
||||
05 WS-DL-INTEREST PIC -(7)9.99.
|
||||
05 WS-DL-SP4 PIC X(2) VALUE SPACES.
|
||||
05 WS-DL-FEE PIC -(7)9.99.
|
||||
05 WS-DL-SP5 PIC X(2) VALUE SPACES.
|
||||
05 WS-DL-DESC PIC X(30).
|
||||
|
||||
01 WS-SUMMARY-LINE.
|
||||
05 WS-SL-CARD PIC X(16).
|
||||
05 WS-SL-SP1 PIC X(2) VALUE SPACES.
|
||||
05 WS-SL-TOTAL PIC -(9)9.99.
|
||||
05 WS-SL-SP2 PIC X(2) VALUE SPACES.
|
||||
05 WS-SL-INT PIC -(9)9.99.
|
||||
05 WS-SL-SP3 PIC X(2) VALUE SPACES.
|
||||
05 WS-SL-FEE PIC -(9)9.99.
|
||||
05 WS-SL-SP4 PIC X(2) VALUE SPACES.
|
||||
05 WS-SL-GRAND PIC -(9)9.99.
|
||||
05 WS-SL-SP5 PIC X(2) VALUE SPACES.
|
||||
05 WS-SL-TXCNT PIC Z(4)9.
|
||||
|
||||
01 WS-TRAILER.
|
||||
05 WS-TR-TOTAL-CARDS PIC Z(5)9.
|
||||
05 WS-TR-SP1 PIC X(5) VALUE SPACES.
|
||||
05 WS-TR-TOTAL-LINES PIC Z(5)9.
|
||||
05 WS-TR-SP2 PIC X(5) VALUE SPACES.
|
||||
05 WS-TR-MSG PIC X(20)
|
||||
VALUE 'END OF REPORT'.
|
||||
|
||||
* PARSE FIELDS FROM INPUT LINE
|
||||
01 WS-PARSE.
|
||||
05 WS-P-CARD PIC 9(16).
|
||||
05 WS-P-TYPE PIC X.
|
||||
05 WS-P-AMOUNT PIC S9(9)V99.
|
||||
05 WS-P-INTEREST PIC S9(7)V99.
|
||||
05 WS-P-FEE PIC S9(7)V99.
|
||||
05 WS-P-DESC PIC X(30).
|
||||
05 WS-P-IS-SUMMARY PIC X VALUE 'N'.
|
||||
88 WS-P-SUMMARY-LINE VALUE 'Y'.
|
||||
|
||||
05 WS-PARSE-REMAIN PIC X(150).
|
||||
|
||||
PROCEDURE DIVISION.
|
||||
0000-MAIN.
|
||||
OPEN INPUT CALC-IN
|
||||
OUTPUT STMT-OUT
|
||||
OUTPUT SUMM-OUT.
|
||||
|
||||
ACCEPT WS-REPORT-DATE FROM DATE YYYYMMDD.
|
||||
MOVE WS-REPORT-DATE(1:4) TO WS-RPT-YYYY.
|
||||
MOVE WS-REPORT-DATE(5:2) TO WS-RPT-MM.
|
||||
MOVE WS-REPORT-DATE(7:2) TO WS-RPT-DD.
|
||||
MOVE WS-REPORT-DATE TO WS-H1-DATE.
|
||||
|
||||
PERFORM 1000-WRITE-HEADER.
|
||||
|
||||
MOVE 0 TO WS-CARD-COUNT WS-DETAIL-COUNT.
|
||||
|
||||
PERFORM 2000-PROCESS-CALC UNTIL WS-END-OF-CALC.
|
||||
|
||||
PERFORM 3000-WRITE-TRAILER.
|
||||
|
||||
CLOSE CALC-IN STMT-OUT SUMM-OUT.
|
||||
DISPLAY 'CRDRPT: ' WS-CARD-COUNT ' CARDS, '
|
||||
WS-DETAIL-COUNT ' LINES'.
|
||||
GOBACK.
|
||||
|
||||
1000-WRITE-HEADER.
|
||||
MOVE SPACES TO STMT-LINE.
|
||||
WRITE STMT-LINE FROM WS-HEADER1.
|
||||
MOVE SPACES TO STMT-LINE.
|
||||
WRITE STMT-LINE FROM WS-HEADER2.
|
||||
MOVE SPACES TO STMT-LINE.
|
||||
|
||||
2000-PROCESS-CALC.
|
||||
READ CALC-IN
|
||||
AT END SET WS-END-OF-CALC TO TRUE
|
||||
NOT AT END
|
||||
ADD 1 TO WS-LINE-COUNT
|
||||
PERFORM 2100-PARSE-LINE
|
||||
END-READ.
|
||||
|
||||
2100-PARSE-LINE.
|
||||
* CHECK IF THIS IS A GRAND TOTAL LINE
|
||||
IF CALC-LINE(1:11) = 'GRAND TOTAL'
|
||||
MOVE CALC-LINE TO SUMM-LINE
|
||||
WRITE SUMM-LINE
|
||||
EXIT PARAGRAPH
|
||||
END-IF.
|
||||
|
||||
* CHECK IF THIS IS A CARD SUMMARY LINE
|
||||
MOVE CALC-LINE TO WS-PARSE-REMAIN.
|
||||
UNSTRING WS-PARSE-REMAIN DELIMITED BY SPACE
|
||||
INTO WS-P-CARD WS-P-AMOUNT WS-P-INTEREST
|
||||
WS-P-FEE WS-P-AMOUNT WS-P-DESC
|
||||
END-UNSTRING.
|
||||
|
||||
* IF FIRST FIELD IS 16-DIGIT NUMBER AND HAS TX-COUNT
|
||||
* AT END, IT'S SUMMARY; OTHERWISE DETAIL
|
||||
IF CALC-LINE(18:1) NOT = ' '
|
||||
PERFORM 2200-WRITE-DETAIL
|
||||
ELSE
|
||||
PERFORM 2300-WRITE-CARD-SUMMARY.
|
||||
|
||||
2200-WRITE-DETAIL.
|
||||
MOVE CALC-LINE TO WS-DETAIL-LINE.
|
||||
MOVE WS-DETAIL-LINE TO STMT-LINE.
|
||||
WRITE STMT-LINE.
|
||||
ADD 1 TO WS-DETAIL-COUNT.
|
||||
|
||||
2300-WRITE-CARD-SUMMARY.
|
||||
MOVE CALC-LINE TO WS-SUMMARY-LINE.
|
||||
MOVE WS-SUMMARY-LINE TO SUMM-LINE.
|
||||
WRITE SUMM-LINE.
|
||||
MOVE WS-SUMMARY-LINE TO STMT-LINE.
|
||||
WRITE STMT-LINE.
|
||||
MOVE SPACES TO STMT-LINE.
|
||||
WRITE STMT-LINE.
|
||||
ADD 1 TO WS-CARD-COUNT.
|
||||
|
||||
3000-WRITE-TRAILER.
|
||||
MOVE SPACES TO STMT-LINE.
|
||||
WRITE STMT-LINE.
|
||||
MOVE WS-CARD-COUNT TO WS-TR-TOTAL-CARDS.
|
||||
MOVE WS-LINE-COUNT TO WS-TR-TOTAL-LINES.
|
||||
WRITE STMT-LINE FROM WS-TRAILER.
|
||||
|
||||
MOVE WS-TRAILER TO SUMM-LINE.
|
||||
WRITE SUMM-LINE.
|
||||
@@ -0,0 +1,226 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. CRDVAL.
|
||||
|
||||
* VALIDATE TRANSACTIONS - CREDIT CARD BATCH SYSTEM
|
||||
* DEMONSTRATES: COPY REPLACING, OCCURS+SEARCH ALL,
|
||||
* INSPECT, STRING, 88-LEVEL, REDEFINES IO
|
||||
|
||||
ENVIRONMENT DIVISION.
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT TX-FILE ASSIGN TO "TRANSIN"
|
||||
ORGANIZATION IS LINE SEQUENTIAL.
|
||||
SELECT MEM-FILE ASSIGN TO "MEMBER"
|
||||
ORGANIZATION IS LINE SEQUENTIAL.
|
||||
SELECT VALID-OUT ASSIGN TO "VALIDOUT"
|
||||
ORGANIZATION IS LINE SEQUENTIAL.
|
||||
SELECT REJECT-OUT ASSIGN TO "REJECT"
|
||||
ORGANIZATION IS LINE SEQUENTIAL.
|
||||
SELECT ERR-OUT ASSIGN TO "REPORTERR"
|
||||
ORGANIZATION IS LINE SEQUENTIAL.
|
||||
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
FD TX-FILE.
|
||||
COPY TXCPY.
|
||||
|
||||
FD MEM-FILE.
|
||||
COPY MEMCPY.
|
||||
|
||||
FD VALID-OUT.
|
||||
01 VALID-RECORD PIC X(100).
|
||||
|
||||
FD REJECT-OUT.
|
||||
01 REJECT-RECORD PIC X(100).
|
||||
|
||||
FD ERR-OUT.
|
||||
01 ERR-RECORD PIC X(120).
|
||||
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-SWITCHES.
|
||||
05 WS-EOF-TX PIC X VALUE 'N'.
|
||||
88 WS-END-OF-TX VALUE 'Y'.
|
||||
05 WS-EOF-MEM PIC X VALUE 'N'.
|
||||
88 WS-END-OF-MEM VALUE 'Y'.
|
||||
05 WS-VALID PIC X VALUE 'Y'.
|
||||
88 WS-IS-VALID VALUE 'Y'.
|
||||
05 WS-FOUND PIC X VALUE 'N'.
|
||||
88 WS-IS-FOUND VALUE 'Y'.
|
||||
|
||||
01 WS-COUNTERS.
|
||||
05 WS-TOTAL-READ PIC 9(5) VALUE 0.
|
||||
05 WS-TOTAL-VALID PIC 9(5) VALUE 0.
|
||||
05 WS-TOTAL-REJECT PIC 9(5) VALUE 0.
|
||||
05 WS-TOTAL-MEMBERS PIC 9(5) VALUE 0.
|
||||
|
||||
* DATESUB COPYBOOK WITH COPY REPLACING DEMO
|
||||
* GENERATES: WS-RUN-DATE (WS-RUN-YYYY, WS-RUN-MM, WS-RUN-DD)
|
||||
COPY DATESUB REPLACING ==:TAG:== BY ==WS-RUN==.
|
||||
|
||||
* GENERATES: WS-TX-DATE (WS-TX-YYYY, WS-TX-MM, WS-TX-DD)
|
||||
COPY DATESUB REPLACING ==:TAG:== BY ==WS-TX==.
|
||||
|
||||
* INTERNAL TABLE: MEMBER TABLE WITH OCCURS + SEARCH ALL
|
||||
01 WS-MEMBER-TABLE.
|
||||
05 WS-MEMBER-ENTRY OCCURS 1 TO 100 TIMES
|
||||
DEPENDING ON WS-TOTAL-MEMBERS
|
||||
ASCENDING KEY IS WS-MEM-ID
|
||||
INDEXED BY WS-MEM-IDX.
|
||||
10 WS-MEM-ID PIC 9(16).
|
||||
10 WS-MEM-NAME PIC X(30).
|
||||
10 WS-MEM-LIMIT PIC 9(9)V99.
|
||||
10 WS-MEM-TYPE PIC X.
|
||||
10 WS-MEM-STATUS PIC X.
|
||||
10 WS-MEM-BALANCE PIC S9(9)V99.
|
||||
10 WS-MEM-MINPAY PIC 9(9)V99.
|
||||
10 WS-MEM-ADDR PIC X(60).
|
||||
|
||||
01 WS-ERR-MSG.
|
||||
05 WS-ERR-CARD PIC 9(16).
|
||||
05 WS-ERR-SP1 PIC X(2) VALUE SPACES.
|
||||
05 WS-ERR-CODE PIC X(20).
|
||||
05 WS-ERR-SP2 PIC X(2) VALUE SPACES.
|
||||
05 WS-ERR-DESC PIC X(80).
|
||||
|
||||
01 WS-MERCHANT-CHECK.
|
||||
05 WS-MC-LEN PIC 9(2).
|
||||
05 WS-MC-COUNT PIC 9(2).
|
||||
|
||||
PROCEDURE DIVISION.
|
||||
0000-MAIN.
|
||||
OPEN INPUT TX-FILE
|
||||
INPUT MEM-FILE
|
||||
OUTPUT VALID-OUT
|
||||
OUTPUT REJECT-OUT
|
||||
OUTPUT ERR-OUT.
|
||||
|
||||
ACCEPT WS-RUN-DATE FROM DATE YYYYMMDD.
|
||||
|
||||
PERFORM 1000-LOAD-MEMBERS.
|
||||
PERFORM 2000-PROCESS-TX UNTIL WS-END-OF-TX.
|
||||
PERFORM 3000-WRITE-SUMMARY.
|
||||
|
||||
CLOSE TX-FILE MEM-FILE VALID-OUT REJECT-OUT ERR-OUT.
|
||||
GOBACK.
|
||||
|
||||
* LOAD ALL MEMBERS INTO OCCURS TABLE AT ONCE
|
||||
1000-LOAD-MEMBERS.
|
||||
MOVE 0 TO WS-TOTAL-MEMBERS.
|
||||
PERFORM UNTIL WS-END-OF-MEM
|
||||
READ MEM-FILE
|
||||
AT END SET WS-END-OF-MEM TO TRUE
|
||||
NOT AT END
|
||||
ADD 1 TO WS-TOTAL-MEMBERS
|
||||
MOVE MEM-ID
|
||||
TO WS-MEM-ID(WS-TOTAL-MEMBERS)
|
||||
MOVE MEM-NAME
|
||||
TO WS-MEM-NAME(WS-TOTAL-MEMBERS)
|
||||
MOVE MEM-CREDIT-LIMIT
|
||||
TO WS-MEM-LIMIT(WS-TOTAL-MEMBERS)
|
||||
MOVE MEM-TYPE
|
||||
TO WS-MEM-TYPE(WS-TOTAL-MEMBERS)
|
||||
MOVE MEM-STATUS
|
||||
TO WS-MEM-STATUS(WS-TOTAL-MEMBERS)
|
||||
MOVE MEM-BALANCE
|
||||
TO WS-MEM-BALANCE(WS-TOTAL-MEMBERS)
|
||||
MOVE MEM-MIN-PAYMENT
|
||||
TO WS-MEM-MINPAY(WS-TOTAL-MEMBERS)
|
||||
MOVE MEM-ADDRESS
|
||||
TO WS-MEM-ADDR(WS-TOTAL-MEMBERS)
|
||||
END-READ
|
||||
END-PERFORM.
|
||||
|
||||
2000-PROCESS-TX.
|
||||
READ TX-FILE
|
||||
AT END SET WS-END-OF-TX TO TRUE
|
||||
NOT AT END
|
||||
ADD 1 TO WS-TOTAL-READ
|
||||
PERFORM 2100-VALIDATE-TX
|
||||
END-READ.
|
||||
|
||||
2100-VALIDATE-TX.
|
||||
SET WS-IS-VALID TO TRUE.
|
||||
|
||||
* INSPECT DEMO: CHECK MERCHANT NAME FOR INVALID CHARS
|
||||
MOVE 0 TO WS-MC-COUNT.
|
||||
INSPECT TX-MERCHANT TALLYING WS-MC-COUNT
|
||||
FOR CHARACTERS BEFORE INITIAL SPACE.
|
||||
IF WS-MC-COUNT = 0
|
||||
MOVE 'INVALID-MERCHANT' TO WS-ERR-CODE
|
||||
MOVE 'MERCHANT NAME EMPTY' TO WS-ERR-DESC
|
||||
PERFORM 2200-REJECT
|
||||
EXIT PARAGRAPH
|
||||
END-IF.
|
||||
CONTINUE.
|
||||
|
||||
IF TX-CARD-NO = 0
|
||||
MOVE 'INVALID-CARD' TO WS-ERR-CODE
|
||||
MOVE 'CARD NUMBER IS ZERO' TO WS-ERR-DESC
|
||||
PERFORM 2200-REJECT
|
||||
EXIT PARAGRAPH.
|
||||
|
||||
IF TX-AMOUNT <= 0 AND NOT TX-REFUND
|
||||
MOVE 'INVALID-AMOUNT' TO WS-ERR-CODE
|
||||
MOVE 'AMOUNT MUST BE POSITIVE' TO WS-ERR-DESC
|
||||
PERFORM 2200-REJECT
|
||||
EXIT PARAGRAPH.
|
||||
|
||||
IF TX-REFUND AND TX-AMOUNT >= 0
|
||||
MOVE 'INVALID-REFUND' TO WS-ERR-CODE
|
||||
MOVE 'REFUND AMOUNT MUST BE NEGATIVE' TO WS-ERR-DESC
|
||||
PERFORM 2200-REJECT
|
||||
EXIT PARAGRAPH.
|
||||
|
||||
MOVE TX-DATE(1:4) TO WS-TX-YYYY
|
||||
MOVE TX-DATE(5:2) TO WS-TX-MM
|
||||
MOVE TX-DATE(7:2) TO WS-TX-DD
|
||||
IF WS-TX-MM NOT = WS-RUN-MM
|
||||
MOVE 'OUT-OF-MONTH' TO WS-ERR-CODE
|
||||
MOVE 'TX DATE NOT IN RUN MONTH' TO WS-ERR-DESC
|
||||
PERFORM 2200-REJECT
|
||||
EXIT PARAGRAPH.
|
||||
|
||||
* SEARCH ALL DEMO: BINARY SEARCH ON MEMBER TABLE
|
||||
PERFORM 2300-FIND-MEMBER.
|
||||
IF NOT WS-IS-FOUND
|
||||
MOVE 'MEMBER-NOT-FOUND' TO WS-ERR-CODE
|
||||
MOVE 'CARD NOT IN MEMBER FILE' TO WS-ERR-DESC
|
||||
PERFORM 2200-REJECT
|
||||
EXIT PARAGRAPH.
|
||||
|
||||
IF WS-MEM-STATUS(WS-MEM-IDX) = 'F'
|
||||
MOVE 'FROZEN-CARD' TO WS-ERR-CODE
|
||||
MOVE 'CARD STATUS IS FROZEN' TO WS-ERR-DESC
|
||||
PERFORM 2200-REJECT
|
||||
EXIT PARAGRAPH.
|
||||
|
||||
IF WS-VALID = 'Y'
|
||||
WRITE VALID-RECORD FROM TX-RECORD
|
||||
ADD 1 TO WS-TOTAL-VALID.
|
||||
|
||||
2200-REJECT.
|
||||
WRITE REJECT-RECORD FROM TX-RECORD.
|
||||
MOVE TX-CARD-NO TO WS-ERR-CARD.
|
||||
WRITE ERR-RECORD FROM WS-ERR-MSG.
|
||||
ADD 1 TO WS-TOTAL-REJECT.
|
||||
|
||||
2300-FIND-MEMBER.
|
||||
SET WS-MEM-IDX TO 1.
|
||||
SEARCH ALL WS-MEMBER-ENTRY
|
||||
AT END
|
||||
MOVE 'N' TO WS-FOUND
|
||||
WHEN WS-MEM-ID(WS-MEM-IDX) = TX-CARD-NO
|
||||
MOVE 'Y' TO WS-FOUND.
|
||||
|
||||
3000-WRITE-SUMMARY.
|
||||
STRING
|
||||
'CRDVAL SUMMARY - TOTAL READ:' WS-TOTAL-READ
|
||||
' VALID:' WS-TOTAL-VALID
|
||||
' REJECT:' WS-TOTAL-REJECT
|
||||
' MEMBERS LOADED:' WS-TOTAL-MEMBERS
|
||||
INTO ERR-RECORD
|
||||
END-STRING.
|
||||
WRITE ERR-RECORD.
|
||||
DISPLAY 'CRDVAL: ' WS-TOTAL-READ ' READ, '
|
||||
WS-TOTAL-VALID ' VALID, '
|
||||
WS-TOTAL-REJECT ' REJECTS'.
|
||||
@@ -0,0 +1,482 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. GENDATA.
|
||||
|
||||
* GENERATE COMPREHENSIVE TEST DATA FOR CREDIT CARD BATCH SYSTEM
|
||||
* COVERS: normal, frozen, closed, not-found, empty-merchant,
|
||||
* zero-card, invalid-amount, invalid-refund, out-of-month,
|
||||
* multiple cash advances, refunds, installments
|
||||
|
||||
ENVIRONMENT DIVISION.
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT MEM-OUT ASSIGN TO "MEMOUT"
|
||||
ORGANIZATION IS LINE SEQUENTIAL.
|
||||
SELECT TX-OUT ASSIGN TO "TXOUT"
|
||||
ORGANIZATION IS LINE SEQUENTIAL.
|
||||
SELECT RATE-OUT ASSIGN TO "RATEOUT"
|
||||
ORGANIZATION IS SEQUENTIAL.
|
||||
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
FD MEM-OUT.
|
||||
COPY MEMCPY.
|
||||
|
||||
FD TX-OUT.
|
||||
COPY TXCPY.
|
||||
|
||||
FD RATE-OUT.
|
||||
COPY RATECPY.
|
||||
|
||||
PROCEDURE DIVISION.
|
||||
0000-MAIN.
|
||||
OPEN OUTPUT MEM-OUT TX-OUT RATE-OUT.
|
||||
|
||||
PERFORM 1000-GEN-MEMBERS.
|
||||
PERFORM 2000-GEN-TRANSACTIONS.
|
||||
PERFORM 3000-GEN-RATES.
|
||||
|
||||
CLOSE MEM-OUT TX-OUT RATE-OUT.
|
||||
DISPLAY 'GENDATA: TEST DATA CREATED'.
|
||||
GOBACK.
|
||||
|
||||
* 8 MEMBERS
|
||||
1000-GEN-MEMBERS.
|
||||
MOVE 6222021234567800 TO MEM-ID.
|
||||
MOVE 'ZHANG SAN' TO MEM-NAME.
|
||||
MOVE 50000.00 TO MEM-CREDIT-LIMIT.
|
||||
MOVE 'G' TO MEM-TYPE.
|
||||
MOVE 'A' TO MEM-STATUS.
|
||||
MOVE 15000.00 TO MEM-BALANCE.
|
||||
MOVE 3000.00 TO MEM-MIN-PAYMENT.
|
||||
MOVE 'BEIJING ROAD NO.1' TO MEM-ADDRESS.
|
||||
WRITE MEMBER-RECORD.
|
||||
|
||||
MOVE 6222021234567801 TO MEM-ID.
|
||||
MOVE 'LI SI' TO MEM-NAME.
|
||||
MOVE 100000.00 TO MEM-CREDIT-LIMIT.
|
||||
MOVE 'P' TO MEM-TYPE.
|
||||
MOVE 'A' TO MEM-STATUS.
|
||||
MOVE 35000.00 TO MEM-BALANCE.
|
||||
MOVE 7000.00 TO MEM-MIN-PAYMENT.
|
||||
MOVE 'SHANGHAI ROAD NO.2' TO MEM-ADDRESS.
|
||||
WRITE MEMBER-RECORD.
|
||||
|
||||
MOVE 6222021234567802 TO MEM-ID.
|
||||
MOVE 'WANG WU' TO MEM-NAME.
|
||||
MOVE 20000.00 TO MEM-CREDIT-LIMIT.
|
||||
MOVE 'S' TO MEM-TYPE.
|
||||
MOVE 'A' TO MEM-STATUS.
|
||||
MOVE 8000.00 TO MEM-BALANCE.
|
||||
MOVE 2000.00 TO MEM-MIN-PAYMENT.
|
||||
MOVE 'GUANGZHOU ROAD NO.3' TO MEM-ADDRESS.
|
||||
WRITE MEMBER-RECORD.
|
||||
|
||||
MOVE 6222021234567803 TO MEM-ID.
|
||||
MOVE 'ZHAO LIU' TO MEM-NAME.
|
||||
MOVE 80000.00 TO MEM-CREDIT-LIMIT.
|
||||
MOVE 'G' TO MEM-TYPE.
|
||||
MOVE 'F' TO MEM-STATUS.
|
||||
MOVE 15000.00 TO MEM-BALANCE.
|
||||
MOVE 8000.00 TO MEM-MIN-PAYMENT.
|
||||
MOVE 'SHENZHEN ROAD NO.4' TO MEM-ADDRESS.
|
||||
WRITE MEMBER-RECORD.
|
||||
|
||||
MOVE 6222021234567804 TO MEM-ID.
|
||||
MOVE 'CHEN QI' TO MEM-NAME.
|
||||
MOVE 30000.00 TO MEM-CREDIT-LIMIT.
|
||||
MOVE 'S' TO MEM-TYPE.
|
||||
MOVE 'C' TO MEM-STATUS.
|
||||
MOVE 0.00 TO MEM-BALANCE.
|
||||
MOVE 0.00 TO MEM-MIN-PAYMENT.
|
||||
MOVE 'NANJING ROAD NO.5' TO MEM-ADDRESS.
|
||||
WRITE MEMBER-RECORD.
|
||||
|
||||
* NEW: 7805 - Active Gold, edge case transaction target
|
||||
MOVE 6222021234567805 TO MEM-ID.
|
||||
MOVE 'SUN BA' TO MEM-NAME.
|
||||
MOVE 60000.00 TO MEM-CREDIT-LIMIT.
|
||||
MOVE 'G' TO MEM-TYPE.
|
||||
MOVE 'A' TO MEM-STATUS.
|
||||
MOVE 5000.00 TO MEM-BALANCE.
|
||||
MOVE 1000.00 TO MEM-MIN-PAYMENT.
|
||||
MOVE 'HANGZHOU ROAD NO.6' TO MEM-ADDRESS.
|
||||
WRITE MEMBER-RECORD.
|
||||
|
||||
* NEW: 7806 - Active Platinum, very high limit
|
||||
MOVE 6222021234567806 TO MEM-ID.
|
||||
MOVE 'ZHOU JIU' TO MEM-NAME.
|
||||
MOVE 200000.00 TO MEM-CREDIT-LIMIT.
|
||||
MOVE 'P' TO MEM-TYPE.
|
||||
MOVE 'A' TO MEM-STATUS.
|
||||
MOVE 80000.00 TO MEM-BALANCE.
|
||||
MOVE 16000.00 TO MEM-MIN-PAYMENT.
|
||||
MOVE 'CHENGDU ROAD NO.7' TO MEM-ADDRESS.
|
||||
WRITE MEMBER-RECORD.
|
||||
|
||||
* NEW: 7807 - Active Standard, low limit cash-advance heavy
|
||||
MOVE 6222021234567807 TO MEM-ID.
|
||||
MOVE 'WU SHI' TO MEM-NAME.
|
||||
MOVE 15000.00 TO MEM-CREDIT-LIMIT.
|
||||
MOVE 'S' TO MEM-TYPE.
|
||||
MOVE 'A' TO MEM-STATUS.
|
||||
MOVE 3000.00 TO MEM-BALANCE.
|
||||
MOVE 500.00 TO MEM-MIN-PAYMENT.
|
||||
MOVE 'WUHAN ROAD NO.8' TO MEM-ADDRESS.
|
||||
WRITE MEMBER-RECORD.
|
||||
|
||||
* 28 TRANSACTIONS
|
||||
2000-GEN-TRANSACTIONS.
|
||||
* CARD 7800 - 5 transactions (normal usage mix)
|
||||
MOVE 6222021234567800 TO TX-CARD-NO.
|
||||
MOVE 20260501 TO TX-DATE.
|
||||
MOVE 'P' TO TX-TYPE.
|
||||
MOVE 1280.50 TO TX-AMOUNT.
|
||||
MOVE 'CNY' TO TX-CURRENCY.
|
||||
MOVE 'SUPERMARKET A' TO TX-MERCHANT.
|
||||
MOVE 5411 TO TX-MCC.
|
||||
MOVE 00 TO TX-INSTALL.
|
||||
MOVE SPACES TO TX-ATM-ID.
|
||||
MOVE 0 TO TX-FEE-RATE.
|
||||
WRITE TX-RECORD.
|
||||
|
||||
MOVE 20260505 TO TX-DATE.
|
||||
MOVE 'P' TO TX-TYPE.
|
||||
MOVE 3500.00 TO TX-AMOUNT.
|
||||
MOVE 'CNY' TO TX-CURRENCY.
|
||||
MOVE 'ELECTRONICS B' TO TX-MERCHANT.
|
||||
MOVE 5732 TO TX-MCC.
|
||||
MOVE 06 TO TX-INSTALL.
|
||||
MOVE SPACES TO TX-ATM-ID.
|
||||
MOVE 0 TO TX-FEE-RATE.
|
||||
WRITE TX-RECORD.
|
||||
|
||||
MOVE 20260510 TO TX-DATE.
|
||||
MOVE 'C' TO TX-TYPE.
|
||||
MOVE 2000.00 TO TX-AMOUNT.
|
||||
MOVE 'CNY' TO TX-CURRENCY.
|
||||
MOVE 'ATM-001' TO TX-MERCHANT.
|
||||
MOVE 0 TO TX-MCC.
|
||||
MOVE 0 TO TX-INSTALL.
|
||||
MOVE 'ATM0000001' TO TX-ATM-ID.
|
||||
MOVE 0.50 TO TX-FEE-RATE.
|
||||
WRITE TX-RECORD.
|
||||
|
||||
MOVE 20260515 TO TX-DATE.
|
||||
MOVE 'P' TO TX-TYPE.
|
||||
MOVE 850.20 TO TX-AMOUNT.
|
||||
MOVE 'CNY' TO TX-CURRENCY.
|
||||
MOVE 'RESTAURANT C' TO TX-MERCHANT.
|
||||
MOVE 5812 TO TX-MCC.
|
||||
MOVE 00 TO TX-INSTALL.
|
||||
MOVE SPACES TO TX-ATM-ID.
|
||||
MOVE 0 TO TX-FEE-RATE.
|
||||
WRITE TX-RECORD.
|
||||
|
||||
MOVE 20260520 TO TX-DATE.
|
||||
MOVE 'R' TO TX-TYPE.
|
||||
MOVE -1280.50 TO TX-AMOUNT.
|
||||
MOVE 'CNY' TO TX-CURRENCY.
|
||||
MOVE 'SUPERMARKET A' TO TX-MERCHANT.
|
||||
MOVE 5411 TO TX-MCC.
|
||||
MOVE 00 TO TX-INSTALL.
|
||||
MOVE SPACES TO TX-ATM-ID.
|
||||
MOVE 0 TO TX-FEE-RATE.
|
||||
WRITE TX-RECORD.
|
||||
|
||||
* CARD 7801 - 5 transactions (high limit, installment, cash advance, refund)
|
||||
MOVE 6222021234567801 TO TX-CARD-NO.
|
||||
MOVE 20260503 TO TX-DATE.
|
||||
MOVE 'P' TO TX-TYPE.
|
||||
MOVE 15000.00 TO TX-AMOUNT.
|
||||
MOVE 'CNY' TO TX-CURRENCY.
|
||||
MOVE 'FURNITURE D' TO TX-MERCHANT.
|
||||
MOVE 5712 TO TX-MCC.
|
||||
MOVE 12 TO TX-INSTALL.
|
||||
MOVE SPACES TO TX-ATM-ID.
|
||||
MOVE 0 TO TX-FEE-RATE.
|
||||
WRITE TX-RECORD.
|
||||
|
||||
MOVE 20260518 TO TX-DATE.
|
||||
MOVE 'P' TO TX-TYPE.
|
||||
MOVE 2200.00 TO TX-AMOUNT.
|
||||
MOVE 'CNY' TO TX-CURRENCY.
|
||||
MOVE 'HOTEL E' TO TX-MERCHANT.
|
||||
MOVE 7011 TO TX-MCC.
|
||||
MOVE 00 TO TX-INSTALL.
|
||||
MOVE SPACES TO TX-ATM-ID.
|
||||
MOVE 0 TO TX-FEE-RATE.
|
||||
WRITE TX-RECORD.
|
||||
|
||||
MOVE 20260522 TO TX-DATE.
|
||||
MOVE 'C' TO TX-TYPE.
|
||||
MOVE 5000.00 TO TX-AMOUNT.
|
||||
MOVE 'CNY' TO TX-CURRENCY.
|
||||
MOVE 'ATM-003' TO TX-MERCHANT.
|
||||
MOVE 0 TO TX-MCC.
|
||||
MOVE 0 TO TX-INSTALL.
|
||||
MOVE 'ATM0000003' TO TX-ATM-ID.
|
||||
MOVE 0.50 TO TX-FEE-RATE.
|
||||
WRITE TX-RECORD.
|
||||
|
||||
MOVE 20260523 TO TX-DATE.
|
||||
MOVE 'R' TO TX-TYPE.
|
||||
MOVE -500.00 TO TX-AMOUNT.
|
||||
MOVE 'CNY' TO TX-CURRENCY.
|
||||
MOVE 'FURNITURE D' TO TX-MERCHANT.
|
||||
MOVE 5712 TO TX-MCC.
|
||||
MOVE 00 TO TX-INSTALL.
|
||||
MOVE SPACES TO TX-ATM-ID.
|
||||
MOVE 0 TO TX-FEE-RATE.
|
||||
WRITE TX-RECORD.
|
||||
|
||||
MOVE 20260525 TO TX-DATE.
|
||||
MOVE 'C' TO TX-TYPE.
|
||||
MOVE 3000.00 TO TX-AMOUNT.
|
||||
MOVE 'CNY' TO TX-CURRENCY.
|
||||
MOVE 'ATM-005' TO TX-MERCHANT.
|
||||
MOVE 0 TO TX-MCC.
|
||||
MOVE 0 TO TX-INSTALL.
|
||||
MOVE 'ATM0000005' TO TX-ATM-ID.
|
||||
MOVE 0.50 TO TX-FEE-RATE.
|
||||
WRITE TX-RECORD.
|
||||
|
||||
* CARD 7802 - 3 transactions (student: small purchases + cash advance)
|
||||
MOVE 6222021234567802 TO TX-CARD-NO.
|
||||
MOVE 20260508 TO TX-DATE.
|
||||
MOVE 'P' TO TX-TYPE.
|
||||
MOVE 500.00 TO TX-AMOUNT.
|
||||
MOVE 'CNY' TO TX-CURRENCY.
|
||||
MOVE 'PHARMACY F' TO TX-MERCHANT.
|
||||
MOVE 5912 TO TX-MCC.
|
||||
MOVE 00 TO TX-INSTALL.
|
||||
MOVE SPACES TO TX-ATM-ID.
|
||||
MOVE 0 TO TX-FEE-RATE.
|
||||
WRITE TX-RECORD.
|
||||
|
||||
MOVE 20260511 TO TX-DATE.
|
||||
MOVE 'P' TO TX-TYPE.
|
||||
MOVE 300.00 TO TX-AMOUNT.
|
||||
MOVE 'CNY' TO TX-CURRENCY.
|
||||
MOVE 'BOOKSTORE H' TO TX-MERCHANT.
|
||||
MOVE 5942 TO TX-MCC.
|
||||
MOVE 00 TO TX-INSTALL.
|
||||
MOVE SPACES TO TX-ATM-ID.
|
||||
MOVE 0 TO TX-FEE-RATE.
|
||||
WRITE TX-RECORD.
|
||||
|
||||
MOVE 20260514 TO TX-DATE.
|
||||
MOVE 'C' TO TX-TYPE.
|
||||
MOVE 1000.00 TO TX-AMOUNT.
|
||||
MOVE 'CNY' TO TX-CURRENCY.
|
||||
MOVE 'ATM-004' TO TX-MERCHANT.
|
||||
MOVE 0 TO TX-MCC.
|
||||
MOVE 0 TO TX-INSTALL.
|
||||
MOVE 'ATM0000004' TO TX-ATM-ID.
|
||||
MOVE 0.50 TO TX-FEE-RATE.
|
||||
WRITE TX-RECORD.
|
||||
|
||||
* CARD 7803 - 1 transaction (rejected: frozen)
|
||||
MOVE 6222021234567803 TO TX-CARD-NO.
|
||||
MOVE 20260512 TO TX-DATE.
|
||||
MOVE 'C' TO TX-TYPE.
|
||||
MOVE 10000.00 TO TX-AMOUNT.
|
||||
MOVE 'CNY' TO TX-CURRENCY.
|
||||
MOVE 'ATM-002' TO TX-MERCHANT.
|
||||
MOVE 0 TO TX-MCC.
|
||||
MOVE 0 TO TX-INSTALL.
|
||||
MOVE 'ATM0000002' TO TX-ATM-ID.
|
||||
MOVE 0.50 TO TX-FEE-RATE.
|
||||
WRITE TX-RECORD.
|
||||
|
||||
* CARD 7805 - 5 transactions (edge case validations)
|
||||
* Tx 1: rejected - INVALID-MERCHANT (empty merchant name)
|
||||
MOVE 6222021234567805 TO TX-CARD-NO.
|
||||
MOVE 20260502 TO TX-DATE.
|
||||
MOVE 'P' TO TX-TYPE.
|
||||
MOVE 1000.00 TO TX-AMOUNT.
|
||||
MOVE 'CNY' TO TX-CURRENCY.
|
||||
MOVE SPACES TO TX-MERCHANT.
|
||||
MOVE 5411 TO TX-MCC.
|
||||
MOVE 00 TO TX-INSTALL.
|
||||
MOVE SPACES TO TX-ATM-ID.
|
||||
MOVE 0 TO TX-FEE-RATE.
|
||||
WRITE TX-RECORD.
|
||||
|
||||
* Tx 2: rejected - INVALID-CARD (card number = 0)
|
||||
MOVE 0000000000000000 TO TX-CARD-NO.
|
||||
MOVE 20260504 TO TX-DATE.
|
||||
MOVE 'P' TO TX-TYPE.
|
||||
MOVE 2000.00 TO TX-AMOUNT.
|
||||
MOVE 'CNY' TO TX-CURRENCY.
|
||||
MOVE 'STORE K' TO TX-MERCHANT.
|
||||
MOVE 5411 TO TX-MCC.
|
||||
MOVE 00 TO TX-INSTALL.
|
||||
MOVE SPACES TO TX-ATM-ID.
|
||||
MOVE 0 TO TX-FEE-RATE.
|
||||
WRITE TX-RECORD.
|
||||
|
||||
* Tx 3: rejected - INVALID-AMOUNT (purchase with zero amount)
|
||||
MOVE 6222021234567805 TO TX-CARD-NO.
|
||||
MOVE 20260506 TO TX-DATE.
|
||||
MOVE 'P' TO TX-TYPE.
|
||||
MOVE 0.00 TO TX-AMOUNT.
|
||||
MOVE 'CNY' TO TX-CURRENCY.
|
||||
MOVE 'STORE L' TO TX-MERCHANT.
|
||||
MOVE 5411 TO TX-MCC.
|
||||
MOVE 00 TO TX-INSTALL.
|
||||
MOVE SPACES TO TX-ATM-ID.
|
||||
MOVE 0 TO TX-FEE-RATE.
|
||||
WRITE TX-RECORD.
|
||||
|
||||
* Tx 4: rejected - INVALID-AMOUNT (purchase with negative amount)
|
||||
MOVE 6222021234567805 TO TX-CARD-NO.
|
||||
MOVE 20260509 TO TX-DATE.
|
||||
MOVE 'P' TO TX-TYPE.
|
||||
MOVE -500.00 TO TX-AMOUNT.
|
||||
MOVE 'CNY' TO TX-CURRENCY.
|
||||
MOVE 'STORE M' TO TX-MERCHANT.
|
||||
MOVE 5411 TO TX-MCC.
|
||||
MOVE 00 TO TX-INSTALL.
|
||||
MOVE SPACES TO TX-ATM-ID.
|
||||
MOVE 0 TO TX-FEE-RATE.
|
||||
WRITE TX-RECORD.
|
||||
|
||||
* Tx 5: rejected - INVALID-REFUND (refund with positive amount)
|
||||
MOVE 6222021234567805 TO TX-CARD-NO.
|
||||
MOVE 20260513 TO TX-DATE.
|
||||
MOVE 'R' TO TX-TYPE.
|
||||
MOVE 300.00 TO TX-AMOUNT.
|
||||
MOVE 'CNY' TO TX-CURRENCY.
|
||||
MOVE 'STORE N' TO TX-MERCHANT.
|
||||
MOVE 5411 TO TX-MCC.
|
||||
MOVE 00 TO TX-INSTALL.
|
||||
MOVE SPACES TO TX-ATM-ID.
|
||||
MOVE 0 TO TX-FEE-RATE.
|
||||
WRITE TX-RECORD.
|
||||
|
||||
* Tx 6: valid transaction for 7805 (so card appears in billing)
|
||||
MOVE 6222021234567805 TO TX-CARD-NO.
|
||||
MOVE 20260519 TO TX-DATE.
|
||||
MOVE 'P' TO TX-TYPE.
|
||||
MOVE 2000.00 TO TX-AMOUNT.
|
||||
MOVE 'CNY' TO TX-CURRENCY.
|
||||
MOVE 'DELIVERY N' TO TX-MERCHANT.
|
||||
MOVE 5969 TO TX-MCC.
|
||||
MOVE 00 TO TX-INSTALL.
|
||||
MOVE SPACES TO TX-ATM-ID.
|
||||
MOVE 0 TO TX-FEE-RATE.
|
||||
WRITE TX-RECORD.
|
||||
|
||||
* CARD 7806 - 3 transactions (high limit edge cases)
|
||||
* Tx 1: rejected - OUT-OF-MONTH (April date, run month is May)
|
||||
MOVE 6222021234567806 TO TX-CARD-NO.
|
||||
MOVE 20260428 TO TX-DATE.
|
||||
MOVE 'P' TO TX-TYPE.
|
||||
MOVE 3000.00 TO TX-AMOUNT.
|
||||
MOVE 'CNY' TO TX-CURRENCY.
|
||||
MOVE 'TRAVEL O' TO TX-MERCHANT.
|
||||
MOVE 4722 TO TX-MCC.
|
||||
MOVE 00 TO TX-INSTALL.
|
||||
MOVE SPACES TO TX-ATM-ID.
|
||||
MOVE 0 TO TX-FEE-RATE.
|
||||
WRITE TX-RECORD.
|
||||
|
||||
* Tx 2: valid purchase for 7806
|
||||
MOVE 6222021234567806 TO TX-CARD-NO.
|
||||
MOVE 20260521 TO TX-DATE.
|
||||
MOVE 'P' TO TX-TYPE.
|
||||
MOVE 2500.00 TO TX-AMOUNT.
|
||||
MOVE 'CNY' TO TX-CURRENCY.
|
||||
MOVE 'JEWELRY P' TO TX-MERCHANT.
|
||||
MOVE 5944 TO TX-MCC.
|
||||
MOVE 00 TO TX-INSTALL.
|
||||
MOVE SPACES TO TX-ATM-ID.
|
||||
MOVE 0 TO TX-FEE-RATE.
|
||||
WRITE TX-RECORD.
|
||||
|
||||
* Tx 3: valid cash advance for 7806
|
||||
MOVE 6222021234567806 TO TX-CARD-NO.
|
||||
MOVE 20260525 TO TX-DATE.
|
||||
MOVE 'C' TO TX-TYPE.
|
||||
MOVE 8000.00 TO TX-AMOUNT.
|
||||
MOVE 'CNY' TO TX-CURRENCY.
|
||||
MOVE 'ATM-006' TO TX-MERCHANT.
|
||||
MOVE 0 TO TX-MCC.
|
||||
MOVE 0 TO TX-INSTALL.
|
||||
MOVE 'ATM0000006' TO TX-ATM-ID.
|
||||
MOVE 0.50 TO TX-FEE-RATE.
|
||||
WRITE TX-RECORD.
|
||||
|
||||
* CARD 7807 - 4 transactions (low limit cash-advance heavy)
|
||||
* Tx 1: cash advance 1
|
||||
MOVE 6222021234567807 TO TX-CARD-NO.
|
||||
MOVE 20260502 TO TX-DATE.
|
||||
MOVE 'C' TO TX-TYPE.
|
||||
MOVE 500.00 TO TX-AMOUNT.
|
||||
MOVE 'CNY' TO TX-CURRENCY.
|
||||
MOVE 'ATM-007' TO TX-MERCHANT.
|
||||
MOVE 0 TO TX-MCC.
|
||||
MOVE 0 TO TX-INSTALL.
|
||||
MOVE 'ATM0000007' TO TX-ATM-ID.
|
||||
MOVE 0.50 TO TX-FEE-RATE.
|
||||
WRITE TX-RECORD.
|
||||
|
||||
* Tx 2: cash advance 2 (different ATM)
|
||||
MOVE 20260507 TO TX-DATE.
|
||||
MOVE 'C' TO TX-TYPE.
|
||||
MOVE 300.00 TO TX-AMOUNT.
|
||||
MOVE 'CNY' TO TX-CURRENCY.
|
||||
MOVE 'ATM-008' TO TX-MERCHANT.
|
||||
MOVE 0 TO TX-MCC.
|
||||
MOVE 0 TO TX-INSTALL.
|
||||
MOVE 'ATM0000008' TO TX-ATM-ID.
|
||||
MOVE 0.50 TO TX-FEE-RATE.
|
||||
WRITE TX-RECORD.
|
||||
|
||||
* Tx 3: cash advance 3 (same ATM as tx 1)
|
||||
MOVE 20260511 TO TX-DATE.
|
||||
MOVE 'C' TO TX-TYPE.
|
||||
MOVE 200.00 TO TX-AMOUNT.
|
||||
MOVE 'CNY' TO TX-CURRENCY.
|
||||
MOVE 'ATM-007' TO TX-MERCHANT.
|
||||
MOVE 0 TO TX-MCC.
|
||||
MOVE 0 TO TX-INSTALL.
|
||||
MOVE 'ATM0000007' TO TX-ATM-ID.
|
||||
MOVE 0.50 TO TX-FEE-RATE.
|
||||
WRITE TX-RECORD.
|
||||
|
||||
* Tx 4: purchase mixed with cash advances
|
||||
MOVE 20260520 TO TX-DATE.
|
||||
MOVE 'P' TO TX-TYPE.
|
||||
MOVE 800.00 TO TX-AMOUNT.
|
||||
MOVE 'CNY' TO TX-CURRENCY.
|
||||
MOVE 'GROCERY Q' TO TX-MERCHANT.
|
||||
MOVE 5411 TO TX-MCC.
|
||||
MOVE 00 TO TX-INSTALL.
|
||||
MOVE SPACES TO TX-ATM-ID.
|
||||
MOVE 0 TO TX-FEE-RATE.
|
||||
WRITE TX-RECORD.
|
||||
|
||||
* CARD 9999999999999999 - 1 transaction (rejected: not found)
|
||||
MOVE 9999999999999999 TO TX-CARD-NO.
|
||||
MOVE 20260515 TO TX-DATE.
|
||||
MOVE 'P' TO TX-TYPE.
|
||||
MOVE 1000.00 TO TX-AMOUNT.
|
||||
MOVE 'CNY' TO TX-CURRENCY.
|
||||
MOVE 'ONLINE R' TO TX-MERCHANT.
|
||||
MOVE 5969 TO TX-MCC.
|
||||
MOVE 00 TO TX-INSTALL.
|
||||
MOVE SPACES TO TX-ATM-ID.
|
||||
MOVE 0 TO TX-FEE-RATE.
|
||||
WRITE TX-RECORD.
|
||||
|
||||
3000-GEN-RATES.
|
||||
MOVE 'C' TO RATE-TYPE.
|
||||
MOVE 0.0005 TO RATE-PCT.
|
||||
MOVE 20250101 TO RATE-EFF-DATE.
|
||||
WRITE RATE-RECORD.
|
||||
|
||||
MOVE 'O' TO RATE-TYPE.
|
||||
MOVE 0.0500 TO RATE-PCT.
|
||||
MOVE 20250101 TO RATE-EFF-DATE.
|
||||
WRITE RATE-RECORD.
|
||||
Reference in New Issue
Block a user