1 | SDUTL2 ;ALB/CAW - Misc. utilities ; 6/28/07 11:48am
|
---|
2 | ;;5.3;Scheduling;**20,71,132,149,175,193,220,258,380,516**;Aug 13, 1993;Build 3
|
---|
3 | ;
|
---|
4 | ;
|
---|
5 | FYNUNK(SD) ; return YES, NO, UNKNOWN
|
---|
6 | ; input: SD=internal piece
|
---|
7 | ; output: [returned] Y=YES, N=NO, U=UNKNOWN
|
---|
8 | Q $S(SD="Y":"YES",SD="N":"NO",SD="U":"UNKNOWN",1:"")
|
---|
9 | ;
|
---|
10 | FMT(DFN) ; return current status of means test in external form
|
---|
11 | ; input: DFN=ifn of patient
|
---|
12 | ; ouput: [returned] MT^SMT^LST
|
---|
13 | ; MT=external format of current status
|
---|
14 | ; SMT=shortened format of current staus
|
---|
15 | ; LST=date of last test
|
---|
16 | ;
|
---|
17 | N X,Y
|
---|
18 | S X=$$LST^DGMTU(DFN)
|
---|
19 | S Y=$P(X,U,4),Y=$S(Y["B":"CAT "_Y,Y["A":"COPAY EX",Y["C":"COPAY REQ",Y["G":"GMT COPAY REQ",Y["R":"REQ",Y["P":"PEND ADJ",Y["N":"NOT REQ",1:"")
|
---|
20 | Q $P(X,U,3)_U_Y_U_$P(X,U,2)
|
---|
21 | ;
|
---|
22 | FCO(DFN) ; return current status of copay test in external form
|
---|
23 | ; input: DFN=ifn of patient
|
---|
24 | ; ouput: [returned] COT^SCOT^LST
|
---|
25 | ; COT=external format of current status
|
---|
26 | ; SCOT=shortened format of current staus
|
---|
27 | ; LST=date of last test
|
---|
28 | ;
|
---|
29 | N X,Y
|
---|
30 | S X=$$LST^DGMTU(DFN,"",2)
|
---|
31 | S Y=$P(X,U,4),Y=$S(Y["E":"EXEMPT",Y["M":"NON-EXEMPT",Y["I":"INCOMPLETE",Y["L":"NO LONGER APPL.",1:"")
|
---|
32 | Q $P(X,U,3)_U_Y_U_$P(X,U,2)
|
---|
33 | ;
|
---|
34 | XMY(GROUP,SDUZ,SDPOST) ; -- set up XMY for mail group members
|
---|
35 | ; input: GROUP := mail group efn [required]
|
---|
36 | ; SDUZ := send to current user [ 0|no ; 1|yes] [optional]
|
---|
37 | ; SDPOST := send to postmaster if XMY is undefined
|
---|
38 | ; [ 0|no ; 1|yes] [optional]
|
---|
39 | ; output: XMY := array of users
|
---|
40 | ; XMDUZ := message sender set postmaster
|
---|
41 | ;
|
---|
42 | N I K XMY
|
---|
43 | I '$D(SDUZ) N SDUZ S SDUZ=1
|
---|
44 | I '$D(SDPOST) N SDPOST S SDPOST=1
|
---|
45 | S XMY("G."_$P($G(^XMB(3.8,GROUP,0)),U))=""
|
---|
46 | I SDUZ,DUZ S XMY(DUZ)=""
|
---|
47 | ; makes sure it gets sent to someone
|
---|
48 | I '$D(XMY),SDPOST S XMY(.5)=""
|
---|
49 | ; make postmaster the sender so it will show up as new to DUZ
|
---|
50 | S XMDUZ=.5
|
---|
51 | Q
|
---|
52 | ;
|
---|
53 | SCREEN(Y,SDDT) ; -- screen called when entering a provider in the
|
---|
54 | ; DEFAULT PROVIDER field (#16) or PROVIDER field (#.01) of the PROVIDER
|
---|
55 | ; multiple (#2600) in the HOSPITAL LOCATION file (#44).
|
---|
56 | ;
|
---|
57 | ; Selects active providers with an active entry in the NEW PERSON
|
---|
58 | ; file (#200) for PERSON CLASS.
|
---|
59 | ;
|
---|
60 | ; INPUT: Y = ien of file 200
|
---|
61 | ; SDDT = today's date
|
---|
62 | ; OUTPUT: 1 to select; 0 to not select
|
---|
63 | ;
|
---|
64 | ; begin patch *516*
|
---|
65 | ; DBIA #2349 - ACTIVE PROVIDER will be used for validation.
|
---|
66 | ; The INACTIVE DATE (#53.4) field will no longer be used.
|
---|
67 | ; New input selection logic...
|
---|
68 | ; The TERMINATION DATE (#9.2) and the PERSON CLASS (#8932.1) fields
|
---|
69 | ; will be used to determine if selection is active in the
|
---|
70 | ; NEW PERSON (#200) file for a given date.
|
---|
71 | ;
|
---|
72 | ;S:'+$G(SDDT) SDDT=DT I '+$G(Y) Q 0
|
---|
73 | ;N SDINACT,SDT,SDY S SDY=0
|
---|
74 | ; check if provider active
|
---|
75 | ;S SDINACT=$G(^VA(200,+Y,"PS"))
|
---|
76 | ;Q:'$S(SDINACT']"":1,'+$P(SDINACT,"^",4):1,DT<+$P(SDINACT,"^",4):1,1:0) SDY
|
---|
77 | ;S SDT=+$P($G(^VA(200,+Y,0)),U,11)
|
---|
78 | ;Q:$S('SDT:0,(SDT<DT):1,1:0) 0
|
---|
79 | ;I $$GET^XUA4A72(Y,SDDT)>0 S SDY=1
|
---|
80 | ;
|
---|
81 | I '+$G(Y) Q 0
|
---|
82 | N SDY
|
---|
83 | S:'+$G(SDDT) SDDT=DT
|
---|
84 | S SDY=0,SDDT=$P(SDDT,".")
|
---|
85 | I $$ACTIVPRV^PXAPI(+Y,SDDT) S SDY=1 ;DBIA #2349
|
---|
86 | ; end patch *516*
|
---|
87 | Q SDY
|
---|
88 | ;
|
---|
89 | HELP(SDDT) ; -- executable help called when entering a provider in the
|
---|
90 | ; DEFAULT PROVIDER field (#16) or PROVIDER field (#.01) of the PROVIDER
|
---|
91 | ; multiple (#2600) in the HOSPITAL LOCATION file (#44), the PROVIDER
|
---|
92 | ; (#.01) field of the V PROVIDER file (#9000010.06), or in the
|
---|
93 | ; PROVIDER prompt of the Check-out screen. display active providers
|
---|
94 | ; with an active entry in the NEW PERSON file (#200) for PERSON CLASS.
|
---|
95 | ;
|
---|
96 | ; INPUT: SDDT = today's date
|
---|
97 | ; OUTPUT: display of active providers with an active entry in the NEW
|
---|
98 | ; PERSON file (#200) for PERSON CLASS
|
---|
99 | ;
|
---|
100 | S:'+$G(SDDT) SDDT=DT
|
---|
101 | N D,DO,DIC,X
|
---|
102 | S X="??",DIC="^VA(200,",DIC(0)="EQ",D="B"
|
---|
103 | S DIC("S")="I $$SCREEN^SDUTL2(Y,SDDT)"
|
---|
104 | D IX^DIC
|
---|
105 | Q
|
---|
106 | ;
|
---|
107 | SCAN(SDINDEX,SDBEG,SDEND,SDCB,SDFN,SDIR) ; -- api to invoke scan
|
---|
108 | N SDQID
|
---|
109 | D OPEN^SDQ(.SDQID)
|
---|
110 | D INDEX^SDQ(.SDQID,SDINDEX,"SET")
|
---|
111 | IF SDINDEX="PATIENT/DATE"!(SDINDEX="PATIENT") D PAT^SDQ(.SDQID,SDFN,"SET")
|
---|
112 | IF SDINDEX="PATIENT/DATE"!(SDINDEX="DATE/TIME") D DATE^SDQ(.SDQID,SDBEG,SDEND,"SET")
|
---|
113 | D SCANCB^SDQ(.SDQID,SDCB,"SET")
|
---|
114 | D ACTIVE^SDQ(.SDQID,"TRUE","SET")
|
---|
115 | D SCAN^SDQ(.SDQID,SDIR)
|
---|
116 | D CLOSE^SDQ(.SDQID)
|
---|
117 | SCANQ Q
|
---|
118 | ;
|
---|
119 | MHCLIN(SDCL,SDSC) ;;Determines if Mental health Clinic requiring GAF
|
---|
120 | ;;This will be a supported call
|
---|
121 | ;;Determines whether the clinic passed is a Mental Health clinic that requires Gaf
|
---|
122 | ;;Input - SDCL = Clinic IEN
|
---|
123 | ;; SDSC = DSS Stop Code [Optional]
|
---|
124 | ;; For Visit File entries where the Clinic IEN is not available
|
---|
125 | ;; but the DSS identifier is.
|
---|
126 | ;;
|
---|
127 | ;;Output - 1 = Mental health clinic requiring a Gaf
|
---|
128 | ;; 0 = Not a clinic requiring a Gaf
|
---|
129 | N SDNOGAF,SDSTOP,SDCS,SDMH
|
---|
130 | S SDNOGAF="526,527,528,530,533,536,537,542,545,546,565,566,573,574,579"
|
---|
131 | ;; Get either the Clinic IEN or the Clinic Stop code
|
---|
132 | I $G(SDCL) D
|
---|
133 | . S SDSTOP=$P($G(^SC(SDCL,0)),"^",7)
|
---|
134 | E D
|
---|
135 | . S SDSTOP=$G(SDSC)
|
---|
136 | ;
|
---|
137 | S SDCS=$P($G(^DIC(40.7,+SDSTOP,0)),"^",2),SDMH=$S(SDNOGAF[SDCS:0,$E(SDCS)=5:1,1:0)
|
---|
138 | Q SDMH
|
---|
139 | ;
|
---|
140 | NEWGAF(DFN) ;;Determine if new GAF Score needed
|
---|
141 | ;;This will be a supported call
|
---|
142 | ;;Determines if a new Gaf is required for a patient and retrieves previous Gaf data
|
---|
143 | ;; If patient is deceased, returns a 0, no new GAF required
|
---|
144 | ;;
|
---|
145 | ;;Input - Patient IEN
|
---|
146 | ;;Output:
|
---|
147 | ;; piece 1 = -1 if New Gaf needed and no previous data
|
---|
148 | ;; = 1 if New Gaf needed and previous data exists
|
---|
149 | ;; = 0 if no New Gaf needed and previous exists
|
---|
150 | ;; piece 2 = previous Gaf score
|
---|
151 | ;; piece 3 = previous Gaf date
|
---|
152 | ;; piece 4 = previous Gaf Providers IEN
|
---|
153 | ;;
|
---|
154 | N SDGAF,SDGAFDT,VADM
|
---|
155 | ;
|
---|
156 | S SDGAF=$$RET^YSGAF(DFN)
|
---|
157 | ;; Check for deceased patient.
|
---|
158 | D DEM^VADPT
|
---|
159 | Q:+$G(VADM(6)) "0^"_SDGAF_"^1"
|
---|
160 | D KVAR^VADPT
|
---|
161 | ;
|
---|
162 | Q:SDGAF=-1 -1
|
---|
163 | S X1=$P(SDGAF,"^",2),X2=90 D C^%DTC
|
---|
164 | Q $S(DT>X:1,1:0)_"^"_SDGAF
|
---|
165 | ;
|
---|
166 | GAFCM() ;;
|
---|
167 | N DIR,DIRUT
|
---|
168 | S DIR("A",1)="But a new GAF Score is needed for this patient!"
|
---|
169 | S DIR("A")="Are you sure you want to bypass the check out screen? "
|
---|
170 | S DIR("B")="No",DIR(0)="YA" W ! D ^DIR
|
---|
171 | Q +$G(Y)
|
---|
172 | COLLAT(SDEC) ;Determines if patient has a collateral eligibility status
|
---|
173 | ;
|
---|
174 | ; INPUT: SDEC = patient eligibility status
|
---|
175 | ;
|
---|
176 | ; OUTPUT: 1 = collateral patient
|
---|
177 | ; 0 = non-collateral patient
|
---|
178 | ;
|
---|
179 | Q:$G(SDEC)="" 0
|
---|
180 | I $$GET1^DIQ(8,SDEC,8,"I")=13 Q 1
|
---|
181 | Q 0
|
---|
182 | ;
|
---|
183 | ELSTAT(DA) ;Retrieve patient eligibility status
|
---|
184 | ;
|
---|
185 | ; INPUT: DA = patient IEN
|
---|
186 | ;
|
---|
187 | ; OUTPUT:
|
---|
188 | ; Function Value - returns the internal entry number for patient's
|
---|
189 | ; eligibility status.
|
---|
190 | ;
|
---|
191 | Q:$G(DA)="" ""
|
---|
192 | Q $$GET1^DIQ(2,DA,.361,"I")
|
---|
193 | SCREST(SCIEN,TYP,DIS) ;check stop code restriction in file 40.7 for a clinic.
|
---|
194 | ; INPUT: SCIEN = IEN of Stop Code
|
---|
195 | ; TYP = Stop Code Type, Primary (P) or Secondary (S)
|
---|
196 | ; DIS = Message Display, 1 - Display or 0 No Display
|
---|
197 | ;
|
---|
198 | ; OUTPUT: 1 if no error, or 0^error message
|
---|
199 | ;
|
---|
200 | N SCN,RTY,CTY,RDT,STR,STYP
|
---|
201 | S DIS=$G(DIS,0),STYP="("_$S(TYP="P":"Prim",1:"Second")_"ary)"
|
---|
202 | I +SCIEN<1 S STR="Invalid Clinic Stop Code "_STYP_"." D MSG Q "0^"_STR
|
---|
203 | S CTY=$S(TYP="P":"^P^E^",1:"^S^E^")
|
---|
204 | S SCN=$G(^DIC(40.7,SCIEN,0)),RTY=$P(SCN,U,6),RDT=$P(SCN,U,7)
|
---|
205 | I RTY="" D Q "0^"_STR
|
---|
206 | .S STR="Clinic's Stop Code "_$P(SCN,U,2)_" has no restriction type "_STYP_"." D MSG
|
---|
207 | I CTY'[("^"_RTY_"^") D D MSG Q "0^"_STR
|
---|
208 | .S STR="Clinic's Stop Code "_$P(SCN,U,2)_" cannot be "_$S(TYP="P":"Prim",1:"Second")_"ary."
|
---|
209 | I RDT>DT D D MSG Q "0^"_STR
|
---|
210 | .S STR="Clinic's Stop Code "_$P(SCN,U,2)_" cannot be used. Restriction date is "_$$FMTE^XLFDT(RDT,"1F")_" "_STYP_"."
|
---|
211 | Q 1
|
---|
212 | MSG ;display error message to screen
|
---|
213 | I DIS,$E($G(IOST))="C" W !?5,STR
|
---|
214 | Q
|
---|
215 | CLNCK(CLN,DSP) ;Check clinic for valid stop code restriction.
|
---|
216 | ; INPUT: CLN = IEN of Clinic
|
---|
217 | ; DSP = Error Message Display, 1 - Display or 0 No Display
|
---|
218 | ;
|
---|
219 | ; OUTPUT: 1 if no error or 0^error message
|
---|
220 | N PSC,SSC,ND0,VAL
|
---|
221 | S DSP=$G(DSP,0)
|
---|
222 | I CLN="" D Q "0^"_"Invalid Clinic."
|
---|
223 | .I DSP,$E($G(IOST))="C" W !?5,"Invalid Clinic."
|
---|
224 | I $G(^SC(CLN,0))="" D Q "0^"_"Clinic not define or has no zero node."
|
---|
225 | .I DSP,$E($G(IOST))="C" W !?5,"Clinic not define or has no zero node."
|
---|
226 | S ND0=^SC(CLN,0),PSC=$P(ND0,U,7),SSC=$P(ND0,U,18),DSP=$G(DSP,0)
|
---|
227 | I $P(ND0,U,3)'="C" Q 1 ;not a Clinic
|
---|
228 | S VAL=$$SCREST(PSC,"P",DSP)
|
---|
229 | Q:'VAL VAL Q:SSC="" 1
|
---|
230 | S VAL=$$SCREST(SSC,"S",DSP)
|
---|
231 | Q VAL
|
---|