[623] | 1 | MDRPCOP ; HOIFO/DP - Object RPCs (TMDPatient) ; [01-09-2003 15:21]
|
---|
| 2 | ;;1.0;CLINICAL PROCEDURES;**4**;Apr 01, 2004;Build 3
|
---|
| 3 | ; Integration Agreements:
|
---|
| 4 | ; IA# 3027 [Supported] Calls to DGSEC4
|
---|
| 5 | ; IA# 2981 [Subscription] Calls to GUI~GMRCP5
|
---|
| 6 | ; IA# 2548 [Supported] ACRP Interface Toolkit APIs.
|
---|
| 7 | ; IA# 2552 [Supported] AIT API to provide outpatient encounter data.
|
---|
| 8 | ; IA# 10061 [Supported] VADPT calls.
|
---|
| 9 | ; IA# 3468 [Subscription] Use GMRCCP APIs.
|
---|
| 10 | ; IA# 3266 [Subscription] Call to DPTLK1
|
---|
| 11 | ; IA# 10103 [Supported] Call to XLFDT
|
---|
| 12 | ; IA# 10039 [Supported] Ward Location File (#42) Access.
|
---|
| 13 | ; IA# 10035 [Supported] DPT references
|
---|
| 14 | ; IA# 3267 [Subscription] Call to DPTLK1
|
---|
| 15 | ; IA# 3593 [Supported] Access to routine DPTLK6 utilities for lookup
|
---|
| 16 | ; IA# 3613 [Private] GETVST^MDRPCOP API call
|
---|
| 17 | ; IA# 10099 [Supported] GMRADPT call
|
---|
| 18 | ; IA# 1096 [Controlled Subscription] ^DGPM("ATID1" x-ref loop
|
---|
| 19 | ;
|
---|
| 20 | ADD(X) ; [Procedure] Add line to @RESULTS@(...
|
---|
| 21 | S @RESULTS@(+$O(@RESULTS@(""),-1)+1)=X
|
---|
| 22 | Q
|
---|
| 23 | ;
|
---|
| 24 | ALLERGY ; [Procedure] Return Allergies
|
---|
| 25 | D EN1^GMRADPT I '$O(GMRAL(0)) D Q
|
---|
| 26 | .I $G(GMRAL)="" S @RESULTS@(0)="No Allergy Assessment"
|
---|
| 27 | .I $G(GMRAL)=0 S @RESULTS@(0)="No Known Allergies"
|
---|
| 28 | S @RESULTS@(0)="This patient has the following allergy(ies): "
|
---|
| 29 | F X=0:0 S X=$O(GMRAL(X)) Q:'X D
|
---|
| 30 | .S @RESULTS@(X)=$P($G(GMRAL(X)),U,2)
|
---|
| 31 | Q
|
---|
| 32 | ;
|
---|
| 33 | CHKIN ; [Procedure] Check In Study
|
---|
| 34 | F X=2:1:5 D
|
---|
| 35 | .I $P(DATA,U,X)]"" S MDFDA(702,$P(DATA,U,1),$P("^.04^.05^.11^.07",U,X))=$P(DATA,U,X)
|
---|
| 36 | S MDFDA(702,$P(DATA,U,1),.09)=4 ; Status = Checked-In
|
---|
| 37 | I $P(DATA,U,1)="+1," D
|
---|
| 38 | .S MDFDA(702,"+1,",.01)=DFN
|
---|
| 39 | .S MDFDA(702,"+1,",.02)=$$NOW^XLFDT()
|
---|
| 40 | .S MDFDA(702,"+1,",.03)=DUZ
|
---|
| 41 | .D UPDATE^DIE("","MDFDA","MDIEN","MDERR") Q:$D(MDERR)
|
---|
| 42 | .S MDIENS=MDIEN(1)_",",MDHL7=$$SUB^MDHL7B(MDIEN(1))
|
---|
| 43 | .I +MDHL7=-1 S MDFDA(702,MDIENS,.09)=2,MDFDA(702,MDIENS,.08)=$P(MDHL7,U,2)
|
---|
| 44 | .I +MDHL7=1 S MDFDA(702,MDIENS,.09)=5,MDFDA(702,MDIENS,.08)=""
|
---|
| 45 | .D:$D(MDFDA) FILE^DIE("","MDFDA","MDERR")
|
---|
| 46 | I $P(DATA,U,1)'="+1," D
|
---|
| 47 | .D FILE^DIE("","MDFDA","MDERR") Q:$D(MDERR)
|
---|
| 48 | .S MDIENS=+DATA_","
|
---|
| 49 | .S MDHL7=$$SUB^MDHL7B(+MDIENS)
|
---|
| 50 | .I +MDHL7=-1 S MDFDA(702,MDIENS,.09)=2,MDFDA(702,MDIENS,.08)=$P(MDHL7,U,2)
|
---|
| 51 | .I +MDHL7=1 S MDFDA(702,MDIENS,.09)=5,MDFDA(702,MDIENS,.08)=""
|
---|
| 52 | .D:$D(MDFDA) FILE^DIE("","MDFDA","MDERR")
|
---|
| 53 | I '$D(MDERR) S @RESULTS@(0)="1^OK" Q
|
---|
| 54 | D ERROR^MDRPCU(RESULTS,.MDERR)
|
---|
| 55 | Q
|
---|
| 56 | ;
|
---|
| 57 | DISPCON ; [Procedure] Display a consult
|
---|
| 58 | K ^TMP("GMRC",$J)
|
---|
| 59 | D GUI^GMRCP5(.RESULTS,DATA)
|
---|
| 60 | Q
|
---|
| 61 | ;
|
---|
| 62 | GETCONS ; [Procedure] Get available consults for patient
|
---|
| 63 | K ^TMP("MDTMP",$J)
|
---|
| 64 | D CPLIST^GMRCCP(DFN,,$NA(^TMP("MDTMP",$J)))
|
---|
| 65 | S MDX=0
|
---|
| 66 | F S MDX=$O(^TMP("MDTMP",$J,MDX)) Q:'MDX D:"saprc"[$P(^(MDX),U,4)
|
---|
| 67 | .S Y="123;"_$P(^TMP("MDTMP",$J,MDX),U,5)
|
---|
| 68 | .F X=2,3,4,1,6,5 S Y=Y_U_$P(^TMP("MDTMP",$J,MDX),U,X)
|
---|
| 69 | .S Y=Y_U_+$O(^MDD(702,"ACON",+$P(^TMP("MDTMP",$J,MDX),U,5)))
|
---|
| 70 | .;
|
---|
| 71 | .; Patch MD*1.0*4 - Return number of times checked in at piece 9
|
---|
| 72 | .;
|
---|
| 73 | .S (X,Z)=0,MDY=+$P(^TMP("MDTMP",$J,MDX),U,5)
|
---|
| 74 | .F S X=$O(^MDD(702,"ACON",MDY,X)) Q:'X S Z=Z+1
|
---|
| 75 | .S $P(Y,U,9)=Z
|
---|
| 76 | .;
|
---|
| 77 | .; End Patch MD*1.0*4
|
---|
| 78 | .;
|
---|
| 79 | .D ADD(Y)
|
---|
| 80 | S @RESULTS@(0)=+$O(@RESULTS@(""),-1)
|
---|
| 81 | K ^TMP("MDTMP",$J)
|
---|
| 82 | Q
|
---|
| 83 | ;
|
---|
| 84 | GETHDR ; [Procedure] Get Pt Header
|
---|
| 85 | S DFNIENS=DFN_","
|
---|
| 86 | S @RESULTS@(0)=$$GET1^DIQ(2,DFNIENS,.01)_" "_$$GET1^DIQ(2,DFNIENS,.1)_" "_$$GET1^DIQ(2,DFNIENS,.101)
|
---|
| 87 | S @RESULTS@(1)=$$GET1^DIQ(2,DFNIENS,.09)_" "_$$GET1^DIQ(2,DFNIENS,.02)_" "_$$GET1^DIQ(2,DFNIENS,.03)_" ("_$$GET1^DIQ(2,DFNIENS,.033)_")"
|
---|
| 88 | Q
|
---|
| 89 | ;
|
---|
| 90 | GETOBJ ; [Procedure] Get information for TMDPATIENT object
|
---|
| 91 | D DEM^VADPT,INP^VADPT
|
---|
| 92 | S @RESULTS@(0)=DFN
|
---|
| 93 | S @RESULTS@(1)=VADM(1)
|
---|
| 94 | S @RESULTS@(2)=$P(VADM(2),U,2)
|
---|
| 95 | S @RESULTS@(3)=$P(VADM(3),U,2)
|
---|
| 96 | S @RESULTS@(4)=VADM(4)
|
---|
| 97 | S @RESULTS@(5)=$P(VADM(5),U,2)
|
---|
| 98 | I VAIN(4)]"" S @RESULTS@(6)="Ward: "_$P(VAIN(4),U,2)_" Rm: "_VAIN(5)
|
---|
| 99 | E S @RESULTS@(6)=""
|
---|
| 100 | Q
|
---|
| 101 | ;
|
---|
| 102 | GETRES ; [Procedure] Get results report
|
---|
| 103 | F MDX=0:0 S MDX=$O(^MDD(703.1,"ADFN",DFN,MDX)) Q:'MDX D
|
---|
| 104 | .S MDINST=+$P($G(^MDD(703.1,MDX,0)),U,4)
|
---|
| 105 | .I $G(DATA) Q:'$D(^MDS(702.01,DATA,.1,"B",MDINST))
|
---|
| 106 | .S MDY=$O(@RESULTS@(""),-1)+1
|
---|
| 107 | .S @RESULTS@(MDY)="703.1;"_MDX_U_^MDD(703.1,MDX,0)
|
---|
| 108 | .S Y=$P(^MDD(703.1,MDX,0),U,3) D D^DIQ
|
---|
| 109 | .S $P(@RESULTS@(MDY),U,11)=Y
|
---|
| 110 | .S Y=$P($G(^MDS(702.09,+$P(^MDD(703.1,MDX,0),U,4),0)),U)
|
---|
| 111 | .S $P(@RESULTS@(MDY),U,12)=Y
|
---|
| 112 | S @RESULTS@(0)=+$O(@RESULTS@(""),-1)
|
---|
| 113 | Q
|
---|
| 114 | ;
|
---|
| 115 | GETTRAN ; [Procedure] Get a patients transactions
|
---|
| 116 | F MDX=0:0 S MDX=$O(^MDD(702,"B",DFN,+MDX))_"," Q:'MDX D
|
---|
| 117 | .S Z=$$GET1^DIQ(702,MDX,".04:.02","I")_U_$$GET1^DIQ(702,MDX,.04)_U_$$GET1^DIQ(702,MDX,.02,"I")_U_$$GET1^DIQ(702,MDX,.09)_U_$$GET1^DIQ(702,MDX,.11)_U_$$GET1^DIQ(702,MDX,.991)
|
---|
| 118 | .S Y=$O(@RESULTS@(""),-1)+1
|
---|
| 119 | .S @RESULTS@(Y)="702;"_+MDX_U_Z
|
---|
| 120 | S @RESULTS@(0)=+$O(@RESULTS@(""),-1)
|
---|
| 121 | Q
|
---|
| 122 | ;
|
---|
| 123 | GETVST ; [Procedure] Return list of visits
|
---|
| 124 | N BEG,END,VAERR,VASD,BDT,DTM,EDT,LOC,NOW,MDQUERY,MDLST,STI,STS,TODAY,I,J,K,XI,XE,X
|
---|
| 125 | S NOW=$$NOW^XLFDT(),TODAY=$P(NOW,".",1)
|
---|
| 126 | S BEG=$$X2FM("T-200"),END=$$X2FM("T")+0.2359
|
---|
| 127 | S MDLST="",MDSTOP=""
|
---|
| 128 | I END>NOW D ; get future encounters, past cancels/no-shows from VADPT
|
---|
| 129 | .S VASD("F")=BEG
|
---|
| 130 | .S VASD("T")=END
|
---|
| 131 | .S VASD("W")="123456789"
|
---|
| 132 | .D SDA^VADPT
|
---|
| 133 | .S I=0 F S I=$O(^UTILITY("VASD",$J,I)) Q:'I D
|
---|
| 134 | ..S XI=^UTILITY("VASD",$J,I,"I"),XE=^("E")
|
---|
| 135 | ..S DTM=$P(XI,U),IEN=$P(XI,U,2),STI=$P(XI,U,3)
|
---|
| 136 | ..S LOC=$P(XE,U,2),STS=$P(XE,U,3)
|
---|
| 137 | ..I DTM<TODAY,(STI=""!(STI["I")!(STI="NT")) Q ; no prior kept appts
|
---|
| 138 | ..S MDLST(DTM,"A",1)="A;"_DTM_";"_IEN_U_DTM_U_LOC_U_STS
|
---|
| 139 | .K ^UTILITY("VASD",$J)
|
---|
| 140 | I BEG'>NOW D ;past encounters from ACRP Toolkit - set in CALLBACK
|
---|
| 141 | .S BDT=BEG
|
---|
| 142 | .S EDT=$S(END<NOW:END,1:NOW)
|
---|
| 143 | .D OPEN^SDQ(.MDQUERY)
|
---|
| 144 | .I '$$ERRCHK^SDQUT() D INDEX^SDQ(.MDQUERY,"PATIENT/DATE","SET")
|
---|
| 145 | .I '$$ERRCHK^SDQUT() D PAT^SDQ(.MDQUERY,DFN,"SET")
|
---|
| 146 | .I '$$ERRCHK^SDQUT() D DATE^SDQ(.MDQUERY,BDT,EDT,"SET")
|
---|
| 147 | .I '$$ERRCHK^SDQUT() D
|
---|
| 148 | ..D SCANCB^SDQ(.MDQUERY,"D CALLBACK^ORWCV(Y,Y0,$NA(MDLST),.MDSTOP)","SET")
|
---|
| 149 | .I '$$ERRCHK^SDQUT() D ACTIVE^SDQ(.MDQUERY,"TRUE","SET")
|
---|
| 150 | .I '$$ERRCHK^SDQUT() D SCAN^SDQ(.MDQUERY,"FORWARD")
|
---|
| 151 | .D CLOSE^SDQ(.MDQUERY)
|
---|
| 152 | N TIM,MOV,MDX0,Y,MTIM,XTYP,XLOC,XLOCI,HLOC,EARLY,DONE ; admits
|
---|
| 153 | S EARLY=BEG,DONE=0
|
---|
| 154 | S TIM="" F S TIM=$O(^DGPM("ATID1",DFN,TIM)) Q:TIM'>0 D Q:DONE
|
---|
| 155 | .S MOV=0 F S MOV=$O(^DGPM("ATID1",DFN,TIM,MOV)) Q:MOV'>0 D Q:DONE
|
---|
| 156 | ..D GETS^DIQ(405,+MOV_",","*","IE","MDX0") S MTIM=$G(MDX0(405,MOV_",",".01","I"))
|
---|
| 157 | ..S XTYP=$G(MDX0(405,+MOV_",",".04","E"))
|
---|
| 158 | ..S XLOC=$G(MDX0(405,+MOV_",",".06","E"))
|
---|
| 159 | ..S XLOCI=+$G(MDX0(405,+MOV_",",".06","I")),HLOC=+$G(^DIC(42,+XLOCI,44))
|
---|
| 160 | ..S MDLST(MTIM,"I",1)="I;"_MTIM_";"_HLOC_U_MTIM_U_"Inpatient Stay"_U_XLOC_U_XTYP
|
---|
| 161 | ..S DONE=1 ; Not sure if I should include all stays <DRP@Hines>
|
---|
| 162 | S I=0 F S I=$O(MDLST(I)) Q:'I D
|
---|
| 163 | .S J="" F S J=$O(MDLST(I,J)) Q:J="" D
|
---|
| 164 | ..S K=0 F S K=$O(MDLST(I,J,K)) Q:'K D
|
---|
| 165 | ...S @RESULTS@($O(@RESULTS@(""),-1)+1)=MDLST(I,J,K)
|
---|
| 166 | S @RESULTS@(0)=+$O(@RESULTS@(""),-1)_U_($$GET1^DIQ(2,DFN_",",.1)]"")
|
---|
| 167 | Q
|
---|
| 168 | ;
|
---|
| 169 | LOGSEC ; [Procedure] Log Security
|
---|
| 170 | D NOTICE^DGSEC4(.RESULTS,DFN,DATA,1)
|
---|
| 171 | S @RESULTS@(0)=$S(RESULTS:"1^Logged",1:"-1^Unable to log")
|
---|
| 172 | Q
|
---|
| 173 | ;
|
---|
| 174 | RPC(RESULTS,OPTION,DFN,DATA) ; [Procedure] Main RPC call tag
|
---|
| 175 | NEW DFNIENS,GMRAL,GMVALG,GN,IENS,MDDFN,MDERR,MDFDA,MDFLD,MDHL7,MDID,MDIDS,MDIEN,MDIENS,MDRET,MDX,MDY,VA,VADM,VAERR,VAIN,Z
|
---|
| 176 | S RESULTS=$NA(^TMP($J)) K @RESULTS
|
---|
| 177 | D:$T(@OPTION)]"" @OPTION
|
---|
| 178 | D:'$D(@RESULTS) BADRPC^MDRPCU("MD TMDPATIENT","MDRPCOP",OPTION)
|
---|
| 179 | D CLEAN^DILF
|
---|
| 180 | Q
|
---|
| 181 | ;
|
---|
| 182 | SELECT ; [Procedure] Select patient
|
---|
| 183 | I '$D(^DPT(+$G(DFN),0))#2 S @RESULTS@(0)="-1^No such patient" Q
|
---|
| 184 | S @RESULTS@(0)="1^Required Identifiers & messages"
|
---|
| 185 | S IENS=DFN_","
|
---|
| 186 | D FILE^DID(2,,"REQUIRED IDENTIFIERS","MDIDS")
|
---|
| 187 | F MDX=0:0 S MDX=$O(MDIDS("REQUIRED IDENTIFIERS",MDX)) Q:'MDX D
|
---|
| 188 | .S MDFLD=MDIDS("REQUIRED IDENTIFIERS",MDX,"FIELD")
|
---|
| 189 | .S MDID="$$PTID^"_$$GET1^DID(2,MDFLD,"","LABEL")
|
---|
| 190 | .S MDID=MDID_U_$$GET1^DIQ(2,IENS,MDFLD)
|
---|
| 191 | .D:MDFLD=.03
|
---|
| 192 | ..S MDID=MDID_" ("_$$GET1^DIQ(2,IENS,.033)_")"
|
---|
| 193 | ..S MDID=MDID_U_$$DOB^DPTLK1(+IENS)
|
---|
| 194 | .D:MDFLD=.09
|
---|
| 195 | ..S X=$P(MDID,U,3),X=$E(X,1,3)_"-"_$E(X,4,5)_"-"_$E(X,6,10)
|
---|
| 196 | ..S $P(MDID,U,3)=X,$P(MDID,U,4)=$$SSN^DPTLK1(+IENS)
|
---|
| 197 | .S @RESULTS@($O(@RESULTS@(""),-1)+1)=MDID
|
---|
| 198 | S MDID="$$PTID^"_$$GET1^DID(2,.1,"","LABEL")
|
---|
| 199 | S MDID=MDID_U_$$GET1^DIQ(2,IENS,.1)
|
---|
| 200 | S @RESULTS@($O(@RESULTS@(""),-1)+1)=MDID
|
---|
| 201 | S MDID="$$PTID^"_$$GET1^DID(2,.101,"","LABEL")
|
---|
| 202 | S MDID=MDID_U_$$GET1^DIQ(2,IENS,.101)
|
---|
| 203 | S @RESULTS@($O(@RESULTS@(""),-1)+1)=MDID
|
---|
| 204 | K MDRET
|
---|
| 205 | D GUIBS5A^DPTLK6(.MDRET,DFN) D:MDRET(1)=1
|
---|
| 206 | .D ADD("$$MSGHDR^2^SAME LAST NAME AND LAST 4")
|
---|
| 207 | .S MDX=1
|
---|
| 208 | .F S MDX=$O(MDRET(MDX)) Q:'MDX!(+$G(MDRET(MDX))) D
|
---|
| 209 | ..D ADD($P(MDRET(MDX),U,2))
|
---|
| 210 | .D ADD(" ")
|
---|
| 211 | .S MDX=1
|
---|
| 212 | .F S MDX=$O(MDRET(MDX)) Q:'MDX D:+MDRET(MDX)
|
---|
| 213 | ..S MDDFN=+$P(MDRET(MDX),U,2)
|
---|
| 214 | ..D ADD($$GET1^DIQ(2,MDDFN_",",.01)_" "_$$DOB^DPTLK1(MDDFN)_" "_$$SSN^DPTLK1(MDDFN))
|
---|
| 215 | .D ADD(" ")
|
---|
| 216 | .D ADD("Please review carefully before continuing")
|
---|
| 217 | .D ADD("$$MSGEND")
|
---|
| 218 | K MDRET
|
---|
| 219 | D PTSEC^DGSEC4(.MDRET,DFN) D:MDRET(1)'=0
|
---|
| 220 | .D:MDRET(1)=3
|
---|
| 221 | ..D ADD("$$MSGHDR^0^CAN'T ACCESS YOUR OWN RECORD!!")
|
---|
| 222 | .D:MDRET(1)=-1
|
---|
| 223 | ..D ADD("$$MSGHDR^0^INCOMPLETE INFORMATION - CAN'T PROCEED")
|
---|
| 224 | .D:MDRET(1)=1
|
---|
| 225 | ..D ADD("$$MSGHDR^1^SENSITIVE RECORD ACCESS")
|
---|
| 226 | .D:MDRET(1)'=-1&(MDRET(1)'=3)&(MDRET(1)'=1)
|
---|
| 227 | ..D ADD("$$MSGHDR^3^SENSITIVE RECORD ACCESS")
|
---|
| 228 | .S MDX=1
|
---|
| 229 | .F S MDX=$O(MDRET(MDX)) Q:'MDX D ADD($TR(MDRET(MDX),"*"," "))
|
---|
| 230 | .D ADD("$$MSGEND")
|
---|
| 231 | D GUIMTD^DPTLK6(.MDRET,DFN) D:MDRET(1)=1
|
---|
| 232 | .D ADD("$$MSGHDR^1^NOTICE")
|
---|
| 233 | .F MDX=1:0 S MDX=$O(MDRET(MDX)) Q:'MDX D ADD(MDRET(MDX))
|
---|
| 234 | .D ADD("$$MSGEND")
|
---|
| 235 | Q
|
---|
| 236 | ;
|
---|
| 237 | X2FM(X) ; [Function] return FM date given relative date
|
---|
| 238 | N %DT S %DT="TS" D ^%DT
|
---|
| 239 | Q Y
|
---|
| 240 | ;
|
---|