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.