****************************************************************** IDENTIFICATION DIVISION. PROGRAM-ID. PRG1. AUTHOR. WINDSOR. DATE-WRITTEN. SEPTEMBER 8, 2003. DATE-COMPILED. ****************************************************************** ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT CUSTOMER-FILE ASSIGN TO CUSTOMER. SELECT CARDS-FILE ASSIGN TO CARDS. SELECT ITEMS-FILE ASSIGN TO ITEMS. SELECT TRANSACTIONS-FILE ASSIGN TO TERROR. SELECT REPORT-FILE ASSIGN TO UT-S-REPORT. ****************************************************************** DATA DIVISION. FILE SECTION. FD CUSTOMER-FILE RECORDING MODE IS F RECORD CONTAINS 175 CHARACTERS LABEL RECORDS ARE STANDARD. 01 PIC X(175). FD CARDS-FILE RECORDING MODE IS F RECORD CONTAINS 98 CHARACTERS LABEL RECORDS ARE STANDARD. 01 PIC X(98). FD ITEMS-FILE RECORDING MODE IS F RECORD CONTAINS 56 CHARACTERS LABEL RECORDS ARE STANDARD. 01 PIC X(56). FD TRANSACTIONS-FILE RECORDING MODE IS F RECORD CONTAINS 80 CHARACTERS LABEL RECORDS ARE STANDARD. 01 PIC X(80). FD REPORT-FILE RECORDING MODE IS F LABEL RECORDS ARE OMITTED. 01 PRINT-LINE PIC X(133). *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ WORKING-STORAGE SECTION. 01 WORKING-VARIABLES. 05 EOF-TRANS-WS PIC XXX VALUE 'NO'. 05 EOF-CUST-WS PIC XXX VALUE 'NO'. 05 EOF-CARDS-WS PIC XXX VALUE 'NO'. 05 EOF-ITEMS-WS PIC XXX VALUE 'NO'. 05 CC-NO-WS PIC XXX VALUE 'NO'. 05 CUST-NO-WS PIC XXX VALUE 'NO'. 05 ITEM-NO-NOT-ALPHA-WS PIC XXX VALUE 'NO'. 05 MONTH-NOT-NUMERIC-WS PIC XXX VALUE 'NO'. 05 DAY-NOT-NUMERIC-WS PIC XXX VALUE 'NO'. 05 YEAR-NOT-NUMERIC-WS PIC XXX VALUE 'NO'. 05 MONTH-NOT-UNSIGNED-WS PIC XXX VALUE 'NO'. 05 DAY-NOT-UNSIGNED-WS PIC XXX VALUE 'NO'. 05 YEAR-NOT-UNSIGNED-WS PIC XXX VALUE 'NO'. 05 YEAR-FUTURE-WS PIC XXX VALUE 'NO'. 05 VALID-DAY-WS PIC XXX VALUE 'NO'. 05 DATE-IS-GOOD-WS PIC XXX VALUE 'NO'. 05 SUPPRESS-REC-NUM-WS PIC XXX VALUE 'NO'. 05 SUPPRESS-NAME-VALUE-WS PIC XXX VALUE 'NO'. 05 C-DATE-WS. 10 C-MONTH-WS PIC 99 VALUE ZERO. 10 C-DAY-WS PIC 99 VALUE ZERO. 10 C-YEAR-WS PIC 9999 VALUE ZERO. 05 C-INT-DATE-WS PIC 9(8) VALUE ZERO. 05 TRANS-INT-DATE-WS PIC 9(8) VALUE ZERO. 05 TRANS-INT-DATE-GROUP-WS. 10 TRANS-INT-YEAR-WS PIC 9999 VALUE ZERO. 10 TRANS-INT-MONTH-WS PIC 99 VALUE ZERO. 10 TRANS-INT-DAY-WS PIC 99 VALUE ZERO. 05 THIRTY-DAY-OLD-WS PIC 9(8) VALUE ZERO. 05 FIELD-NAME-WS PIC X(21) VALUE SPACES. 05 FIELD-VALUE-WS PIC X(16) VALUE SPACES. 05 CARDS-CUST-NO-WS PIC 9(5) VALUE ZERO. 05 CARDS-EXP-DATE-WS. 10 CARDS-EXP-MO-WS PIC 99 VALUE ZERO. 10 CARDS-EXP-YR-WS PIC 9999 VALUE ZERO. 05 LEAP-YEAR-WS PIC 9999. 05 LEAP-YEAR-DIV-WS PIC 9999. 05 LEAP-YEAR-TEST1-WS PIC 9999. 05 LEAP-YEAR-TEST2-WS PIC 9999. 05 CUST-C-CODE-WS PIC X VALUE SPACES. 05 CUST-C-LIMIT-WS PIC 9(8)V99 VALUE ZERO. 05 CUST-C-BALANCE-WS PIC S9(8)V99 VALUE ZERO. 05 TRANS-INT-INTEGER-WS PIC 9(10) VALUE ZERO. 05 C-INT-INTEGER-WS PIC 9(10) VALUE ZERO. 01 SEND-DATE PIC 9(6). 01 HOLD-DATE-WS. 05 YEAR-WS PIC 9999. 05 MONTH-WS PIC 99. 05 DAY-WS PIC 99. 01 WORKING-ACCUMULATORS. 05 LINE-COUNT-WS PIC 999 VALUE 99. 05 SUB-WS PIC 99 VALUE ZERO. 05 CC-SPACES-CTR-WS PIC 999 VALUE ZERO. 05 CUST-SPACES-CTR-WS PIC 999 VALUE ZERO. 05 PAGE-NUM-WS PIC 999 VALUE ZERO. 05 REC-NUM-WS PIC 9999 VALUE ZERO. 05 CUST-NUM-WS PIC 999 VALUE ZERO. 05 CARDS-NUM-WS PIC 999 VALUE ZERO. 05 ITEMS-NUM-WS PIC 999 VALUE ZERO. 05 CC-ERROR-COUNTER-WS PIC 9999 VALUE ZERO. 05 CUST-ERROR-COUNTER-WS PIC 9999 VALUE ZERO. 05 ITEMS-ERROR-COUNTER-WS PIC 9999 VALUE ZERO. 05 DATE-ERROR-COUNTER-WS PIC 9999 VALUE ZERO. 05 TOTAL-ERROR-COUNTER-WS PIC 9999 VALUE ZERO. 01 TRANS-RECORD-FIELDS. 05 TRANS-CC-CUST-NO-IN PIC X(16). 05 TRANS-CC-CUST-NO-ARRAY REDEFINES TRANS-CC-CUST-NO-IN OCCURS 16 TIMES PIC X. 88 TRANS-NUMERIC VALUE '0' THRU '9'. 88 TRANS-NEGATIVE VALUE '}', 'J' THRU 'R'. 88 TRANS-POSITIVE VALUE '{', 'A' THRU 'I'. 05 TRANS-CC-CUST-NO-GROUP REDEFINES TRANS-CC-CUST-NO-IN. 10 TRANS-DIGITS-IN PIC X(11). 10 TRANS-CUST-NO-IN PIC X(5). 05 TRANS-ITEM-NO-IN. 10 TRANS-ITEM-A-IN-X PIC X(4). 10 TRANS-ITEM-A-IN-A REDEFINES TRANS-ITEM-A-IN-X OCCURS 4 TIMES PIC X. 88 ITEM-ALPHABETIC VALUE 'A' THRU 'Z'. 10 TRANS-ITEM-N-IN-X PIC X(4). 10 TRANS-ITEM-N-IN-9 REDEFINES TRANS-ITEM-N-IN-X PIC S9(4). 10 TRANS-ITEM-N-IN-U REDEFINES TRANS-ITEM-N-IN-X. 15 GROUP-ITEM-N PIC X(3). 15 GROUP-ITEM-N-U PIC X. 88 ITEM-NEGATIVE VALUE '}', 'J' THRU 'R'. 88 ITEM-POSITIVE VALUE '{', 'A' THRU 'I'. 05 TRANS-DATE. 10 TRANS-MONTH-IN-X PIC XX. 10 TRANS-MONTH-IN-9 REDEFINES TRANS-MONTH-IN-X PIC S99. 88 VALID-MONTH VALUE 01 THRU 12. 10 TRANS-MONTH-IN-U REDEFINES TRANS-MONTH-IN-X. 15 GROUP-MONTH PIC X. 15 GROUP-MONTH-U PIC X. 88 MONTH-NEGATIVE VALUE '}', 'J' THRU 'R'. 88 MONTH-POSITIVE VALUE '{', 'A' THRU 'I'. 10 TRANS-DAY-IN-X PIC XX. 10 TRANS-DAY-IN-9 REDEFINES TRANS-DAY-IN-X PIC S99. 88 VALID-DAY VALUE 01 THRU 31. 10 TRANS-DAY-IN-U REDEFINES TRANS-DAY-IN-X. 15 GROUP-DAY PIC X. 15 GROUP-DAY-U PIC X. 88 DAY-NEGATIVE VALUE '}', 'J' THRU 'R'. 88 DAY-POSITIVE VALUE '{', 'A' THRU 'I'. 10 TRANS-YEAR-IN-X PIC XXXX. 10 TRANS-YEAR-IN-9 REDEFINES TRANS-YEAR-IN-X PIC S9(4). 10 TRANS-YEAR-IN-U REDEFINES TRANS-YEAR-IN-X. 15 GROUP-YEAR PIC X(3). 15 GROUP-YEAR-U PIC X. 88 YEAR-NEGATIVE VALUE '}', 'J' THRU 'R'. 88 YEAR-POSITIVE VALUE '{', 'A' THRU 'I'. 05 TRANS-QTY-IN PIC 9(4). 01 CUST-TABLE. 05 CUST-RECORD-FIELDS OCCURS 0 TO 150 TIMES DEPENDING ON CUST-NUM-WS ASCENDING KEY IS CUST-NO-IN INDEXED BY CUST-INDEX. 10 CUST-NO-IN PIC 9(5). 10 CUST-LAST-NAME-IN PIC X(15). 10 CUST-FIRST-NAME-IN PIC X(15). 10 CUST-MIDDLE-NAME-IN PIC X(15). 10 CUST-ADDRESS-IN PIC X(30). 10 CUST-CITY-IN PIC X(20). 10 CUST-STATE-IN PIC X(2). 10 CUST-ZIP-IN PIC X(10). 10 CUST-C-CODE-IN PIC X. 10 CUST-C-LIMIT-IN PIC 9(8)V99. 10 CUST-C-BALANCE-IN PIC S9(8)V99. 10 CUST-YTD-IN PIC 9(8)V99. 10 CUST-STATEMENT-IN PIC X(8). 10 CUST-PURCHASE-IN PIC X(8). 10 CUST-C-PURCHASE-IN PIC X(8). 10 CUST-PAYMENT-IN PIC X(8). 01 CARDS-TABLE. 05 CARDS-RECORD-FIELDS OCCURS 0 TO 500 TIMES DEPENDING ON CARDS-NUM-WS ASCENDING KEY IS CARDS-CC-NO-IN INDEXED BY CARDS-INDEX. 10 CARDS-CC-NO-IN PIC 9(16). 10 CARDS-CUST-NO-IN PIC 9(5). 10 CARDS-CC-NAME-IN PIC X(16). 10 CARDS-BANK-NAME-IN PIC X(35). 10 CARDS-CITY-IN PIC X(20). 10 CARDS-EXP-DATE-IN. 15 CARDS-EXP-MO-IN PIC 99. 15 CARDS-EXP-YR-IN PIC 9999. 01 ITEMS-TABLE. 05 ITEMS-RECORD-FIELDS OCCURS 0 TO 200 TIMES DEPENDING ON ITEMS-NUM-WS ASCENDING KEY IS ITEMS-NO-IN INDEXED BY ITEMS-INDEX. 10 ITEMS-NO-IN PIC X(8). 10 ITEMS-DESCRIPT-IN PIC X(40). 10 ITEMS-PRICE-IN PIC 9(6)V99. 01 DAYS-SETUP. 05 PIC X(24) VALUE '312831303130313130313031'. 01 DAYS-IN-MONTH-TABLE REDEFINES DAYS-SETUP. 05 DAYS-TABLE OCCURS 12 TIMES INDEXED BY DAYS-INDEX. 10 DAYS-IN-MONTH PIC 99. 01 ERROR-MESSAGE-SETUP. 05 ERROR-MESSAGE-1. 10 PIC X(40) VALUE 'Trans-CC-Cust-No-In Field Is Neither A C'. 10 PIC X(43) VALUE 'redit Card Nor Customer Number.'. 05 PIC X(83) VALUE 'Credit Card Number Is Not Numeric.'. 05 PIC X(83) VALUE 'Credit Card Number Is Not Unsigned, It Is Negative.'. 05 PIC X(83) VALUE 'Credit Card Number Is Not Unsigned, It Is Positive.'. 05 ERROR-MESSAGE-5. 10 PIC X(40) VALUE 'Credit Card Number Is Not A Valid Number'. 10 PIC X(43) VALUE ' In The Credit Card File.'. 05 ERROR-MESSAGE-6. 10 PIC X(40) VALUE 'Credit Card Num Is Valid, But Customer N'. 10 PIC X(43) VALUE 'um Does Not Match A Num In Customer File.'. 05 PIC X(83) VALUE 'Credit Card Number Is Valid, But Card Has Expired.'. 05 PIC X(83) VALUE 'Customer Number Is Not Numeric.'. 05 PIC X(83) VALUE 'Customer Number Is Not Unsigned, It Is Negative.'. 05 PIC X(83) VALUE 'Customer Number Is Not Unsigned, It Is Positive.'. 05 ERROR-MESSAGE-11. 10 PIC X(40) VALUE 'Customer Number Is Not A Valid Number In'. 10 PIC X(43) VALUE ' The Customer File.'. 05 ERROR-MESSAGE-12. 10 PIC X(40) VALUE 'Customer Number Is Valid, But Is Not Des'. 10 PIC X(43) VALUE 'ignated As A "Credit" Customer.'. 05 PIC X(83) VALUE 'Customer Has Exceeded His/Her Credit Limit.'. 05 PIC X(83) VALUE 'Item Number First 4 Characters Are Not Alphabetic.'. 05 PIC X(83) VALUE 'Item Number Last 4 Characters Are Not Numeric.'. 05 ERROR-MESSAGE-16. 10 PIC X(40) VALUE 'Item Number Last 4 Characters Are Not Un'. 10 PIC X(43) VALUE 'signed, They Are Negative.'. 05 ERROR-MESSAGE-17. 10 PIC X(40) VALUE 'Item Number Last 4 Characters Are Not Un'. 10 PIC X(43) VALUE 'signed, They Are Positive.'. 05 ERROR-MESSAGE-18. 10 PIC X(40) VALUE 'Item Number Does Not Match An Item Numbe'. 10 PIC X(43) VALUE 'r In The Item File.'. 05 PIC X(83) VALUE 'Transaction Date Month Is Not Numeric.'. 05 ERROR-MESSAGE-20. 10 PIC X(40) VALUE 'Transaction Date Month Is Not Unsigned, '. 10 PIC X(43) VALUE 'It Is Negative .'. 05 ERROR-MESSAGE-21. 10 PIC X(40) VALUE 'Transaction Date Month Is Not Unsigned, '. 10 PIC X(43) VALUE 'It Is Positive .'. 05 PIC X(83) VALUE 'Transaction Date Month Is Not A Valid Month.'. 05 PIC X(83) VALUE 'Transaction Date Day Is Not Numeric.'. 05 ERROR-MESSAGE-24. 10 PIC X(40) VALUE 'Transaction Date Day Is Not Unsigned, It'. 10 PIC X(43) VALUE ' Is Negative .'. 05 ERROR-MESSAGE-25. 10 PIC X(40) VALUE 'Transaction Date Day Is Not Unsigned, It'. 10 PIC X(43) VALUE ' Is Positive .'. 05 PIC X(83) VALUE 'Transaction Date Day Is Not In Range (1-31).'. 05 PIC X(83) VALUE 'Transaction Date Day Is Not Valid For Indicated Month.'. 05 PIC X(83) VALUE 'Transaction Date Year Is Not Numeric.'. 05 ERROR-MESSAGE-29. 10 PIC X(40) VALUE 'Transaction Date Year Is Not Unsigned, I'. 10 PIC X(43) VALUE 't Is Negative.'. 05 ERROR-MESSAGE-30. 10 PIC X(40) VALUE 'Transaction Date Year Is Not Unsigned, I'. 10 PIC X(43) VALUE 't Is Positive.'. 05 PIC X(83) VALUE 'Transaction Date Is Sometime In The Future.'. 05 PIC X(83) VALUE 'Transaction Date Is More Than 30 Days Old.'. 01 ERROR-MESSAGE-TABLE REDEFINES ERROR-MESSAGE-SETUP. 05 ERROR-TABLE OCCURS 32 TIMES INDEXED BY ERROR-POINTER. 10 ERROR-MESSAGE PIC X(83). 01 REPORT-HEADER. 05 CC1 PIC X. 05 PIC X(58) VALUE SPACES. 05 PIC X(16) VALUE 'BCIS Corporation'. 01 REPORT-HEADER2. 05 CC2 PIC X. 05 PIC X(7) VALUE 'Date:'. 05 DATE-OUT. 10 MONTH-OUT PIC 99/. 10 DAY-OUT PIC 99/. 10 YEAR-OUT PIC 9999. 05 PIC X(35) VALUE SPACES. 05 PIC X(72) VALUE 'Transaction Validation Report'. 05 PIC X(5) VALUE 'Page'. 05 PAGE-NUM-OUT PIC ZZ9. 01 REPORT-COLUMN-HEADER. 05 CC3 PIC X. 05 PIC X(6) VALUE 'Record'. 01 REPORT-COLUMN-HEADER2. 05 CC4 PIC X. 05 PIC X(13) VALUE 'Number'. 05 PIC X(20) VALUE 'Field Name'. 05 PIC X(51) VALUE 'Field Value'. 05 PIC X(48) VALUE 'Error Message'. 01 REPORT-COLUMN-HEADER3. 05 CC5 PIC X. 05 PIC X(6) VALUE ALL '-'. 05 PIC XX VALUE SPACES. 05 PIC X(21) VALUE ALL '-'. 05 PIC XX VALUE SPACES. 05 PIC X(16) VALUE ALL '-'. 05 PIC XX VALUE SPACES. 05 PIC X(83) VALUE ALL '-'. 01 DETAIL-LINE. 05 CC6 PIC X. 05 PIC X VALUE SPACES. 05 REC-NUM-OUT PIC X(4). 05 PIC X(3) VALUE SPACES. 05 FIELD-NAME-OUT PIC X(21). 05 PIC XX VALUE SPACES. 05 FIELD-VALUE-OUT PIC X(16). 05 PIC XX VALUE SPACES. 05 ERROR-MESSAGE-OUT PIC X(83). 01 DETAIL-FOOTER. 05 CC7 PIC X. 05 PIC X(52) VALUE SPACES. 05 PIC X(80) VALUE '*** END OF OUTPUT DETAIL ***'. 01 SUMMARY-HEADER. 05 CC8 PIC X. 05 PIC X(7) VALUE 'Date:'. 05 DATE-OUT. 10 SUMMARY-MONTH-OUT PIC 99/. 10 SUMMARY-DAY-OUT PIC 99/. 10 SUMMARY-YEAR-OUT PIC 9999. 05 PIC X(31) VALUE SPACES. 05 PIC X(76) VALUE 'Transaction Validation Summary Report'. 05 PIC X(5) VALUE 'PAGE'. 05 SUMMARY-PAGE-NUM-OUT PIC ZZ9. 01 SUMMARY-PROCESSED-LINE. 05 CC9 PIC X. 05 PIC X(49) VALUE SPACES. 05 PIC X(30) VALUE 'Number of Records Processed'. 05 SUMMARY-REC-NUM-OUT PIC ZZZ9. 01 SUMMARY-COLUMN-HEADER. 05 CC10 PIC X. 05 PIC X(72) VALUE SPACES. 05 PIC X(9) VALUE 'Number of'. 01 SUMMARY-COLUMN-HEADER2. 05 CC11 PIC X. 05 PIC X(47) VALUE SPACES. 05 PIC X(23) VALUE 'Field Validated'. 05 PIC X(14) VALUE 'Error Message'. 01 SUMMARY-COLUMN-HEADER3. 05 CC12 PIC X. 05 PIC X(47) VALUE SPACES. 05 PIC X(20) VALUE ALL '-'. 05 PIC X(3) VALUE SPACES. 05 PIC X(14) VALUE ALL '-'. 01 SUMMARY-CC-TOTAL. 05 CC13 PIC X. 05 PIC X(47) VALUE SPACES. 05 PIC X(28) VALUE 'Credit Card (Number)'. 05 CC-ERROR-COUNTER-OUT PIC ZZZ9. 01 SUMMARY-CUST-TOTAL. 05 CC14 PIC X. 05 PIC X(47) VALUE SPACES. 05 PIC X(28) VALUE 'Customer (Number)'. 05 CUST-ERROR-COUNTER-OUT PIC ZZZ9. 01 SUMMARY-ITEMS-TOTAL. 05 CC15 PIC X. 05 PIC X(47) VALUE SPACES. 05 PIC X(28) VALUE 'Item Number'. 05 ITEMS-ERROR-COUNTER-OUT PIC ZZZ9. 01 SUMMARY-DATE-TOTAL. 05 CC16 PIC X. 05 PIC X(47) VALUE SPACES. 05 PIC X(28) VALUE 'Transaction Date'. 05 DATE-ERROR-COUNTER-OUT PIC ZZZ9. 01 SUMMARY-COLUMN-FOOTER. 05 CC17 PIC X. 05 PIC X(70) VALUE SPACES. 05 PIC X(14) VALUE ALL '-'. 01 SUMMARY-TOTAL. 05 CC18 PIC X. 05 PIC X(47) VALUE SPACES. 05 PIC X(28) VALUE 'TOTAL'. 05 TOTAL-ERROR-COUNTER-OUT PIC ZZZ9. 01 SUMMARY-FOOTER. 05 CC19 PIC X. 05 PIC X(42) VALUE 'This report was prepared by: Lucas Chaney'. 01 REPORT-FOOTER. 05 CC20 PIC X. 05 PIC X(56) VALUE SPACES. 05 PIC X(76) VALUE '*** END OF REPORT ***'. ****************************************************************** PROCEDURE DIVISION. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 100-MAINLINE SECTION. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PERFORM 200-OPEN. PERFORM 250-READ UNTIL EOF-TRANS-WS = 'YES' STOP RUN. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 200-OPEN SECTION. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ OPEN INPUT CUSTOMER-FILE CARDS-FILE ITEMS-FILE TRANSACTIONS-FILE OUTPUT REPORT-FILE. MOVE FUNCTION CURRENT-DATE TO HOLD-DATE-WS. MOVE MONTH-WS TO MONTH-OUT C-MONTH-WS. MOVE DAY-WS TO DAY-OUT C-DAY-WS. MOVE YEAR-WS TO YEAR-OUT C-YEAR-WS. PERFORM 220-LOAD-CUST-TABLE VARYING CUST-INDEX FROM 1 BY 1 UNTIL EOF-CUST-WS = 'YES'. SET CUST-INDEX TO 1. CLOSE CUSTOMER-FILE. PERFORM 230-LOAD-CARDS-TABLE VARYING CARDS-INDEX FROM 1 BY 1 UNTIL EOF-CARDS-WS = 'YES'. SET CARDS-INDEX TO 1. CLOSE CARDS-FILE. PERFORM 240-LOAD-ITEMS-TABLE VARYING ITEMS-INDEX FROM 1 BY 1 UNTIL EOF-ITEMS-WS = 'YES'. SET ITEMS-INDEX TO 1. CLOSE ITEMS-FILE. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 220-LOAD-CUST-TABLE SECTION. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ADD 1 TO CUST-NUM-WS. READ CUSTOMER-FILE INTO CUST-RECORD-FIELDS (CUST-INDEX) AT END MOVE 'YES' TO EOF-CUST-WS SUBTRACT 1 FROM CUST-NUM-WS END-READ. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 230-LOAD-CARDS-TABLE SECTION. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ADD 1 TO CARDS-NUM-WS. READ CARDS-FILE INTO CARDS-RECORD-FIELDS (CARDS-INDEX) AT END MOVE 'YES' TO EOF-CARDS-WS SUBTRACT 1 FROM CARDS-NUM-WS END-READ. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 240-LOAD-ITEMS-TABLE SECTION. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ADD 1 TO ITEMS-NUM-WS. READ ITEMS-FILE INTO ITEMS-RECORD-FIELDS (ITEMS-INDEX) AT END MOVE 'YES' TO EOF-ITEMS-WS SUBTRACT 1 FROM ITEMS-NUM-WS END-READ. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 250-READ SECTION. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ READ TRANSACTIONS-FILE INTO TRANS-RECORD-FIELDS AT END MOVE 'YES' TO EOF-TRANS-WS PERFORM 550-SUMMARY NOT AT END PERFORM 300-INITIALIZE PERFORM 325-PROCESS END-READ. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 300-INITIALIZE SECTION. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ADD 1 TO REC-NUM-WS. MOVE 'NO' TO CC-NO-WS CUST-NO-WS VALID-DAY-WS. MOVE 'NO' TO MONTH-NOT-NUMERIC-WS DAY-NOT-NUMERIC-WS. MOVE 'NO' TO YEAR-NOT-NUMERIC-WS. MOVE 'NO' TO MONTH-NOT-UNSIGNED-WS DAY-NOT-UNSIGNED-WS. MOVE 'NO' TO YEAR-NOT-UNSIGNED-WS YEAR-FUTURE-WS. MOVE 'NO' TO ITEM-NO-NOT-ALPHA-WS DATE-IS-GOOD-WS. MOVE 'NO' TO SUPPRESS-REC-NUM-WS SUPPRESS-NAME-VALUE-WS. MOVE ZERO TO CARDS-CUST-NO-WS CARDS-EXP-DATE-WS. MOVE ZERO TO CUST-C-LIMIT-WS CUST-C-BALANCE-WS. MOVE ZERO TO CC-SPACES-CTR-WS CUST-SPACES-CTR-WS. MOVE ZERO TO THIRTY-DAY-OLD-WS. MOVE ZERO TO TRANS-INT-DATE-WS TRANS-INT-MONTH-WS. MOVE ZERO TO TRANS-INT-DAY-WS TRANS-INT-YEAR-WS. MOVE ZERO TO LEAP-YEAR-WS LEAP-YEAR-DIV-WS. MOVE ZERO TO LEAP-YEAR-TEST1-WS LEAP-YEAR-TEST2-WS. MOVE ' ' TO CUST-C-CODE-WS. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 325-PROCESS SECTION. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PERFORM 400-CHECK-FIELD-LENGTH. PERFORM 410-CHECK-CC-NUMBER. PERFORM 420-CHECK-CUST-NUMBER. PERFORM 430-CHECK-ITEMS-NUMBER. PERFORM 440-CHECK-DATE. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 350-PRINT SECTION. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ADD 1 TO LINE-COUNT-WS. IF LINE-COUNT-WS > 50 THEN PERFORM 500-HEADER END-IF. MOVE REC-NUM-WS TO REC-NUM-OUT. MOVE FIELD-NAME-WS TO FIELD-NAME-OUT. MOVE FIELD-VALUE-WS TO FIELD-VALUE-OUT. MOVE ERROR-MESSAGE (ERROR-POINTER) TO ERROR-MESSAGE-OUT. IF SUPPRESS-REC-NUM-WS = 'YES' THEN MOVE SPACES TO REC-NUM-OUT END-IF. IF SUPPRESS-NAME-VALUE-WS = 'YES' THEN MOVE SPACES TO FIELD-NAME-OUT MOVE SPACES TO FIELD-VALUE-OUT END-IF. WRITE PRINT-LINE FROM DETAIL-LINE AFTER 1. MOVE 'YES' TO SUPPRESS-REC-NUM-WS. MOVE 'YES' TO SUPPRESS-NAME-VALUE-WS. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 400-CHECK-FIELD-LENGTH SECTION. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ **** *** ** CUST-NO DIGIT VALIDATION ** *** **** INSPECT TRANS-CUST-NO-IN TALLYING CUST-SPACES-CTR-WS FOR ALL SPACES. IF (TRANS-DIGITS-IN = SPACES) AND (CUST-SPACES-CTR-WS = 0) THEN MOVE 'YES' TO CUST-NO-WS GO TO 400-EXIT END-IF. **** *** ** CC-NO DIGIT VALIDATOIN ** *** **** INSPECT TRANS-CC-CUST-NO-IN TALLYING CC-SPACES-CTR-WS FOR ALL SPACES. IF CC-SPACES-CTR-WS = ZERO THEN MOVE 'YES' TO CC-NO-WS ELSE ADD 1 TO CC-ERROR-COUNTER-WS MOVE 'Trans-CC-Cust-No-In' TO FIELD-NAME-WS MOVE TRANS-CC-CUST-NO-IN TO FIELD-VALUE-WS SET ERROR-POINTER TO 1 PERFORM 350-PRINT END-IF. 400-EXIT. EXIT. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 410-CHECK-CC-NUMBER SECTION. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MOVE 'NO' TO SUPPRESS-NAME-VALUE-WS. MOVE 'Credit Card (Number)' TO FIELD-NAME-WS. MOVE TRANS-CC-CUST-NO-IN TO FIELD-VALUE-WS. IF CC-NO-WS = 'NO' THEN GO TO 410-EXIT END-IF. **** *** ** CC-NO NUMERIC VALIDATION ** *** **** MOVE ZERO TO SUB-WS. PERFORM VARYING SUB-WS FROM 1 BY 1 UNTIL SUB-WS > 15 IF NOT TRANS-NUMERIC (SUB-WS) THEN ADD 1 TO CC-ERROR-COUNTER-WS SET ERROR-POINTER TO 2 PERFORM 350-PRINT GO TO 410-EXIT END-IF END-PERFORM. **** *** ** CC-NO UNSIGNED VALIDATION ** *** **** MOVE 16 TO SUB-WS. IF NOT TRANS-NUMERIC (SUB-WS) AND NOT TRANS-NEGATIVE (SUB-WS) AND NOT TRANS-POSITIVE (SUB-WS) THEN ADD 1 TO CC-ERROR-COUNTER-WS SET ERROR-POINTER TO 2 PERFORM 350-PRINT GO TO 410-EXIT ELSE IF TRANS-NEGATIVE (SUB-WS) THEN ADD 1 TO CC-ERROR-COUNTER-WS SET ERROR-POINTER TO 3 PERFORM 350-PRINT GO TO 410-EXIT END-IF IF TRANS-POSITIVE (SUB-WS) THEN ADD 1 TO CC-ERROR-COUNTER-WS SET ERROR-POINTER TO 4 PERFORM 350-PRINT GO TO 410-EXIT END-IF END-IF. **** *** ** VALID CC-NO VALIDATION ** *** **** SEARCH ALL CARDS-RECORD-FIELDS AT END ADD 1 TO CC-ERROR-COUNTER-WS SET ERROR-POINTER TO 5 PERFORM 350-PRINT GO TO 410-EXIT WHEN CARDS-CC-NO-IN (CARDS-INDEX) = TRANS-CC-CUST-NO-IN MOVE CARDS-CUST-NO-IN (CARDS-INDEX) TO CARDS-CUST-NO-WS MOVE CARDS-EXP-MO-IN (CARDS-INDEX) TO CARDS-EXP-MO-WS MOVE CARDS-EXP-YR-IN (CARDS-INDEX) TO CARDS-EXP-YR-WS END-SEARCH. SEARCH ALL CUST-RECORD-FIELDS AT END ADD 1 TO CC-ERROR-COUNTER-WS SET ERROR-POINTER TO 6 PERFORM 350-PRINT WHEN CUST-NO-IN (CUST-INDEX) = CARDS-CUST-NO-WS CONTINUE END-SEARCH. **** *** ** CC-EXP-DATE VALIDATION ** *** **** IF (CARDS-EXP-YR-WS <= YEAR-WS) AND (CARDS-EXP-MO-WS < MONTH-WS) THEN ADD 1 TO CC-ERROR-COUNTER-WS SET ERROR-POINTER TO 7 PERFORM 350-PRINT GO TO 410-EXIT END-IF. 410-EXIT. MOVE SPACES TO FIELD-NAME-WS. MOVE SPACES TO FIELD-VALUE-WS. EXIT. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 420-CHECK-CUST-NUMBER SECTION. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MOVE 'NO' TO SUPPRESS-NAME-VALUE-WS. MOVE 'Customer (Number)' TO FIELD-NAME-WS. MOVE TRANS-CUST-NO-IN TO FIELD-VALUE-WS. IF CUST-NO-WS = 'NO' THEN GO TO 420-EXIT END-IF. **** *** ** CUST-NO NUMERIC VALIDATION ** *** **** MOVE ZERO TO SUB-WS. PERFORM VARYING SUB-WS FROM 12 BY 1 UNTIL SUB-WS > 15 IF NOT TRANS-NUMERIC (SUB-WS) THEN ADD 1 TO CUST-ERROR-COUNTER-WS SET ERROR-POINTER TO 8 PERFORM 350-PRINT GO TO 420-EXIT END-IF END-PERFORM. **** *** ** CUST-NO UNSIGNED VALIDATION ** *** **** MOVE 16 TO SUB-WS. IF NOT TRANS-NUMERIC (SUB-WS) AND NOT TRANS-NEGATIVE (SUB-WS) AND NOT TRANS-POSITIVE (SUB-WS) THEN ADD 1 TO CUST-ERROR-COUNTER-WS SET ERROR-POINTER TO 8 PERFORM 350-PRINT GO TO 420-EXIT ELSE IF TRANS-NEGATIVE (SUB-WS) THEN ADD 1 TO CUST-ERROR-COUNTER-WS SET ERROR-POINTER TO 9 PERFORM 350-PRINT GO TO 420-EXIT END-IF IF TRANS-POSITIVE (SUB-WS) THEN ADD 1 TO CUST-ERROR-COUNTER-WS SET ERROR-POINTER TO 10 PERFORM 350-PRINT GO TO 420-EXIT END-IF END-IF. **** *** ** VALID CUST-NO VALIDATION ** *** **** SEARCH ALL CUST-RECORD-FIELDS AT END ADD 1 TO CUST-ERROR-COUNTER-WS SET ERROR-POINTER TO 11 PERFORM 350-PRINT GO TO 420-EXIT WHEN CUST-NO-IN (CUST-INDEX) = TRANS-CUST-NO-IN MOVE CUST-C-CODE-IN (CUST-INDEX) TO CUST-C-CODE-WS MOVE CUST-C-LIMIT-IN (CUST-INDEX) TO CUST-C-LIMIT-WS MOVE CUST-C-BALANCE-IN (CUST-INDEX) TO CUST-C-BALANCE-WS END-SEARCH. **** *** ** CREDIT CUSTOMER VALIDATION ** *** **** IF CUST-C-CODE-WS NOT EQUAL TO 'Y' THEN ADD 1 TO CUST-ERROR-COUNTER-WS SET ERROR-POINTER TO 12 PERFORM 350-PRINT GO TO 420-EXIT END-IF. **** *** ** CUST BALANCE VALIDATION ** *** **** IF CUST-C-BALANCE-WS > CUST-C-LIMIT-WS THEN ADD 1 TO CUST-ERROR-COUNTER-WS SET ERROR-POINTER TO 13 PERFORM 350-PRINT GO TO 420-EXIT END-IF. 420-EXIT. MOVE SPACES TO FIELD-NAME-WS. MOVE SPACES TO FIELD-VALUE-WS. EXIT. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 430-CHECK-ITEMS-NUMBER SECTION. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MOVE 'NO' TO SUPPRESS-NAME-VALUE-WS. MOVE 'Items Number' TO FIELD-NAME-WS. MOVE TRANS-ITEM-NO-IN TO FIELD-VALUE-WS. **** *** ** ITEM-NO ALPHABETIC VALIDATION ** *** **** PERFORM VARYING SUB-WS FROM 1 BY 1 UNTIL SUB-WS > 4 IF NOT ITEM-ALPHABETIC (SUB-WS) AND ITEM-NO-NOT-ALPHA-WS = 'NO' THEN MOVE 'YES' TO ITEM-NO-NOT-ALPHA-WS IF SUPPRESS-NAME-VALUE-WS = 'NO' THEN ADD 1 TO ITEMS-ERROR-COUNTER-WS END-IF SET ERROR-POINTER TO 14 PERFORM 350-PRINT END-IF END-PERFORM. **** *** ** ITEM-NO NUMERIC VALIDATION ** *** **** IF TRANS-ITEM-N-IN-9 IS NOT NUMERIC THEN IF SUPPRESS-NAME-VALUE-WS = 'NO' THEN ADD 1 TO ITEMS-ERROR-COUNTER-WS END-IF SET ERROR-POINTER TO 15 PERFORM 350-PRINT GO TO 430-EXIT END-IF. **** *** ** ITEM-NO UNSIGNED VALIDATION ** *** **** IF ITEM-NEGATIVE THEN IF SUPPRESS-NAME-VALUE-WS = 'NO' THEN ADD 1 TO ITEMS-ERROR-COUNTER-WS END-IF SET ERROR-POINTER TO 16 PERFORM 350-PRINT GO TO 430-EXIT END-IF. IF ITEM-POSITIVE THEN IF SUPPRESS-NAME-VALUE-WS = 'NO' THEN ADD 1 TO ITEMS-ERROR-COUNTER-WS END-IF SET ERROR-POINTER TO 17 PERFORM 350-PRINT GO TO 430-EXIT END-IF. IF ITEM-NO-NOT-ALPHA-WS = 'YES' THEN GO TO 430-EXIT END-IF. **** *** ** VALID ITEM-NO VALIDATION ** *** **** SEARCH ALL ITEMS-RECORD-FIELDS AT END IF SUPPRESS-NAME-VALUE-WS = 'NO' THEN ADD 1 TO ITEMS-ERROR-COUNTER-WS END-IF SET ERROR-POINTER TO 18 PERFORM 350-PRINT GO TO 430-EXIT WHEN ITEMS-NO-IN (ITEMS-INDEX) = TRANS-ITEM-NO-IN GO TO 430-EXIT END-SEARCH. 430-EXIT. MOVE SPACES TO FIELD-NAME-WS. MOVE SPACES TO FIELD-VALUE-WS. EXIT. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 440-CHECK-DATE SECTION. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MOVE 'NO' TO SUPPRESS-NAME-VALUE-WS. MOVE 'Transaction Date' TO FIELD-NAME-WS. MOVE TRANS-DATE TO FIELD-VALUE-WS. **** *** ** MONTH VALIDATION DONE NEXT ** *** **** IF TRANS-MONTH-IN-9 IS NOT NUMERIC THEN MOVE 'YES' TO MONTH-NOT-NUMERIC-WS IF SUPPRESS-NAME-VALUE-WS = 'NO' THEN ADD 1 TO DATE-ERROR-COUNTER-WS END-IF SET ERROR-POINTER TO 19 PERFORM 350-PRINT END-IF. IF (MONTH-NOT-NUMERIC-WS = 'NO') AND MONTH-NEGATIVE THEN MOVE 'YES' TO MONTH-NOT-UNSIGNED-WS IF SUPPRESS-NAME-VALUE-WS = 'NO' THEN ADD 1 TO DATE-ERROR-COUNTER-WS END-IF SET ERROR-POINTER TO 20 PERFORM 350-PRINT END-IF. IF (MONTH-NOT-NUMERIC-WS = 'NO') AND MONTH-POSITIVE THEN MOVE 'YES' TO MONTH-NOT-UNSIGNED-WS IF SUPPRESS-NAME-VALUE-WS = 'NO' THEN ADD 1 TO DATE-ERROR-COUNTER-WS END-IF SET ERROR-POINTER TO 21 PERFORM 350-PRINT END-IF. IF (MONTH-NOT-NUMERIC-WS = 'NO') AND (MONTH-NOT-UNSIGNED-WS = 'NO') AND (NOT VALID-MONTH) THEN IF SUPPRESS-NAME-VALUE-WS = 'NO' THEN ADD 1 TO DATE-ERROR-COUNTER-WS END-IF SET ERROR-POINTER TO 22 PERFORM 350-PRINT END-IF. **** *** ** DAY VALIDATION DONE NEXT ** *** **** IF TRANS-DAY-IN-9 IS NOT NUMERIC THEN MOVE 'YES' TO DAY-NOT-NUMERIC-WS IF SUPPRESS-NAME-VALUE-WS = 'NO' THEN ADD 1 TO DATE-ERROR-COUNTER-WS END-IF SET ERROR-POINTER TO 23 PERFORM 350-PRINT END-IF. IF (DAY-NOT-NUMERIC-WS = 'NO') AND DAY-NEGATIVE THEN MOVE 'YES' TO DAY-NOT-UNSIGNED-WS IF SUPPRESS-NAME-VALUE-WS = 'NO' THEN ADD 1 TO DATE-ERROR-COUNTER-WS END-IF SET ERROR-POINTER TO 24 PERFORM 350-PRINT END-IF. IF (DAY-NOT-NUMERIC-WS = 'NO') AND DAY-POSITIVE THEN MOVE 'YES' TO DAY-NOT-UNSIGNED-WS IF SUPPRESS-NAME-VALUE-WS = 'NO' THEN ADD 1 TO DATE-ERROR-COUNTER-WS END-IF SET ERROR-POINTER TO 25 PERFORM 350-PRINT END-IF. IF (DAY-NOT-NUMERIC-WS = 'NO') AND (DAY-NOT-UNSIGNED-WS = 'NO') AND (NOT VALID-DAY) THEN IF SUPPRESS-NAME-VALUE-WS = 'NO' THEN ADD 1 TO DATE-ERROR-COUNTER-WS END-IF SET ERROR-POINTER TO 26 PERFORM 350-PRINT END-IF. **** *** ** YEAR VALIDATION DONE NEXT ** *** **** IF TRANS-YEAR-IN-9 IS NOT NUMERIC THEN MOVE 'YES' TO YEAR-NOT-NUMERIC-WS IF SUPPRESS-NAME-VALUE-WS = 'NO' THEN ADD 1 TO DATE-ERROR-COUNTER-WS END-IF SET ERROR-POINTER TO 28 PERFORM 350-PRINT END-IF. IF (YEAR-NOT-NUMERIC-WS = 'NO') AND YEAR-NEGATIVE THEN MOVE 'YES' TO YEAR-NOT-UNSIGNED-WS IF SUPPRESS-NAME-VALUE-WS = 'NO' THEN ADD 1 TO DATE-ERROR-COUNTER-WS END-IF SET ERROR-POINTER TO 29 PERFORM 350-PRINT END-IF. IF (YEAR-NOT-NUMERIC-WS = 'NO') AND YEAR-POSITIVE THEN MOVE 'YES' TO YEAR-NOT-UNSIGNED-WS IF SUPPRESS-NAME-VALUE-WS = 'NO' THEN ADD 1 TO DATE-ERROR-COUNTER-WS END-IF SET ERROR-POINTER TO 30 PERFORM 350-PRINT END-IF. **** *** ** DAYS-IN-MONTH VALIDATION DONE NEXT ** *** **** IF (DAY-NOT-NUMERIC-WS = 'NO') AND (MONTH-NOT-NUMERIC-WS = 'NO') AND (DAY-NOT-UNSIGNED-WS = 'NO') AND (VALID-DAY) AND (MONTH-NOT-UNSIGNED-WS = 'NO') AND (VALID-MONTH) AND (YEAR-NOT-NUMERIC-WS = 'NO') AND (YEAR-NOT-UNSIGNED-WS = 'NO') THEN MOVE 'YES' TO DATE-IS-GOOD-WS MOVE TRANS-YEAR-IN-9 TO LEAP-YEAR-WS PERFORM 600-CHECK-DAY-TABLE END-IF. **** *** ** FUTURE VALIDATION DONE NEXT ** *** **** IF VALID-DAY-WS = 'YES' THEN MOVE HOLD-DATE-WS TO C-INT-DATE-WS MOVE TRANS-MONTH-IN-9 TO TRANS-INT-MONTH-WS MOVE TRANS-DAY-IN-9 TO TRANS-INT-DAY-WS MOVE TRANS-YEAR-IN-9 TO TRANS-INT-YEAR-WS MOVE TRANS-INT-DATE-GROUP-WS TO TRANS-INT-DATE-WS *---------------- FIX FOR FUNCTION INTEGER-OF-DATE CODE----------- COMPUTE TRANS-INT-INTEGER-WS = (TRANS-INT-YEAR-WS * 10000) + (TRANS-INT-MONTH-WS * 100) + TRANS-INT-DAY-WS COMPUTE C-INT-INTEGER-WS = (YEAR-WS * 10000) + (MONTH-WS * 100) + DAY-WS *---------------- FIX FOR FUNCTION INTEGER-OF-DATE CODE----------- * IF FUNCTION INTEGER-OF-DATE (TRANS-INT-DATE-WS) > * FUNCTION INTEGER-OF-DATE (C-INT-DATE-WS) IF TRANS-INT-INTEGER-WS > C-INT-INTEGER-WS THEN MOVE 'YES' TO YEAR-FUTURE-WS IF SUPPRESS-NAME-VALUE-WS = 'NO' THEN ADD 1 TO DATE-ERROR-COUNTER-WS END-IF SET ERROR-POINTER TO 31 PERFORM 350-PRINT END-IF END-IF. **** *** ** 30 DAY OLD VALIDATION DONE NEXT ** *** **** IF VALID-DAY-WS = 'YES' AND YEAR-FUTURE-WS = 'NO' THEN *---------------- FIX FOR FUNCTION INTEGER-OF-DATE CODE----------- COMPUTE TRANS-INT-INTEGER-WS = (TRANS-INT-YEAR-WS * 10000) + (TRANS-INT-MONTH-WS * 100) + TRANS-INT-DAY-WS COMPUTE C-INT-INTEGER-WS = (YEAR-WS * 10000) + (MONTH-WS * 100) + DAY-WS *---------------- FIX FOR FUNCTION INTEGER-OF-DATE CODE----------- COMPUTE THIRTY-DAY-OLD-WS = C-INT-INTEGER-WS - TRANS-INT-INTEGER-WS * COMPUTE THIRTY-DAY-OLD-WS = FUNCTION INTEGER-OF-DATE * (C-INT-DATE-WS) - FUNCTION INTEGER-OF-DATE * (TRANS-INT-DATE-WS) IF THIRTY-DAY-OLD-WS > 30 THEN IF SUPPRESS-NAME-VALUE-WS = 'NO' THEN ADD 1 TO DATE-ERROR-COUNTER-WS END-IF SET ERROR-POINTER TO 32 PERFORM 350-PRINT END-IF END-IF. **** *** ** DOUBLESPACE PRINT-LINE DONE NEXT ** *** **** IF SUPPRESS-REC-NUM-WS = 'YES' THEN ADD 1 TO LINE-COUNT-WS MOVE SPACES TO PRINT-LINE WRITE PRINT-LINE AFTER 1 END-IF. MOVE SPACES TO FIELD-NAME-WS. MOVE SPACES TO FIELD-VALUE-WS. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 500-HEADER SECTION. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MOVE 'NO' TO SUPPRESS-REC-NUM-WS. MOVE 'NO' TO SUPPRESS-NAME-VALUE-WS. ADD 1 TO PAGE-NUM-WS. MOVE PAGE-NUM-WS TO PAGE-NUM-OUT. WRITE PRINT-LINE FROM REPORT-HEADER AFTER PAGE. WRITE PRINT-LINE FROM REPORT-HEADER2 AFTER 1. MOVE SPACES TO PRINT-LINE. WRITE PRINT-LINE AFTER 2. WRITE PRINT-LINE FROM REPORT-COLUMN-HEADER AFTER 1. WRITE PRINT-LINE FROM REPORT-COLUMN-HEADER2 AFTER 1. WRITE PRINT-LINE FROM REPORT-COLUMN-HEADER3 AFTER 1. MOVE ZERO TO LINE-COUNT-WS. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 550-SUMMARY SECTION. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ADD 1 TO PAGE-NUM-WS. COMPUTE TOTAL-ERROR-COUNTER-WS = (CC-ERROR-COUNTER-WS + CUST-ERROR-COUNTER-WS + ITEMS-ERROR-COUNTER-WS + DATE-ERROR-COUNTER-WS). MOVE REC-NUM-WS TO SUMMARY-REC-NUM-OUT. MOVE PAGE-NUM-WS TO SUMMARY-PAGE-NUM-OUT. MOVE MONTH-WS TO SUMMARY-MONTH-OUT. MOVE DAY-WS TO SUMMARY-DAY-OUT. MOVE YEAR-WS TO SUMMARY-YEAR-OUT. MOVE CC-ERROR-COUNTER-WS TO CC-ERROR-COUNTER-OUT. MOVE CUST-ERROR-COUNTER-WS TO CUST-ERROR-COUNTER-OUT. MOVE ITEMS-ERROR-COUNTER-WS TO ITEMS-ERROR-COUNTER-OUT. MOVE DATE-ERROR-COUNTER-WS TO DATE-ERROR-COUNTER-OUT. MOVE TOTAL-ERROR-COUNTER-WS TO TOTAL-ERROR-COUNTER-OUT. WRITE PRINT-LINE FROM DETAIL-FOOTER AFTER 1. WRITE PRINT-LINE FROM REPORT-HEADER AFTER PAGE. WRITE PRINT-LINE FROM SUMMARY-HEADER AFTER 1. MOVE SPACES TO PRINT-LINE. WRITE PRINT-LINE AFTER 7. WRITE PRINT-LINE FROM SUMMARY-PROCESSED-LINE AFTER 1. MOVE SPACES TO PRINT-LINE. WRITE PRINT-LINE AFTER 1. WRITE PRINT-LINE FROM SUMMARY-COLUMN-HEADER AFTER 1. WRITE PRINT-LINE FROM SUMMARY-COLUMN-HEADER2 AFTER 1. WRITE PRINT-LINE FROM SUMMARY-COLUMN-HEADER3 AFTER 1. WRITE PRINT-LINE FROM SUMMARY-CC-TOTAL AFTER 1. WRITE PRINT-LINE FROM SUMMARY-CUST-TOTAL AFTER 1. WRITE PRINT-LINE FROM SUMMARY-ITEMS-TOTAL AFTER 1. WRITE PRINT-LINE FROM SUMMARY-DATE-TOTAL AFTER 1. WRITE PRINT-LINE FROM SUMMARY-COLUMN-FOOTER AFTER 1. WRITE PRINT-LINE FROM SUMMARY-TOTAL AFTER 1. WRITE PRINT-LINE FROM SUMMARY-FOOTER AFTER 3. MOVE SPACES TO PRINT-LINE. WRITE PRINT-LINE AFTER 1. WRITE PRINT-LINE FROM REPORT-FOOTER AFTER 1. CLOSE TRANSACTIONS-FILE REPORT-FILE. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 600-CHECK-DAY-TABLE SECTION. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ **** *** ** LEAP YEAR VALIDATION DONE NEXT ** *** **** IF (TRANS-MONTH-IN-9 = 02) AND (TRANS-DAY-IN-9 = 29) THEN MOVE TRANS-YEAR-IN-9 TO LEAP-YEAR-WS DIVIDE LEAP-YEAR-WS BY 4 GIVING LEAP-YEAR-DIV-WS REMAINDER LEAP-YEAR-TEST1-WS IF LEAP-YEAR-WS (3:2) = 00 THEN DIVIDE LEAP-YEAR-WS BY 400 GIVING LEAP-YEAR-DIV-WS REMAINDER LEAP-YEAR-TEST2-WS ELSE MOVE 0 TO LEAP-YEAR-TEST2-WS END-IF SET DAYS-INDEX TO 2 IF LEAP-YEAR-TEST1-WS = 0 AND LEAP-YEAR-TEST2-WS = 0 THEN MOVE 29 TO DAYS-IN-MONTH (DAYS-INDEX) END-IF END-IF. **** *** ** LEAP YEAR VALIDATION COMPLETED ** *** **** PERFORM 650-DAYS-INDEX. IF (TRANS-DAY-IN-9 > 00 AND <= DAYS-IN-MONTH (DAYS-INDEX)) THEN MOVE 'YES' TO VALID-DAY-WS ELSE IF SUPPRESS-NAME-VALUE-WS = 'NO' THEN ADD 1 TO DATE-ERROR-COUNTER-WS END-IF SET ERROR-POINTER TO 27 PERFORM 350-PRINT END-IF. SET DAYS-INDEX TO 2. MOVE 28 TO DAYS-IN-MONTH (DAYS-INDEX). *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 650-DAYS-INDEX SECTION. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IF TRANS-MONTH-IN-9 = 01 THEN SET DAYS-INDEX TO 1 END-IF. IF TRANS-MONTH-IN-9 = 02 THEN SET DAYS-INDEX TO 2 END-IF. IF TRANS-MONTH-IN-9 = 03 THEN SET DAYS-INDEX TO 3 END-IF. IF TRANS-MONTH-IN-9 = 04 THEN SET DAYS-INDEX TO 4 END-IF. IF TRANS-MONTH-IN-9 = 05 THEN SET DAYS-INDEX TO 5 END-IF. IF TRANS-MONTH-IN-9 = 06 THEN SET DAYS-INDEX TO 6 END-IF. IF TRANS-MONTH-IN-9 = 07 THEN SET DAYS-INDEX TO 7 END-IF. IF TRANS-MONTH-IN-9 = 08 THEN SET DAYS-INDEX TO 8 END-IF. IF TRANS-MONTH-IN-9 = 09 THEN SET DAYS-INDEX TO 9 END-IF. IF TRANS-MONTH-IN-9 = 10 THEN SET DAYS-INDEX TO 10 END-IF. IF TRANS-MONTH-IN-9 = 11 THEN SET DAYS-INDEX TO 11 END-IF. IF TRANS-MONTH-IN-9 = 12 THEN SET DAYS-INDEX TO 12 END-IF.