Rosario Silva Portfolio

Download Resume

MORTGAGE Project Demo

Text version for MORT1

HTML version for MORT1

Text version for MORT2

HTML version for MORT2

Source Code

// COBOL for MORTGAGE project *----------------------- IDENTIFICATION DIVISION. *----------------------- PROGRAM-ID. MORTGAGE. AUTHOR. Rosario Silva. *-------------------- ENVIRONMENT DIVISION. *-------------------- INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT PRINT-LINE ASSIGN TO PRTLINE. SELECT ACCT-REC ASSIGN TO ACCTREC. *------------- DATA DIVISION. *------------- FILE SECTION. FD PRINT-LINE RECORDING MODE V. 01 PRINT-REC. 05 TOTAL-RECORD PIC X(400). FD ACCT-REC RECORDING MODE F. 01 ACCT-FIELDS. 05 TOTAL-RECORD-F PIC X(80). * WORKING-STORAGE SECTION. 01 FORMAT PIC X(4). 01 USERNAME PIC X(50). 01 FLAGS. 05 LASTREC PIC X VALUE SPACE. 01 LOAN-NAME PIC X(40). 01 LOAN-AMOUNT PIC 9(9)V99. 01 INTEREST-RATE PIC 999V9999. 01 YEARS PIC 999. 01 APS PIC X(11). 01 AP PIC 9(9)V99. 01 ORIGINAL-MONTHLY-PAYMENT PIC 9(9)V99 VALUE ZERO. 01 ORIGINAL-TOTAL-INTEREST PIC 9(11)V99 VALUE ZERO. 01 INTEREST-SAVED PIC 9(11)V99 VALUE ZERO. 01 CURRENT-PRINCIPAL PIC 9(9)V99. 01 MONTHS PIC 999 VALUE ZERO. 01 ROI PIC 9(9)V99 VALUE ZERO. 01 CUMMULATIVE-INTEREST PIC 9(9)V99 VALUE ZERO. 01 INTEREST-PORTION PIC 9(9)V99 VALUE ZERO. 01 PRINCIPAL-PORTION PIC 9(9)V99 VALUE ZERO. 01 TOTAL-PAYMENT PIC 9(9)V99 VALUE ZERO. 01 TOTAL-EXTRA-PAY PIC 9(11)V99 VALUE ZERO. 01 MONTHLY-PAYMENT PIC 9(9)V99. 01 PAYMENT-COUNT PIC 9(4) VALUE 1. 01 YYYYMMDD PIC 9(8). 01 DATE-AS-INTEGER PIC 9(8). 01 PAYMENT-DATE. 05 MM PIC 99. 05 FILLER PIC X VALUE '/'. 05 DD PIC 99. 05 FILLER PIC X VALUE '/'. 05 YYYY PIC 9(4). 01 HEADER. 05 FILLER PIC X(30) VALUE - "Values for loan processing:". 01 HEADER-LINE. 05 FILLER PIC X(44) VALUE ALL "-". 01 HEADER-LOAN-NAME. 05 FILLER PIC X(28) VALUE - "Processing loan for: ". 05 HD-LOAN-NAME PIC X(40). 01 HEADER-LOAN-AMOUNT. 05 FILLER PIC X(28) VALUE - "Loan amount: ". 05 HD-LOAN-AMOUNT PIC $$$,$$$,$$9.99. 01 HEADER-INTEREST-RATE. 05 FILLER PIC X(28) VALUE - "Annual interest rate: ". 05 HD-INTEREST-RATE PIC ZZ9.99. 05 FILLER PIC X VALUE "%". 01 HEADER-YEARS. 05 FILLER PIC X(28) VALUE - "Loan period in years: ". 05 HD-YEARS PIC ZZ9. 01 HEADER-MONTHS. 05 FILLER PIC X(28) VALUE - "Payments per year: 12". 01 HEADER-MONTHS-2. 05 FILLER PIC X(35) VALUE - "Scheduled number of payments: ". 05 HD-MONTHS PIC ZZZZZ9. 01 HEADER-PAYMENT-DATE. 05 FILLER PIC X(28) VALUE - "Start date of loan: ". 05 HD-PAYMENT-DATE PIC X(20). 01 HEADER-AP. 05 FILLER PIC X(28) VALUE - "Accelerated Payment: ". 05 HD-AP PIC $$$,$$$,$$9.99. 01 HEADER-MONTHLY-PAYMENT. 05 FILLER PIC X(28) VALUE - "Monthly Payment: ". 05 HD-MONTHLY-PAYMENT PIC $$$,$$$,$$9.99. 05 FILLER PIC X(44) VALUE SPACES. 01 TABLE-HEADER. 05 FILLER PIC X(20) VALUE "Payment number | ". 05 FILLER PIC X(20) VALUE "Payment date | ". 05 FILLER PIC X(22) VALUE "Beginning balance | ". 05 FILLER PIC X(22) VALUE "Scheduled payment | ". 05 FILLER PIC X(18) VALUE "Extra payment | ". 05 FILLER PIC X(24) VALUE "Total payment | ". 05 FILLER PIC X(16) VALUE "Principal |". 05 FILLER PIC X(14) VALUE "Interest | ". 05 FILLER PIC X(21) VALUE "Ending balance | ". 05 FILLER PIC X(24) VALUE "Cumulative interest". 01 TABLE-ROW. 05 ROW-PAY-NUM PIC Z(4)9. 05 FILLER PIC X(9) VALUE SPACES. 05 FILLER PIC X(3) VALUE " | ". 05 ROW-PAY-DATE PIC X(10). 05 FILLER PIC X(14) VALUE " | ". 05 ROW-BEGIN-BAL PIC $$$,$$$,$$9.99. 05 FILLER PIC X(9) VALUE " | ". 05 ROW-SCHED-PMT PIC $$$,$$$9.99. 05 FILLER PIC X(12) VALUE " | ". 05 ROW-EXTRA-PMT PIC $$$,$$$9.99. 05 FILLER PIC X(12) VALUE "|". 05 ROW-TOTAL-PMT PIC $$$,$$$9.99. 05 FILLER PIC X(3) VALUE " | ". 05 ROW-PRINCIPAL PIC $$$,$$$9.99. 05 FILLER PIC X(3) VALUE " | ". 05 ROW-INTEREST PIC $$$,$$$9.99. 05 FILLER PIC X(4) VALUE " | ". 05 ROW-END-BAL PIC $$$,$$$,$$9.99. 05 FILLER PIC X(6) VALUE " | ". 05 ROW-CUM-INT PIC $$$,$$$,$$9.99. 01 FOOTER. 05 FILLER PIC X(15) VALUE "Loan summary". 01 FOOTER-LINE. 05 FILLER PIC X(44) VALUE ALL "-". 01 FOOTER-TOTALS. 05 FILLER PIC X(30) VALUE "Actual number of payments: ". 05 FT-ACTUAL-PAYMENTS PIC ZZZZZ9. 01 FOOTER-EARLY-PAYMENT. 05 FILLER PIC X(30) VALUE "Total early payments: ". 05 FT-EARLY-PAYMENTS PIC $$$,$$$,$$9.99. 01 FOOTER-INTEREST. 05 FILLER PIC X(21) VALUE "Total interest: ". 05 FT-TOTAL-INTEREST PIC $$$,$$$,$$9.99. 01 FOOTER-ROI. 05 FILLER PIC X(40) VALUE "Total Return On Investment (ROI): ". 05 FT-ROI PIC $$$,$$$,$$9.99. 01 FOOTER-CUM-INTEREST. 05 FILLER PIC X(40) VALUE "Total cumulative interest paid: ". 05 FT-CUM-INTEREST PIC X(20). 01 html-code PIC X(400). 01 html-table-header PIC X(160) VALUE "Payment number - "Payment dateBeginning balance - "Scheduled paymentExtra payment". 01 html-table-header-2 PIC x(160) VALUE "Total payment - "PrincipalInterestEnding balance - "Cumulative interest". 01 HTML-TABLE-ROW. 05 FILLER PIC X(9) VALUE "". 05 ROW-PAY-NUM-H PIC Z(4)9. 05 FILLER PIC X(10) VALUE "". 05 ROW-PAY-DATE-H PIC X(10). 05 FILLER PIC X(10) VALUE "". 05 ROW-BEGIN-BAL-H PIC $$$,$$$,$$9.99. 05 FILLER PIC X(10) VALUE "". 05 ROW-SCHED-PMT-H PIC $$$,$$$9.99. 05 FILLER PIC X(10) VALUE "". 05 ROW-EXTRA-PMT-H PIC $$$,$$$9.99. 05 FILLER PIC X(10) VALUE "". 05 ROW-TOTAL-PMT-H PIC $$$,$$$9.99. 05 FILLER PIC X(10) VALUE "". 05 ROW-PRINCIPAL-H PIC $$$,$$$9.99. 05 FILLER PIC X(10) VALUE "". 05 ROW-INTEREST-H PIC $$$,$$$9.99. 05 FILLER PIC X(10) VALUE "". 05 ROW-END-BAL-H PIC $$$,$$$,$$9.99. 05 FILLER PIC X(10) VALUE "". 05 ROW-CUM-INT-H PIC $$$,$$$,$$9.99. 05 FILLER PIC X(10) VALUE "". Linkage section. 1 parameters. * System-inserted field for total string length of parameters 2 parameters-total-length pic 9(4) usage comp. * Flyer format parameter - TEXT or HTML 2 parameter-values pic x(20). 2 parameter-username pic x(50). * Parameters are passed to the program from the JCL and moved * into "flyerformat" PROCEDURE DIVISION using parameters. If parameters-total-length > 0 then * Trim the parameter Move function trim (parameter-values) to format MOVE function trim (parameter-username) to username End-if MOVE FUNCTION CURRENT-DATE(1:8) TO YYYYMMDD. MOVE YYYYMMDD(1:4) TO YYYY. MOVE YYYYMMDD(5:2) TO MM. MOVE YYYYMMDD(7:2) TO DD. PERFORM OPEN-FILES. PERFORM READ-NEXT-RECORD. PERFORM WRITE-HEADER. if FORMAT = 'HTML' then WRITE PRINT-REC FROM HTML-TABLE-HEADER WRITE PRINT-REC FROM HTML-TABLE-HEADER-2 else MOVE TABLE-HEADER TO PRINT-REC WRITE PRINT-REC end-if. PERFORM PROCESSAMONTH UNTIL LASTREC = "Y". PERFORM PROCESSAMONTH. PERFORM WRITE-FOOTER. PERFORM CLOSE-STOP. OPEN-FILES. OPEN INPUT ACCT-REC. OPEN OUTPUT PRINT-LINE. * READ-NEXT-RECORD. PERFORM READ-RECORD PERFORM WRITE-RECORD. PROCESSAMONTH. MOVE PAYMENT-COUNT TO ROW-PAY-NUM. MOVE PAYMENT-DATE TO ROW-PAY-DATE. MOVE CURRENT-PRINCIPAL TO ROW-BEGIN-BAL. MOVE MONTHLY-PAYMENT TO ROW-SCHED-PMT. MOVE AP TO ROW-EXTRA-PMT. COMPUTE TOTAL-PAYMENT = MONTHLY-PAYMENT + AP. COMPUTE TOTAL-EXTRA-PAY = TOTAL-EXTRA-PAY + AP. MOVE TOTAL-PAYMENT TO ROW-TOTAL-PMT. DISPLAY "Current Principal: " CURRENT-PRINCIPAL. DISPLAY "interest rate: " INTEREST-RATE. COMPUTE INTEREST-PORTION = CURRENT-PRINCIPAL * - (INTEREST-RATE / 12.00). MOVE INTEREST-PORTION TO ROW-INTEREST. COMPUTE PRINCIPAL-PORTION = - TOTAL-PAYMENT - INTEREST-PORTION. MOVE PRINCIPAL-PORTION TO ROW-PRINCIPAL. COMPUTE CUMMULATIVE-INTEREST = CUMMULATIVE-INTEREST - + INTEREST-PORTION. COMPUTE CURRENT-PRINCIPAL = - CURRENT-PRINCIPAL - PRINCIPAL-PORTION. IF CURRENT-PRINCIPAL < PRINCIPAL-PORTION MOVE "Y" TO LASTREC END-IF. MOVE CURRENT-PRINCIPAL TO ROW-END-BAL. MOVE CUMMULATIVE-INTEREST TO ROW-CUM-INT. MOVE TABLE-ROW TO PRINT-REC. if format = 'HTML' then MOVE ROW-PAY-NUM TO ROW-PAY-NUM-H MOVE ROW-PAY-DATE TO ROW-PAY-DATE-H MOVE ROW-BEGIN-BAL TO ROW-BEGIN-BAL-H MOVE ROW-SCHED-PMT TO ROW-SCHED-PMT-H MOVE ROW-EXTRA-PMT TO ROW-EXTRA-PMT-H MOVE ROW-TOTAL-PMT TO ROW-TOTAL-PMT-H MOVE ROW-INTEREST TO ROW-INTEREST-H MOVE ROW-PRINCIPAL TO ROW-PRINCIPAL-H MOVE ROW-END-BAL TO ROW-END-BAL-H MOVE ROW-CUM-INT TO ROW-CUM-INT-H WRITE PRINT-REC FROM HTML-TABLE-ROW else WRITE PRINT-REC FROM TABLE-ROW end-if. ADD 1 TO PAYMENT-COUNT. PERFORM UPDATE-PAYMENT-DATE. UPDATE-PAYMENT-DATE. COMPUTE DATE-AS-INTEGER = FUNCTION INTEGER-OF-DATE(YYYYMMDD). ADD 30 TO DATE-AS-INTEGER. COMPUTE YYYYMMDD = FUNCTION DATE-OF-INTEGER(DATE-AS-INTEGER). MOVE YYYYMMDD(1:4) TO YYYY. MOVE YYYYMMDD(5:2) TO MM. MOVE YYYYMMDD(7:2) TO DD. * CLOSE-STOP. CLOSE ACCT-REC. CLOSE PRINT-LINE. GOBACK. * READ-RECORD. READ ACCT-REC AT END MOVE 'Y' TO LASTREC END-READ. * WRITE-RECORD. MOVE TOTAL-RECORD-F TO TOTAL-RECORD. UNSTRING TOTAL-RECORD DELIMITED BY ALL ',' INTO LOAN-NAME, LOAN-AMOUNT, INTEREST-RATE, YEARS, APS END-UNSTRING. DIVIDE 100 INTO LOAN-AMOUNT. DIVIDE 10000 INTO INTEREST-RATE. COMPUTE AP = FUNCTION NUMVAL(APS). DIVIDE 100 INTO AP. MOVE LOAN-AMOUNT TO CURRENT-PRINCIPAL. COMPUTE MONTHS = YEARS * 12. DISPLAY 'Months: ' MONTHS. COMPUTE MONTHLY-PAYMENT = LOAN-AMOUNT * - FUNCTION ANNUITY ((INTEREST-RATE / 12), MONTHS). MOVE MONTHLY-PAYMENT TO ORIGINAL-MONTHLY-PAYMENT. COMPUTE ORIGINAL-TOTAL-INTEREST = - (ORIGINAL-MONTHLY-PAYMENT * MONTHS) - LOAN-AMOUNT. WRITE-HEADER. MOVE LOAN-NAME TO HD-LOAN-NAME. MOVE LOAN-AMOUNT TO HD-LOAN-AMOUNT. MULTIPLY 100 BY INTEREST-RATE. MOVE INTEREST-RATE TO HD-INTEREST-RATE. DIVIDE 100 INTO INTEREST-RATE. MOVE YEARS TO HD-YEARS. MOVE MONTHS TO HD-MONTHS. MOVE PAYMENT-DATE TO HD-PAYMENT-DATE. MOVE AP TO HD-AP. MOVE MONTHLY-PAYMENT TO HD-MONTHLY-PAYMENT. if FORMAT = 'HTML' then MOVE "
" TO html-code
                  WRITE PRINT-REC FROM html-code
               end-if.
      *
               WRITE PRINT-REC FROM HEADER.
               WRITE PRINT-REC FROM HEADER-LINE.
               WRITE PRINT-REC FROM HEADER-LOAN-NAME.
               WRITE PRINT-REC FROM HEADER-LOAN-AMOUNT.
               WRITE PRINT-REC FROM HEADER-INTEREST-RATE.
               WRITE PRINT-REC FROM HEADER-YEARS.
               WRITE PRINT-REC FROM HEADER-MONTHS.
               WRITE PRINT-REC FROM HEADER-MONTHS-2.
               WRITE PRINT-REC FROM HEADER-PAYMENT-DATE.
               WRITE PRINT-REC FROM HEADER-AP.

            if format = 'HTML' then
                MOVE "
