GMVGETD ;HOIFO/YH,FT-EXTRACTS WARD/ROOM-BED/PT AND PT VITALS ;5/10/07
 ;;5.0;GEN. MED. REC. - VITALS;**3,22,23**;Oct 31, 2002;Build 25
 ;
 ; This routine uses the following IAs:
 ; #1380  - ^DG(405.4 references   (controlled)
 ; #1377  - ^DIC(42 references     (controlled)
 ; #4290  - ^PXRMINDX global       (controlled)
 ; #10035 - FILE 2 references      (supported)
 ; #10039 - FILE 42 references     (supported)
 ; #10103 - ^XLFDT calls           (supported)
 ; #10104 - ^XLFSTR calls          (supported)
 ;
 ; This routine supports the following IAs:
 ; #4416 - GMV EXTRACT REC RPC is called at GETVM  (private)
 ; #4358 - GMV LATEST VM RPC is called at GETLAT (private)
 ;
GETVM(RESULT,GMRVDATA) ;GMV EXTRACT REC [RPC entry point]
 ; Returns data particular patient and date/time range in RESULT
 ; GMRVDATA = DFN^END DATE VITAL TAKEN^VITAL TYPE (OPTIONAL)^START DATE VITAL TAKEN
 
DFN,GMVEND,GMVSTART,GMVTYPE
 
DFN=+$P(GMRVDATA,U,1),GMVEND=+$P(GMRVDATA,U,2),GMVSTART=$P(GMRVDATA,U,4),GMVTYPE=$P(GMRVDATA,U,3)
 
^TMP($J,"GRPC")
 
S:GMVEND="" GMVEND=$$NOW^XLFDT()
 
I $P(GMVEND,".",2)'>0 GMVEND=$P(GMVEND,".",1)_".235959"
 
GMVSTART="" GMVSTART=0
 
S:GMVTYPE'="" GMVTYPE(1)=$P(^GMRD(120.51,$O(^GMRD(120.51,"C",GMVTYPE,0)),0),"^")
 
EN1^GMVGETD1
 
'$D(^TMP($J,"GRPC")) ^TMP($J,"GRPC",1)="0^NO "_$S(GMVTYPE'="":GMVTYPE(1),1:"VITALS/MEASUREMENTS ")_" ENTERED WITHIN THIS PERIOD"
 
RESULT=$NA(^TMP($J,"GRPC"))
 
GMRDT,GMRVARY,GMRVITY,GMRVX,GMRZZ
 
Q
GETLAT(RESULT,GMRDFN) ;GMV LATEST VM [RPC entry point]
 ; RETURNS THE LATEST VITALS/MEASUREMENTS FOR A GIVEN PATIENT(GMRDFN)
 ; IN RESULT ARRAY.
 
