| 1 | ORWPT ; SLC/KCM/REV - Patient Lookup Functions ;3/18/05  10:50 | 
|---|
| 2 | ;;3.0;ORDER ENTRY/RESULTS REPORTING;**10,85,132,149,206,187,190,215**;Dec 17, 1997 | 
|---|
| 3 | ; | 
|---|
| 4 | ; Ref. to ^UTILITY via IA 10061 | 
|---|
| 5 | ; | 
|---|
| 6 | IDINFO(REC,DFN) ; Return identifying information for a patient | 
|---|
| 7 | ; PID^DOB^SEX^VET^SC%^WARD^RM-BED^NAME | 
|---|
| 8 | N X0,X1,X101,X3,XV  ; name/dob/sex/ssn, ward, room-bed, sc%, vet | 
|---|
| 9 | S X0=$G(^DPT(DFN,0)),X1=$G(^(.1)),X101=$G(^(.101)),X3=$G(^(.3)),XV=$G(^("VET")) | 
|---|
| 10 | S REC=$$SSN^DPTLK1(DFN)_U_$$DOB^DPTLK1(DFN,2)_U_$P(X0,U,2)_U_$P(XV,U)_U_$P(X3,U,2)_U_$P(X1,U)_U_$P(X101,U)_U_$P(X0,U) ;DG249 | 
|---|
| 11 | Q | 
|---|
| 12 | PTINQ(REF,DFN) ; Return formatted pt inquiry report | 
|---|
| 13 | K ^TMP("ORDATA",$J,1) | 
|---|
| 14 | D DGINQ^ORCXPND1(DFN) | 
|---|
| 15 | S REF=$NA(^TMP("ORDATA",$J,1)) | 
|---|
| 16 | Q | 
|---|
| 17 | SCDIS(LST,DFN) ; Return service connected % and rated disabilities | 
|---|
| 18 | N VAEL,VAERR,I,ILST,DIS,SC,X | 
|---|
| 19 | D ELIG^VADPT | 
|---|
| 20 | S LST(1)="Service Connected: "_$S(+VAEL(3):$P(VAEL(3),U,2)_"%",1:"NO") | 
|---|
| 21 | I 'VAEL(4),'$P($G(^DG(391,+VAEL(6),0)),U,2) S LST(2)="NOT A VETERAN." Q | 
|---|
| 22 | S I=0,ILST=1 F  S I=$O(^DPT(DFN,.372,I)) Q:'I  S X=^(I,0) D | 
|---|
| 23 | . S DIS=$P($G(^DIC(31,+X,0)),U) Q:DIS="" | 
|---|
| 24 | . S SC=$S($P(X,U,3):"SC",$P(X,U,3)']"":"not specified",1:"NSC") | 
|---|
| 25 | . S ILST=ILST+1,LST(ILST)=DIS_" ("_$P(X,U,2)_"% "_SC_")" | 
|---|
| 26 | I ILST=1 S LST(2)="Rated Disabilities: NONE STATED" | 
|---|
| 27 | Q | 
|---|
| 28 | SHOW ; temporary - show patient inquiry screen | 
|---|
| 29 | N I,Y,DIC S DIC=2,DIC(0)="AEMQ" D ^DIC Q:'Y | 
|---|
| 30 | K ^TMP("ORDATA",$J,1) | 
|---|
| 31 | D DGINQ^ORCXPND1(+Y) | 
|---|
| 32 | S I=0 F  S I=$O(^TMP("ORDATA",$J,1,I)) Q:'I  W !,^(I) | 
|---|
| 33 | K ^TMP("ORDATA",$J,1) | 
|---|
| 34 | Q | 
|---|
| 35 | SELCHK(REC,DFN) ; Check for sensitive pt | 
|---|
| 36 | ; SENSITIVE | 
|---|
| 37 | S REC=$$EN1^ORQPT2(DFN) | 
|---|
| 38 | Q | 
|---|
| 39 | DIEDON(VAL,DFN) ; Check for a date of death | 
|---|
| 40 | S VAL=+$G(^DPT(DFN,.35)) | 
|---|
| 41 | Q | 
|---|
| 42 | SELECT(REC,DFN) ; Selects patient & returns key information | 
|---|
| 43 | ;  1    2   3   4    5      6    7    8       9       10      11  12 | 
|---|
| 44 | ; NAME^SEX^DOB^SSN^LOCIEN^LOCNM^RMBD^CWAD^SENSITIVE^ADMITTED^CONV^SC^ | 
|---|
| 45 | ; 13  14  15  16 | 
|---|
| 46 | ; SC%^ICN^AGE^TS | 
|---|
| 47 | ; | 
|---|
| 48 | ; for CCOW (RV - 2/27/03)  name="-1", location=error message | 
|---|
| 49 | I '$D(^DPT(DFN,0)) S REC="-1^^^^^Patient is unknown to CPRS." Q | 
|---|
| 50 | ; | 
|---|
| 51 | N X | 
|---|
| 52 | K ^TMP("ORWPCE",$J) ; delete PCE 'cache' when switching patients | 
|---|
| 53 | S X=^DPT(DFN,0),REC=$P(X,U,1,3)_U_$P(X,U,9)_U_U_$G(^(.1))_U_$G(^(.101)) | 
|---|
| 54 | S X=$P(REC,U,6) I $L(X) S $P(REC,U,5)=+$G(^DIC(42,+$O(^DIC(42,"B",X,0)),44)) | 
|---|
| 55 | S $P(REC,U,8)=$$CWAD^ORQPT2(DFN)_U_$$EN1^ORQPT2(DFN) | 
|---|
| 56 | ; I $P(REC,U,9) D EN2^ORQPT2(DFN)  ;update DG security log ; DG249 | 
|---|
| 57 | S X=$G(^DPT(DFN,.105)) I X S $P(REC,U,10)=$P($G(^DGPM(X,0)),U) | 
|---|
| 58 | S:'$D(IOST) IOST="P-OTHER" | 
|---|
| 59 | S $P(REC,U,11)=$$OTF^OR3CONV(DFN,1) | 
|---|
| 60 | D ELIG^VADPT S $P(REC,U,12)=$G(VAEL(3)) ;two pieces: SC^SC% | 
|---|
| 61 | I $L($T(GETICN^MPIF001)) S X=+$$GETICN^MPIF001(DFN) S:X>0 $P(REC,U,14)=X | 
|---|
| 62 | S $P(REC,U,15)=$$AGE(DFN,$P(REC,U,3)) | 
|---|
| 63 | S $P(REC,U,16)=+$G(^DPT(DFN,.103)) ; treating specialty | 
|---|
| 64 | K VAEL,VAERR ;VADPT call to kill? | 
|---|
| 65 | S ^DISV(DUZ,"^DPT(")=DFN | 
|---|
| 66 | Q | 
|---|
| 67 | SHARE(VAL,IP,HWND,DFN) ; Set global to share DFN with other applications | 
|---|
| 68 | K ^TMP("ORWCHART",$J),^TMP("ORECALL",$J),^TMP("ORWORD",$J) | 
|---|
| 69 | K ^TMP("ORWDXMQ",$J) | 
|---|
| 70 | S ^TMP("ORWCHART",$J,IP,HWND)=DFN | 
|---|
| 71 | Q | 
|---|
| 72 | BYWARD(LST,WARD) ; Return a list of patients in a ward | 
|---|
| 73 | N ILST,DFN | 
|---|
| 74 | I +$G(WARD)<1 S LST(1)="^No ward identified" Q | 
|---|
| 75 | S (ILST,DFN)=0 | 
|---|
| 76 | S WARD=$P(^DIC(42,WARD,0),"^")   ;DBIA #36 | 
|---|
| 77 | F  S DFN=$O(^DPT("CN",WARD,DFN)) Q:DFN'>0  D | 
|---|
| 78 | . S ILST=ILST+1,LST(ILST)=+DFN_U_$P(^DPT(+DFN,0),U)_U_$G(^DPT(+DFN,.101)) | 
|---|
| 79 | I ILST<1 S LST(1)="^No patients found." | 
|---|
| 80 | Q | 
|---|
| 81 | LAST5(LST,ID) ; Return a list of patients matching A9999 identifiers | 
|---|
| 82 | N I,IEN,XREF | 
|---|
| 83 | S (I,IEN)=0,XREF=$S($L(ID)=5:"BS5",1:"BS") | 
|---|
| 84 | F  S IEN=$O(^DPT(XREF,ID,IEN)) Q:'IEN  D | 
|---|
| 85 | . S I=I+1,LST(I)=IEN_U_$P(^DPT(IEN,0),U)_U_$$DOB^DPTLK1(IEN,2)_U_$$SSN^DPTLK1(IEN)  ; DG249 | 
|---|
| 86 | Q | 
|---|
| 87 | ; | 
|---|
| 88 | LAST5RPL(LST,ID) ; ; Return list matching A9999 id's, but from RPL only. | 
|---|
| 89 | N ORRPL,ORCNT,ORPT,ORPIEN | 
|---|
| 90 | ; IA ____ allows read access to NEW PERSON file node 101: | 
|---|
| 91 | S ORRPL=$G(^VA(200,DUZ,101)) | 
|---|
| 92 | S ORRPL=$P(ORRPL,U,2) | 
|---|
| 93 | I (('ORRPL)!(ORRPL="")) S LST(0)="" Q | 
|---|
| 94 | ; | 
|---|
| 95 | S (ORCNT,ORPT)=0 | 
|---|
| 96 | F  S ORPT=$O(^OR(100.21,ORRPL,10,ORPT)) Q:'ORPT  D | 
|---|
| 97 | .S ORPIEN=+$G(^OR(100.21,ORRPL,10,ORPT,0)) | 
|---|
| 98 | .I ((ORPIEN<0)!(ORPIEN="")) Q | 
|---|
| 99 | .S ORCNT=ORCNT+1 | 
|---|
| 100 | .S LST(ORCNT)=ORPIEN_U_$P(^DPT(ORPIEN,0),U)_U_$$DOB^DPTLK1(ORPIEN,2)_U_$$SSN^DPTLK1(ORPIEN) ; DG249. | 
|---|
| 101 | ; | 
|---|
| 102 | Q | 
|---|
| 103 | ; | 
|---|
| 104 | FULLSSN(LST,ID) ; Return a list of patients matching full SSN entered | 
|---|
| 105 | N I,IEN | 
|---|
| 106 | S (I,IEN)=0 | 
|---|
| 107 | F  S IEN=$O(^DPT("SSN",ID,IEN)) Q:'IEN  D | 
|---|
| 108 | . S I=I+1,LST(I)=IEN_U_$P(^DPT(IEN,0),U)_U_$$DOB^DPTLK1(IEN,2)_U_$$SSN^DPTLK1(IEN)  ; DG249 | 
|---|
| 109 | Q | 
|---|
| 110 | ; | 
|---|
| 111 | FSSNRPL(LST,ID) ; Return list matching Full SSN, but from RPL only. | 
|---|
| 112 | N ORRPL,ORCNT,ORPT,ORLPT,ORPIEN | 
|---|
| 113 | ; IA ____ allows read access to NEW PERSON file node 101: | 
|---|
| 114 | S ORRPL=$G(^VA(200,DUZ,101)) | 
|---|
| 115 | S ORRPL=$P(ORRPL,U,2) | 
|---|
| 116 | I (('ORRPL)!(ORRPL="")) S LST(0)="" Q | 
|---|
| 117 | ; | 
|---|
| 118 | S (ORCNT,ORPT)=0 | 
|---|
| 119 | F  S ORPT=$O(^DPT("SSN",ID,ORPT)) Q:'ORPT  D | 
|---|
| 120 | .S ORLPT=0 | 
|---|
| 121 | .F  S ORLPT=$O(^OR(100.21,ORRPL,10,ORLPT)) Q:'ORLPT  D | 
|---|
| 122 | ..S ORPIEN=+$G(^OR(100.21,ORRPL,10,ORLPT,0)) | 
|---|
| 123 | ..I ((ORPIEN<0)!(ORPIEN="")) Q | 
|---|
| 124 | ..I (ORPIEN'=ORPT) Q | 
|---|
| 125 | ..S ORCNT=ORCNT+1 | 
|---|
| 126 | ..S LST(ORCNT)=ORPIEN_U_$P(^DPT(ORPIEN,0),U)_U_$$DOB^DPTLK1(ORPIEN,2)_U_$$SSN^DPTLK1(ORPIEN) ; DG249. | 
|---|
| 127 | ; | 
|---|
| 128 | Q | 
|---|
| 129 | ; | 
|---|
| 130 | TOP(LST) ; Return top for all patients list (last selected for now) | 
|---|
| 131 | N IEN | 
|---|
| 132 | S IEN=$G(^DISV(DUZ,"^DPT(")) | 
|---|
| 133 | I IEN S LST(1)=IEN_U_$P($G(^DPT(IEN,0)),U) | 
|---|
| 134 | Q | 
|---|
| 135 | ENCTITL(REC,DFN,LOC,PROV) ; Return external values for encounter | 
|---|
| 136 | ; LOCNAME^LOCABBR^ROOMBED^PROVNAME | 
|---|
| 137 | S $P(REC,U,1)=$P($G(^SC(+LOC,0)),U,1,2) | 
|---|
| 138 | S $P(REC,U,3)=$P($G(^DPT(DFN,.101)),U) | 
|---|
| 139 | S $P(REC,U,4)=$P($G(^VA(200,+PROV,0)),U) | 
|---|
| 140 | Q | 
|---|
| 141 | LISTALL(Y,FROM,DIR) ; Return a bolus of patient names.  From is either Name or IEN^Name. | 
|---|
| 142 | N I,IEN,CNT,FROMIEN,ORIDNAME S CNT=44,I=0,FROMIEN=0 | 
|---|
| 143 | I $P(FROM,U,2)'="" S FROMIEN=$P(FROM,U,1),FROM=$O(^DPT("B",$P(FROM,U,2)),-DIR) | 
|---|
| 144 | F  S FROM=$O(^DPT("B",FROM),DIR) Q:FROM=""  D  Q:I=CNT | 
|---|
| 145 | . S IEN=FROMIEN,FROMIEN=0 F  S IEN=$O(^DPT("B",FROM,IEN)) Q:'IEN  D  Q:I=CNT | 
|---|
| 146 | . . S ORIDNAME="" | 
|---|
| 147 | . . S ORIDNAME=$G(^DPT(IEN,0)) ; Get zero node name. | 
|---|
| 148 | . . ; S X1=$G(^DPT(IEN,.1))_" "_$G(^DPT(IEN,.101)) | 
|---|
| 149 | . . S I=I+1 S Y(I)=IEN_U_FROM_U_U_U_U_$P(ORIDNAME,U) ;_"^"_X ; _"^"_X1  ;"   ("_X_")" | 
|---|
| 150 | Q | 
|---|
| 151 | APPTLST(LST,DFN) ; return a list of appointments | 
|---|
| 152 | ; APPTTIME^LOCIEN^LOCNAME^EXTSTATUS | 
|---|
| 153 | N ERR,ERRMSG,VASD,VAERR K ^UTILITY("VASD",$J)  ;IA 10061 | 
|---|
| 154 | S VASD("F")=$$HTFM^XLFDT($H-30,1) | 
|---|
| 155 | S VASD("T")=$$HTFM^XLFDT($H+1,1)_".2359" | 
|---|
| 156 | S VASD("W")="123456789" | 
|---|
| 157 | D SDA^ORQRY01(.ERR,.ERRMSG) | 
|---|
| 158 | I ERR K ^UTILITY("VASD",$J) K LST S LST(1)=ERRMSG Q | 
|---|
| 159 | S I=0 F  S I=$O(^UTILITY("VASD",$J,I)) Q:'I  D | 
|---|
| 160 | . S LST(I)=$P(^UTILITY("VASD",$J,I,"I"),U,1,2)_U_$P(^("E"),U,2,3) | 
|---|
| 161 | K ^UTILITY("VASD",$J) | 
|---|
| 162 | Q | 
|---|
| 163 | ADMITLST(LST,DFN) ; return a list of admissions | 
|---|
| 164 | ; MOVETIME^LOCIEN^LOCNAME^TYPE | 
|---|
| 165 | N TIM,MOV,X0,Y,MTIM,XTYP,XLOC,HLOC,ILST S ILST=0 | 
|---|
| 166 | S TIM="" F  S TIM=$O(^DGPM("ATID1",DFN,TIM)) Q:TIM'>0  D | 
|---|
| 167 | . S MOV=0  F  S MOV=$O(^DGPM("ATID1",DFN,TIM,MOV)) Q:MOV'>0  D | 
|---|
| 168 | . . N VSTR,TIUDA | 
|---|
| 169 | . . S X0=$G(^DGPM(MOV,0)) I X0']"" Q | 
|---|
| 170 | . . S MTIM=$P(X0,U) | 
|---|
| 171 | . . S XTYP=$P($G(^DG(405.1,+$P(X0,U,4),0)),U,1) | 
|---|
| 172 | . . S XLOC=$P($G(^DIC(42,+$P(X0,U,6),0)),U,1),HLOC=+$G(^(44)) | 
|---|
| 173 | . . S VSTR=HLOC_";"_MTIM_";H",TIUDA=$$HASDS^TIULX(DFN,VSTR) | 
|---|
| 174 | . . S ILST=ILST+1,LST(ILST)=MTIM_U_HLOC_U_XLOC_U_XTYP_U_MOV_U_TIUDA | 
|---|
| 175 | Q | 
|---|
| 176 | CLINRNG(LST) ; return date ranges for clinic appointments | 
|---|
| 177 | S LST(1)="T;T^Today" | 
|---|
| 178 | S LST(2)="T+1;T+1^Tomorrow" | 
|---|
| 179 | S LST(3)="T-1;T-1^Yesterday" | 
|---|
| 180 | S LST(4)="T-7;T^Past Week" | 
|---|
| 181 | S LST(5)="T-31;T^Past Month" | 
|---|
| 182 | S LST(6)="S^Specify Date Range..." | 
|---|
| 183 | Q | 
|---|
| 184 | ; | 
|---|
| 185 | N %,%H,X,SUNDAY,START | 
|---|
| 186 | S LST(1)=DT_";"_DT_"^Today",X=$$HTFM^XLFDT($H+1,1) | 
|---|
| 187 | S LST(2)=X_";"_X_"^Tomorrow" | 
|---|
| 188 | S X=+$H F  Q:X#7=3  S X=X-1                        ; $H#7=3 is Sunday | 
|---|
| 189 | S LST(3)=$$HTFM^XLFDT(X)_";"_$$HTFM^XLFDT(X+6)_"^This Week" | 
|---|
| 190 | S LST(4)=$$HTFM^XLFDT(X+7)_";"_$$HTFM^XLFDT(X+13)_"^Next Week" | 
|---|
| 191 | S LST(5)=$E(DT,1,5)_"01;"_$E(DT,1,5)_"31^This Month" | 
|---|
| 192 | S X=$E(DT,4,5)+1 S:X=13 X=1 S X=$E(DT,1,3)_$TR($J(X,2)," ",0) | 
|---|
| 193 | S LST(6)=X_"01;"_X_"31^Next Month" | 
|---|
| 194 | S LST(7)="^Specify Dates" | 
|---|
| 195 | Q | 
|---|
| 196 | DFLTSRC(VAL) ; return default patient list source (T, W, C, P, S) | 
|---|
| 197 | N SRV S SRV=+$G(^VA(200,DUZ,5)) | 
|---|
| 198 | S VAL=$$GET^XPAR("ALL^SRV.`"_SRV,"ORLP DEFAULT LIST SOURCE") | 
|---|
| 199 | Q | 
|---|
| 200 | SAVDFLT(OK,X) ; save new default patient list settings (X=type^ien^sdt;edt) | 
|---|
| 201 | G SAVDFLT^ORWPT1 | 
|---|
| 202 | ; | 
|---|
| 203 | DISCHRG(Y,DFN,ADMITDT) ; Get discharge movement information | 
|---|
| 204 | N VAIP | 
|---|
| 205 | I +$G(ADMITDT)=0 S Y=DT Q | 
|---|
| 206 | S VAIP("D")=ADMITDT D 52^VADPT | 
|---|
| 207 | I +VAIP(17)=0 S Y=DT Q | 
|---|
| 208 | S Y=+VAIP(17,1) | 
|---|
| 209 | Q | 
|---|
| 210 | CWAD(Y,DFN) ;  returns CWAD flags for a patient | 
|---|
| 211 | S Y=$$CWAD^ORQPT2(DFN) | 
|---|
| 212 | Q | 
|---|
| 213 | LEGACY(ORLST,DFN) ; return message if data on the legacy system | 
|---|
| 214 | ; ORLST(0)=1 if data,  ORLST(n)=display message if data | 
|---|
| 215 | S ORLST(0)=0 | 
|---|
| 216 | I $L($T(HXDATA^A7RDPAGU)) D | 
|---|
| 217 | . D HXDATA^A7RDPAGU(.ORLST,DFN) | 
|---|
| 218 | . I $O(ORLST(0)) S ORLST(0)=1 | 
|---|
| 219 | Q | 
|---|
| 220 | INPLOC(REC,DFN) ; Return a patient's current location | 
|---|
| 221 | N X | 
|---|
| 222 | S X=$G(^DPT(DFN,.102)),REC=0 | 
|---|
| 223 | I X S X=$P($G(^DGPM(X,0)),U,6) | 
|---|
| 224 | I X S REC=+$G(^DIC(42,X,44)) | 
|---|
| 225 | I X S $P(REC,U,2)=$P($G(^DIC(42,X,0)),U,1) | 
|---|
| 226 | I X S X=$P($G(^DIC(42,X,0)),U,3) | 
|---|
| 227 | S $P(REC,U,3)=X | 
|---|
| 228 | Q | 
|---|
| 229 | AGE(DFN,BEG) ; returns age based on date of birth and date of death (or DT) | 
|---|
| 230 | N END,X | 
|---|
| 231 | S END=+$G(^DPT(DFN,.35)),END=$S(END:END,1:DT) | 
|---|
| 232 | S X=$E(END,1,3)-$E(BEG,1,3)-($E(END,4,7)<$E(BEG,4,7)) | 
|---|
| 233 | Q X | 
|---|
| 234 | ROK(X) ; Routine OK (in UCI) (NDBI) | 
|---|
| 235 | S X=$G(X) Q:'$L(X) 0  Q:$L(X)>8 0  X ^%ZOSF("TEST") Q:$T 1  Q 0 | 
|---|
| 236 | ; | 
|---|
| 237 | ;NDBI(X) ; National Database Integration site 1 = yes  0 = no | 
|---|
| 238 | ; N R,G S X="A7RDUP" X ^%ZOSF("TEST") S R=$T,G=$S($D(^A7RCP):1,1:0),X=R+G,X=$S(X=2:1,1:0) Q X | 
|---|