" TO html-code WRITE PRINT-REC FROM html-code MOVE "" - TO html-code WRITE PRINT-REC FROM html-code end-if. WRITE-FOOTER. SUBTRACT 1 FROM PAYMENT-COUNT. if format = 'HTML' then MOVE "
" TO html-code
                WRITE PRINT-REC FROM html-code
            end-if.
           MOVE PAYMENT-COUNT    TO FT-ACTUAL-PAYMENTS
           MOVE TOTAL-EXTRA-PAY  TO FT-EARLY-PAYMENTS.
           MOVE CUMMULATIVE-INTEREST       TO FT-TOTAL-INTEREST.
           COMPUTE INTEREST-SAVED =
      -     ORIGINAL-TOTAL-INTEREST - CUMMULATIVE-INTEREST.
           WRITE PRINT-REC FROM FOOTER.
           WRITE PRINT-REC FROM FOOTER-LINE.
           WRITE PRINT-REC FROM FOOTER-TOTALS.
           WRITE PRINT-REC FROM FOOTER-EARLY-PAYMENT.
           IF TOTAL-EXTRA-PAY  > 0
               COMPUTE ROI = INTEREST-SAVED  / TOTAL-EXTRA-PAY
               MOVE ROI TO FT-ROI
               WRITE PRINT-REC FROM FOOTER-ROI
           END-IF.

           MOVE username TO html-code
           WRITE PRINT-REC FROM html-code
           MOVE FUNCTION CURRENT-DATE TO html-code
           WRITE PRINT-REC FROM html-code

            if format = 'HTML' then
                MOVE "
