ORQQVI2 ;SLC/dee- RPC calls to GMRVPCE0, Vitals data event drivers ;2/2/98
;;3.0;ORDER ENTRY/RESULTS REPORTING;**10**;Dec 17, 1997
;
Q
;
; ORQDATA is in the format
; ORQDATA(i)="VST^DT^encounter date" required
; ORQDATA(i)="VST^PT^pointer to patient" required
; ORQDATA(i)="VST^HL^pointer to Hospital Location" required
; ORQDATA(i)="VIT^vital type^^^value^provider^units^date/time"
; ORVITALS is the array passed to GMRV in the PCE Device Interface
; format.
; ORQVIT is an array subscipted by the index in ORVITALS that contains
; the subscript of the data gotten from ORQDATA. This is used to tell
; the caller which item had an ERROR or WARNING.
; ORRETURN(0) is 1 if no ERRORs or WARNINGs
; 0 if there are WARNING(s) but no ERRORs
; -1 if there are ERROR(s)
; ORRETURN(n) where n>0 is an error or warning in validating the data
; 1 piece: subscript of ORQDATA that the error or warning is on
; 2 piece: "ERROR" or "WARNING"
; 3 piece: text message about error or warning
; 4 piece: data item that generated the error or warning
;
VALIDATE(ORRETURN,ORQDATA) ;
; Given the array ORQDATA passed in by PCE Device Interface whose
; format is described in the PCE Device Interface documentation, this
; procedure will validate the Vitals data. If the data is invalid,
; the procedure will return the errors in the form given above.
;
N ORVITALS,ORQVIT
;Initialize RETURN to no errors
K ORRETURN
S ORRETURN(0)=1
D PREVITAL(.ORRETURN,.ORVITALS,.ORQVIT,.ORQDATA)
D VALIDATE^GMRVPCE0(.ORVITALS)
D POSTVIT(.ORRETURN,.ORQVIT,.ORVITALS)
Q
;
VALSTORE(ORRETURN,ORQDATA) ;Calls VALIDATE and if no errors calls STORE
; Given the array ORQDATA passed in by PCE Device Interface whose
; format is described in the PCE Device Interface documentation, this
; procedure will validate the Vitals data. If the data is invalid,
; the procedure will return the errors in the form given above.
; If there are no errors then this procedure will call
; Vitals/Measurements to store the data in the GMRV's
; Patient Measurements (120.5) file.
;
N ORVITALS,ORQVIT
;Initialize RETURN to no errors
K ORRETURN
S ORRETURN(0)=1
D PREVITAL(.ORRETURN,.ORVITALS,.ORQVIT,.ORQDATA)
D VALIDATE^GMRVPCE0(.ORVITALS)
D POSTVIT(.ORRETURN,.ORQVIT,.ORVITALS)
I ORRETURN(0)=1 D STORE^GMRVPCE0(.ORVITALS)
Q
;
PREVITAL(ORRETURN,ORVITALS,ORQVIT,ORQDATA) ;format array for call to Vitlals
N ORQTYPE,ORQCODE,ORINDEX1,ORINDEX2,ORRETINX,ORQITEM
N ORQNODT,ORQNOPT,ORQNOHL
S (ORQNODT,ORQNOPT,ORQNOHL)=1
S ORVITALS("SOURCE")="^"_DUZ
S ORINDEX2=0
S ORRETINX=$O(ORRETURN(""),-1)
S ORINDEX1=""
F S ORINDEX1=$O(ORQDATA(ORINDEX1)) Q:'ORINDEX1 D
. S ORQDATAX=ORQDATA(ORINDEX1),ORQTYPE=$P(ORQDATAX,"^"),ORQCODE=$P(ORQDATAX,"^",2)
. I ORQTYPE="PRV" S ORVITALS("PROVIDER",1)=ORQCODE Q
. I ORQTYPE="VST" D Q
.. I ORQCODE="DT" D Q
... S ORQNODT=0
... S ORQITEM=$P(ORQDATAX,"^",3)
... S $P(ORVITALS("ENCOUNTER"),"^",1)=ORQITEM
... I ORQITEM>$$NOW^XLFDT D
.... S ORRETINX=ORRETINX+1
.... S ORRETURN(ORRETINX)=ORINDEX1_"^ERROR^Date/Time entered cannot be in the future^"_$$FMTE^XLFDT(ORQITEM)
.... S ORRETURN(0)=-1
... I ORQITEM'>1800000 D
.... S ORRETINX=ORRETINX+1
.... S ORRETURN(ORRETINX)=ORINDEX1_"^ERROR^Encounter Date/Time not valid^"_ORQITEM
.... S ORRETURN(0)=-1
.. I ORQCODE="PT" D Q
... S ORQNOPT=0
... S ORQITEM=$P(ORQDATAX,"^",3)
... S $P(ORVITALS("ENCOUNTER"),"^",2)=ORQITEM
... I '($D(^DPT(+ORQITEM,0))#2) D
.... S ORRETINX=ORRETINX+1
.... S ORRETURN(ORRETINX)=ORINDEX1_"^ERROR^Patient missing or invalid in file 2^"_ORQITEM
.... S ORRETURN(0)=-1
.. I ORQCODE="HL" D Q
... S ORQNOHL=0
... S ORQITEM=$P(ORQDATAX,"^",3)
... S $P(ORVITALS("ENCOUNTER"),"^",3)=ORQITEM
... I '$D(^SC(ORQITEM,0)) D
.... S ORRETINX=ORRETINX+1
.... S ORRETURN(ORRETINX)=ORINDEX1_"^ERROR^HOSPITAL LOCATION Missing is not in file 44^"_ORQITEM
.... S ORRETURN(0)=-1
...; I $D(^PX(815,1,"DHL","B",ORQITEM)) D
...;. S ORRETINX=ORRETINX+1
...;. S ORRETURN(ORRETINX)=ORINDEX1_"^ERROR^HOSPITAL LOCATION Can not be a disposition clinic^"_ORQITEM
...;. S ORRETURN(0)=-1
. I ORQTYPE="VIT" D Q
.. S ORINDEX2=ORINDEX2+1
.. S ORQVIT(ORINDEX2)=ORINDEX1
.. S ORVITALS("VITALS",+$P(ORQDATAX,"^",6),ORINDEX2)=ORQCODE_"^"_$P(ORQDATAX,"^",5)_"^"_$P(ORQDATAX,"^",7,8)
I ORQNODT D
. S ORRETINX=ORRETINX+1
. S ORRETURN(ORRETINX)="^ERROR^Required data item, ENCOUNTER DATE/TIME, is missing^"
. S ORRETURN(0)=-1
I ORQNOPT D
. S ORRETINX=ORRETINX+1
. S ORRETURN(ORRETINX)="^ERROR^Required data item, PATIENT, is missing^"
. S ORRETURN(0)=-1
I ORQNOHL D
. S ORRETINX=ORRETINX+1
. S ORRETURN(ORRETINX)="^ERROR^Required data item, HOSPITAL LOCATION, is missing^"
. S ORRETURN(0)=-1
Q
;
POSTVIT(ORRETURN,ORQVIT,ORVITALS) ;return errors and warnings
N ORVAR,ORINDEX,ORQTYPE
S ORINDEX=$O(ORRETURN(""),-1)
F ORQTYPE="WARNING","ERROR" D
. S ORVAR="ORVITALS("""_ORQTYPE_""")"
. F S ORVAR=$Q(@ORVAR) Q:ORVAR'[("ORVITALS("""_ORQTYPE_"""") D
.. S ORINDEX=ORINDEX+1
.. S ORRETURN(ORINDEX)=$G(ORQVIT($P(ORVAR,",",4)))_"^"_ORQTYPE_"^"_@ORVAR
.. I ORQTYPE="WARNING" S:ORRETURN(0)>0 ORRETURN(0)=0
.. E S ORRETURN(0)=-1
Q
;
HELP(ORQLST,ORQTYPE) ; This procedure will return help for a particular
; measurement type in an array.
; Input
; Variables: ORQTYPE=Type of measurement (abbreviation
; (req.) from PCE Device Interface Specification).
; ORQLST=Array root to store help text in
;
D HELP^GMRVPCE0(ORQTYPE,"ORQLST")
Q
;
RATECHK(ORRETURN,ORQTYPE,ORQRATE,ORQUNIT) ;
; Extrinsic function to validate the
; rate for a particular measurement
; Input
; Variables: ORQTYPE=Type of measurement (abbreviation
; (req.) from PCE Device Interface Specification).
; ORQRATE=Measurement rate to be validated.
; (req.)
; ORQUNIT=Unit of measurement for rate, if specified.
; (opt.)
; Return value: 1 if rate is valid.
; 0 if rate is invalid.
;
S ORRETURN=$$RATECHK^GMRVPCE0(ORQTYPE,ORQRATE,$G(ORQUNIT))
Q
;
VMTYPES(ORRETURN,ORQTYPE) ;
; This function returns one if ORQTYPE is a valid type abbrev.
; from the PCE Device Interface Specification.
S ORRETURN=$$VMTYPES^GMRVPCE0(ORQTYPE)
Q
ORQQVI2 ;SLC/dee- RPC calls to GMRVPCE0, Vitals data event drivers ;2/2/98
+1 ;;3.0;ORDER ENTRY/RESULTS REPORTING;**10**;Dec 17, 1997
+2 ;
+3 QUIT
+4 ;
+5 ; ORQDATA is in the format
+6 ; ORQDATA(i)="VST^DT^encounter date" required
+7 ; ORQDATA(i)="VST^PT^pointer to patient" required
+8 ; ORQDATA(i)="VST^HL^pointer to Hospital Location" required
+9 ; ORQDATA(i)="VIT^vital type^^^value^provider^units^date/time"
+10 ; ORVITALS is the array passed to GMRV in the PCE Device Interface
+11 ; format.
+12 ; ORQVIT is an array subscipted by the index in ORVITALS that contains
+13 ; the subscript of the data gotten from ORQDATA. This is used to tell
+14 ; the caller which item had an ERROR or WARNING.
+15 ; ORRETURN(0) is 1 if no ERRORs or WARNINGs
+16 ; 0 if there are WARNING(s) but no ERRORs
+17 ; -1 if there are ERROR(s)
+18 ; ORRETURN(n) where n>0 is an error or warning in validating the data
+19 ; 1 piece: subscript of ORQDATA that the error or warning is on
+20 ; 2 piece: "ERROR" or "WARNING"
+21 ; 3 piece: text message about error or warning
+22 ; 4 piece: data item that generated the error or warning
+23 ;
VALIDATE(ORRETURN,ORQDATA) ;
+1 ; Given the array ORQDATA passed in by PCE Device Interface whose
+2 ; format is described in the PCE Device Interface documentation, this
+3 ; procedure will validate the Vitals data. If the data is invalid,
+4 ; the procedure will return the errors in the form given above.
+5 ;
+6 NEW ORVITALS,ORQVIT
+7 ;Initialize RETURN to no errors
+8 KILL ORRETURN
+9 SET ORRETURN(0)=1
+10 DO PREVITAL(.ORRETURN,.ORVITALS,.ORQVIT,.ORQDATA)
+11 DO VALIDATE^GMRVPCE0(.ORVITALS)
+12 DO POSTVIT(.ORRETURN,.ORQVIT,.ORVITALS)
+13 QUIT
+14 ;
VALSTORE(ORRETURN,ORQDATA) ;Calls VALIDATE and if no errors calls STORE
+1 ; Given the array ORQDATA passed in by PCE Device Interface whose
+2 ; format is described in the PCE Device Interface documentation, this
+3 ; procedure will validate the Vitals data. If the data is invalid,
+4 ; the procedure will return the errors in the form given above.
+5 ; If there are no errors then this procedure will call
+6 ; Vitals/Measurements to store the data in the GMRV's
+7 ; Patient Measurements (120.5) file.
+8 ;
+9 NEW ORVITALS,ORQVIT
+10 ;Initialize RETURN to no errors
+11 KILL ORRETURN
+12 SET ORRETURN(0)=1
+13 DO PREVITAL(.ORRETURN,.ORVITALS,.ORQVIT,.ORQDATA)
+14 DO VALIDATE^GMRVPCE0(.ORVITALS)
+15 DO POSTVIT(.ORRETURN,.ORQVIT,.ORVITALS)
+16 IF ORRETURN(0)=1
DO STORE^GMRVPCE0(.ORVITALS)
+17 QUIT
+18 ;
PREVITAL(ORRETURN,ORVITALS,ORQVIT,ORQDATA) ;format array for call to Vitlals
+1 NEW ORQTYPE,ORQCODE,ORINDEX1,ORINDEX2,ORRETINX,ORQITEM
+2 NEW ORQNODT,ORQNOPT,ORQNOHL
+3 SET (ORQNODT,ORQNOPT,ORQNOHL)=1
+4 SET ORVITALS("SOURCE")="^"_DUZ
+5 SET ORINDEX2=0
+6 SET ORRETINX=$ORDER(ORRETURN(""),-1)
+7 SET ORINDEX1=""
+8 FOR
SET ORINDEX1=$ORDER(ORQDATA(ORINDEX1))
IF 'ORINDEX1
QUIT
Begin DoDot:1
+9 SET ORQDATAX=ORQDATA(ORINDEX1)
SET ORQTYPE=$PIECE(ORQDATAX,"^")
SET ORQCODE=$PIECE(ORQDATAX,"^",2)
+10 IF ORQTYPE="PRV"
SET ORVITALS("PROVIDER",1)=ORQCODE
QUIT
+11 IF ORQTYPE="VST"
Begin DoDot:2
+12 IF ORQCODE="DT"
Begin DoDot:3
+13 SET ORQNODT=0
+14 SET ORQITEM=$PIECE(ORQDATAX,"^",3)
+15 SET $PIECE(ORVITALS("ENCOUNTER"),"^",1)=ORQITEM
+16 IF ORQITEM>$$NOW^XLFDT
Begin DoDot:4
+17 SET ORRETINX=ORRETINX+1
+18 SET ORRETURN(ORRETINX)=ORINDEX1_"^ERROR^Date/Time entered cannot be in the future^"_$$FMTE^XLFDT(ORQITEM)
+19 SET ORRETURN(0)=-1
End DoDot:4
+20 IF ORQITEM'>1800000
Begin DoDot:4
+21 SET ORRETINX=ORRETINX+1
+22 SET ORRETURN(ORRETINX)=ORINDEX1_"^ERROR^Encounter Date/Time not valid^"_ORQITEM
+23 SET ORRETURN(0)=-1
End DoDot:4
End DoDot:3
QUIT
+24 IF ORQCODE="PT"
Begin DoDot:3
+25 SET ORQNOPT=0
+26 SET ORQITEM=$PIECE(ORQDATAX,"^",3)
+27 SET $PIECE(ORVITALS("ENCOUNTER"),"^",2)=ORQITEM
+28 IF '($DATA(^DPT(+ORQITEM,0))#2)
Begin DoDot:4
+29 SET ORRETINX=ORRETINX+1
+30 SET ORRETURN(ORRETINX)=ORINDEX1_"^ERROR^Patient missing or invalid in file 2^"_ORQITEM
+31 SET ORRETURN(0)=-1
End DoDot:4
End DoDot:3
QUIT
+32 IF ORQCODE="HL"
Begin DoDot:3
+33 SET ORQNOHL=0
+34 SET ORQITEM=$PIECE(ORQDATAX,"^",3)
+35 SET $PIECE(ORVITALS("ENCOUNTER"),"^",3)=ORQITEM
+36 IF '$DATA(^SC(ORQITEM,0))
Begin DoDot:4
+37 SET ORRETINX=ORRETINX+1
+38 SET ORRETURN(ORRETINX)=ORINDEX1_"^ERROR^HOSPITAL LOCATION Missing is not in file 44^"_ORQITEM
+39 SET ORRETURN(0)=-1
End DoDot:4
+40 ; I $D(^PX(815,1,"DHL","B",ORQITEM)) D
+41 ;. S ORRETINX=ORRETINX+1
+42 ;. S ORRETURN(ORRETINX)=ORINDEX1_"^ERROR^HOSPITAL LOCATION Can not be a disposition clinic^"_ORQITEM
+43 ;. S ORRETURN(0)=-1
End DoDot:3
QUIT
End DoDot:2
QUIT
+44 IF ORQTYPE="VIT"
Begin DoDot:2
+45 SET ORINDEX2=ORINDEX2+1
+46 SET ORQVIT(ORINDEX2)=ORINDEX1
+47 SET ORVITALS("VITALS",+$PIECE(ORQDATAX,"^",6),ORINDEX2)=ORQCODE_"^"_$PIECE(ORQDATAX,"^",5)_"^"_$PIECE(ORQDATAX,"^",7,8)
End DoDot:2
QUIT
End DoDot:1
+48 IF ORQNODT
Begin DoDot:1
+49 SET ORRETINX=ORRETINX+1
+50 SET ORRETURN(ORRETINX)="^ERROR^Required data item, ENCOUNTER DATE/TIME, is missing^"
+51 SET ORRETURN(0)=-1
End DoDot:1
+52 IF ORQNOPT
Begin DoDot:1
+53 SET ORRETINX=ORRETINX+1
+54 SET ORRETURN(ORRETINX)="^ERROR^Required data item, PATIENT, is missing^"
+55 SET ORRETURN(0)=-1
End DoDot:1
+56 IF ORQNOHL
Begin DoDot:1
+57 SET ORRETINX=ORRETINX+1
+58 SET ORRETURN(ORRETINX)="^ERROR^Required data item, HOSPITAL LOCATION, is missing^"
+59 SET ORRETURN(0)=-1
End DoDot:1
+60 QUIT
+61 ;
POSTVIT(ORRETURN,ORQVIT,ORVITALS) ;return errors and warnings
+1 NEW ORVAR,ORINDEX,ORQTYPE
+2 SET ORINDEX=$ORDER(ORRETURN(""),-1)
+3 FOR ORQTYPE="WARNING","ERROR"
Begin DoDot:1
+4 SET ORVAR="ORVITALS("""_ORQTYPE_""")"
+5 FOR
SET ORVAR=$QUERY(@ORVAR)
IF ORVAR'[("ORVITALS("""_ORQTYPE_"""")
QUIT
Begin DoDot:2
+6 SET ORINDEX=ORINDEX+1
+7 SET ORRETURN(ORINDEX)=$GET(ORQVIT($PIECE(ORVAR,",",4)))_"^"_ORQTYPE_"^"_@ORVAR
+8 IF ORQTYPE="WARNING"
IF ORRETURN(0)>0
SET ORRETURN(0)=0
+9 IF '$TEST
SET ORRETURN(0)=-1
End DoDot:2
End DoDot:1
+10 QUIT
+11 ;
HELP(ORQLST,ORQTYPE) ; This procedure will return help for a particular
+1 ; measurement type in an array.
+2 ; Input
+3 ; Variables: ORQTYPE=Type of measurement (abbreviation
+4 ; (req.) from PCE Device Interface Specification).
+5 ; ORQLST=Array root to store help text in
+6 ;
+7 DO HELP^GMRVPCE0(ORQTYPE,"ORQLST")
+8 QUIT
+9 ;
RATECHK(ORRETURN,ORQTYPE,ORQRATE,ORQUNIT) ;
+1 ; Extrinsic function to validate the
+2 ; rate for a particular measurement
+3 ; Input
+4 ; Variables: ORQTYPE=Type of measurement (abbreviation
+5 ; (req.) from PCE Device Interface Specification).
+6 ; ORQRATE=Measurement rate to be validated.
+7 ; (req.)
+8 ; ORQUNIT=Unit of measurement for rate, if specified.
+9 ; (opt.)
+10 ; Return value: 1 if rate is valid.
+11 ; 0 if rate is invalid.
+12 ;
+13 SET ORRETURN=$$RATECHK^GMRVPCE0(ORQTYPE,ORQRATE,$GET(ORQUNIT))
+14 QUIT
+15 ;
VMTYPES(ORRETURN,ORQTYPE) ;
+1 ; This function returns one if ORQTYPE is a valid type abbrev.
+2 ; from the PCE Device Interface Specification.
+3 SET ORRETURN=$$VMTYPES^GMRVPCE0(ORQTYPE)
+4 QUIT