       IDENTIFICATION DIVISION.
       PROGRAM-ID. PROG5.
      *
       ENVIRONMENT DIVISION.
      *
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
       SELECT STORE-FILE-IN
            ASSIGN TO KEYBOARD
            ORGANIZATION IS LINE SEQUENTIAL.
       SELECT STORE-FILE-OUT
            ASSIGN TO DISPLAY
            ORGANIZATION IS LINE SEQUENTIAL.
      *
      *
      *
      *
      *
       DATA DIVISION.
      *
      *
       FILE SECTION.
      *
      *
       FD STORE-FILE-IN.
      *
       01 STORE-RECORD-IN             PIC X(25).
      *
       FD STORE-FILE-OUT.
      *
       01 STORE-RECORD-OUT            PIC X(120).
      *    
       WORKING-STORAGE SECTION.
      *
       01 WS-MORE-INPUT               PIC X(01) VALUE "Y".
      *
       01 WS-ERROR-FLAG               PIC X(01) VALUE "Y".
      *
       01 WS-ERROR-FIELDS             PIC 9(01) VALUE 0.
      *
       01 WS-GOOD-RECORD              PIC X(01) VALUE "Y".
      *
       01 WS-RECORD-COUNT             PIC 9(01) VALUE 0.
      *   
       01 WS-STORE-RECORD-IN.
           05                         PIC X(01).
           05 DISTRICT-CODE-IN        PIC X(02).
              88 VALID-DISTRICT-CODE VALUE "20" THRU "80".
              88 DISTRICT-CODE-BLANK VALUE SPACES.
           05                         PIC X(01).   
           05 STORE-CODE-IN.
              88 STORE-CODE-BLANK     VALUE SPACES.
              10 STORE-CODE-1-IN      PIC X(01).
              10 STORE-CODE-2-IN      PIC X(01).
                 88 VALID-STORE-CODE VALUE "C" THRU "L".
              10 STORE-CODE-3-IN      PIC X(01). 
           05                         PIC X(01).      
           05 DEPARTMENT-CODE-IN.
              88 DEPARTMENT-CODE-BLANK VALUE SPACES.
              10 DEPT-CODE-1-IN       PIC X(02).
              10 DEPT-CODE-2-IN       PIC X(03).
           05                         PIC X(01).
           05 TRANSACTION-TYPE-IN     PIC X(02).
              88 TRANSACTION-TYPE-BLANK    VALUE SPACES.
           05                         PIC X(01).
           05 TRANSACTION-AMOUNT-IN-X PIC X(07).
              88 TRANSACTION-AMOUNT-BLANK VALUE SPACES.
           05 TRANSACTION-AMOUNT-IN-9
              REDEFINES
              TRANSACTION-AMOUNT-IN-X PIC 9(05)V99.
      *
       01 WS-HEADING-LINE-1.
           05                         PIC X(08) VALUE "DISTRICT".
           05                         PIC X(01) VALUE SPACES.
           05                         PIC X(05) VALUE "STORE".
           05                         PIC X(01) VALUE SPACES.
           05                         PIC X(10) VALUE "DEPARTMENT".
           05                         PIC X(01) VALUE SPACES.
           05                         PIC X(11) VALUE "TRANSACTION".
           05                         PIC X(10) VALUE SPACES.
           05                         PIC X(05) VALUE "ERROR".
      *
       01 WS-HEADING-LINE-2.
           05                         PIC X(02) VALUE SPACES.
           05                         PIC X(04) VALUE "CODE".
           05                         PIC X(03) VALUE SPACES.
           05                         PIC X(04) VALUE "CODE".
           05                         PIC X(05) VALUE SPACES.
           05                         PIC X(04) VALUE "CODE".
           05                         PIC X(04) VALUE SPACES.
           05                         PIC X(04) VALUE "TYPE".
           05                         PIC X(01) VALUE SPACES.
           05                         PIC X(06) VALUE "AMOUNT".
           05                         PIC X(10) VALUE SPACES.
           05                         PIC X(04) VALUE "CODE".
      *
       01 WS-DETAIL-LINE.
           05                         PIC X(03) VALUE SPACES.
           05 DISTRICT-OUT            PIC X(03).
           05                         PIC X(04) VALUE SPACES.
           05 STORE-OUT               PIC X(03).
           05                         PIC X(04) VALUE SPACES.
           05 DEPARTMENT-OUT          PIC X(05).
           05                         PIC X(05) VALUE SPACES.
           05 TRANSACTION-TYPE-OUT    PIC X(02).
           05                         PIC X(02) VALUE SPACES.
           05 TRANSACTION-AMOUNT-OUT  PIC X(07).
           05                         PIC X(01) VALUE SPACES.
           05 ERROR-OUT               PIC X(50).
      *
       01 WS-ACCUMULATORS.
           05 WS-GOOD-RECORDS         PIC 9(03) VALUE 0.
           05 WS-BAD-RECORDS          PIC 9(03) VALUE 0.
           05 WS-TRANSACTION-TOTAL    PIC 9(10)V99 VALUE 0.
      *
       01 WS-SUMMARY-LINE-1.
           05                         PIC X(03) VALUE SPACES.
           05                         PIC X(05) VALUE "TOTAL".
           05                         PIC X(01) VALUE SPACES.
           05                         PIC X(04) VALUE "GOOD".
           05                         PIC X(01) VALUE SPACES.
           05                         PIC X(13) VALUE "TRANSACTIONS:". 
           05                         PIC X(03) VALUE SPACES.
           05 GOOD-RECORDS-OUT        PIC ZZ9.
      *
       01 WS-SUMMARY-LINE-2.
           05                         PIC X(04) VALUE SPACES.
           05                         PIC X(05) VALUE "TOTAL".
           05                         PIC X(01) VALUE SPACES.
           05                         PIC X(03) VALUE "BAD".
           05                         PIC X(01) VALUE SPACES.
           05                         PIC X(13) VALUE "TRANSACTIONS:".
           05                         PIC X(03) VALUE SPACES.
           05 BAD-RECORDS-OUT         PIC ZZ9.
      *
       01 WS-SUMMARY-LINE-3.
           05                         PIC X(05) VALUE "TOTAL".
           05                         PIC X(01) VALUE SPACES.
           05                         PIC X(02) VALUE "OF".
           05                         PIC X(01) VALUE SPACES.
           05                         PIC X(04) VALUE "GOOD".
           05                         PIC X(01) VALUE SPACES.
           05                         PIC X(13) VALUE "TRANSACTIONS:".
           05                         PIC X(03) VALUE SPACES.
           05 TRANSACTION-TOTAL-OUT  PIC $$$,$$9.99.
      *
      *
      *
      *
      *
       PROCEDURE DIVISION.
      *
      *
       MAIN-CONTROL-PARA.
           PERFORM INITIALIZATION-PARA
           PERFORM READ-PARA
           PERFORM HEADINGS-PARA
           PERFORM MAIN-LOOP-PARA
              UNTIL WS-MORE-INPUT = "N"
           PERFORM SUMMARY-PAGE-PARA
           PERFORM TERMINATION-PARA
           .
      *
      *
       INITIALIZATION-PARA.
           OPEN INPUT  STORE-FILE-IN
                OUTPUT STORE-FILE-OUT
           .
      *
      *
       READ-PARA.
           READ STORE-FILE-IN
               INTO WS-STORE-RECORD-IN
           AT END MOVE "N" TO WS-MORE-INPUT      
           .
      *
      *
       HEADINGS-PARA.
           WRITE STORE-RECORD-OUT FROM WS-HEADING-LINE-1
               AFTER ADVANCING 1 LINE
           WRITE STORE-RECORD-OUT FROM WS-HEADING-LINE-2
               AFTER ADVANCING 1 LINE
           .
      *
      *
       MAIN-LOOP-PARA.
           IF WS-RECORD-COUNT = 4
              PERFORM PAGE-HEADINGS-PARA
           END-IF   
           PERFORM DETAIL-LINE-PARA
           PERFORM READ-PARA
           .
      *
      *
       PAGE-HEADINGS-PARA.
          MOVE SPACES TO STORE-RECORD-OUT
              WRITE STORE-RECORD-OUT AFTER ADVANCING 5 LINES
          PERFORM HEADINGS-PARA
          MOVE 0 TO WS-RECORD-COUNT 
          .         
      *
      *
       DETAIL-LINE-PARA.
           MOVE SPACES TO STORE-RECORD-OUT WS-DETAIL-LINE
           WRITE STORE-RECORD-OUT
              AFTER ADVANCING 1 LINE
           MOVE DISTRICT-CODE-IN TO DISTRICT-OUT
           MOVE STORE-CODE-IN TO STORE-OUT
           MOVE DEPARTMENT-CODE-IN TO DEPARTMENT-OUT
           MOVE TRANSACTION-TYPE-IN TO TRANSACTION-TYPE-OUT
           MOVE TRANSACTION-AMOUNT-IN-X TO TRANSACTION-AMOUNT-OUT
           WRITE STORE-RECORD-OUT FROM WS-DETAIL-LINE
           AFTER ADVANCING 1 LINE
           PERFORM CHECK-VALUES-PARA
              UNTIL WS-ERROR-FIELDS = 5   
           PERFORM ACCUMULATE-TOTALS-PARA
           .
      *
      *
       CHECK-VALUES-PARA.
           MOVE "Y" TO WS-ERROR-FLAG
           MOVE SPACES TO WS-DETAIL-LINE
           IF WS-ERROR-FIELDS = 0
              PERFORM DISTRICT-CODE-PARA
             ELSE 
               IF WS-ERROR-FIELDS = 1
                 PERFORM STORE-CODE-PARA
                 ELSE
                   IF WS-ERROR-FIELDS = 2
                     PERFORM DEPARTMENT-CODE-PARA
                       ELSE
                         IF WS-ERROR-FIELDS = 3
                           PERFORM TRANSACTION-TYPE-PARA
                             ELSE
                               IF WS-ERROR-FIELDS = 4
                                  PERFORM TRANSACTION-AMOUNT-PARA
                               END-IF
                         END-IF
                    END-IF
               END-IF
           END-IF                        
           PERFORM ERROR-FLAG-CHECK-PARA
           ADD 1 TO WS-ERROR-FIELDS
           .
      *
      *
       DISTRICT-CODE-PARA.
           MOVE DISTRICT-CODE-IN TO DISTRICT-OUT
           IF VALID-DISTRICT-CODE
               MOVE "N" TO WS-ERROR-FLAG
           END-IF
           IF DISTRICT-CODE-BLANK
               MOVE "DISTRICT CODE IS BLANK" TO ERROR-OUT
              ELSE
                 IF DISTRICT-CODE-IN NOT NUMERIC
                    MOVE "DISTRICT CODE IS NOT NUMERIC" TO ERROR-OUT
                    ELSE
                     MOVE "DISTRICT CODE IS INCORRECT" TO ERROR-OUT            
                 END-IF
           END-IF
           .
      *
      *
       STORE-CODE-PARA.
           MOVE STORE-CODE-IN TO STORE-OUT
           IF VALID-STORE-CODE
              MOVE "N" TO WS-ERROR-FLAG
           END-IF
           IF STORE-CODE-BLANK
              MOVE "STORE CODE IS BLANK" TO ERROR-OUT
               ELSE 
                 IF STORE-CODE-2-IN NOT ALPHABETIC
                   MOVE "SECOND POSITION OF STORE CODE IS NOT 
                   ALPHABETIC" TO ERROR-OUT
                     ELSE
        MOVE "SECOND POSITION OF STORE CODE IS INCORRECT" TO ERROR-OUT
                 END-IF
           END-IF
           .            
      *
      *
       DEPARTMENT-CODE-PARA.
           MOVE DEPARTMENT-CODE-IN TO DEPARTMENT-OUT
           IF DEPARTMENT-CODE-BLANK
              MOVE "DEPARTMENT CODE IS BLANK" TO ERROR-OUT
             ELSE
                IF DEPARTMENT-CODE-IN NOT NUMERIC
                  MOVE "DEPARTMENT CODE IS NOT NUMBER" TO ERROR-OUT
                   ELSE
                     IF DEPT-CODE-1-IN = DISTRICT-CODE-IN
                           MOVE "N" TO WS-ERROR-FLAG 
                       ELSE
                  MOVE "DEPARTMENT CODE IS INCORRECT" TO ERROR-OUT
                     END-IF
                END-IF
           END-IF
           .          
                       
      *
      *
       TRANSACTION-TYPE-PARA.
           MOVE TRANSACTION-TYPE-IN TO TRANSACTION-TYPE-OUT
           IF TRANSACTION-TYPE-BLANK
              MOVE "TRANSACTION TYPE IS BLANK" TO ERROR-OUT
                 ELSE
                   IF TRANSACTION-TYPE-IN = "NS" OR "RT" OR "CN"
                      MOVE "N" TO WS-ERROR-FLAG
                        ELSE
               MOVE "TRANSACTION TYPE IS INVALID" TO ERROR-OUT
                   END-IF
           END-IF               
           .
      *
      *
       TRANSACTION-AMOUNT-PARA.
           IF TRANSACTION-AMOUNT-BLANK
              MOVE "TRANSACTION AMOUNT IS BLANK" TO ERROR-OUT
              ELSE
                IF TRANSACTION-AMOUNT-IN-9 NOT NUMERIC
                   MOVE "TRANSACTION AMOUNT IS NOT NUMERIC" TO ERROR-OUT
                   ELSE
                     IF TRANSACTION-AMOUNT-IN-9 > 20000
                       MOVE "TRANSACTION AMOUNT IS INVALID" TO ERROR-OUT
                        ELSE
                          MOVE "N" TO WS-ERROR-FLAG
                     END-IF
                END-IF
           END-IF                
                     
           .
      *
      *   
       ERROR-FLAG-CHECK-PARA.
           IF WS-ERROR-FLAG = "Y"
              WRITE STORE-RECORD-OUT FROM WS-DETAIL-LINE 
              AFTER ADVANCING 1 LINE
              MOVE "N" TO WS-GOOD-RECORD
           END-IF
           .                            
      *
      *     
       ACCUMULATE-TOTALS-PARA.
           IF WS-GOOD-RECORD = "Y"
              ADD 1 TO WS-GOOD-RECORDS
              ADD TRANSACTION-AMOUNT-IN-9 TO WS-TRANSACTION-TOTAL
              ELSE
                ADD 1 TO WS-BAD-RECORDS
           END-IF     
           MOVE "Y" TO WS-GOOD-RECORD
           MOVE 0 TO WS-ERROR-FIELDS
           ADD 1 TO WS-RECORD-COUNT
           .   
      *
      *
       SUMMARY-PAGE-PARA.
           MOVE WS-GOOD-RECORDS TO GOOD-RECORDS-OUT
           MOVE WS-BAD-RECORDS TO BAD-RECORDS-OUT
           MOVE WS-TRANSACTION-TOTAL TO TRANSACTION-TOTAL-OUT
           WRITE STORE-RECORD-OUT FROM WS-SUMMARY-LINE-1
              AFTER ADVANCING 5 LINES
           WRITE STORE-RECORD-OUT FROM WS-SUMMARY-LINE-2
              AFTER ADVANCING 1 LINE
           WRITE STORE-RECORD-OUT FROM WS-SUMMARY-LINE-3
              AFTER ADVANCING 1 LINE       
           .
      *
      *
       TERMINATION-PARA.
           CLOSE STORE-FILE-IN
                 STORE-FILE-OUT
           STOP RUN
           .               