GMVRPCP ;HOIFO/DP-RPC for GMV_PtSelect.pas ; 7/8/05 8:05am
 ;;5.0;GEN. MED. REC. - VITALS;**1,3,22,29**;Oct 31, 2002;Build 7
 ; Integration Agreements:
 ; IA# 510 [Controlled] Calls to set ^DISV
 ; IA# 3027 [Supported] Calls to DGSEC4
 ; IA# 3266 [Controlled] Calls to DOB^DPTLK1
 ; IA# 3267 [Controlled] Calls to SSN^DPTLK1
 ; IA# 3593 [Supported] Calls to DPTLK6
 ; IA# 4440 [Supported] XUPROD calls
 ; IA# 5888 [Controlled] Calls to VIC API
 ; IA# 10035 [Supported] Calls for FILE 2 references.
 ; IA# 10039 [Supported] Reads of ^DIC(42,#,44)
 ; IA# 10040 [Supported] Reads of ^SC(
 ; IA# 10061 [Supported] Calls to VADPT
 ; IA# 10112 [Supported] VASITE calls
 ;
 ; 01/28/2014 KAM GMRV*5*29 Add Call to VIC API during patient lookup
 ;
ADD(X) ; [Procedure] Add line to @RESULTS@(...
 ; Input parameters
 ;  1. X [Literal/Required] Data to add to @RESULTS@(...
 
@RESULTS@(+$O(@RESULTS@(""),-1)+1)=X
 
Q
 
;
LOGSEC ; [Procedure] Log Security
 
NOTICE^DGSEC4(.GMVRET,DFN,DATA,3)
 
@RESULTS@(0)=$S(GMVRET:"1^Logged",1:"-1^Unable to log")
 
Q
 
;
RPC(RESULTS,OPTION,DFN,DATA) ; [Procedure] Main RPC call tag
 ; RPC: [GMV PTSELECT]
 ; Input parameters
 ;  1. RESULTS [Literal/Required] RPC return array
 ;  2. OPTION [Literal/Required] Call method for RPC
 ;  3. DFN [Literal/Required] Patient IEN
 ;  4. DATA [Literal/Optional] Other data as required for call
 
RESULTS=$NA(^TMP("GMVPTSELECT",$J)) @RESULTS
 
D:$T(@OPTION)]"" @OPTION
 
D:'$D(@RESULTS)
 .
@RESULTS@(0)="-1^No results returned"
 
CLEAN^DILF
 
Q
 
;
HOSPLOC ; [Procedure] Return location as ptr to 44 or ""
 
VAIN
 
INP^VADPT @RESULTS@(0)=+$G(^DIC(42,+VAIN(4),44),"")
 
Q
 
;
PTHDR ; [Procedure] Patient Info for Header Displays
 
'$D(^DPT(+$G(DFN),0)) D  Q
 
.@RESULTS@(0)="-1^No Such DFN ["_$G(DFN,"<Null>")_"]"
 
GMVIENS
 
@RESULTS@(0)=+DFN,GMVIENS=(+DFN)_","
 
@RESULTS@(1)=$$GET1^DIQ(2,GMVIENS,.01)_"  "_$$GET1^DIQ(2,GMVIENS,.09)
 
@RESULTS@(2)="DOB: "_$$GET1^DIQ(2,GMVIENS,.03)_" "_$$GET1^DIQ(2,GMVIENS,.02)_", Age: "_$$GET1^DIQ(2,GMVIENS,.033)
 
Q
 
;
PTLKUP ; [Procedure] Patient lookup handled separately for security
 
GMVIDX,CARDRSLT
 
;
 ; 01/28/2014 KAM GMRV*5*29 Add Call to VIC API during patient lookup
 ;(next two lines)
 
RPCVIC^DPTLK(.CARDRSLT,DATA;SUPPLIED VHIC CARD API
 
CARDRSLT>0 DATA="`"_CARDRSLT
 
; The Variable DATA is unchanged if CARDRSLT is < 0
 ;
 
GMVIDX=$S(DATA?9N.1"P":"SSN",1:"B^BS^BS5")
 
FIND^DIC(2,"","@;.01;.02;.03;.09","MP",DATA,60,GMVIDX)
 
I $P(^TMP("DILIST",$J,0),U,3) D  Q
 
.@RESULTS@(0)="-1^Too many patients found matching '"_DATA_"'. Please be more specific."
 
GMV=0:0 GMV=$O(^TMP("DILIST",$J,GMV)) Q:'GMV  D
 
.@RESULTS@(GMV)=$$PTREC(+^TMP("DILIST",$J,GMV,0))
 
'$D(@RESULTS@RESULTS@(0)="-1^No patients matching '"_DATA_"'"
 
E  S @RESULTS@(0)=+$O(@RESULTS@(""),-1)
 
Q
 
;
PTREC(DFN) ;
 ; Extrinsic to return a Pt Rec  in standard list format
 
GMV
 
GMV=$G(^DPT(DFN,0))
 
GMV="2;"_DFN_U_$P(GMV,U,1)_U_$P(GMV,U,2)_U_$P(GMV,U,3)_U_$P(GMV,U,9)
 
S $P(GMV,U,10)=$$DOB^DPTLK1(DFN)
 
S $P(GMV,U,11)=$$SSN^DPTLK1(DFN)
 
GMV
 
;
SELECT ; [Procedure] Select patient
 ; Calls required utilities to check security and
 ; return associated warnings/alerts about a
 ; patient being selected.
 ; Variables:
 ;  IENS: [Private] Fileman IENS
 ;  GMVDFN: [Private] Scratch
 ;  GMVFLD: [Private] FIeld number
 ;  GMVID: [Private] Identifier array
 ;  GMVRET: [Private] Scratch
 ;  GMVX: [Private] Scratch
 ; New private variables
 
NEW IENS,GMVCNT,GMVDFN,GMVFLD,GMVHLIEN,GMVI,GMVID,GMVIDS,GMVRET,GMVX,GMVIDIEN
 
'$D(^DPT(+$G(DFN),0))#2 @RESULTS@(0)="-1^No such patient" Q
 S 
^DISV(DUZ,"^DPT(")=DFN ;spacebar return
 
@RESULTS@(0)="1^Required Identifiers & messages"
 
IENS=DFN_","
 
FILE^DID(2,,"REQUIRED IDENTIFIERS","GMVIDS")
 
GMVX=0:0 GMVX=$O(GMVIDS("REQUIRED IDENTIFIERS",GMVX)) Q:'GMVX  D
 
.GMVFLD=GMVIDS("REQUIRED IDENTIFIERS",GMVX,"FIELD")
 .
GMVID="$$PTID^"_$$GET1^DID(2,GMVFLD,"","LABEL")
 .
GMVID=GMVID_U_$$GET1^DIQ(2,IENS,GMVFLD)
 .
D:GMVFLD=.03
 ..
GMVID=GMVID_" ("_$$GET1^DIQ(2,IENS,.033)_")"
 
..GMVID=GMVID_U_$$DOB^DPTLK1(+IENS)
 .
D:GMVFLD=.09
 ..
X=$P(GMVID,U,3),X=$E(X,1,3)_"-"_$E(X,4,5)_"-"_$E(X,6,10)
 ..
S $P(GMVID,U,3)=X,$P(GMVID,U,4)=$$SSN^DPTLK1(+IENS)
 .
@RESULTS@($O(@RESULTS@(""),-1)+1)=GMVID
 
; Add ward and Room/Bed
 
GMVID="$$PTID^"_$$GET1^DID(2,.1,"","LABEL")
 
GMVID=GMVID_U_$$GET1^DIQ(2,IENS,.1)
 
GMVIDIEN=$P(GMVID,U,3)
 
GMVIDIEN=$$IDIEN(GMVIDIEN)
 
@RESULTS@($O(@RESULTS@(""),-1)+1)=GMVID
 
GMVID="$$PTID^"_$$GET1^DID(2,.101,"","LABEL")
 
GMVID=GMVID_U_$$GET1^DIQ(2,IENS,.101)
 
@RESULTS@($O(@RESULTS@(""),-1)+1)=GMVID
 
; ------- Clevland Alert -------
 
GMVRET
 
GUIBS5A^DPTLK6(.GMVRET,DFND:GMVRET(1)=1
 .
ADD("$$MSGHDR^2^SAME LAST NAME AND LAST 4")
 .
GMVX=1
 .
F  S GMVX=$O(GMVRET(GMVX)) Q:'GMVX!(+$G(GMVRET(GMVX)))  D
 
..ADD($P(GMVRET(GMVX),U,2))
 .
ADD(" ")
 .
GMVX=1
 .
F  S GMVX=$O(GMVRET(GMVX)) Q:'GMVX  D:+GMVRET(GMVX)
 ..
GMVDFN=+$P(GMVRET(GMVX),U,2)
 ..
ADD($$GET1^DIQ(2,GMVDFN_",",.01)_"    "_$$DOB^DPTLK1(GMVDFN)_"    "_$$SSN^DPTLK1(GMVDFN))
 .
ADD(" ")
 .
ADD("Please review carefully before continuing")
 .
ADD("$$MSGEND")
 
; ------- Sensitive Record? -------
 
GMVRET
 
PTSEC^DGSEC4(.GMVRET,DFND:GMVRET(1)'=0
 .
D:GMVRET(1)=3
 ..
ADD("$$MSGHDR^0^CAN'T ACCESS YOUR OWN RECORD!!")
 .
D:GMVRET(1)=-1
 ..
ADD("$$MSGHDR^0^INCOMPLETE INFORMATION - CAN'T PROCEED")
 .
D:GMVRET(1)=1
 ..
ADD("$$MSGHDR^1^SENSITIVE RECORD ACCESS")
 .
D:GMVRET(1)'=-1&(GMVRET(1)'=3)&(GMVRET(1)'=1)
 ..
ADD("$$MSGHDR^3^SENSITIVE RECORD ACCESS")
 .
GMVX=1
 .
F  S GMVX=$O(GMVRET(GMVX)) Q:'GMVX  ADD($TR(GMVRET(GMVX),"*"," "))
 .
ADD("$$MSGEND")
 
; ------- Means Test Information? -------
 
GUIMTD^DPTLK6(.GMVRET,DFND:GMVRET(1)=1
 .
ADD("$$MSGHDR^1^NOTICE")
 .
GMVX=1:0 GMVX=$O(GMVRET(GMVX)) Q:'GMVX  ADD(GMVRET(GMVX))
 .
ADD("$$MSGEND")
 
Q
 
;
IDIEN(GMVIEN) ;
 
GMVIEN=$G(GMVIEN)
 
GMVIEN="" ""
 
GMVIEN=$O(^DIC(42,"B",GMVIEN,0))
 
'GMVIEN ""
 
GMVIEN=$P($G(^DIC(42,+GMVIEN,44)),"U",1)
 
GMVIEN
 
;
CCOW ; Return CCOW site and production indicator
 
@RESULTS@(0)=$P($$SITE^VASITE(),"^",3)_"^"_$$PROD^XUPROD()
 
Q
 
;