DGENELA4 ;ALB/CJM,KCL,RTK,LBD,EG,CKN - Patient Eligibility API ; 04/24/2006 9:09 AM ;;5.3;Registration;**232,275,306,327,314,367,417,437,456,491,451,564,672,659,653**;Aug 13,1993;Build 2 ; ; PRIORITY(DFN,DGELG,DGELGSUB,ENRDATE,APPDATE) ; ; Description: Used to compute the priority group and subgroup for a ; patient, also returning the subset of the eligibility data on which ; the priority subgroup is based. ; ;Input: ; DFN - ien of patient ; DGELG - ELIGIBILITY object array (optional, pass by reference) ; ENRDATE - The Enrollment Date. This date is used in the priority ; determination only if the application date is not passed. ; APPDATE - The Enrollment Application Date. This date is used ; to determine the priority. If the application date ; is not passed then the enrollment date (ENRDATE) is used. ; ;Output: ; Function Value - returns the priority and subgroup computed by the ; function as a 2 piece string 'PRIORITY^SUBGROUP' ; DGELGSUB - this local array will contain the eligibility data on ; which the priority determination was based, pass by reference ; if needed. ; N CODE,HICODE,PRI,HIPRI,PRIORITY,SUBGRP,HISUB,SUB,DGPAT K DGELGSUB S DGELGSUB="" S (HICODE,HIPRI,SUBGRP,HISUB)="" D .I '$D(DGELG),'$$GET^DGENELA(DFN,.DGELG) Q ;can not proceed with eligibility .; can't proceed without an Enrollment Date or Application Date .I '$G(ENRDATE),'$G(APPDATE) Q .I $$GET^DGENPTA(DFN,.DGPAT) .; determine priority/subgroup based on primary eligibility .S HICODE=$$NATCODE^DGENELA(DGELG("ELIG","CODE")) .S PRIORITY=$$PRI(HICODE,.DGELG,$G(ENRDATE),$G(APPDATE)) .S HIPRI=$P(PRIORITY,"^"),HISUB=$P(PRIORITY,"^",2) .S CODE="" .; .; determine if other eligibilities result in higher priority/subgroup .F S CODE=$O(DGELG("ELIG","CODE",CODE)) Q:('CODE!(HIPRI=1)) D ..S PRIORITY=$$PRI($$NATCODE^DGENELA(CODE),.DGELG,$G(ENRDATE),$G(APPDATE)) ..S PRI=$P(PRIORITY,"^"),SUB=$P(PRIORITY,"^",2) ..S:((PRI>0)&((PRI0)&(SUB49))!(CODENAME="SERVICE CONNECTED 50% to 100%") S PRIORITY=1 Q .I (DGELG("SC")="Y")&(DGELG("SCPER")>0)&(DGELG("UNEMPLOY")="Y")&(DGELG("VACKAMT")>0)&(DGELG("VAPEN")'="Y")&(DGELG("A&A")'="Y")&(DGELG("HB")'="Y") S PRIORITY=1 Q .I ((DGELG("SC")="Y")&(DGELG("SCPER")>29)&(CODENAME="SC LESS THAN 50%")) S PRIORITY=2 Q .I ((DGELG("SC")="Y")&(DGELG("SCPER")>9)&(CODENAME="SC LESS THAN 50%"))!(DGELG("POW")="Y")!(CODENAME="PRISONER OF WAR")!(DGELG("DISRET")=1)!(DGELG("DISLOD")=1)!(CODENAME="PURPLE HEART RECIPIENT")!(DGELG("PH")="Y") S PRIORITY=3 Q .I (DGELG("A&A")="Y")!(CODENAME="AID & ATTENDANCE")!(DGELG("HB")="Y")!(CODENAME="HOUSEBOUND")!(DGELG("VCD")="Y") S PRIORITY=4 Q .I (MTSTA="A")!(DGELG("MEDICAID")=1)!(DGELG("VAPEN")="Y")!(CODENAME="NSC, VA PENSION") S PRIORITY=5 Q .I (CODENAME="WORLD WAR I")!(CODENAME="MEXICAN BORDER WAR")!(DGELG("AO")="Y")!(DGELG("EC")="Y")!(DGELG("VACKAMT")>0)!((DGELG("CVELEDT"))&(DGELG("CVELEDT")'MTTHR)) S PRIORITY=7 D Q ..I ((DGELG("SC")="Y")&(DGELG("SCPER")=0)&(DGELG("VACKAMT")<1)&(CODENAME="SC LESS THAN 50%")) S SUBGRP=$$SUBPRI(DFN,.PRIORITY,1) Q ..S SUBGRP=$$SUBPRI(DFN,.PRIORITY,3) .I ((DGELG("SC")="Y")&(DGELG("SCPER")=0)&(DGELG("VACKAMT")<1)&(CODENAME="SC LESS THAN 50%")) S PRIORITY=8,SUBGRP=$$SUBPRI(DFN,.PRIORITY,1) Q .I ((MTSTA="C")!(MTSTA="P")) S PRIORITY=8,SUBGRP=$$SUBPRI(DFN,PRIORITY,3) Q ; Q PRIORITY_$S(PRIORITY:"^"_SUBGRP,1:"") ; SUBPRI(DFN,PRIORITY,SUBGRP) ;calculate sub-priority if under EGT ; N PRVPRI,DONE,PRVENST,ENRDT,DGENRIEN,EGT,DGENRC,TODAY,X Q:'$G(DFN) S U="^" S:$G(PRIORITY)="" PRIORITY="" S:$G(SUBGRP)="" SUBGRP="" D NOW^%DTC S TODAY=X Q:'$$GET^DGENEGT($$FINDCUR^DGENEGT(),.EGT) SUBGRP ;EGT isn't set Q:TODAYEGT("PRIORITY")) $$SUBCNV(SUBGRP) ;I $G(ENRDATE) Q:$$ABOVE2^DGENEGT1(ENRDATE,PRIORITY,SUBGRP) SUBGRP S DGENRIEN=$$FINDCUR^DGENA(DFN) I 'DGENRIEN,$G(ENRDATE),ENRDATE