^TMP($J,"GRPC"EN1^GMVLAT0(GMRDFN)
 
RESULT=$NA(^TMP($J,"GRPC"))
 
Q
WARDLOC(RESULT,DUMMY) ;GMV WARD LOCATION [RPC entry point]
 ;RETURNS MAS WARD LOCATIONS IN RESULT ARRAY
 
^TMP($J,"GWARD"),^TMP($J,"GMRV"GMRWARD,GINDEX,GN,GMR
 
DUMMY=$G(DUMMY)
 
DUMMY=$$UP^XLFSTR(DUMMY)
 
DUMMY=$S(DUMMY="P":"P",1:"A")
 
LIST^DIC(42,"","","","*","","","","I '$$INACT42^GMVUT2(+Y)",,"^TMP($J,""GMRV"")")
 
GINDEX=+$P($G(^TMP($J,"GMRV","DILIST",0)),"^")
 
GINDEX>0 D
 
(GMR,GN)=0 F  S GN=$O(^TMP($J,"GMRV","DILIST",1,GN)) Q:GN'>0  D
 
. . GMRWARD(1)=^TMP($J,"GMRV","DILIST",1,GN),GMRWARD=+^TMP($J,"GMRV","DILIST",2,GN)
 . . 
DUMMY="P" D  Q
 
. . . I $O(^DPT("CN",GMRWARD(1),0))>0 GMR=GMR+1,^TMP($J,"GWARD",GMR)=GMRWARD_"^"_GMRWARD(1)_U_^DIC(42,GMRWARD,44)
 . . 
DUMMY="A" D
 
. . . GMR=GMR+1,^TMP($J,"GWARD",GMR)=GMRWARD_"^"_GMRWARD(1)_U_^DIC(42,GMRWARD,44)
 
^TMP($J,"GMRV"RESULT=$NA(^TMP($J,"GWARD"))
 
Q
WARDPT(RESULT,GMRWARD) ;GMV WARD PT [RPC entry point]
 ;RETURNS A LIST OF PATIENTS ADMITTED TO A GIVEN MAS WARD(GMRWARD) IN RESULT ARRAY.
 
Q:'$D(^DPT("CN",GMRWARD))
 
OUT,GN,DFN,DFN1,GMVPAT
 
^TMP($J,"GMRPT")
 
(GN,DFN)=0 F  S DFN=$O(^DPT("CN",GMRWARD,DFN)) Q:DFN'>0  D
 
I $D(^DPT(DFN,0)) D
 
. . GMVPAT=""
 
. . PTINFO^GMVUTL3(.GMVPAT,DFN)
 . . 
OUT($P(^DPT(DFN,0),"^"),DFN)=DFN_"^"_$P(^DPT(DFN,0),"^")_"^"_GMVPAT
 
'$D(OUTQ
 S 
DFN=""
 
F  S DFN=$O(OUT(DFN)) Q:DFN=""  D
 
.DFN1=0
 .
F  S DFN1=$O(OUT(DFN,DFN1)) Q:'DFN1  D
 
..GN=GN+1,^TMP($J,"GMRPT",GN)=OUT(DFN,DFN1)
 ..
Q
 
.Q
 S 
RESULT=$NA(^TMP($J,"GMRPT"))
 
Q
ROOMBED(RESULT,GMRWARD) ;GMV ROOM/BED [RPC entry point]
 ;RETURNS A LIST OF ROOMS/BEDS FOR A GIVEN MAS WARD(GMRWARD) IN RESULT ARRAY.
 
Q:'$D(^DIC(42,"B",GMRWARD))
 
GN,GROOM,GWARD,GMVTMP ^TMP($J,"GROOM")
 
(GN,GROOM)=0,GWARD=$O(^DIC(42,"B",GMRWARD,0)) GWARD'>0 ^TMP($J,"GROOM",1)="NO ROOM" QUIT
 
F  S GROOM=$O(^DG(405.4,"W",GWARD,GROOM)) Q:GROOM'>0  I $D(^DG(405.4,GROOM)) 
 
GMVTMP($P($P(^DG(405.4,GROOM,0),"^"),"-",1))=GROOM
 
;S GN=GN+1,^TMP($J,"GROOM",GN)=GROOM_"^"_$P(^DG(405.4,GROOM,0),"^")
 
Q
 S 
GROOM="",GN=0
 
F  S GROOM=$O(GMVTMP(GROOM)) Q:GROOM=""  D
 
GN=GN+1,^TMP($J,"GROOM",GN)=GMVTMP(GROOM)_"^"_GROOM
 
Q
QUIT RESULT=$NA(^TMP($J,"GROOM"))
 
Q
CLOSEST(RESULT,GMVDFN,GMVDT,GMVT,GMVFLAG) ; GMV CLOSEST READING [RPC entry point]
 ; Get nearest reading to date(/time) provided
 ;  Input:  GMVDFN - DFN (required)
 ;           GMVDT - FileMan date/time (optional)
 ;                   Default is NOW
 ;            GMVT - Vital Type abbreviation, FILE 120.51, Field 1 (required)
 ;         GMVFLAG - Where to look (optional)
 ;                   0 = either before or after GMVDT  (default)
 ;                   1 = before GMVDT
 ;                   2 = after GMVDT
 ; Output: RESULT - piece1^piece2
 ;          where piece1 = date/time of reading (FileMan internal format)
 ;                piece2 = reading
 ; If no records found piece 1 = -2
 ;                 and piece 2 = message text                     
 ; If an error was encountered piece1 = -1
 ;                         and piece2 = error message
 ;
 
GMVADIFF,GMVADT,GMVAVAL,GMVBDIFF,GMVBDT,GMVBVAL,GMVDATA,GMVTI
 
GMVDFN=+$G(GMVDFN),GMVDT=+$G(GMVDT),GMVT=$G(GMVT),GMVFLAG=+$G(GMVFLAG)
 
GMVFLAG=$S(GMVFLAG=2:2,GMVFLAG=1:1,1:0)
 
'GMVDFN RESULT="-1^DFN not defined" Q
 I 
'$D(^PXRMINDX(120.5,"PI",GMVDFN)) RESULT="-2^Patient has no Vitals data on file" Q
 I 
'GMVDT GMVDT=$$NOW^XLFDT()
 
GMVT="" RESULT="-1^Vital Type not defined" Q
 S 
GMVTI=$$GETIEN^GMVGETVT(GMVT,2)
 
'GMVTI RESULT="-1^Vital Type not found" Q
 I 
'$D(^PXRMINDX(120.5,"PI",GMVDFN,GMVTI)) RESULT="-2^Patient has no data on file for this type" Q
 S 
(GMVADT,GMVAVAL,GMVBDT,GMVBVAL,GMVDATA)=""
 
GMVFLAG=0!(GMVFLAG=1) D
 
.GMVDATA=$$FIND(GMVDFN,GMVTI,GMVDT,0,-1)
 .
GMVBDT=$P(GMVDATA,U,1),GMVBVAL=$P(GMVDATA,U,2)
 
GMVDATA=""
 
GMVFLAG=0!(GMVFLAG=2) D
 
.GMVDATA=$$FIND(GMVDFN,GMVTI,GMVDT,0,1)
 .
GMVADT=$P(GMVDATA,U,1),GMVAVAL=$P(GMVDATA,U,2)
 
GMVFLAG=1 D
 
.GMVBDT'>0 RESULT="-2^Before date not found" Q
 
.GMVBVAL="" RESULT="-2^Before value not found" Q
 
.RESULT=GMVBDT_U_GMVBVAL
 
GMVFLAG=2 D
 
.GMVADT'>0 RESULT="-2^After date not found" Q
 
.GMVAVAL="" RESULT="-2^After value not found" Q
 
.RESULT=GMVADT_U_GMVAVAL
 
GMVFLAG=0 D
 
.GMVADT'>0,GMVBDT'>0 D  Q
 
..RESULT="-2^No records found"
 
.GMVADT'>0,GMVBDT>0 D  Q
 
..S:GMVBVAL]"" RESULT=GMVBDT_U_GMVBVAL
 
..S:GMVBVAL="" RESULT="-2^No records found"
 
.GMVADT>0,GMVBDT'>0 D  Q
 
..S:GMVAVAL]"" RESULT=GMVADT_U_GMVAVAL
 
..S:GMVAVAL="" RESULT="-2^No records found"
 
.GMVADT>0,GMVBDT>0 D
 
..GMVBDIFF=+$$FMDIFF^XLFDT(GMVDT,GMVBDT,2)
 ..
GMVADIFF=+$$FMDIFF^XLFDT(GMVADT,GMVDT,2)
 ..
GMVBDIFF<GMVADIFF RESULT=GMVBDT_U_GMVBVAL
 
..GMVADIFF<GMVBDIFF RESULT=GMVADT_U_GMVAVAL
 
..GMVADIFF=GMVBDIFF RESULT=GMVADT_U_GMVAVAL
 
Q
FIND(GMVDFN,GMVTI,GMVSDT,GMVX,GMVDIR) ; Get nearest record from GMVSDT date/time
 ;  Input:  GMVDFN - DFN (required)
 ;           GMVTI - Vital Type (120.51) IEN (required)
 ;          GMVSDT - FileMan date/time (optional)
 ;                   Default is NOW
 ;            GMVX - Return numeric values only or all values including
 ;                   text (optional)
 ;                   0 = numeric values only (default)
 ;                   1 = all values including text
 ;          GMVDIR - direction of search (required)
 ;                   -1 = look before GMVSDT
 ;                    1 = look after GMVSDT
 ; Output:    GMVY - piece1^piece2
 ;                   where piece1 = date/time of reading (FileMan internal format)
 ;                piece2 = reading
 ; If an error was encountered piece1 = -1
 ;                         and piece2 = error message
 ;
 
GMVARR,GMVFLAG,GMVIEN,GMVY
 
GMVDFN=+$G(GMVDFN),GMVTI=+$G(GMVTI),GMVSDT=+$G(GMVSDT),GMVX=+$G(GMVX),GMVDIR=$G(GMVDIR)
 
GMVDIR=$S(GMVDIR=-1:-1,GMVDIR=1:1,1:"")
 
GMVDIR="" "-1^Direction of search not defined"
 
'GMVTI "-1^Vital Type not defined"
 
GMVX=$S(GMVX=1:1,1:0)
 
'GMVDFN "-1^Patient not defined"
 
'$D(^PXRMINDX(120.5,"PI",GMVDFN)) "-1^Patient has no Vitals data on file"
 
'GMVSDT GMVSDT=$$NOW^XLFDT()
 
(GMVFLAG,GMVIEN)=0,GMVY=""
 
F  S GMVSDT=$O(^PXRMINDX(120.5,"PI",GMVDFN,GMVTI,GMVSDT),GMVDIRQ:'GMVSDT!(GMVFLAG)  D
 
.GMVIEN=0
 .
F  S GMVIEN=$O(^PXRMINDX(120.5,"PI",GMVDFN,GMVTI,GMVSDT,GMVIEN)) Q:$L(GMVIEN)'>0!(GMVFLAG)  D
 
..GMVIEN=+GMVIEN D
 
...F1205^GMVUTL(.GMVARR,GMVIEN,0)
 ..
GMVIEN'=+GMVIEN D
 
...CLIO^GMVUTL(.GMVARR,GMVIEN)
 ..
GMVARR(0)=$G(GMVARR(0))
 ..
Q:$P(GMVARR(0),U,8)=""
 
..Q:$P(GMVARR(0),U,1)'>0
 ..
GMVX=1 D
 
...GMVY=$P(GMVARR(0),U,1)_U_$P(GMVARR(0),U,8),GMVFLAG=1
 ..
'GMVX D
 
..."UNAVAILABLEPASSREFUSED"[$$UP^XLFSTR($P(GMVARR(0),U,8)) Q
 
...GMVY=$P(GMVARR(0),U,1)_U_$P(GMVARR(0),U,8),GMVFLAG=1
 
GMVY="" GMVY="-1^No record found"
 
GMVY
 
;