| 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 | 
|---|