*S*************************************************************************         
*S***       
*S***                              WolffPack    
*S***       
*S*** Copycode  : WFPKPAKC          
*S*** System    : FINANCIER         
*S*** Title     : Packaging routine 
*S*** Function  : This copycode include WolffPack delivered subroutines 
*S***              used by the institutional packaging subprograms.     
*S***       
*S***             Inline subroutines include:   
*S***               - CHECK-DEGREE  
*S***                 - Verifies that a student's degree is within a    
*S***                   specific subset         
*S***               - CHECK-DEGREE-ASSOCIATES   
*S***                 - Verifies that a student's degree is within a    
*S***                   specific subset         
*S***               - CHECK-DEGREE-BACHELORS    
*S***                 - Verifies that a student's degree is within a    
*S***                   specific subset         
*S***               - CHECK-EFC     
*S***                 - Verifies that a student's EFC is within a       
*S***                   fund specific range     
*S***               - CHECK-INSTATE-RESIDENCY   
*S***                 - Verifies that a student's residency is instate  
*S***               - CHECK-PAR-ED-LEVEL        
*S***                 - Verifies that a parent's education level        
*S***                   is within a subset      
*S***               - CHECK-RECEIVED-DATE       
*S***                 - Verifies that a student's ISIR received date    
*S***                   is prior to the fund's deadline     
*S***               - CHECK-REQUIREMENTS        
*S***                 - Verifies that a student's requirement documents 
*S***                   are appropriate to the fund         
*S***               - FUND-EDITS    
*S***                 - Performs fund specific edits        
*S***                     (Not frozen, awarding allowed, etc.)          
*S***               - LOAD-EXISTING-AWARDS      
*S***                 - Loads a students previously awarded funds       
*S***                   for packaging consideration         
*S***               - PACKAGE-DLSUB 
*S***                 - Processes a potential Direct Loan (Sub) for     
*S***                   a student invoking the federal logic,           
*S***                   PACKAGE-FED-DLSUB, and then invoking the institutional      
*S***                   packaging routine (WxPKPyyN)        
*S***               - PACKAGE-DLUNSUB           
*S***                 - Processes a potential Direct Loan (UnSub) for   
*S***                   a student invoking the federal logic,           
*S***                   PACKAGE-FED-DLUNSUB, and then invoking the institutional    
*S***                   packaging routine (WxPKPyyN)        
*S***               - PACKAGE-FED-DLSUB         
*S***                 - Processes a potential Direct Loan (Sub) for     
*S***                   a student, using the federal logic only,        
*S***                   additional institional edits may be 
*S***                   added in PACKAGE-DLSUB (WxPKPyyN)   
*S***               - PACKAGE-FED-DLUNSUB       
*S***                 - Processes a potential Direct Loan (UnSub) for   
*S***                   a student, using the federal logic only,        
*S***                   additional institional edits may be 
*S***                   added in PACKAGE-DLUNSUB (WxPKPyyN) 
*S***               - PACKAGE-FED-SEOG          
*S***                 - Processes a potential SEOG for      
*S***                   a student, using the federal logic only,        
*S***                   additional institional edits may be 
*S***                   added in PACKAGE-SEOG (WxPKPyyN)    
*S***               - PACKAGE-GRADPLUS          
*S***                 - Processes a potential Graduate PLUS Loan for    
*S***                   a student invoking the federal logic,           
*S***                   PACKAGE-FED-GRADPLUS, and then invoking the     
*S***                   institutional packaging routine (WxPKPyyN)      
*S***               - PACKAGE-PLUS  
*S***                 - Processes a potential PLUS Loan for 
*S***                   a student invoking the federal logic,           
*S***                   PACKAGE-FED-PLUS, and then invoking the institutional       
*S***                   packaging routine (WxPKPyyN)        
*S***               - PACKAGE-PELL  
*S***                 - Processes a potential Pell award for a student, 
*S***                   actual WF-PELL lookup is done via external      
*S***                   subroutine PELL-LOOKUP (WFPKPELE) AY < 2025     
*S***                      OR       
*S***                   subroutine DETERMINE-PELL-AWARD (WFPKDPAE) AY > 2024        
*S***               - PACKAGE-SEOG  
*S***                 - Processes a potential SEOG Loan for 
*S***                   a student invoking the federal logic,           
*S***                   PACKAGE-FED-SEOG, and then invoking the institutional       
*S***                   packaging routine (WxPKPyyN)        
*S***               - PACKAGE-STATE-GRANT       
*S***                 - Processes a potential state grant Loan for      
*S***                   a student invoking the institutional
*S***                   packaging routine (WxPKPyyN)        
*S***               - PACKAGE-TEACH 
*S***                 - Processes a potential TEACH Loan for
*S***                   a student invoking the institutional
*S***                   packaging routine (WxPKPyyN)        
*S***               - PACKAGE-WORK  
*S***                 - Processes a potential Work Study award for      
*S***                   a student and then invoking the institutional   
*S***                   packaging routine (WxPKPyyN)        
*S***               - PREPARE-AWARD 
*S***                 - Processes a potential award for a student,      
*S***                   including adjusting Need, SC/PC/FC, editing against         
*S***                   fund limits, etc.       
*S***               - PREPARE-BYPASS
*S***                 - Processes a non-award for a student,
*S***                   including adjusting Need, SC/PC/FC  
*S***       
*S***      Copyright 1995 - 2013 WolffPack, Inc.  All rights reserved.  
*S***       
*S*** Institutional Notes:          
*S*************************************************************************         
*S***       
*S*************************************************************************         
*S**DEFINE SUBROUTINE CHECK-DEGREE  
*S*************************************************************************         
*S**  /*    
*S**  DECIDE ON EVERY VALUE OF #S-DEG           
*S**    VALUE 'AA', 'AS', 'AAS', 'BAS'          
*S**      ASSIGN #CHECK-DEGREE = TRUE           
*S**    NONE
*S**      IGNORE        
*S**  END-DECIDE        
*S**  /*    
*S**END-SUBROUTINE /* CHECK-DEGREE  
*S***       
*S*************************************************************************         
*S**DEFINE SUBROUTINE CHECK-DEGREE-ASSOCIATES   
*S*************************************************************************         
*S**  /*    
*S**  DECIDE ON EVERY VALUE OF #S-DEG           
*S**    VALUE 'AA', 'AS', 'AAS'     
*S**      ASSIGN #CHECK-DEGREE = TRUE           
*S**    NONE
*S**      IGNORE        
*S**  END-DECIDE        
*S**  /*    
*S**END-SUBROUTINE /* CHECK-DEGREE-ASSOCIATES   
*S***       
*S*************************************************************************         
*S**DEFINE SUBROUTINE CHECK-DEGREE-BACHELORS    
*S*************************************************************************         
*S**  /*    
*S**  DECIDE ON EVERY VALUE OF #S-DEG           
*S**    VALUE 'AA', 'AS', 'AAS'     
*S**      ASSIGN #CHECK-DEGREE = TRUE           
*S**    NONE
*S**      IGNORE        
*S**  END-DECIDE        
*S**  /*    
*S**END-SUBROUTINE /* CHECK-DEGREE-BACHELORS    
*S***       
*S*************************************************************************         
*S**DEFINE SUBROUTINE CHECK-EFC     
*S*************************************************************************         
*S**  /*    
*S**  /* EFC must be within minimum and maximum range       
*S**  ASSIGN #CHECK-EFC = FALSE     
*S**  IF (WFPKFNDD.FUND-MIN-EFC(#FUND-SUB) <= #EFC) AND     
*S**     (#EFC <= WFPKFNDD.FUND-MAX-EFC(#FUND-SUB))         
*S**    ASSIGN #CHECK-EFC = TRUE    
*S**  END-IF
*S**  /*    
*S**END-SUBROUTINE /* CHECK-EFC     
*S***       
*S*************************************************************************         
*S**DEFINE SUBROUTINE CHECK-INSTATE-RESIDENCY   
*S*************************************************************************         
*S**  /*    
*S**  /* Check whether student is instate resident          
*S**  ASSIGN #CHECK-INSTATE-RES = FALSE         
*S**  IF #S-IOS = '1'   
*S**    ASSIGN #CHECK-INSTATE-RES = TRUE        
*S**  END-IF
*S**  /*    
*S**END-SUBROUTINE /* CHECK-INSTATE-RESIDENCY   
*S***       
*S*************************************************************************         
*S**DEFINE SUBROUTINE CHECK-PAR-ED-LEVEL        
*S*************************************************************************         
*S**  /*    
*S**  ASSIGN #CHECK-PAR-ED-LEVEL = FALSE        
*S**  IF ##AID-YEAR > '2014'        
*S**    IF (#P1-LEV NOT = ' ' AND   
*S**        #P2-LEV NOT = ' ')      
*S**      IF (#P1-LEV = '1' OR      
*S**          #P1-LEV = '2') AND    
*S**         (#P2-LEV = '1' OR      
*S**          #P2-LEV = '2')        
*S**       ASSIGN #CHECK-PAR-ED-LEVEL = TRUE    
*S**      END-IF        
*S**    END-IF          
*S**  ELSE  
*S**   IF (#FA-LEV NOT = ' ' AND    
*S**       #MO-LEV NOT = ' ')       
*S**     IF (#FA-LEV  = '1' OR      
*S**         #FA-LEV  = '2') AND    
*S**        (#MO-LEV  = '1' OR      
*S**         #MO-LEV  = '2')        
*S**       ASSIGN #CHECK-PAR-ED-LEVEL = TRUE    
*S**     END-IF         
*S**   END-IF           
*S**  END-IF
*S**  /*    
*S**END-SUBROUTINE /* CHECK-PAR-ED-LEVEL        
*S***       
*S*************************************************************************         
*S**DEFINE SUBROUTINE CHECK-RECEIVED-DATE       
*S*************************************************************************         
*S**  /*    
*S**  /* ISIR must be received prior to fund deadline       
*S**  ASSIGN #CHECK-RECVD-DATE = FALSE          
*S**  IF (WFPKFNDD.FUND-RECVD-DATE(#FUND-SUB) > 
*S**      #CPS-RECVD-DATE)          
*S**    ASSIGN #CHECK-RECVD-DATE = TRUE         
*S**  END-IF
*S**  /*    
*S**END-SUBROUTINE /* CHECK-RECEIVED-DATE       
*S***       
*S*************************************************************************         
*S**DEFINE SUBROUTINE CHECK-REQUIREMENTS        
*S*************************************************************************         
*S**  /*    
*S**  IF NOT #REQMTS-READ           
*S**    ASSIGN #REQ-TYPE = APP-TYPE 
*S**    PERFORM READ-REQUIREMENTS #REQ-TYPE #REQS           
*S**    ASSIGN #REQMTS-READ = TRUE  
*S**  END-IF
*S**  /*    
*S**  RESET #REQMTS-COMPLETE        
*S**        #REQMTS-FOUND           
*S**  IF WFPKFNDD.FUND-DOC-EXCLUDE(#FUND-SUB) NOT = 'Y'     
*S**    SEPARATE WFPKFNDD.FUND-DOC-STAT(#FUND-SUB) INTO #REQ-STAT-ARRAY(*)          
*S**  END-IF
*S**  FOR #REQ-SUB = 1 TO 30        
*S**    IF #REQS.#RE-D-ST-DOC(#REQ-SUB) = WFPKFNDD.FUND-DOC(#FUND-SUB)  
*S**      ASSIGN #REQMTS-FOUND = TRUE           
*S**      /*
*S**      /* If no statuses requested, just check for requirement existence         
*S**      /*
*S**      IF WFPKFNDD.FUND-DOC-STAT(#FUND-SUB) = ' ' OR     
*S**         WFPKFNDD.FUND-DOC-EXCLUDE(#FUND-SUB) = 'Y'     
*S**        ESCAPE BOTTOM           
*S**      END-IF        
*S**      FOR #REQ-STAT-SUB = 1 TO 10           
*S**        IF #REQS.#RE-D-STAT(#REQ-SUB) = #REQ-STAT(#REQ-STAT-SUB) AND
*S**           #REQ-STAT(#REQ-STAT-SUB) NOT = ' '           
*S**          ASSIGN #REQMTS-COMPLETE = TRUE    
*S**        END-IF      
*S**        ESCAPE BOTTOM           
*S**      END-FOR       
*S**    END-IF          
*S**  END-FOR           
*S**  /*    
*S**  IF WFPKFNDD.FUND-DOC-STAT(#FUND-SUB) = ' '
*S**    /* Only check for document  
*S**    IF NOT #REQMTS-FOUND        
*S**      ASSIGN #REJECT-RSN(#FUND-SUB) = #REQ-NOT-FOUND    
*S**      ESCAPE ROUTINE
*S**    END-IF          
*S**  ELSE  
*S**    IF WFPKFNDD.FUND-DOC-EXCLUDE(#FUND-SUB) = 'Y'       
*S**      /* Document is not allowed for fund   
*S**      IF #REQMTS-FOUND          
*S**        ASSIGN #REJECT-RSN(#FUND-SUB) = #REQ-FOUND      
*S**        ESCAPE ROUTINE          
*S**      END-IF        
*S**    ELSE
*S**      /* Check for document status          
*S**      IF NOT #REQMTS-COMPLETE   
*S**        ASSIGN #REJECT-RSN(#FUND-SUB) = #REQ-NOT-FOUND  
*S**        ESCAPE ROUTINE          
*S**      END-IF        
*S**    END-IF          
*S**  END-IF
*S**END-SUBROUTINE /* CHECK-REQUIREMENTS        
*S***       
*S*************************************************************************         
*S**DEFINE SUBROUTINE DETERMINE-CLASS-LEVEL     
*S*************************************************************************         
*S**  /*    
*S**  /*  Determine Class level     
*S**  /*    Default looks at STUDENT data       
*S**  DECIDE ON FIRST VALUE OF #S-TIM           
*S**    VALUE 'F'       
*S**      ASSIGN #CLASS-LEVEL = 'F' 
*S**    VALUE 'T'       
*S**      ASSIGN #CLASS-LEVEL = 'T' 
*S**    VALUE 'H'       
*S**      ASSIGN #CLASS-LEVEL = 'H' 
*S**    VALUE 'L'       
*S**      ASSIGN #CLASS-LEVEL = 'L' 
*S**    NONE
*S**      ASSIGN #CLASS-LEVEL = 'F' 
*S**  END-DECIDE        
*S**END-SUBROUTINE /* DETERMINE-CLASS-LEVEL     
*S***       
*S*************************************************************************         
*S**DEFINE SUBROUTINE FUND-EDITS    
*S*************************************************************************         
*S**  /*    
*S**  IF WFPKPAKD.#REJECT-RSN(#FUND-SUB) NOT = ' '          
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  /*    
*S**  /* Verify funds are eligible for awarding 
*S**  /*    
*S**  /* Fund doesn't exist         
*S**  IF WFPKFNDD.EXISTS(#FUND-SUB) = 'N'       
*S**    MOVE 'Y' TO FUND-REJECT(#FUND-SUB)      
*S**    ASSIGN #REJECT-RSN(#FUND-SUB) = #FUND-NOT-FOUND     
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  /*    
*S**  /* Fund not set for packaging 
*S**  IF WFPKFNDD.FUND-PKG(#FUND-SUB) NOT = 'Y' AND         
*S**     WFPKFNDD.FUND-PKG(#FUND-SUB) NOT = 'F' 
*S**    MOVE 'Y' TO FUND-REJECT(#FUND-SUB)      
*S**    ASSIGN #REJECT-RSN(#FUND-SUB) = #PACKAGE-FUND       
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  /*    
*S**  /* Fund limit error           
*S**  IF WFPKFNDD.FUND-PKG(#FUND-SUB) = 'F'     
*S**    MOVE 'Y' TO FUND-REJECT(#FUND-SUB)      
*S**    ASSIGN #REJECT-RSN(#FUND-SUB) = #FUND-LIMIT-ERR     
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  /*    
*S**  IF WFPKFNDD.WF-FU-FREEZE-OFF(#FUND-SUB) = 'Y'         
*S**    MOVE 'Y' TO FUND-REJECT(#FUND-SUB)      
*S**    ASSIGN #REJECT-RSN(#FUND-SUB) = #FUND-FROZEN        
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  /*    
*S**  IF WFPKFNDD.WF-FU-ALLOW-AWDS(#FUND-SUB) NOT = 'Y'     
*S**    MOVE 'Y' TO FUND-REJECT(#FUND-SUB)      
*S**    ASSIGN #REJECT-RSN(#FUND-SUB) = #FUND-ALLOW         
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  /*    
*S**  IF WFPKFNDD.WF-FU-STATUS(#FUND-SUB) NOT = 'A'         
*S**    MOVE 'Y' TO FUND-REJECT(#FUND-SUB)      
*S**    ASSIGN #REJECT-RSN(#FUND-SUB) = #FUND-STATUS        
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  /*    
*S**END-SUBROUTINE /* FUND-EDITS    
*S***       
*S*************************************************************************         
*S**DEFINE SUBROUTINE LOAD-EXISTING-AWARDS      
*S*************************************************************************         
*S**  /*    
*S**  /* Lookup existing awards for student     
*S**  RESET WFAWARDD    
*S**  ASSIGN WFAWARDD.WF-FAO = ##FAO-ID         
*S**  ASSIGN WFAWARDD.WF-AID-YEAR = ##AID-YEAR  
*S**  ASSIGN WFAWARDD.WW-STUDENT-ID = ##STUDENT-ID          
*S**  MOVE 'NEXT' TO WWAOBJ.#FUNCTION           
*S**  /*    
*S**  /* Loop through awards and load into array
*S**  FOR #SUB = 1 TO 20
*S**    PERFORM CALL-OBJECT-AWARD   
*S**    IF NOT WWAOBJ.#EXISTS OR    
*S**      WFAWARDD.WW-STUDENT-ID NOT = ##STUDENT-ID         
*S**      ESCAPE BOTTOM 
*S**    END-IF          
*S**    MOVE BY NAME WFAWARDD TO #STUDENT-AWARDS(#SUB)      
*S**    /*  
*S**    /* Move award disbursement data to array
*S**    MOVE BY NAME WFAWARDD.WF-AWARD-DISB TO WFAWARDL.WF-AWARD-DISB   
*S**    /*  
*S**  END-FOR           
*S**  /*    
*S**END-SUBROUTINE /* LOAD-EXISTING-AWARDS      
*S***       
*S*************************************************************************         
*S**DEFINE SUBROUTINE PACKAGE-DLSUB 
*S*************************************************************************         
*S**  /*    
*S**  /* Call Direct Loan Sub logic 
*S**  PERFORM PACKAGE-FED-DLSUB     
*S**  IF #REJECT-RSN(#FUND-SUB) NE ' '          
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  /*    
*S**  /* Invoke Institutional DLSUB logic       
*S**  /*    
*S**  PERFORM CALL-INSTITUTIONAL-PKGING         
*S**  IF #REJECT-RSN(#FUND-SUB) NE ' '          
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  /*    
*S**  /* Tentative award
*S**  PERFORM PREPARE-AWARD         
*S**  ASSIGN #ELIG-SUB = WFPKPAKD.AWARD-AMT(#FUND-SUB)      
*S**  /*    
*S**END-SUBROUTINE /* PACKAGE-DLSUB 
*S***       
*S*************************************************************************         
*S**DEFINE SUBROUTINE PACKAGE-DLUNSUB           
*S*************************************************************************         
*S**  /*    
*S**  /* Call Direct Loan Unsub logic           
*S**  PERFORM PACKAGE-FED-DLUNSUB   
*S**  IF #REJECT-RSN(#FUND-SUB) NE ' '          
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  /*    
*S**  /* Invoke Institutional DLUNSUB logic     
*S**  /*    
*S**  PERFORM CALL-INSTITUTIONAL-PKGING         
*S**  IF #REJECT-RSN(#FUND-SUB) NE ' '          
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  /*    
*S**  /* Tentative award
*S**  PERFORM PREPARE-AWARD         
*S**  ASSIGN #ELIG-UNSUB = WFPKPAKD.AWARD-AMT(#FUND-SUB)    
*S**  /*    
*S**END-SUBROUTINE /* PACKAGE-DLUNSUB           
*S***       
*S*************************************************************************         
*S**DEFINE SUBROUTINE PACKAGE-FED-DLSUB         
*S*************************************************************************         
*S**  /*    
*S**  /* Subsidized Usage Limit check           
*S**  IF #S-DL-SUB-LIMIT = 'Y'      
*S**      ASSIGN #REJECT-RSN(#FUND-SUB) = #DL-SUB-LIMIT-ERR 
*S**      ESCAPE ROUTINE
*S**  END-IF
*S**  /*    
*S**  /* Citizen or eligible non-citizen        
*S**  IF #S-CIT = 'U' OR
*S**     #S-CIT = 'E'   
*S**      /* Allowed students       
*S**      IGNORE        
*S**    ELSE
*S**      ASSIGN #REJECT-RSN(#FUND-SUB) = #CIT-ERR          
*S**      ESCAPE ROUTINE
*S**  END-IF
*S**  /*    
*S**  /* Graduate students not allowed DL Sub   
*S**  IF WWSTDNTD.WW-ST-AC-CLS = 'GR' OR        
*S**     WWSTDNTD.WW-ST-AC-CLS = 'G+'           
*S**      ASSIGN #REJECT-RSN(#FUND-SUB) = #INVALID-CLASS    
*S**      ESCAPE ROUTINE
*S**  END-IF
*S**  /*    
*S**  /* Student class level        
*S**  DECIDE ON FIRST VALUE OF #CLASS-LEVEL     
*S**    VALUE 'F', 'T', 'H'         
*S**      /*
*S**      /* At least half-time     
*S**      IGNORE        
*S**    NONE
*S**      /*
*S**      /* Less than half-time    
*S**      ASSIGN #REJECT-RSN(#FUND-SUB) = #INVALID-ENR      
*S**      ESCAPE ROUTINE
*S**  END-DECIDE        
*S**  /*    
*S**  /* Check Annual limits        
*S**  DECIDE ON FIRST VALUE OF WWSTDNTD.WW-ST-AC-CLS        
*S**    VALUE 'FR'      
*S**      ASSIGN #AWARD-MAX = DL-ANNUAL-LIMITS.FRESH-SUB    
*S**      IF #AY-DEP-STAT = 'D'     
*S**        ASSIGN #UNSUB-AGG = DL-LIFETIME-LIMITS.FRESH-DEP-UNSUB      
*S**      ELSE          
*S**        ASSIGN #UNSUB-AGG = DL-LIFETIME-LIMITS.FRESH-INDEP-UNSUB    
*S**      END-IF        
*S**    VALUE 'SO'      
*S**      ASSIGN #AWARD-MAX = DL-ANNUAL-LIMITS.SOPH-SUB     
*S**      IF #AY-DEP-STAT = 'D'     
*S**        ASSIGN #UNSUB-AGG = DL-LIFETIME-LIMITS.SOPH-DEP-UNSUB       
*S**      ELSE          
*S**        ASSIGN #UNSUB-AGG = DL-LIFETIME-LIMITS.SOPH-INDEP-UNSUB     
*S**      END-IF        
*S**    VALUE 'JR', 'SR', 'U+'      
*S**      ASSIGN #AWARD-MAX = DL-ANNUAL-LIMITS.JR-SR-SUB    
*S**      IF #AY-DEP-STAT = 'D'     
*S**        ASSIGN #UNSUB-AGG = DL-LIFETIME-LIMITS.JR-SR-DEP-UNSUB      
*S**      ELSE          
*S**        ASSIGN #UNSUB-AGG = DL-LIFETIME-LIMITS.JR-SR-INDEP-UNSUB    
*S**      END-IF        
*S**    VALUE 'GR', 'G+'
*S**      ASSIGN #AWARD-MAX = DL-ANNUAL-LIMITS.GRAD-SUB     
*S**    NONE
*S**      ASSIGN #AWARD-MAX = 0     
*S**      ASSIGN #REJECT-RSN(#FUND-SUB) = #INVALID-CLASS    
*S**      ESCAPE ROUTINE
*S**  END-DECIDE        
*S**  /*    
*S**  /* Check aggregate limits     
*S**  DECIDE ON FIRST VALUE OF WWSTDNTD.WW-ST-AC-CLS        
*S**    VALUE 'FR'      
*S**      IF (#AWARD-MAX + #NSLDS-SUB-TOTAL) > DL-LIFETIME-LIMITS.FRESH-SUB         
*S**        COMPUTE #AWARD-MAX = DL-LIFETIME-LIMITS.FRESH-SUB -         
*S**              #NSLDS-SUB-TOTAL  
*S**        IF #AWARD-MAX > 0 AND #NSLDS-CMB-TOTAL >= #UNSUB-AGG        
*S**          ASSIGN #AWARD-MAX = 0 
*S**          ASSIGN #REJECT-RSN(#FUND-SUB) = #LIFETIME-LIMIT-ERR       
*S**          ESCAPE ROUTINE        
*S**        END-IF      
*S**      END-IF        
*S**    VALUE 'SO'      
*S**      IF (#AWARD-MAX + #NSLDS-SUB-TOTAL) > DL-LIFETIME-LIMITS.SOPH-SUB          
*S**        COMPUTE #AWARD-MAX = DL-LIFETIME-LIMITS.SOPH-SUB -          
*S**                #NSLDS-SUB-TOTAL
*S**        IF #AWARD-MAX > 0 AND #NSLDS-CMB-TOTAL >= #UNSUB-AGG        
*S**          ASSIGN #AWARD-MAX = 0 
*S**          ASSIGN #REJECT-RSN(#FUND-SUB) = #LIFETIME-LIMIT-ERR       
*S**          ESCAPE ROUTINE        
*S**        END-IF      
*S**      END-IF        
*S**    VALUE 'JR', 'SR', 'U+'      
*S**      IF (#AWARD-MAX + #NSLDS-SUB-TOTAL) > DL-LIFETIME-LIMITS.JR-SR-SUB         
*S**        COMPUTE #AWARD-MAX = DL-LIFETIME-LIMITS.JR-SR-SUB -         
*S**                #NSLDS-SUB-TOTAL
*S**        IF #AWARD-MAX > 0 AND #NSLDS-CMB-TOTAL >= #UNSUB-AGG        
*S**          ASSIGN #AWARD-MAX = 0 
*S**          ASSIGN #REJECT-RSN(#FUND-SUB) = #LIFETIME-LIMIT-ERR       
*S**          ESCAPE ROUTINE        
*S**        END-IF      
*S**      END-IF        
*S**    VALUE 'GR', 'G+'
*S**      IF (#AWARD-MAX + #NSLDS-SUB-TOTAL) >= DL-LIFETIME-LIMITS.GRAD-SUB         
*S**        COMPUTE #AWARD-MAX = DL-LIFETIME-LIMITS.GRAD-SUB -          
*S**                #NSLDS-SUB-TOTAL
*S**      END-IF        
*S**    NONE
*S**      ASSIGN #AWARD-MAX = 0     
*S**      ASSIGN #REJECT-RSN(#FUND-SUB) = #INVALID-CLASS    
*S**      ESCAPE ROUTINE
*S**  END-DECIDE        
*S**  /*    
*S**  /* If NSLDS amount > Lifetime limit, #AWARD-MAX will be < 0       
*S**  IF #AWARD-MAX LE 0
*S**    ASSIGN #AWARD-MAX = 0       
*S**    ASSIGN #REJECT-RSN(#FUND-SUB) = #LIFETIME-LIMIT-ERR 
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  IF (#UNSUB-AGG - #NSLDS-CMB-TOTAL) < #AWARD-MAX       
*S**    COMPUTE #AWARD-MAX = #UNSUB-AGG - #NSLDS-CMB-TOTAL  
*S**  END-IF
*S**  /* If Total DLUSUB - Total Combined < DLSUB AWARD MAX,
*S**  /*   New Award Max will be <= 0           
*S**  IF #AWARD-MAX LE 0
*S**    ASSIGN #AWARD-MAX = 0       
*S**    ASSIGN #REJECT-RSN(#FUND-SUB) = #LIFETIME-LIMIT-ERR 
*S**  END-IF
*S**  /*    
*S**END-SUBROUTINE /* PACKAGE-FED-DLSUB         
*S***       
*S*************************************************************************         
*S**DEFINE SUBROUTINE PACKAGE-FED-DLUNSUB       
*S*************************************************************************         
*S**  /*    
*S**  /* Citizen or eligible non-citizen        
*S**  IF #S-CIT = 'U' OR
*S**     #S-CIT = 'E'   
*S**      /* Allowed students       
*S**      IGNORE        
*S**    ELSE
*S**      ASSIGN #REJECT-RSN(#FUND-SUB) = #CIT-ERR          
*S**      ESCAPE ROUTINE
*S**  END-IF
*S**  /*    
*S**  /* Student class level        
*S**  DECIDE ON FIRST VALUE OF #CLASS-LEVEL     
*S**    VALUE 'F', 'T', 'H'         
*S**      /*
*S**      /* At least half-time     
*S**      IGNORE        
*S**    NONE
*S**      /*
*S**      /* Less than half-time    
*S**      ASSIGN #REJECT-RSN(#FUND-SUB) = #INVALID-ENR      
*S**      ESCAPE ROUTINE
*S**  END-DECIDE        
*S**  /*    
*S**  /* Tentative award
*S**  DECIDE ON FIRST VALUE OF #AY-DEP-STAT     
*S**    VALUE 'D'       
*S**      DECIDE ON FIRST VALUE OF WWSTDNTD.WW-ST-AC-CLS    
*S**        VALUE 'FR'  
*S**          ASSIGN #AWARD-MAX = DL-ANNUAL-LIMITS.FRESH-DEP-UNSUB      
*S**        VALUE 'SO'  
*S**          ASSIGN #AWARD-MAX = DL-ANNUAL-LIMITS.SOPH-DEP-UNSUB       
*S**        VALUE 'JR', 'SR', 'U+'  
*S**          ASSIGN #AWARD-MAX = DL-ANNUAL-LIMITS.JR-SR-DEP-UNSUB      
*S**        VALUE 'GR', 'G+'        
*S**          ASSIGN #AWARD-MAX = 0 
*S**        NONE        
*S**          ASSIGN #AWARD-MAX = 0 
*S**          ASSIGN #REJECT-RSN(#FUND-SUB) = #INVALID-CLASS
*S**          ESCAPE ROUTINE        
*S**      END-DECIDE    
*S**    VALUE 'I'       
*S**      DECIDE ON FIRST VALUE OF WWSTDNTD.WW-ST-AC-CLS    
*S**        VALUE 'FR'  
*S**          ASSIGN #AWARD-MAX = DL-ANNUAL-LIMITS.FRESH-INDEP-UNSUB    
*S**        VALUE 'SO'  
*S**          ASSIGN #AWARD-MAX = DL-ANNUAL-LIMITS.SOPH-INDEP-UNSUB     
*S**        VALUE 'JR', 'SR', 'U+'  
*S**          ASSIGN #AWARD-MAX = DL-ANNUAL-LIMITS.JR-SR-INDEP-UNSUB    
*S**        VALUE 'GR', 'G+'        
*S**          ASSIGN #AWARD-MAX = DL-ANNUAL-LIMITS.GRAD-UNSUB           
*S**        NONE        
*S**          ASSIGN #AWARD-MAX = 0 
*S**          ASSIGN #REJECT-RSN(#FUND-SUB) = #INVALID-CLASS
*S**          ESCAPE ROUTINE        
*S**      END-DECIDE    
*S**    NONE
*S**      ASSIGN #AWARD-MAX = 0     
*S**      ASSIGN #REJECT-RSN(#FUND-SUB) = #INVALID-DEP      
*S**      ESCAPE ROUTINE
*S**  END-DECIDE        
*S**  /*    
*S**  /* Adjust UNSUB max amount with potential SUB award   
*S**  COMPUTE #AWARD-MAX = #AWARD-MAX - #ELIG-SUB           
*S**  IF #AWARD-MAX < 0 
*S**    ASSIGN #AWARD-MAX = 0       
*S**  END-IF
*S**  /*    
*S**  /* Check Aggregate limits     
*S**  DECIDE ON FIRST VALUE OF #AY-DEP-STAT     
*S**    VALUE 'D'       
*S**      /* Dependent  
*S**      DECIDE ON FIRST VALUE OF WWSTDNTD.WW-ST-AC-CLS    
*S**        VALUE 'FR'  
*S**          IF (#AWARD-MAX + #NSLDS-CMB-TOTAL + #ELIG-SUB) >          
*S**              DL-LIFETIME-LIMITS.FRESH-DEP-UNSUB        
*S**            COMPUTE #AWARD-MAX = DL-LIFETIME-LIMITS.FRESH-DEP-UNSUB -           
*S**                    #NSLDS-CMB-TOTAL - #ELIG-SUB        
*S**          END-IF    
*S**        VALUE 'SO'  
*S**          IF (#AWARD-MAX + #NSLDS-CMB-TOTAL + #ELIG-SUB) >          
*S**              DL-LIFETIME-LIMITS.SOPH-DEP-UNSUB         
*S**            COMPUTE #AWARD-MAX = DL-LIFETIME-LIMITS.SOPH-DEP-UNSUB -
*S**                    #NSLDS-CMB-TOTAL - #ELIG-SUB        
*S**          END-IF    
*S**        VALUE 'JR', 'SR', 'U+'  
*S**          IF (#AWARD-MAX + #NSLDS-CMB-TOTAL + #ELIG-SUB) >          
*S**              DL-LIFETIME-LIMITS.JR-SR-DEP-UNSUB        
*S**            COMPUTE #AWARD-MAX = DL-LIFETIME-LIMITS.JR-SR-DEP-UNSUB -           
*S**                    #NSLDS-CMB-TOTAL - #ELIG-SUB        
*S**          END-IF    
*S**        NONE        
*S**          ASSIGN #AWARD-MAX = 0 
*S**          ASSIGN #REJECT-RSN(#FUND-SUB) = #INVALID-CLASS
*S**          ESCAPE ROUTINE        
*S**      END-DECIDE    
*S**    VALUE 'I'       
*S**      /* Independent
*S**      DECIDE ON FIRST VALUE OF WWSTDNTD.WW-ST-AC-CLS    
*S**        VALUE 'FR'  
*S**          IF (#AWARD-MAX + #NSLDS-CMB-TOTAL + #ELIG-SUB) >          
*S**              DL-LIFETIME-LIMITS.FRESH-INDEP-UNSUB      
*S**            COMPUTE #AWARD-MAX = DL-LIFETIME-LIMITS.FRESH-INDEP-UNSUB -         
*S**                    #NSLDS-CMB-TOTAL - #ELIG-SUB        
*S**          END-IF    
*S**        VALUE 'SO'  
*S**          IF (#AWARD-MAX + #NSLDS-CMB-TOTAL + #ELIG-SUB) >          
*S**              DL-LIFETIME-LIMITS.SOPH-INDEP-UNSUB       
*S**            COMPUTE #AWARD-MAX = DL-LIFETIME-LIMITS.SOPH-INDEP-UNSUB -          
*S**                    #NSLDS-CMB-TOTAL - #ELIG-SUB        
*S**          END-IF    
*S**        VALUE 'JR', 'SR', 'U+'  
*S**          IF (#AWARD-MAX + #NSLDS-CMB-TOTAL + #ELIG-SUB) >          
*S**              DL-LIFETIME-LIMITS.JR-SR-INDEP-UNSUB      
*S**            COMPUTE #AWARD-MAX = DL-LIFETIME-LIMITS.JR-SR-INDEP-UNSUB -         
*S**                    #NSLDS-CMB-TOTAL - #ELIG-SUB        
*S**          END-IF    
*S**        VALUE 'GR', 'G+'        
*S**          IF (#AWARD-MAX + #NSLDS-CMB-TOTAL + #ELIG-SUB) >          
*S**              DL-LIFETIME-LIMITS.GRAD-UNSUB 
*S**            COMPUTE #AWARD-MAX = DL-LIFETIME-LIMITS.GRAD-UNSUB -    
*S**                    #NSLDS-CMB-TOTAL - #ELIG-SUB        
*S**          END-IF    
*S**        NONE        
*S**          ASSIGN #AWARD-MAX = 0 
*S**          ASSIGN #REJECT-RSN(#FUND-SUB) = #INVALID-CLASS
*S**          ESCAPE ROUTINE        
*S**      END-DECIDE    
*S**    NONE
*S**      ASSIGN #AWARD-MAX = 0     
*S**      ASSIGN #REJECT-RSN(#FUND-SUB) = #DEP-STATUS-ERR   
*S**      ESCAPE ROUTINE
*S**  END-DECIDE        
*S**  /*    
*S**  /* If NSLDS amount > Lifetime limit, #AWARD-MAX will be < 0       
*S**  IF #AWARD-MAX LE 0
*S**    ASSIGN #AWARD-MAX = 0       
*S**    ASSIGN #REJECT-RSN(#FUND-SUB) = #LIFETIME-LIMIT-ERR 
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  /*    
*S**END-SUBROUTINE /* PACKAGE-FED-DLUNSUB       
*S***       
*S*************************************************************************         
*S**DEFINE SUBROUTINE PACKAGE-FED-GRADPLUS      
*S*************************************************************************         
*S**  /*    
*S**  /* Citizen or eligible non-citizen        
*S**  IF #S-CIT = 'U' OR
*S**     #S-CIT = 'E'   
*S**      /* Allowed students       
*S**      IGNORE        
*S**    ELSE
*S**      ASSIGN #REJECT-RSN(#FUND-SUB) = #CIT-ERR          
*S**      ESCAPE ROUTINE
*S**  END-IF
*S**  /*    
*S**  /* Enrollment status          
*S**  DECIDE ON FIRST VALUE OF #CLASS-LEVEL     
*S**    VALUE 'F'       
*S**      IGNORE        
*S**    VALUE 'T'       
*S**      IGNORE        
*S**    VALUE 'H'       
*S**      IGNORE        
*S**    VALUE 'L'       
*S**      ASSIGN #REJECT-RSN(#FUND-SUB) = #INVALID-ENR      
*S**      ESCAPE ROUTINE
*S**    NONE
*S**      ASSIGN #REJECT-RSN(#FUND-SUB) = #INVALID-ENR      
*S**      ESCAPE ROUTINE
*S**  END-DECIDE        
*S**  /*    
*S**  /* Student must be a graduate student     
*S**  IF WWSTDNTD.WW-ST-AC-CLS = 'GR' OR        
*S**     WWSTDNTD.WW-ST-AC-CLS = 'G+'           
*S**    IGNORE          
*S**  ELSE  
*S**    ASSIGN #REJECT-RSN(#FUND-SUB) = #INVALID-CLASS      
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  /*    
*S**END-SUBROUTINE /* PACKAGE-FED-GRADPLUS      
*S***       
*S*************************************************************************         
*S**DEFINE SUBROUTINE PACKAGE-FED-PLUS          
*S*************************************************************************         
*S**  /*    
*S**  /* Citizen or eligible non-citizen        
*S**  IF #S-CIT = 'U' OR
*S**     #S-CIT = 'E'   
*S**      /* Allowed students       
*S**      IGNORE        
*S**    ELSE
*S**      ASSIGN #REJECT-RSN(#FUND-SUB) = #CIT-ERR          
*S**      ESCAPE ROUTINE
*S**  END-IF
*S**  /*    
*S**  /* Enrollment status          
*S**  DECIDE ON FIRST VALUE OF #CLASS-LEVEL     
*S**    VALUE 'F', 'T', 'H'         
*S**      /*
*S**      /* At least half-time     
*S**      IGNORE        
*S**    NONE
*S**      /*
*S**      /* Less than half-time    
*S**      ASSIGN #REJECT-RSN(#FUND-SUB) = #INVALID-ENR      
*S**      ESCAPE ROUTINE
*S**  END-DECIDE        
*S**  /*    
*S**  /* Student must be a dependent student    
*S**  IF WFAIDYRD.WF-AY-M1-DEP NOT = 'D'        
*S**    ASSIGN #REJECT-RSN(#FUND-SUB) = #INVALID-DEP        
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  /*    
*S**END-SUBROUTINE /* PACKAGE-FED-PLUS          
*S***       
*S*************************************************************************         
*S**DEFINE SUBROUTINE PACKAGE-FED-SEOG          
*S*************************************************************************         
*S**  /*    
*S**  /* Federal SEOG code          
*S**  IGNORE
*S**  /*    
*S**END-SUBROUTINE /* PACKAGE-FED-SEOG          
*S***       
*S*************************************************************************         
*S**DEFINE SUBROUTINE PACKAGE-GRADPLUS          
*S*************************************************************************         
*S**  /*    
*S**  /* Call Direct Loan Graduate PLUS logic   
*S**  PERFORM PACKAGE-FED-GRADPLUS  
*S**  IF #REJECT-RSN(#FUND-SUB) NE ' '          
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  /*    
*S**  /* Invoke Institutional GRADPLUS logic    
*S**  /*    
*S**  PERFORM CALL-INSTITUTIONAL-PKGING         
*S**  IF #REJECT-RSN(#FUND-SUB) NE ' '          
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  /*    
*S**  /* Tentative award
*S**  PERFORM PREPARE-AWARD         
*S**  /*    
*S**END-SUBROUTINE /* PACKAGE-GRADPLUS          
*S***       
*S*************************************************************************         
*S**DEFINE SUBROUTINE PACKAGE-PELL  
*S*************************************************************************         
*S**  /*    
*S**  /* Student must be Pell eligible (per ISIR)           
*S**  RESET #USE-EST-PELL           
*S**  IF #ISIR-PELL-ELIG NOT = 'Y'  
*S**    ASSIGN #REJECT-RSN(#FUND-SUB) = #NOT-PELL-ELIGIBLE  
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  IF #BLANK-SAI = 'Y'           
*S**    ASSIGN #REJECT-RSN(#FUND-SUB) = #HAS-BLANK-SAI      
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  /*    
*S**  /*  Determine Enrollment status           
*S**  DECIDE ON FIRST VALUE OF #CLASS-LEVEL     
*S**    VALUE 'F'       
*S**      ASSIGN #HOLD-TIM = 1      
*S**    VALUE 'T'       
*S**      ASSIGN #HOLD-TIM = 2      
*S**    VALUE 'H'       
*S**      ASSIGN #HOLD-TIM = 3      
*S**    VALUE 'L'       
*S**      ASSIGN #HOLD-TIM = 4      
*S**    NONE
*S**      ASSIGN #HOLD-TIM = 0      
*S**  END-DECIDE        
*S**  /*    
*S**  /* Check input parameter for prior year Pell lookup   
*S**  IF #USE-PRIOR-PELL = 'Y'      
*S**    /*  
*S**    /* Determine Pell LEU for prior year's undisbursed Pell         
*S**    /*   (Won't be included in reported LEU - COD or NSLDS)         
*S**    COMPRESS 'WFPKC' #AID-YY 'N' INTO #SUBPGM LEAVING NO SPACE      
*S**    CALLNAT #SUBPGM WW-GDA      
*S**                    #CPS-EXISTS 
*S**                    #PRIOR-YR-PELL-LEU      
*S**    /*  
*S**    /* Add undisbursed Pell to COD's Disbursed Pell     
*S**    COMPUTE #PELL-LEU = #PRIOR-YR-PELL-LEU + #CURRENT-PELL-LEU      
*S**    /*  
*S**    /* Add prior year Pell LEU to display detail        
*S**    /*COMPRESS EDITED #PRIOR-YR-PELL-LEU (EM=999.999) TO #HOLD-TEMP 
*S**    MOVE EDITED #PRIOR-YR-PELL-LEU (EM=999.999) TO #EDIT-HOLD       
*S**    COMPRESS #EDIT-HOLD TO #HOLD-TEMP       
*S**    COMPRESS #PKG-PASS-TEMP '/' #HOLD-TEMP  
*S**      INTO #PKG-PASS-TEMP       
*S**    /*  
*S**  ELSE  
*S**    ASSIGN #PELL-LEU = #CURRENT-PELL-LEU    
*S**  END-IF
*S**  /*    
*S**  DECIDE FOR FIRST CONDITION    
*S**    WHEN #PELL-LEU < WFPKFNDD.FUND-MIN-LEU(#FUND-SUB)   
*S**      /*
*S**      /* Not at Pell LEU minimum, student is OK to continue         
*S**      /*  use current calculated Pell award 
*S**      IGNORE        
*S**    WHEN #PELL-LEU >= WFPKFNDD.FUND-MAX-LEU(#FUND-SUB)  
*S**      /*
*S**      /* Exceeded Pell LEU minimum          
*S**      ASSIGN #REJECT-RSN(#FUND-SUB) = #PELL-LEU-LIMIT   
*S**      ESCAPE ROUTINE
*S**    WHEN NONE       
*S**      /*
*S**      /* Between min and max, use Estimated Pell time   
*S**      /*  from input parm       
*S**      ASSIGN #USE-EST-PELL = 'Y'
*S**      ASSIGN #HOLD-TIM = VAL(WFPKFNDD.FUND-LEU-TIM(#FUND-SUB))      
*S**      /*
*S**  END-DECIDE        
*S**  /*    
*S**  /*  Determine Pell award      
*S**  ASSIGN WFPKPAKD.AWARD-AMT(#FUND-SUB) = 0  
*S**  ASSIGN #PELL-AWARD = 0        
*S**  IF ##AID-YEAR < '2025'        
*S**    PERFORM PELL-LOOKUP ##AID-YEAR #HOLD-TIM
*S**                        #PELL-COA #FED-EFC  
*S**                        WFPKPAKD.AWARD-AMT(#FUND-SUB)   
*S**                        #RTN-CODE           
*S**  ELSE  
*S**    PERFORM DETERMINE-PELL-AWARD ##AID-YEAR #HOLD-TIM   
*S**                        #PELL-COA #FED-EFC  
*S**                        WFPKPAKD.AWARD-AMT(#FUND-SUB)   
*S**                        #RTN-CODE           
*S**  END-IF
*S**  /*    
*S**  IF WFPKPAKD.AWARD-AMT(#FUND-SUB) = 0      
*S**    /*  
*S**    /* Student doesn't qualify for Pell funds           
*S**    ASSIGN #REJECT-RSN(#FUND-SUB) = #NO-PELL-AWARD      
*S**    ESCAPE ROUTINE  
*S**  ELSE  
*S**    MOVE WFPKPAKD.AWARD-AMT(#FUND-SUB) TO #PELL-AWARD   
*S**  END-IF
*S**  /*    
*S**  DECIDE FOR FIRST CONDITION    
*S**    WHEN #PELL-LEU < WFPKFNDD.FUND-MIN-LEU(#FUND-SUB)   
*S**      /*
*S**      /* Not at Pell LEU minimum, student is OK to continue         
*S**      /*  use current calculated Pell award 
*S**      IGNORE        
*S**    WHEN #PELL-LEU > WFPKFNDD.FUND-MAX-LEU(#FUND-SUB)   
*S**      /*
*S**      /* Exceeded Pell LEU minimum          
*S**      MOVE 0 TO WFPKPAKD.AWARD-AMT(#FUND-SUB)           
*S**      ASSIGN #REJECT-RSN(#FUND-SUB) = #PELL-LEU-LIMIT   
*S**      ESCAPE ROUTINE
*S**    WHEN NONE       
*S**      /*
*S**      /* Student's LEU is within specified LEU range    
*S**      /*  prorate Pell award based on remaining LEU percentage      
*S**      COMPUTE #REMAINING-LEU =  
*S**              (600 - #PELL-LEU) / 100       
*S**      COMPUTE #TEMP-PELL-AWARD-TRUNC =      
*S**        (#PELL-AWARD * #REMAINING-LEU)      
*S**      COMPUTE #PELL-AWARD = #TEMP-PAT-N5    
*S**      /*
*S**      MOVE #PELL-AWARD TO WFPKPAKD.AWARD-AMT(#FUND-SUB) 
*S**      /*
*S**  END-DECIDE        
*S**  /*    
*S**  /* Tentative award
*S**  PERFORM PREPARE-AWARD         
*S**  /*    
*S**END-SUBROUTINE /* PACKAGE-PELL  
*S***       
*S*************************************************************************         
*S**DEFINE SUBROUTINE PACKAGE-PLUS  
*S*************************************************************************         
*S**  /*    
*S**  /* Call Direct Loan PLUS logic
*S**  PERFORM PACKAGE-FED-PLUS      
*S**  IF #REJECT-RSN(#FUND-SUB) NE ' '          
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  /*    
*S**  /* Invoke Institutional PLUS logic        
*S**  /*    
*S**  PERFORM CALL-INSTITUTIONAL-PKGING         
*S**  IF #REJECT-RSN(#FUND-SUB) NE ' '          
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  /*    
*S**  /* Tentative award
*S**  PERFORM PREPARE-AWARD         
*S**  /*    
*S**END-SUBROUTINE /* PACKAGE-PLUS  
*S***       
*S*************************************************************************         
*S**DEFINE SUBROUTINE PACKAGE-SEOG  
*S*************************************************************************         
*S**  /*    
*S**  /* Verify student is not pursuing a second Bachelor's degree      
*S**  IF #S-DEG = '2' OR
*S**     #S-DEG = '8'   
*S**    ASSIGN #REJECT-RSN(#FUND-SUB) = #NO-SECOND-DEGREE   
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  /*    
*S**  /* Call SEOG logic
*S**  PERFORM PACKAGE-FED-SEOG      
*S**  IF #REJECT-RSN(#FUND-SUB) NE ' '          
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  /*    
*S**  /* Invoke Institutional SEOG logic        
*S**  /*    
*S**  PERFORM CALL-INSTITUTIONAL-PKGING         
*S**  IF #REJECT-RSN(#FUND-SUB) NE ' '          
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  /*    
*S**  /* Tentative award
*S**  PERFORM PREPARE-AWARD         
*S**  /*    
*S**END-SUBROUTINE /* PACKAGE-SEOG  
*S***       
*S*************************************************************************         
*S**DEFINE SUBROUTINE PACKAGE-STATE-GRANT       
*S*************************************************************************         
*S**  /*    
*S**  /* Student degree requirements
*S**  PERFORM CHECK-DEGREE          
*S**  IF NOT #CHECK-DEGREE          
*S**    ASSIGN #REJECT-RSN(#FUND-SUB) = #DEGREE-REQ         
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  /*    
*S**  /* Parent degree requirements 
*S**  PERFORM CHECK-PAR-ED-LEVEL    
*S**  IF NOT #CHECK-PAR-ED-LEVEL    
*S**    ASSIGN #REJECT-RSN(#FUND-SUB) = #PAR-ED-LEVEL       
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  /*    
*S**  /* Invoke Institutional state grant logic 
*S**  /*    
*S**  PERFORM CALL-INSTITUTIONAL-PKGING         
*S**  IF #REJECT-RSN(#FUND-SUB) NE ' '          
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  /*    
*S**  /* Tentative award
*S**  PERFORM PREPARE-AWARD         
*S**  /*    
*S**END-SUBROUTINE /* PACKAGE-STATE-GRANT       
*S***       
*S*************************************************************************         
*S**DEFINE SUBROUTINE PACKAGE-TEACH 
*S*************************************************************************         
*S**  /*    
*S**  /* Invoke Institutional TEACH logic       
*S**  /*    
*S**  PERFORM CALL-INSTITUTIONAL-PKGING         
*S**  IF #REJECT-RSN(#FUND-SUB) NE ' '          
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  /*    
*S**  /* Tentative award
*S**  PERFORM PREPARE-AWARD         
*S**  /*    
*S**END-SUBROUTINE /* PACKAGE-TEACH 
*S***       
*S*************************************************************************         
*S**DEFINE SUBROUTINE PACKAGE-WORK  
*S*************************************************************************         
*S**  /*    
*S**  /* Check for interest in work 
*S**  IF #INT-WORK NOT = 'Y'        
*S**    ASSIGN #REJECT-RSN(#FUND-SUB) = #NO-INT 
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  /*    
*S**  /* Insert Institutional work study logic here         
*S**  /*    
*S**  PERFORM CALL-INSTITUTIONAL-PKGING         
*S**  IF #REJECT-RSN(#FUND-SUB) NE ' '          
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  /*    
*S**  /* Tentative award
*S**  PERFORM PREPARE-AWARD         
*S**  /*    
*S**END-SUBROUTINE /* PACKAGE-WORK  
*S***       
*S*************************************************************************         
*S**DEFINE SUBROUTINE PREPARE-AWARD 
*S*************************************************************************         
*S**  /*    
*S**  /* Fund limits checked and potentially, a transaction is generated
*S**  /*  #AWARD-MAX and WFPKPAKD.AWARD-AMT(#FUND-SUB) may be tweaked   
*S**  /*   before this, but should be set by now if not wanting to use the          
*S**  /*   WF-FUND-ATTRIBUTES values
*S**  /*    
*S**  IF #REJECT-RSN(#FUND-SUB) NOT = ' '       
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  /*    
*S**  /* Tentative award
*S**  /* Award up to fund max (up to remaining need)        
*S**  /*    
*S**  IF WFPKPAKD.FUND-ID(#FUND-SUB) = PELL-FUND-ID         
*S**    /* No need to determine award amount for Pell       
*S**    /*   done by Pell table lookup          
*S**    /*    or        
*S**    /*  DETERMINE-PELL-AWRD (AY > 2024)     
*S**    /*  
*S**    /* Adjust remaining need    
*S**    /*  by definition, Pell does not replace FC         
*S**    COMPUTE #REM-NEED = #REM-NEED - WFPKPAKD.AWARD-AMT(#FUND-SUB)   
*S**    IF ##AID-YEAR > '2024'      
*S**      IF #REM-NEED < 0          
*S**        COMPUTE #REM-NEED = 0   
*S**      ELSE          
*S**        COMPUTE #REM-NEED = #REM-NEED - #AWARD-NEED     
*S**      END-IF        
*S**    END-IF          
*S**  ELSE  
*S**    /* Award max - limited by fund max or remaining to offer        
*S**    IF #AWARD-MAX = 0           
*S**      IF (WFPKFNDD.WF-FU-U-O-LIM(#FUND-SUB) -           
*S**           WFPKFNDD.ENDING-BAL(#FUND-SUB)) >
*S**           WFPKFNDD.WF-FU-AWD-MAX(#FUND-SUB)
*S**        ASSIGN #AWARD-MAX = WFPKFNDD.WF-FU-AWD-MAX(#FUND-SUB)       
*S**      ELSE          
*S**        IF WFPKFNDD.WF-FU-U-O-LIM(#FUND-SUB) = 0        
*S**          ASSIGN #AWARD-MAX = WFPKFNDD.WF-FU-AWD-MAX(#FUND-SUB)     
*S**        ELSE        
*S**          ASSIGN #AWARD-MAX =   
*S**           (WFPKFNDD.WF-FU-U-O-LIM(#FUND-SUB) -         
*S**             WFPKFNDD.ENDING-BAL(#FUND-SUB))
*S**        END-IF      
*S**      END-IF        
*S**    END-IF          
*S**    /*  
*S**    /* If #AWARD-MAX = 0, there's no upper limit available          
*S**    /*   (either Fund Attribute max OR Fund Utilization Offer amt)  
*S**    IF #AWARD-MAX = 0           
*S**      ASSIGN #REJECT-RSN(#FUND-SUB) = #NO-FUNDS         
*S**      PERFORM PREPARE-BYPASS    
*S**      ESCAPE ROUTINE
*S**    END-IF          
*S**    /*  
*S**    /* Replaces SC/PC/FC        
*S**    IF WFPKFNDD.WF-FU-REPL-FC(#FUND-SUB) NOT = ' '      
*S**      DECIDE ON FIRST VALUE OF WFPKFNDD.WF-FU-REPL-FC(#FUND-SUB)    
*S**        VALUE 'F'   
*S**          /* FC     
*S**          IF #AWARD-MAX > #REM-FC           
*S**            ASSIGN #AWARD-FC = #REM-FC      
*S**          ELSE      
*S**            IF #AWARD-MAX < #REM-FC         
*S**              ASSIGN #AWARD-FC = #AWARD-MAX 
*S**            ELSE    
*S**              ASSIGN #AWARD-FC = #REM-FC    
*S**            END-IF  
*S**          END-IF    
*S**          IF #AWARD-FC > #COA   
*S**            ASSIGN #AWARD-FC = #COA         
*S**          END-IF    
*S**          /*        
*S**          /* Verify that total of packaged awards does not exceed COA           
*S**          /*        
*S**          /*  (2025+ student may have qualifed for minimum          
*S**          /*    Pell with a large SAI and other funds may have      
*S**          /*     exceeded COA trying to offset FC)      
*S**          IF #AWARD-FC + #TOTAL-PKG-AWDS > #COA         
*S**            ASSIGN #AWARD-FC = #COA - #TOTAL-PKG-AWDS   
*S**          END-IF    
*S**          COMPUTE #REM-FC = #REM-FC - #AWARD-FC         
*S**        VALUE 'P'   
*S**          /* PC     
*S**          IF #AWARD-MAX > #REM-PC           
*S**            ASSIGN #AWARD-FC = #REM-PC      
*S**          ELSE      
*S**            IF #AWARD-MAX < #REM-PC         
*S**              ASSIGN #AWARD-FC = #AWARD-MAX 
*S**            ELSE    
*S**              ASSIGN #AWARD-FC = #REM-PC    
*S**            END-IF  
*S**          END-IF    
*S**          IF #AWARD-FC > #COA   
*S**            ASSIGN #AWARD-FC = #COA         
*S**          END-IF    
*S**          /*        
*S**          /* Verify that total of packaged awards does not exceed COA           
*S**          /*        
*S**          /*  (2025+ student may have qualifed for minimum          
*S**          /*    Pell with a large SAI and other funds may have      
*S**          /*     exceeded COA trying to offset PC)      
*S**          IF #AWARD-FC + #TOTAL-PKG-AWDS > #COA         
*S**            ASSIGN #AWARD-FC = #COA - #TOTAL-PKG-AWDS   
*S**          END-IF    
*S**          COMPUTE #REM-FC = #REM-FC - #AWARD-FC         
*S**          COMPUTE #REM-PC = #REM-PC - #AWARD-FC         
*S**        VALUE 'S'   
*S**          /* SC     
*S**          IF #AWARD-MAX > #REM-SC           
*S**            ASSIGN #AWARD-FC = #REM-SC      
*S**          ELSE      
*S**            IF #AWARD-MAX < #REM-SC         
*S**              ASSIGN #AWARD-FC = #AWARD-MAX 
*S**            ELSE    
*S**              ASSIGN #AWARD-FC = #REM-SC    
*S**            END-IF  
*S**          END-IF    
*S**          IF #AWARD-FC > #COA   
*S**            ASSIGN #AWARD-FC = #COA         
*S**          END-IF    
*S**          /*        
*S**          /* Verify that total of packaged awards does not exceed COA           
*S**          /*        
*S**          /*  (2025+ student may have qualifed for minimum          
*S**          /*    Pell with a large SAI and other funds may have      
*S**          /*     exceeded COA trying to offset SC)      
*S**          IF #AWARD-FC + #TOTAL-PKG-AWDS > #COA         
*S**            ASSIGN #AWARD-FC = #COA - #TOTAL-PKG-AWDS   
*S**          END-IF    
*S**          COMPUTE #REM-FC = #REM-FC - #AWARD-FC         
*S**          COMPUTE #REM-SC = #REM-SC - #AWARD-FC         
*S**        NONE        
*S**          IGNORE    
*S**      END-DECIDE    
*S**    END-IF          
*S**    /*  
*S**    /* Meet need    
*S**    /*  Reduce potential maximum by any potential FC award          
*S**    COMPUTE #AWARD-MAX = #AWARD-MAX - #AWARD-FC         
*S**    IF WFPKFNDD.WF-FU-MEET-NEED(#FUND-SUB) = 'Y'        
*S**      IF #AWARD-MAX > #REM-NEED 
*S**        ASSIGN #AWARD-NEED = #REM-NEED      
*S**      ELSE          
*S**        IF #AWARD-MAX > 0       
*S**          ASSIGN #AWARD-NEED = #AWARD-MAX   
*S**        ELSE        
*S**          ASSIGN #AWARD-NEED = 0
*S**        END-IF      
*S**      END-IF        
*S**    END-IF          
*S**    COMPUTE #REM-NEED = #REM-NEED - #AWARD-NEED         
*S**    /*  
*S**    /* Add award components (Meets FC and Need) for total award     
*S**    COMPUTE WFPKPAKD.AWARD-AMT(#FUND-SUB) = 
*S**            #AWARD-FC + #AWARD-NEED         
*S**    IF WFPKPAKD.AWARD-AMT(#FUND-SUB) = 0    
*S**      ASSIGN #REJECT-RSN(#FUND-SUB) = #NO-NEED          
*S**      PERFORM PREPARE-BYPASS    
*S**      ESCAPE ROUTINE
*S**    END-IF          
*S**    /*  
*S**    /* Fund limits  
*S**    IF WFPKFNDD.WF-FU-LIMIT-AWDS(#FUND-SUB) NOT = ' '   
*S**      /* limit      
*S**      IF (WFPKFNDD.ENDING-BAL(#FUND-SUB) +  
*S**          WFPKPAKD.AWARD-AMT(#FUND-SUB)) >= 
*S**         WFPKFNDD.WF-FU-U-O-LIM(#FUND-SUB)  
*S**        IF WFPKFNDD.WF-FU-U-O-LIM(#FUND-SUB) -          
*S**           WFPKFNDD.ENDING-BAL(#FUND-SUB) > 0           
*S**          COMPUTE WFPKPAKD.AWARD-AMT(#FUND-SUB) =       
*S**                  WFPKFNDD.WF-FU-U-O-LIM(#FUND-SUB)-    
*S**                  WFPKFNDD.ENDING-BAL(#FUND-SUB)        
*S**          IF WFPKPAKD.AWARD-AMT(#FUND-SUB) <> 0         
*S**            /* Awarded amount GREATER than the fund award MAXIMUM do
*S**            /* not award and adjust remaining need      
*S**            IF WFPKPAKD.AWARD-AMT(#FUND-SUB) >          
*S**               WFPKFNDD.WF-FU-AWD-MAX(#FUND-SUB)        
*S**              ASSIGN WFPKPAKD.AWARD-AMT(#FUND-SUB) = 0  
*S**              COMPUTE #REM-NEED = #REM-NEED + #AWARD-NEED           
*S**              ASSIGN #REJECT-RSN(#FUND-SUB) = #FUND-MAX-ERR         
*S**              ESCAPE ROUTINE    
*S**            END-IF  
*S**            /* Awarded amount LESS than the fund award MINIMUM do not           
*S**            /* award and adjust remaining need          
*S**            IF WFPKPAKD.AWARD-AMT(#FUND-SUB) <          
*S**               WFPKFNDD.WF-FU-AWD-MIN(#FUND-SUB)        
*S**              ASSIGN WFPKPAKD.AWARD-AMT(#FUND-SUB) = 0  
*S**              COMPUTE #REM-NEED = #REM-NEED + #AWARD-NEED           
*S**              ASSIGN #REJECT-RSN(#FUND-SUB) = #FUND-MIN-ERR         
*S**              ESCAPE ROUTINE    
*S**            END-IF  
*S**            /* Awarded amount less than award need adjust remaining 
*S**            /* need no fund award minimum   
*S**            IF WFPKPAKD.AWARD-AMT(#FUND-SUB) < #AWARD-NEED          
*S**              COMPUTE #REM-NEED = #REM-NEED +           
*S**                (#AWARD-NEED - WFPKPAKD.AWARD-AMT(#FUND-SUB))       
*S**            END-IF  
*S**          END-IF    
*S**        ELSE        
*S**          ASSIGN WFPKPAKD.AWARD-AMT(#FUND-SUB) = 0      
*S**          ASSIGN #REJECT-RSN(#FUND-SUB) = #FUND-LIMIT-ERR           
*S**          COMPUTE #REM-NEED = #REM-NEED + #AWARD-NEED   
*S**          ESCAPE ROUTINE        
*S**        END-IF      
*S**      END-IF        
*S**    END-IF          
*S**  END-IF
*S**  /*    
*S**  /* Awarded amount GREATER than the fund award MAXIMUM do          
*S**  /* not award and adjust remaining need    
*S**  IF WFPKPAKD.AWARD-AMT(#FUND-SUB) >        
*S**     WFPKFNDD.WF-FU-AWD-MAX(#FUND-SUB)      
*S**    ASSIGN WFPKPAKD.AWARD-AMT(#FUND-SUB) = 0
*S**    COMPUTE #REM-NEED = #REM-NEED + #AWARD-NEED         
*S**    ASSIGN #REJECT-RSN(#FUND-SUB) = #FUND-MAX-ERR       
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  /*    
*S**  /* Awarded amount LESS than the fund award MINIMUM do not         
*S**  /* award and adjust remaining need        
*S**  IF WFPKPAKD.AWARD-AMT(#FUND-SUB) <        
*S**     WFPKFNDD.WF-FU-AWD-MIN(#FUND-SUB)      
*S**    ASSIGN WFPKPAKD.AWARD-AMT(#FUND-SUB) = 0
*S**    COMPUTE #REM-NEED = #REM-NEED + #AWARD-NEED         
*S**    ASSIGN #REJECT-RSN(#FUND-SUB) = #FUND-MIN-ERR       
*S**    ESCAPE ROUTINE  
*S**  END-IF
*S**  /*    
*S**  IF WFPKPAKD.AWARD-AMT(#FUND-SUB) > 0      
*S**    ASSIGN #STUDENT-PACKAGED = TRUE         
*S**  ELSE  
*S**    ASSIGN WFPKPAKD.AWARD-AMT(#FUND-SUB) = 0
*S**  END-IF
*S**  IF #REM-NEED < 0  
*S**    ASSIGN #REM-NEED = 0        
*S**  END-IF
*S**  /*    
*S**  /* Update running totals      
*S**  ASSIGN WFPKPAKD.#RUN-NEED(#FUND-SUB) = #REM-NEED      
*S**  ASSIGN WFPKPAKD.#RUN-FC(#FUND-SUB) = #REM-FC          
*S**  ASSIGN WFPKPAKD.#RUN-SC(#FUND-SUB) = #REM-SC          
*S**  ASSIGN WFPKPAKD.#RUN-PC(#FUND-SUB) = #REM-PC          
*S**  IF WFPKPAKD.AWARD-AMT(#FUND-SUB) > 0      
*S**    COMPUTE WFPKFNDD.AWD-COUNT(#FUND-SUB) = 
*S**            WFPKFNDD.AWD-COUNT(#FUND-SUB) + 1           
*S**    COMPUTE WFPKFNDD.AWD-OFFERS(#FUND-SUB) =
*S**            WFPKFNDD.AWD-OFFERS(#FUND-SUB) +
*S**            WFPKPAKD.AWARD-AMT(#FUND-SUB)   
*S**    COMPUTE WFPKFNDD.ENDING-BAL(#FUND-SUB) =
*S**            WFPKFNDD.ENDING-BAL(#FUND-SUB) +
*S**            WFPKPAKD.AWARD-AMT(#FUND-SUB)   
*S**  END-IF
*S**  /*    
*S**END-SUBROUTINE /* PREPARE-AWARD 
*S***       
*S*************************************************************************         
*S**DEFINE SUBROUTINE PREPARE-BYPASS
*S*************************************************************************         
*S**  /*    
*S**  /* No award       
*S**  /* Update running totals      
*S**  ASSIGN WFPKPAKD.#RUN-NEED(#FUND-SUB) = #REM-NEED      
*S**  ASSIGN WFPKPAKD.#RUN-FC(#FUND-SUB) = #REM-FC          
*S**  ASSIGN WFPKPAKD.#RUN-SC(#FUND-SUB) = #REM-SC          
*S**  ASSIGN WFPKPAKD.#RUN-PC(#FUND-SUB) = #REM-PC          
*S**  /*    
*S**END-SUBROUTINE /* PREPARE-BYPASS
*S***       
