SUBROUTINE GET.MEMBER.STATUS(STATUS, MEMBER.NUMBER, ELIGIBILITY.DATE, ERRORS)
****
*
* Updated: 10:46:34 12 JUN 1987 MIS.SNA.PROG.ATM <D4.3>DEVEL 2 Z
*
****
*
* Description:
*    This subroutine will  return the eligibility  for a member  on
* the date specified.  For the  purposes of this program, a  member
* will be  considered Active  if he  has either  medical or  dental
* coverage, or both on  the given date,  or if he  is in a  Pending
* group (group number ending with the letter 'P').  All other cases
* will be treated as Inactive, including invalid member numbers and
* dates passed to the program.
*
*     STATUS            - The returned eligibility status for MEMBER.NUMBER.
*                         This status is medical and dental combined.
*                         This argument is first so that it may be used in
*                         an I-descriptor.
*     MEMBER.NUMBER     - Member number to determine eligibility status for.
*     ELIGIBILITY.DATE  - The date on which the eligibility status is to be
*                         computed.
*     ERRORS            - Verbose error message.
*
****
*                           R E V I S I O N   L O G
* PR#     WHEN     WHO        WHY
* ======= ======== ========== ==========================================
*HC0104.P7 10JUN87  ATM       INITIAL CODING
*
****


$INSERT SYSLIB>INSERTS>STD.SUBROUTINES.INS.IBAS
$INSERT SYSLIB>INSERTS>STDDEF.INS.IBAS
$INSERT SYSLIB>INSERTS>IODEF.INS.IBAS
$INSERT SYSLIB>INSERTS>MEMBERS.DYN.INS.IBAS

     GOSUB OPEN.FILES
     IF ERRORS NE '' THEN RETURN
     STATUS = 'I'
     INDETERMINATE = FALSE$
     GOSUB DETERMINE.ELIGIBILITY.FROM.MEMBER.INFO
     IF INDETERMINATE THEN
        GOSUB DETERMINE.ELIGIBILITY.FROM.DISENROLL.INFO
     END
     RETURN

OPEN.FILES:
     OPEN.ERRORS = ''
     DIM MEMBERS.FILE(2), FFS.MEM.FILE(2), DISENROLL.FILE(2)
     CALL @OPEN.FILE$('MEMBERS',   MAT MEMBERS.FILE,   OPEN.ERRORS)
     CALL @OPEN.FILE$('FFS.MEM',   MAT FFS.MEM.FILE,   OPEN.ERRORS)
     CALL @OPEN.FILE$('DISENROLL', MAT DISENROLL.FILE, OPEN.ERRORS)
     IF OPEN.ERRORS NE '' THEN
        ERRORS = 'Unable to open the following files.'
        ERRORS<-1> = OPEN.ERRORS
        RETURN
     END
     RETURN

DETERMINE.ELIGIBILITY.FROM.MEMBER.INFO:
     FOUND = FALSE$
     MEMBERS.REC = ''
     CALL @READD$(MAT MEMBERS.FILE, MEMBER.NUMBER, FALSE$, MEMBERS.REC, FOUND)
     IF NOT(FOUND) THEN
        MEMBERS.REC = ''
        CALL @READD$(MAT FFS.MEM.FILE, MEMBER.NUMBER, FALSE$, MEMBERS.REC, FOUND)
        IF NOT(FOUND) THEN
           INDETERMINATE = FALSE$
           STATUS = 'I'
           ERRORS = ''
           RETURN
        END
     END
     IF MEMBERS$BEG.COV : MEMBERS$BEG.COV.DEN EQ '' THEN
        IF MEMBERS$GROUP[1] EQ 'P' THEN
           INDETERMINATE = FALSE$
           STATUS = 'A'
        END ELSE
           INDETERMINATE = TRUE$
        END
     END ELSE
        IF (ELIGIBILITY.DATE GE MEMBERS$BEG.COV) OR (ELIGIBILITY.DATE GE MEMBERS$BEG.COV.DEN) THEN
           INDETERMINATE = FALSE$
           STATUS = 'A'
        END ELSE
           INDETERMINATE = TRUE$
        END
     END
     RETURN

DETERMINE.ELIGIBILITY.FROM.DISENROLL.INFO:
     DISENROLL.REC = ''
     CALL @READD$(MAT DISENROLL.FILE, MEMBER.NUMBER, FALSE$, DISENROLL.REC, FOUND)
     IF NOT(FOUND) THEN
        INDETERMINATE = FALSE$
        STATUS = 'I'
        RETURN
     END
     SUBSCRIBER.NUMBERS = DISENROLL.REC<3>
     BEGIN.DATES = DISENROLL.REC<4>
     END.DATES = DISENROLL.REC<5>
     GOSUB ANALYZE.MED.DEN.DISENROLL.INFO
     IF NOT(INDETERMINATE) THEN
        RETURN
     END

     SUBSCRIBER.NUMBERS = DISENROLL.REC<10>
     BEGIN.DATES = DISENROLL.REC<12>
     END.DATES = DISENROLL.REC<13>
     GOSUB ANALYZE.MED.DEN.DISENROLL.INFO

     RETURN

ANALYZE.MED.DEN.DISENROLL.INFO:
     CURRENT.VALUE = 0
     FOUND = TRUE$
     LOOP
        LOCATE MEMBERS$SUBSCRIBER.NO IN SUBSCRIBER.NUMBERS<1,CURRENT.VALUE+1> SETTING CURRENT.VALUE ELSE FOUND = FALSE$
     WHILE FOUND
        IF (ELIGIBILITY.DATE GE BEGIN.DATES<1,CURRENT.VALUE>) AND (ELIGIBILITY.DATE LE END.DATES<1,CURRENT.VALUE>) THEN
           STATUS = 'A'
           INDETERMINATE = FALSE$
        END
     REPEAT
     RETURN
  END
