Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: MDRPCOP

MDRPCOP.m

Go to the documentation of this file.
  1. MDRPCOP ; HOIFO/DP - Object RPCs (TMDPatient) ;8/3/09 10:39
  1. ;;1.0;CLINICAL PROCEDURES;**4,6,11,20,42**;Apr 01, 2004;Build 12
  1. ; Integration Agreements:
  1. ; IA# 2054 [Supported] DILF call
  1. ; IA# 2056 [Supported] DIQ calls
  1. ; IA# 2263 [Supported] XPAR calls
  1. ; IA# 3027 [Supported] Calls to DGSEC4
  1. ; IA# 2981 [Subscription] Calls to GUI~GMRCP5
  1. ; IA# 2548 [Supported] ACRP Interface Toolkit APIs.
  1. ; IA# 2552 [Supported] AIT API to provide outpatient encounter data.
  1. ; IA# 10061 [Supported] VADPT calls.
  1. ; IA# 3468 [Subscription] Use GMRCCP APIs.
  1. ; IA# 10103 [Supported] Call to XLFDT
  1. ; IA# 10039 [Supported] Ward Location File (#42) Access.
  1. ; IA# 10035 [Supported] DPT references
  1. ; IA# 3613 [Private] GETVST^MDRPCOP API call
  1. ; IA# 10099 [Supported] GMRADPT call
  1. ; IA# 1096 [Controlled Subscription] ^DGPM("ATID1" x-ref loop
  1. ; IA# 358 [Controlled Subscription] FILE 405 references
  1. ;
  1. ADD(X) ; [Procedure] Add line to @RESULTS@(...
  1. S @RESULTS@(+$O(@RESULTS@(""),-1)+1)=X
  1. Q
  1. ;
  1. ALLERGY ; [Procedure] Return Allergies
  1. D EN1^GMRADPT I '$O(GMRAL(0)) D Q
  1. .I $G(GMRAL)="" S @RESULTS@(0)="No Allergy Assessment"
  1. .I $G(GMRAL)=0 S @RESULTS@(0)="No Known Allergies"
  1. S @RESULTS@(0)="This patient has the following allergy(ies): "
  1. F X=0:0 S X=$O(GMRAL(X)) Q:'X D
  1. .S @RESULTS@(X)=$P($G(GMRAL(X)),U,2)
  1. Q
  1. ;
  1. CHKIN ; [Procedure] Check In Study
  1. N MDCART,MDREZ S MDCART=0
  1. I +$P(DATA,U,4),+$G(^MDS(702.09,+$P(DATA,U,4),"CS")) S MDCART=1
  1. F X=2:1:5 D
  1. .I $P(DATA,U,X)]"" S MDFDA(702,$P(DATA,U,1),$P("^.04^.05^.11^.07",U,X))=$P(DATA,U,X)
  1. S MDFDA(702,$P(DATA,U,1),.09)=4 ; Status = Checked-In
  1. I $P(DATA,U,1)="+1," D
  1. .S MDFDA(702,"+1,",.01)=DFN
  1. .S MDFDA(702,"+1,",.02)=$$NOW^XLFDT()
  1. .S MDFDA(702,"+1,",.03)=DUZ
  1. .S MDPC=$P(DATA,"^",5),MDPC=$S($L(MDPC,";")=1:MDPC,1:$P(MDPC,";",2))
  1. .S MDFDA(702,"+1,",.14)=MDPC
  1. .D UPDATE^DIE("","MDFDA","MDIEN","MDERR") Q:$D(MDERR)
  1. .S MDIENS=MDIEN(1)_",",MDHL7=$$SUB^MDHL7B(MDIEN(1))
  1. .I +MDHL7=-1 S MDFDA(702,MDIENS,.09)=2,MDFDA(702,MDIENS,.08)=$P(MDHL7,U,2)
  1. .I +MDHL7=1 S MDFDA(702,MDIENS,.09)=5,MDFDA(702,MDIENS,.08)=""
  1. .D:$D(MDFDA) FILE^DIE("","MDFDA","MDERR")
  1. I $P(DATA,U,1)'="+1," D
  1. .D FILE^DIE("","MDFDA","MDERR") Q:$D(MDERR)
  1. .S MDIENS=+DATA_","
  1. .S MDHL7=$$SUB^MDHL7B(+MDIENS)
  1. .I +MDHL7=-1 S MDFDA(702,MDIENS,.09)=2,MDFDA(702,MDIENS,.08)=$P(MDHL7,U,2)
  1. .I +MDHL7=1 S MDFDA(702,MDIENS,.09)=5,MDFDA(702,MDIENS,.08)=""
  1. .D:$D(MDFDA) FILE^DIE("","MDFDA","MDERR")
  1. ; Patch 6 - Renal Check-In
  1. D:+$G(MDIENS)
  1. .S X=+$P(^MDD(702,+MDIENS,0),U,4) Q:'X
  1. .I $P(^MDS(702.01,X,0),U,6)=2 D Q ; Renal Check-In
  1. ..D CP^MDKUTLR(+MDIENS)
  1. ..S MDFDA(702,+MDIENS_",",.09)=5
  1. ..D FILE^DIE("","MDFDA","MDERR")
  1. ; Patch 6 - Renal Check-In
  1. I +MDCART>0 D
  1. .S MDREZ=$$NEWTIUN^MDRPCOT(+MDIEN(1))
  1. .I +MDREZ<0 D FILEMSG^MDRPCOT(+MDIEN(1),"TIU",2,MDREZ)
  1. .S MDREZ=$$SUBMIT^MDRPCOT1(MDIEN(1))
  1. .D FILEMSG^MDRPCOT(+MDIEN(1),"IMAGING",$S(+MDREZ>0:+MDREZ,1:2),MDREZ)
  1. I '$D(MDERR) S @RESULTS@(0)="1^OK" Q
  1. D ERROR^MDRPCU(RESULTS,.MDERR)
  1. Q
  1. ;
  1. DISPCON ; [Procedure] Display a consult
  1. K ^TMP("GMRC",$J)
  1. D GUI^GMRCP5(.RESULTS,DATA)
  1. Q
  1. ;
  1. GETCONS ; [Procedure] Get available consults for patient
  1. K ^TMP("MDTMP",$J) N MDCDT,MDDY,X1,X2,X
  1. S MDDY=$$GET^XPAR("SYS","MD COMPL PROC DISPLAY DAYS",1)
  1. S X1=DT,X2=-$S(MDDY>0:+MDDY,1:365) D C^%DTC S MDCDT=X
  1. D CPLIST^GMRCCP(DFN,,$NA(^TMP("MDTMP",$J)))
  1. S MDX=0
  1. F S MDX=$O(^TMP("MDTMP",$J,MDX)) Q:'MDX D:"saprc"[$P(^(MDX),U,4)
  1. .S Y="123;"_$P(^TMP("MDTMP",$J,MDX),U,5)
  1. .I $P($G(^TMP("MDTMP",$J,MDX)),U,4)="c" Q:$P($G(^TMP("MDTMP",$J,MDX)),U,1)<MDCDT
  1. .F X=2,3,4,1,6,5 S Y=Y_U_$P(^TMP("MDTMP",$J,MDX),U,X)
  1. .S Y=Y_U_+$O(^MDD(702,"ACON",+$P(^TMP("MDTMP",$J,MDX),U,5)))
  1. .;
  1. .; Patch MD*1.0*4 - Return number of times checked in at piece 9
  1. .;
  1. .S (X,Z)=0,MDY=+$P(^TMP("MDTMP",$J,MDX),U,5)
  1. .F S X=$O(^MDD(702,"ACON",MDY,X)) Q:'X S Z=Z+1
  1. .S $P(Y,U,9)=Z
  1. .;
  1. .; End Patch MD*1.0*4
  1. .;
  1. .D ADD(Y)
  1. S @RESULTS@(0)=+$O(@RESULTS@(""),-1)
  1. K ^TMP("MDTMP",$J)
  1. Q
  1. ;
  1. GETHDR ; [Procedure] Get Pt Header
  1. S DFNIENS=DFN_","
  1. S @RESULTS@(0)=$$GET1^DIQ(2,DFNIENS,.01)_" "_$$GET1^DIQ(2,DFNIENS,.1)_" "_$$GET1^DIQ(2,DFNIENS,.101)
  1. S @RESULTS@(1)=$$GET1^DIQ(2,DFNIENS,.09)_" "_$$GET1^DIQ(2,DFNIENS,.02)_" "_$$GET1^DIQ(2,DFNIENS,.03)_" ("_$$GET1^DIQ(2,DFNIENS,.033)_")"
  1. Q
  1. ;
  1. GETOBJ ; [Procedure] Get information for TMDPATIENT object
  1. D DEM^VADPT,INP^VADPT Q:'$D(VADM)
  1. S @RESULTS@(0)=DFN
  1. S @RESULTS@(1)=VADM(1)
  1. S @RESULTS@(2)=$P(VADM(2),U,2)
  1. S @RESULTS@(3)=$P(VADM(3),U,2)
  1. S @RESULTS@(4)=VADM(4)
  1. S @RESULTS@(5)=$P(VADM(5),U,2)
  1. I VAIN(4)]"" S @RESULTS@(6)="Ward: "_$P(VAIN(4),U,2)_" Rm: "_VAIN(5)
  1. E S @RESULTS@(6)=""
  1. Q
  1. ;
  1. GETRES ; [Procedure] Get results report
  1. F MDX=0:0 S MDX=$O(^MDD(703.1,"ADFN",DFN,MDX)) Q:'MDX D
  1. .S MDINST=+$P($G(^MDD(703.1,MDX,0)),U,4)
  1. .I $G(DATA) Q:'$D(^MDS(702.01,DATA,.1,"B",MDINST))
  1. .S MDY=$O(@RESULTS@(""),-1)+1
  1. .S @RESULTS@(MDY)="703.1;"_MDX_U_^MDD(703.1,MDX,0)
  1. .S Y=$P(^MDD(703.1,MDX,0),U,3) D D^DIQ
  1. .S $P(@RESULTS@(MDY),U,11)=Y
  1. .S Y=$P($G(^MDS(702.09,+$P(^MDD(703.1,MDX,0),U,4),0)),U)
  1. .S $P(@RESULTS@(MDY),U,12)=Y
  1. S @RESULTS@(0)=+$O(@RESULTS@(""),-1)
  1. Q
  1. ;
  1. GETTRAN ; [Procedure] Get a patients transactions
  1. K ^TMP("MDTMP",$J),^TMP("MDCONL",$J) N MDCDT,MDCDY,MDCOM,MDMULT,MDMULN,MDNUM,MDREQ,MDREQDT,MDYR,X1,X2,X
  1. S MDNUM=$$GET^XPAR("SYS","MD DAYS TO RETAIN COM STUDY",1) S (MDCDY,MDCOM)=0
  1. S MDMULN=$$GET^XPAR("SYS","MD DAYS TO RET COM MULT",1)
  1. I +MDNUM>0 S X1=DT,X2=-MDNUM D C^%DTC S MDCOM=X
  1. I +MDMULN>0 S X1=DT,X2=-MDMULN D C^%DTC S MDCDY=X
  1. D CPLIST^GMRCCP(DFN,,$NA(^TMP("MDTMP",$J)))
  1. S X1=DT,X2=-365 D C^%DTC S MDCDT=X
  1. S MDX=0 F S MDX=$O(^TMP("MDTMP",$J,MDX)) Q:'MDX D:"saprc"[$P(^(MDX),U,4)
  1. .I $P($G(^TMP("MDTMP",$J,MDX)),U,4)="c" Q:$P($G(^TMP("MDTMP",$J,MDX)),U,1)<MDCDT
  1. .S ^TMP("MDCONL",$J,$P($G(^TMP("MDTMP",$J,MDX)),U,5))=$P($G(^TMP("MDTMP",$J,MDX)),U,1)
  1. K ^TMP("MDTMP",$J)
  1. F MDX=0:0 S MDX=$O(^MDD(702,"B",DFN,+MDX))_"," Q:'MDX D
  1. .Q:'$$GET1^DIQ(702,MDX,.05,"I")
  1. .Q:$G(^TMP("MDCONL",$J,+$$GET1^DIQ(702,MDX,.05,"I")))=""
  1. .S MDMULT=+$$GET1^DIQ(702,MDX,".04:.12","I")
  1. .S MDYR=$S(MDMULT<1:MDCOM,1:MDCDT)
  1. .I MDNUM Q:$$GET1^DIQ(702,MDX,.09,"I")=3&($$GET1^DIQ(702,MDX,.02,"I")<MDYR)
  1. .I MDMULT=1&(+MDMULN>0) Q:$$GET1^DIQ(702,MDX,.09,"I")=3&($$GET1^DIQ(702,MDX,.02,"I")<MDCDY)
  1. .S MDREQDT="" I +$$GET1^DIQ(702,MDX,.05,"I") S MDREQDT=$G(^TMP("MDCONL",$J,+$$GET1^DIQ(702,MDX,.05,"I")))
  1. .I MDREQDT'="" S MDREQDT=$$FMTE^XLFDT(MDREQDT,"1P")
  1. .S MDREQ=$$GET1^DIQ(702,MDX,.04)_" "_+MDX_" (Consult #:"_$$GET1^DIQ(702,MDX,.05,"I")_$S(MDREQDT'="":" Requested: "_MDREQDT,1:"")_")"
  1. .S Z=$$GET1^DIQ(702,MDX,".04:.02","I")_U_MDREQ_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)
  1. .S Y=$O(@RESULTS@(""),-1)+1
  1. .S @RESULTS@(Y)="702;"_+MDX_U_Z
  1. S @RESULTS@(0)=+$O(@RESULTS@(""),-1)
  1. K ^TMP("MDCONL",$J)
  1. Q
  1. ;
  1. GETVST ; [Procedure] Return list of visits
  1. N BEG,END,VAERR,VASD,BDT,DTM,EDT,LOC,NOW,MDQUERY,MDLST,MDTDF,STI,STS,TODAY,I,J,K,XI,XE,X
  1. S NOW=$$NOW^XLFDT(),TODAY=$P(NOW,".",1),MDTDF=DFN
  1. S BEG=$$X2FM($$GETBEG),END=$$X2FM($$GETEND)+0.2359
  1. S MDLST="",MDSTOP=""
  1. I END>NOW D ; get future encounters, past cancels/no-shows from VADPT
  1. .S VASD("F")=BEG
  1. .S VASD("T")=END
  1. .S VASD("W")="129"
  1. .D SDA^VADPT
  1. .S I=0 F S I=$O(^UTILITY("VASD",$J,I)) Q:'I D
  1. ..S XI=^UTILITY("VASD",$J,I,"I"),XE=^("E")
  1. ..S DTM=$P(XI,U),IEN=$P(XI,U,2),STI=$P(XI,U,3)
  1. ..S LOC=$P(XE,U,2),STS=$P(XE,U,3)
  1. ..I DTM<TODAY,(STI=""!(STI["I")!(STI="NT")) Q ; no prior kept appts
  1. ..S MDLST(DTM,"A",1)="A;"_DTM_";"_IEN_U_DTM_U_LOC_U_STS
  1. .K ^UTILITY("VASD",$J)
  1. I BEG'>NOW D ;past encounters from ACRP Toolkit - set in CALLBACK
  1. .S BDT=BEG
  1. .S EDT=$S(END<NOW:END,1:NOW)
  1. .D OPEN^SDQ(.MDQUERY)
  1. .I '$$ERRCHK^SDQUT() D INDEX^SDQ(.MDQUERY,"PATIENT/DATE","SET")
  1. .I '$$ERRCHK^SDQUT() D PAT^SDQ(.MDQUERY,DFN,"SET")
  1. .I '$$ERRCHK^SDQUT() D DATE^SDQ(.MDQUERY,BDT,EDT,"SET")
  1. .I '$$ERRCHK^SDQUT() D
  1. ..D SCANCB^SDQ(.MDQUERY,"D CALLBACK^ORWCV(Y,Y0,$NA(MDLST),.MDSTOP)","SET")
  1. .I '$$ERRCHK^SDQUT() D ACTIVE^SDQ(.MDQUERY,"TRUE","SET")
  1. .I '$$ERRCHK^SDQUT() D SCAN^SDQ(.MDQUERY,"FORWARD")
  1. .D CLOSE^SDQ(.MDQUERY)
  1. N TIM,MOV,MDX0,Y,MTIM,XTYP,XLOC,XLOCI,HLOC,EARLY,DONE ; admits
  1. S EARLY=BEG,DONE=0 S:$G(DFN)="" DFN=MDTDF
  1. S TIM="" F S TIM=$O(^DGPM("ATID1",DFN,TIM)) Q:TIM'>0 D Q:DONE
  1. .S MOV=0 F S MOV=$O(^DGPM("ATID1",DFN,TIM,MOV)) Q:MOV'>0 D Q:DONE
  1. ..D GETS^DIQ(405,+MOV_",",".01;.04;.06","IE","MDX0") S MTIM=$G(MDX0(405,MOV_",",".01","I"))
  1. ..S XTYP=$G(MDX0(405,+MOV_",",".04","E"))
  1. ..S XLOC=$G(MDX0(405,+MOV_",",".06","E"))
  1. ..S XLOCI=+$G(MDX0(405,+MOV_",",".06","I")),HLOC=+$G(^DIC(42,+XLOCI,44))
  1. ..S MDLST(MTIM,"I",1)="I;"_MTIM_";"_HLOC_U_MTIM_U_"Inpatient Stay"_U_XLOC_U_XTYP
  1. ..S DONE=1 ; Not sure if I should include all stays <DRP@Hines>
  1. S I=0 F S I=$O(MDLST(I)) Q:'I D
  1. .S J="" F S J=$O(MDLST(I,J)) Q:J="" D
  1. ..S K=0 F S K=$O(MDLST(I,J,K)) Q:'K D
  1. ...S @RESULTS@($O(@RESULTS@(""),-1)+1)=MDLST(I,J,K)
  1. S:$G(DFN)="" DFN=MDTDF S @RESULTS@(0)=+$O(@RESULTS@(""),-1)_U_($$GET1^DIQ(2,DFN_",",.1)]"")
  1. Q
  1. ;
  1. GETBEG() ; Get Beginning Date Range
  1. I $$GET^XPAR("SYS","MD APPOINT START DATE",1)>1 Q "T-"_$$GET^XPAR("SYS","MD APPOINT START DATE",1)
  1. Q "T-200"
  1. GETEND() ; Get Ending Date Range
  1. I $$GET^XPAR("SYS","MD APPOINT END DATE",1)>1 Q "T+"_$$GET^XPAR("SYS","MD APPOINT END DATE",1)
  1. Q "T"
  1. LOGSEC ; [Procedure] Log Security
  1. N RES
  1. D NOTICE^DGSEC4(.RES,DFN,DATA,1)
  1. S @RESULTS@(0)=$S(+RES:"1^Logged",1:"-1^Unable to log")
  1. Q
  1. ;
  1. RPC(RESULTS,OPTION,DFN,DATA) ; [Procedure] Main RPC call tag
  1. NEW DFNIENS,GMRAL,GMVALG,GN,IENS,MDDFN,MDERR,MDFDA,MDFLD,MDHL7,MDID,MDIDS,MDIEN,MDIENS,MDRET,MDX,MDY,VA,VADM,VAERR,VAIN,Z
  1. S RESULTS=$NA(^TMP($J)) K @RESULTS
  1. D:$T(@OPTION)]"" @OPTION
  1. D:'$D(@RESULTS) BADRPC^MDRPCU("MD TMDPATIENT","MDRPCOP",OPTION)
  1. D CLEAN^DILF
  1. Q
  1. ;
  1. SELECT ; [Procedure] Select patient
  1. ; Moved to continuation routine at MD*1.0*6 due to routine size
  1. D SELECT^MDRPCOP1
  1. Q
  1. ;
  1. X2FM(X) ; [Function] return FM date given relative date
  1. N %DT S %DT="TS" D ^%DT
  1. Q Y
  1. ;