1 | DGENELA4 ;ALB/CJM,KCL,RTK,LBD,EG,CKN - Patient Eligibility API ; 04/24/2006 9:09 AM
|
---|
2 | ;;5.3;Registration;**232,275,306,327,314,367,417,437,456,491,451,564,672,659,653**;Aug 13,1993;Build 2
|
---|
3 | ;
|
---|
4 | ;
|
---|
5 | PRIORITY(DFN,DGELG,DGELGSUB,ENRDATE,APPDATE) ;
|
---|
6 | ; Description: Used to compute the priority group and subgroup for a
|
---|
7 | ; patient, also returning the subset of the eligibility data on which
|
---|
8 | ; the priority subgroup is based.
|
---|
9 | ;
|
---|
10 | ;Input:
|
---|
11 | ; DFN - ien of patient
|
---|
12 | ; DGELG - ELIGIBILITY object array (optional, pass by reference)
|
---|
13 | ; ENRDATE - The Enrollment Date. This date is used in the priority
|
---|
14 | ; determination only if the application date is not passed.
|
---|
15 | ; APPDATE - The Enrollment Application Date. This date is used
|
---|
16 | ; to determine the priority. If the application date
|
---|
17 | ; is not passed then the enrollment date (ENRDATE) is used.
|
---|
18 | ;
|
---|
19 | ;Output:
|
---|
20 | ; Function Value - returns the priority and subgroup computed by the
|
---|
21 | ; function as a 2 piece string 'PRIORITY^SUBGROUP'
|
---|
22 | ; DGELGSUB - this local array will contain the eligibility data on
|
---|
23 | ; which the priority determination was based, pass by reference
|
---|
24 | ; if needed.
|
---|
25 | ;
|
---|
26 | N CODE,HICODE,PRI,HIPRI,PRIORITY,SUBGRP,HISUB,SUB,DGPAT
|
---|
27 | K DGELGSUB S DGELGSUB=""
|
---|
28 | S (HICODE,HIPRI,SUBGRP,HISUB)=""
|
---|
29 | D
|
---|
30 | .I '$D(DGELG),'$$GET^DGENELA(DFN,.DGELG) Q ;can not proceed with eligibility
|
---|
31 | .; can't proceed without an Enrollment Date or Application Date
|
---|
32 | .I '$G(ENRDATE),'$G(APPDATE) Q
|
---|
33 | .I $$GET^DGENPTA(DFN,.DGPAT)
|
---|
34 | .; determine priority/subgroup based on primary eligibility
|
---|
35 | .S HICODE=$$NATCODE^DGENELA(DGELG("ELIG","CODE"))
|
---|
36 | .S PRIORITY=$$PRI(HICODE,.DGELG,$G(ENRDATE),$G(APPDATE))
|
---|
37 | .S HIPRI=$P(PRIORITY,"^"),HISUB=$P(PRIORITY,"^",2)
|
---|
38 | .S CODE=""
|
---|
39 | .;
|
---|
40 | .; determine if other eligibilities result in higher priority/subgroup
|
---|
41 | .F S CODE=$O(DGELG("ELIG","CODE",CODE)) Q:('CODE!(HIPRI=1)) D
|
---|
42 | ..S PRIORITY=$$PRI($$NATCODE^DGENELA(CODE),.DGELG,$G(ENRDATE),$G(APPDATE))
|
---|
43 | ..S PRI=$P(PRIORITY,"^"),SUB=$P(PRIORITY,"^",2)
|
---|
44 | ..S:((PRI>0)&((PRI<HIPRI)!(HIPRI=""))) HIPRI=PRI,HICODE=$$NATCODE^DGENELA(CODE),HISUB=SUB
|
---|
45 | ..S:((PRI=HIPRI)&((SUB>0)&(SUB<HISUB))) HIPRI=PRI,HICODE=$$NATCODE^DGENELA(CODE),HISUB=SUB
|
---|
46 | .;
|
---|
47 | .;set the DGELGSUB() array with the eligibility information used in the
|
---|
48 | .;priority determination
|
---|
49 | .S DGELGSUB("CODE")=HICODE,DGELGSUB("SC")=DGELG("SC"),DGELGSUB("SCPER")=DGELG("SCPER"),DGELGSUB("POW")=DGELG("POW"),DGELGSUB("A&A")=DGELG("A&A"),DGELGSUB("HB")=DGELG("HB")
|
---|
50 | .S DGELGSUB("VAPEN")=DGELG("VAPEN"),DGELGSUB("VACKAMT")=DGELG("VACKAMT"),DGELGSUB("DISRET")=DGELG("DISRET"),DGELGSUB("DISLOD")=DGELG("DISLOD")
|
---|
51 | .S DGELGSUB("MEDICAID")=DGELG("MEDICAID"),DGELGSUB("AO")=DGELG("AO"),DGELGSUB("IR")=DGELG("IR"),DGELGSUB("EC")=DGELG("EC"),DGELGSUB("MTSTA")=DGELG("MTSTA")
|
---|
52 | .;Purple Heart Added to DGELGSUB
|
---|
53 | .S DGELGSUB("VCD")=DGELG("VCD"),DGELGSUB("PH")=DGELG("PH")
|
---|
54 | .;Added for HVE Phase III (DG*5.3*564)
|
---|
55 | .S DGELGSUB("UNEMPLOY")=DGELG("UNEMPLOY"),DGELGSUB("CVELEDT")=DGELG("CVELEDT"),DGELGSUB("SHAD")=DGELG("SHAD")
|
---|
56 | .;added dg*5.3*659
|
---|
57 | .S DGELGSUB("RADEXPM")=DGELG("RADEXPM")
|
---|
58 | .I $G(DGPAT("INELDATE"))'="" S (HIPRI,HISUB)=""
|
---|
59 | ;
|
---|
60 | Q HIPRI_$S(HIPRI:"^"_HISUB,1:"")
|
---|
61 | ;
|
---|
62 | ;
|
---|
63 | PRI(CODE,DGELG,ENRDATE,APPDATE) ;
|
---|
64 | ; Description: Returns the priority group and subgroup based on a
|
---|
65 | ; single eligibility code.
|
---|
66 | ;Input -
|
---|
67 | ; CODE - pointer to file #8.1, MAS Eligibility Code
|
---|
68 | ; DGELG - local array obtained by calling $$GET, pass by reference
|
---|
69 | ; ENRDATE - The Enrollment Date. This date is used in the priority
|
---|
70 | ; determination only if the application date is not passed.
|
---|
71 | ; APPDATE - The Enrollment Application Date. This date is used
|
---|
72 | ; to determine the priority. If the application date
|
---|
73 | ; is not passed then the enrollment date (ENRDATE) is used.
|
---|
74 | ;
|
---|
75 | ;Output -
|
---|
76 | ; Function Value - returns the priority and subgroup computed by the
|
---|
77 | ; function as a 2 piece string 'PRIORITY^SUBGROUP'
|
---|
78 | ;
|
---|
79 | N CODENAME,PRIORITY,MTSTA,SUBGRP,DGEGT,PRISUB,DGMTI,MTTHR,GMTTHR
|
---|
80 | S SUBGRP=""
|
---|
81 | ;
|
---|
82 | ; use the Application Date when determining the priority, otherwise use
|
---|
83 | ; the Enrollment Date (ESP DG*5,3*491)
|
---|
84 | S ENRDATE=$S($G(APPDATE):APPDATE,1:$G(ENRDATE))
|
---|
85 | ;
|
---|
86 | ;get the name of the national eligibility code
|
---|
87 | S CODENAME=$$CODENAME^DGENELA(CODE)
|
---|
88 | ;
|
---|
89 | ;get the means test code
|
---|
90 | S MTSTA=""
|
---|
91 | I DGELG("MTSTA") S MTSTA=$P($G(^DG(408.32,DGELG("MTSTA"),0)),"^",2)
|
---|
92 | ;
|
---|
93 | ;get MT and GMT thresholds
|
---|
94 | S DGMTI=$P($$LST^DGMTU(DFN),"^")
|
---|
95 | S MTTHR=$P($G(^DGMT(408.31,+DGMTI,0)),"^",12)
|
---|
96 | S GMTTHR=$P($G(^DGMT(408.31,+DGMTI,0)),"^",27)
|
---|
97 | ;
|
---|
98 | ;get the Enrollment Group Threshold (EGT) setting
|
---|
99 | S DGEGT=""
|
---|
100 | I $$GET^DGENEGT($$FINDCUR^DGENEGT(),.DGEGT)
|
---|
101 | ;
|
---|
102 | D ;drops out when priority determined
|
---|
103 | .S PRIORITY=""
|
---|
104 | .I ((DGELG("SC")="Y")&(DGELG("SCPER")>49))!(CODENAME="SERVICE CONNECTED 50% to 100%") S PRIORITY=1 Q
|
---|
105 | .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
|
---|
106 | .I ((DGELG("SC")="Y")&(DGELG("SCPER")>29)&(CODENAME="SC LESS THAN 50%")) S PRIORITY=2 Q
|
---|
107 | .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
|
---|
108 | .I (DGELG("A&A")="Y")!(CODENAME="AID & ATTENDANCE")!(DGELG("HB")="Y")!(CODENAME="HOUSEBOUND")!(DGELG("VCD")="Y") S PRIORITY=4 Q
|
---|
109 | .I (MTSTA="A")!(DGELG("MEDICAID")=1)!(DGELG("VAPEN")="Y")!(CODENAME="NSC, VA PENSION") S PRIORITY=5 Q
|
---|
110 | .I (CODENAME="WORLD WAR I")!(CODENAME="MEXICAN BORDER WAR")!(DGELG("AO")="Y")!(DGELG("EC")="Y")!(DGELG("VACKAMT")>0)!((DGELG("CVELEDT"))&(DGELG("CVELEDT")'<DT))!(DGELG("SHAD")=1) S PRIORITY=6 Q
|
---|
111 | .I DGELG("IR")="Y" I (DGELG("RADEXPM")=2)!(DGELG("RADEXPM")=3)!(DGELG("RADEXPM")=4) S PRIORITY=6 Q
|
---|
112 | .I (MTSTA="G")!((MTSTA="P")&(GMTTHR>MTTHR)) S PRIORITY=7 D Q
|
---|
113 | ..I ((DGELG("SC")="Y")&(DGELG("SCPER")=0)&(DGELG("VACKAMT")<1)&(CODENAME="SC LESS THAN 50%")) S SUBGRP=$$SUBPRI(DFN,.PRIORITY,1) Q
|
---|
114 | ..S SUBGRP=$$SUBPRI(DFN,.PRIORITY,3)
|
---|
115 | .I ((DGELG("SC")="Y")&(DGELG("SCPER")=0)&(DGELG("VACKAMT")<1)&(CODENAME="SC LESS THAN 50%")) S PRIORITY=8,SUBGRP=$$SUBPRI(DFN,.PRIORITY,1) Q
|
---|
116 | .I ((MTSTA="C")!(MTSTA="P")) S PRIORITY=8,SUBGRP=$$SUBPRI(DFN,PRIORITY,3) Q
|
---|
117 | ;
|
---|
118 | Q PRIORITY_$S(PRIORITY:"^"_SUBGRP,1:"")
|
---|
119 | ;
|
---|
120 | SUBPRI(DFN,PRIORITY,SUBGRP) ;calculate sub-priority if under EGT
|
---|
121 | ;
|
---|
122 | N PRVPRI,DONE,PRVENST,ENRDT,DGENRIEN,EGT,DGENRC,TODAY,X
|
---|
123 | Q:'$G(DFN)
|
---|
124 | S U="^"
|
---|
125 | S:$G(PRIORITY)="" PRIORITY=""
|
---|
126 | S:$G(SUBGRP)="" SUBGRP=""
|
---|
127 | D NOW^%DTC S TODAY=X
|
---|
128 | Q:'$$GET^DGENEGT($$FINDCUR^DGENEGT(),.EGT) SUBGRP ;EGT isn't set
|
---|
129 | Q:TODAY<EGT("EFFDATE") SUBGRP ;EGT is not in effect
|
---|
130 | I "^1^3^"[(U_EGT("TYPE")_U) Q SUBGRP
|
---|
131 | I EGT("TYPE")=2,(PRIORITY+(SUBGRP*.01))<(EGT("PRIORITY")+(EGT("SUBGRP")*.01)) Q SUBGRP
|
---|
132 | I EGT("TYPE")=4 Q:(PRIORITY<EGT("PRIORITY")) SUBGRP Q:(PRIORITY>EGT("PRIORITY")) $$SUBCNV(SUBGRP)
|
---|
133 | ;I $G(ENRDATE) Q:$$ABOVE2^DGENEGT1(ENRDATE,PRIORITY,SUBGRP) SUBGRP
|
---|
134 | S DGENRIEN=$$FINDCUR^DGENA(DFN)
|
---|
135 | I 'DGENRIEN,$G(ENRDATE),ENRDATE<EGT("EFFDATE") Q SUBGRP
|
---|
136 | S DONE=0
|
---|
137 | F Q:DONE D
|
---|
138 | .I 'DGENRIEN S DONE=2 Q
|
---|
139 | .I '$$GET^DGENA(DGENRIEN,.DGENRC) S DONE=2 Q
|
---|
140 | .S DGENRIEN=$$FINDPRI^DGENA(DGENRIEN)
|
---|
141 | .Q:DGENRC("STATUS")=6 ;deceased
|
---|
142 | .I $P($G(^DGEN(27.15,+DGENRC("STATUS"),0)),"^",2)="N" S DONE=2 Q
|
---|
143 | .S ENRDT=$G(DGENRC("APP")) S:'ENRDT ENRDT=$G(DGENRC("EFFDATE"))
|
---|
144 | .I ENRDT,ENRDT<EGT("EFFDATE") S DONE=1 Q
|
---|
145 | .; HEC is the authoritative source on continuous enrollment
|
---|
146 | .I $$OVRRIDE^DGENEGT1(DFN,.EGT) S DONE=1
|
---|
147 | ;
|
---|
148 | Q $S(DONE=2:$$SUBCNV(SUBGRP),1:SUBGRP)
|
---|
149 | ;
|
---|
150 | SUBCNV(SUBGRP) ;return new subgrp
|
---|
151 | I SUBGRP=1 Q 5
|
---|
152 | I SUBGRP=3 Q 7
|
---|
153 | Q SUBGRP
|
---|