" TO html-code WRITE PRINT-REC FROM html-code end-if. * //JCL to run the program for MORT1 //MORTJ1 JOB 1,NOTIFY=&SYSUID //***************************************************/ //COBRUN EXEC IGYWCL //COBOL.SYSIN DD DSN=&SYSUID..CBL(MORTGAGE),DISP=SHR //LKED.SYSLMOD DD DSN=&SYSUID..LOAD(MORTGAGE),DISP=SHR //***************************************************/ // IF RC <= 4 THEN //***************************************************/ //RUN EXEC PGM(MORTGAGE)PARM=('HTML','&SYSUID') //STEPLIB DD DSN=&SYSUID..LOAD,DISP=SHR //ACCTREC DD DSN=&SYSUID..INPUT(MORTD1),DISP=SHR //PRTLINE DD DSN=&SYSUID..D&LYYMMDD..T&LHHMMSS(1:4)., // DISP=(NEW,CATLG), // UNIT=SYSDA, // SPACE=(CYL,(1,1)), // DCB=(RECFM=V,LRECL=404,BLKSIZE=0) //SYSOUT DD SYSOUT=*,OUTLIM=15000 //CEEDUMP DD DUMMY //SYSUDUMP DD DUMMY //***************************************************/ // ELSE // ENDIF //JCL to run the program for MORT2 //MORTJ2 JOB 1,NOTIFY=&SYSUID //***************************************************/ //COBRUN EXEC IGYWCL //COBOL.SYSIN DD DSN=&SYSUID..CBL(MORTGAGE),DISP=SHR //LKED.SYSLMOD DD DSN=&SYSUID..LOAD(MORTGAGE),DISP=SHR //***************************************************/ // IF RC <= 4 THEN //***************************************************/ //RUN EXEC PGM(MORTGAGE)PARM=('HTML','&SYSUID') //STEPLIB DD DSN=&SYSUID..LOAD,DISP=SHR //ACCTREC DD DSN=&SYSUID..INPUT(MORTD1),DISP=SHR //PRTLINE DD DSN=&SYSUID..D&LYYMMDD..T&LHHMMSS(1:4)., // DISP=(NEW,CATLG), // UNIT=SYSDA, // SPACE=(CYL,(1,1)), // DCB=(RECFM=V,LRECL=404,BLKSIZE=0) //SYSOUT DD SYSOUT=*,OUTLIM=15000 //CEEDUMP DD DUMMY //SYSUDUMP DD DUMMY //***************************************************/ // ELSE // ENDIF