GMVER1 ;HOIFO/RM,YH,FT-ENTERED IN ERROR FOR A PATIENT & DATE RANGE ;12/12/01  12:36
 ;;5.0;GEN. MED. REC. - VITALS;;Oct 31, 2002
 ;
 ; This routine uses the following IAs:
 ; #10104 - ^XLFSTR calls          (supported)
 ; #10103 - ^XLFDT calls           (supported)
 ;
EN1(RESULT,GMVDFN,GMVBEG,GMVEND) ; [RPC entry point]
 ; Returns Entered in Error records for a date range
 ; Input:
 ;  RESULT   = Where data is returned (closed array reference) (Required)
 ;  GMVDFN   = A pointer to the Patient file (#2) (Required)
 ;  GMVBEG   = Beginning date for all vitals
 ;  GMVEND   = Ending    date for all vitals
 ;
 ; Output:
 ;  RESULT() = TMP global address with the nodes of report text
 ;  The TMP global nodes are:
 ;  ^TMP($J,GMRDATE,GMRVITY,GMRVDA,1)=date/time of the error, Vital
 ;                                    type, name of user
 ;  ^TMP($J,GMRDATE,GMRVITY,GMRVDA,2)=error reason
 ;  ^TMP($J,GMRDATE,GMRVITY,GMRVDA,3)=revised data, if any (optional)
 ;  ^TMP($J,GMRDATE,GMRVITY,GMRVDA,4)=the incorrect data
 ;
 S GMRVITY=0
 K ^TMP($J,"LIST"),^TMP($J,"ERRORS")
 F  S GMRVITY=$O(^GMR(120.5,"AA",GMVDFN,GMRVITY)) Q:GMRVITY'>0  F GMRVDT=0:0 S GMRVDT=$O(^GMR(120.5,"AA",GMVDFN,GMRVITY,GMRVDT)) Q:GMRVDT'>0  S GMRVDATE=9999999-GMRVDT I GMRVDATE'<GMVBEG,GMRVDATE'>GMVEND D SORT
 S GMRDATE=0
 F  S GMRDATE=$O(^TMP($J,"LIST",GMRDATE)) Q:GMRDATE'>0  F GMRVITY=0:0 S GMRVITY=$O(^TMP($J,"LIST",GMRDATE,GMRVITY)) Q:GMRVITY'>0  F GMRVDA=0:0 S GMRVDA=$O(^TMP($J,"LIST",GMRDATE,GMRVITY,GMRVDA)) Q:GMRVDA'>0  D WRT
Q ; KILL VARIABLES
 K BADRATE,GOODRATE,GMRDAT,GMRDATE,GMRPR,GMRVDA,GMRVDATE,GMRVDT,GMRVERR,GMVEND,GMRVITY,GMVBEG,GMRVX,GMRP,GMRTYPE
 K GREASON,GMRZZ,GMRVARY,GMRQUAL,GMRVPO,GMVNODE,GMVSPACE,^TMP($J,"LIST")
 I '$D(^TMP($J,"ERRORS")) S ^TMP($J,"ERRORS",0)="No data for the time period indicated."
 S RESULT=$NA(^TMP($J,"ERRORS"))
 Q
SORT ; loop through the AA x-ref and find patient entries marked as
 ; entered in error (i.e., node 2 exists).
 S GMRVERR=0
 F  S GMRVERR=$O(^GMR(120.5,"AA",GMVDFN,GMRVITY,GMRVDT,GMRVERR)) Q:GMRVERR'>0  I '$D(^GMR(120.5,GMRVERR,2)) Q
 S GMRVDA=0
 F  S GMRVDA=$O(^GMR(120.5,"AA",GMVDFN,GMRVITY,GMRVDT,GMRVDA)) Q:GMRVDA'>0  I $D(^GMR(120.5,GMRVDA,2)) S ^TMP($J,"LIST",GMRVDATE,GMRVITY,GMRVDA)=GMRVERR
 Q
WRT ;
 S GMRVERR=^TMP($J,"LIST",GMRDATE,GMRVITY,GMRVDA)
 S GMRDAT("GOOD")=$S($D(^GMR(120.5,+GMRVERR,0)):^(0),1:"")
 I $D(^GMR(120.5,+GMRVERR,0)) D
 .K GMRVX
 .S GMRVX=$P(^GMRD(120.51,GMRVITY,0),"^",2)
 .S GMRVX(0)=$P(GMRDAT("GOOD"),"^",8)
 .D:GMRVX(0)>0!(GMRVX(0)=0) EN1^GMVSAS0
 .S GMRVX(1)=$S('$D(GMRVX(1)):"",'GMRVX(1):"",1:"*")
 .S GMRVX(0)=$$WRTDAT(GMRVX,GMRVX(0))
 .S GMRZZ=""
 .I $P($G(^GMR(120.5,GMRVERR,5,0)),"^",4)>0 D
 ..K GMRVARY
 ..S GMRVARY=""
 ..D CHAR^GMVCHAR(GMRVERR,.GMRVARY,GMRVITY)
 ..S GMRZZ=$$WRITECH^GMVCHAR(GMRVERR,.GMRVARY,9)
 ..S:GMRZZ'=""&(GMRVX'="PO2") GMRZZ=" ("_GMRZZ_")"
 ..Q
 . I GMRVX="P" D
 ..I GMRZZ'="",GMRVX(0)=1 S:$F(GMRZZ,"DORSALIS PEDIS")>0 GMRVX(1)=""
 ..I GMRZZ'="",GMRVX(0)=0 S:$F(GMRZZ,"DORSALIS PEDIS")>0 GMRVX(1)="*"
 ..Q
 .S GMRVPO=$P(^GMR(120.5,GMRVERR,0),"^",10)
 .S $P(GMRDAT("GOOD"),"^",8)=GMRVX(0)_GMRVX(1)_$S(GMRVPO'="":" with supplemental O2 "_$S(GMRVPO["l/min":$P(GMRVPO," l/min")_"L/min",1:"")_$S(GMRVPO["l/min":$P(GMRVPO," l/min",2),1:GMRVPO),1:"")_$S(GMRZZ'=""&(GMRVX="PO2"):" via ",1:"")_GMRZZ
 .Q
 I $D(^GMR(120.5,+GMRVDA,0)) D
 .S GMRDAT("BAD")=$S($D(^GMR(120.5,+GMRVDA,0)):^(0),1:"")
 .K GMRVX,GMRVX(0),GMRVX(1)
 .S GMRVX=$P(^GMRD(120.51,GMRVITY,0),"^",2)
 .S GMRVX(0)=$P(GMRDAT("BAD"),"^",8)
 .D:GMRVX(0)>0 EN1^GMVSAS0
 .S GMRVX(1)=$S('$D(GMRVX(1)):"",'GMRVX(1):"",1:"*")
 .S GMRVX(0)=$$WRTDAT(GMRVX,GMRVX(0))
 .S GMRZZ=""
 .I $P($G(^GMR(120.5,GMRVDA,5,0)),"^",4)>0 D
 ..K GMRVARY
 ..S GMRVARY=""
 ..D CHAR^GMVCHAR(GMRVDA,.GMRVARY,GMRVITY)
 ..S GMRZZ=$$WRITECH^GMVCHAR(GMRVDA,.GMRVARY,9)
 ..S:GMRZZ'=""&(GMRVX'="PO2") GMRZZ=" ("_GMRZZ_")"
 ..Q
 .I GMRVX="P" D
 ..I GMRZZ'="",GMRVX(0)=1 S:$F(GMRZZ,"DORSALIS PEDIS")>0 GMRVX(1)=""
 ..I GMRZZ'="",GMRVX(0)=0 S:$F(GMRZZ,"DORSALIS PEDIS")>0 GMRVX(1)="*"
 ..Q
 .S GMRVPO=$P(^GMR(120.5,GMRVDA,0),"^",10)
 .S $P(GMRDAT("BAD"),"^",8)=GMRVX(0)_GMRVX(1)_$S(GMRVPO'="":" with supplemental O2 "_$S(GMRVPO["l/min":$P(GMRVPO," l/min")_"L/min",1:"")_$S(GMRVPO["l/min":$P(GMRVPO," l/min",2),1:GMRVPO),1:"")_$S(GMRZZ'=""&(GMRVX="PO2"):" via ",1:"")_GMRZZ
 .S GREASON="" D ERREASON
 S GMRPR("VSDT")=$$FMTE^XLFDT(GMRDATE)
 S GMRPR("ENUS")=$E($$PERSON^GMVUTL1(+$P(GMRDAT("BAD"),U,6)),1,21)
 S GMRPR("TYPE")=$S(GMRVITY="":"",$D(^GMRD(120.51,GMRVITY,0)):$P(^(0),"^"),1:"")
 S GMVNODE=""
 S GMVSPACE=$$REPEAT^XLFSTR(" ",79) ;line of spaces
 S GMVNODE=GMRPR("VSDT")
 S GMVNODE=GMVNODE_$$FILLER^GMVUTL1(21,$L(GMVNODE),GMVSPACE)_GMRPR("TYPE")
 S GMVNODE=GMVNODE_$$FILLER^GMVUTL1(58,$L(GMVNODE),GMVSPACE)_GMRPR("ENUS")
 S ^TMP($J,"ERRORS",GMRDATE,GMRVITY,GMRVDA,1)=GMVNODE
 S ^TMP($J,"ERRORS",GMRDATE,GMRVITY,GMRVDA,2)="   Reason: "_GREASON
 S GMVNODE=""
 I $G(GMRVERR)>0 S GMVNODE="   (Revised)  "_$P(GMRDAT("GOOD"),"^",8) D
 .I GMRVX="PN" D
 ..S GOODRATE=$P(GMRDAT("GOOD"),U,8)
 ..S GMVNODE=GMVNODE_$S(GOODRATE=0:" No pain",GOODRATE=10:" Worst imaginable pain",GOODRATE=99:" Unable to respond",1:"")
 ..Q
 .Q
 I $L(GMVNODE)>0 D
 .S ^TMP($J,"ERRORS",GMRDATE,GMRVITY,GMRVDA,3)=GMVNODE
 .Q
 S GMVNODE=""
 I GMRVDA>0 S GMVNODE="   (Bad data)  "_$P(GMRDAT("BAD"),"^",8) D
 .I GMRVX="PN" D
 ..S BADRATE=$P(GMRDAT("BAD"),U,8)
 ..S GMVNODE=GMVNODE_$S(BADRATE=0:" No pain",BADRATE=10:" Worst imaginable pain",BADRATE=99:" Unable to respond",1:"")
 ..Q
 .Q
 I $L(GMVNODE)>0 D
 .S ^TMP($J,"ERRORS",GMRDATE,GMRVITY,GMRVDA,4)=GMVNODE
 .Q
 Q
ERREASON ;ERROR REASON
 Q:'$D(^GMR(120.5,+GMRVDA,2.1))
 S GER=0
 F  S GER=$O(^GMR(120.5,+GMRVDA,2.1,GER)) Q:GER'>0  S GER(1)=+$G(^GMR(120.5,+GMRVDA,2.1,GER,0)) D
 .S GER(2)=$S(GER(1)=1:"incorrect date/time",GER(1)=2:"incorrect reading",GER(1)=3:"incorrect patient",GER(1)=4:"invalid record",1:"")
 .I GER(2)'="" S GREASON=GREASON_$S(GREASON'="":", ",1:"")_GER(2)
 .Q
 K GER
 Q
WRTDAT(TYPE,DATA) ;
 I '((TYPE="BP")!(TYPE="P")!(TYPE="R")),DATA>0 D @($$UP^XLFSTR(TYPE))
 Q DATA
T S DATA=DATA_" F  ("_$J(+DATA-32*5/9,0,1)_" C)" Q
WT S DATA=DATA_" lb  ("_$J(DATA/2.2,0,2)_" kg)" Q
HT S DATA=$S(DATA\12:DATA\12_" ft ",1:"")_$S(DATA#12:DATA#12_" in",1:"")_" ("_$J(DATA*2.54,0,2)_" cm)" Q
CG S DATA=DATA_" in ("_$J(+DATA/.3937,0,2)_" cm)" Q
CVP S DATA=DATA_" cmH2O ("_$J(DATA/1.36,0,1)_" mmHg)" Q
PO2 S DATA=DATA_"%" Q
PN I DATA=0 S DATA=DATA_" No pain " Q
 I DATA=99 S DATA=DATA_" Unable to respond " Q
 I DATA=10 S DATA=DATA_" Worst imaginable pain " Q
 Q
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HGMVER1   6652     printed  Sep 23, 2025@19:34:45                                                                                                                                                                                                      Page 2
GMVER1    ;HOIFO/RM,YH,FT-ENTERED IN ERROR FOR A PATIENT & DATE RANGE ;12/12/01  12:36
 +1       ;;5.0;GEN. MED. REC. - VITALS;;Oct 31, 2002
 +2       ;
 +3       ; This routine uses the following IAs:
 +4       ; #10104 - ^XLFSTR calls          (supported)
 +5       ; #10103 - ^XLFDT calls           (supported)
 +6       ;
EN1(RESULT,GMVDFN,GMVBEG,GMVEND) ; [RPC entry point]
 +1       ; Returns Entered in Error records for a date range
 +2       ; Input:
 +3       ;  RESULT   = Where data is returned (closed array reference) (Required)
 +4       ;  GMVDFN   = A pointer to the Patient file (#2) (Required)
 +5       ;  GMVBEG   = Beginning date for all vitals
 +6       ;  GMVEND   = Ending    date for all vitals
 +7       ;
 +8       ; Output:
 +9       ;  RESULT() = TMP global address with the nodes of report text
 +10      ;  The TMP global nodes are:
 +11      ;  ^TMP($J,GMRDATE,GMRVITY,GMRVDA,1)=date/time of the error, Vital
 +12      ;                                    type, name of user
 +13      ;  ^TMP($J,GMRDATE,GMRVITY,GMRVDA,2)=error reason
 +14      ;  ^TMP($J,GMRDATE,GMRVITY,GMRVDA,3)=revised data, if any (optional)
 +15      ;  ^TMP($J,GMRDATE,GMRVITY,GMRVDA,4)=the incorrect data
 +16      ;
 +17       SET GMRVITY=0
 +18       KILL ^TMP($JOB,"LIST"),^TMP($JOB,"ERRORS")
 +19       FOR 
               SET GMRVITY=$ORDER(^GMR(120.5,"AA",GMVDFN,GMRVITY))
               if GMRVITY'>0
                   QUIT 
               FOR GMRVDT=0:0
                   SET GMRVDT=$ORDER(^GMR(120.5,"AA",GMVDFN,GMRVITY,GMRVDT))
                   if GMRVDT'>0
                       QUIT 
                   SET GMRVDATE=9999999-GMRVDT
                   IF GMRVDATE'<GMVBEG
                       IF GMRVDATE'>GMVEND
                           DO SORT
 +20       SET GMRDATE=0
 +21       FOR 
               SET GMRDATE=$ORDER(^TMP($JOB,"LIST",GMRDATE))
               if GMRDATE'>0
                   QUIT 
               FOR GMRVITY=0:0
                   SET GMRVITY=$ORDER(^TMP($JOB,"LIST",GMRDATE,GMRVITY))
                   if GMRVITY'>0
                       QUIT 
                   FOR GMRVDA=0:0
                       SET GMRVDA=$ORDER(^TMP($JOB,"LIST",GMRDATE,GMRVITY,GMRVDA))
                       if GMRVDA'>0
                           QUIT 
                       DO WRT
Q         ; KILL VARIABLES
 +1        KILL BADRATE,GOODRATE,GMRDAT,GMRDATE,GMRPR,GMRVDA,GMRVDATE,GMRVDT,GMRVERR,GMVEND,GMRVITY,GMVBEG,GMRVX,GMRP,GMRTYPE
 +2        KILL GREASON,GMRZZ,GMRVARY,GMRQUAL,GMRVPO,GMVNODE,GMVSPACE,^TMP($JOB,"LIST")
 +3        IF '$DATA(^TMP($JOB,"ERRORS"))
               SET ^TMP($JOB,"ERRORS",0)="No data for the time period indicated."
 +4        SET RESULT=$NAME(^TMP($JOB,"ERRORS"))
 +5        QUIT 
SORT      ; loop through the AA x-ref and find patient entries marked as
 +1       ; entered in error (i.e., node 2 exists).
 +2        SET GMRVERR=0
 +3        FOR 
               SET GMRVERR=$ORDER(^GMR(120.5,"AA",GMVDFN,GMRVITY,GMRVDT,GMRVERR))
               if GMRVERR'>0
                   QUIT 
               IF '$DATA(^GMR(120.5,GMRVERR,2))
                   QUIT 
 +4        SET GMRVDA=0
 +5        FOR 
               SET GMRVDA=$ORDER(^GMR(120.5,"AA",GMVDFN,GMRVITY,GMRVDT,GMRVDA))
               if GMRVDA'>0
                   QUIT 
               IF $DATA(^GMR(120.5,GMRVDA,2))
                   SET ^TMP($JOB,"LIST",GMRVDATE,GMRVITY,GMRVDA)=GMRVERR
 +6        QUIT 
WRT       ;
 +1        SET GMRVERR=^TMP($JOB,"LIST",GMRDATE,GMRVITY,GMRVDA)
 +2        SET GMRDAT("GOOD")=$SELECT($DATA(^GMR(120.5,+GMRVERR,0)):^(0),1:"")
 +3        IF $DATA(^GMR(120.5,+GMRVERR,0))
               Begin DoDot:1
 +4                KILL GMRVX
 +5                SET GMRVX=$PIECE(^GMRD(120.51,GMRVITY,0),"^",2)
 +6                SET GMRVX(0)=$PIECE(GMRDAT("GOOD"),"^",8)
 +7                if GMRVX(0)>0!(GMRVX(0)=0)
                       DO EN1^GMVSAS0
 +8                SET GMRVX(1)=$SELECT('$DATA(GMRVX(1)):"",'GMRVX(1):"",1:"*")
 +9                SET GMRVX(0)=$$WRTDAT(GMRVX,GMRVX(0))
 +10               SET GMRZZ=""
 +11               IF $PIECE($GET(^GMR(120.5,GMRVERR,5,0)),"^",4)>0
                       Begin DoDot:2
 +12                       KILL GMRVARY
 +13                       SET GMRVARY=""
 +14                       DO CHAR^GMVCHAR(GMRVERR,.GMRVARY,GMRVITY)
 +15                       SET GMRZZ=$$WRITECH^GMVCHAR(GMRVERR,.GMRVARY,9)
 +16                       if GMRZZ'=""&(GMRVX'="PO2")
                               SET GMRZZ=" ("_GMRZZ_")"
 +17                       QUIT 
                       End DoDot:2
 +18               IF GMRVX="P"
                       Begin DoDot:2
 +19                       IF GMRZZ'=""
                               IF GMRVX(0)=1
                                   if $FIND(GMRZZ,"DORSALIS PEDIS")>0
                                       SET GMRVX(1)=""
 +20                       IF GMRZZ'=""
                               IF GMRVX(0)=0
                                   if $FIND(GMRZZ,"DORSALIS PEDIS")>0
                                       SET GMRVX(1)="*"
 +21                       QUIT 
                       End DoDot:2
 +22               SET GMRVPO=$PIECE(^GMR(120.5,GMRVERR,0),"^",10)
 +23              SET $PIECE(GMRDAT("GOOD"),"^",8)=GMRVX(0)_GMRVX(1)_$SELECT(GMRVPO'="":" with supplemental O2 "_$SELECT(GMRVPO["l/min":...
                   ... $PIECE(GMRVPO," l/min")_"L/min",1:"")_$SELECT(GMRVPO["l/min":$PIECE(GMRVPO," l/min",2),1:GMRVPO),1:"")_$SELECT(GMRZZ'=""&(GMRVX="PO2"):" via ",1:"")_GMRZZ
 +24               QUIT 
               End DoDot:1
 +25       IF $DATA(^GMR(120.5,+GMRVDA,0))
               Begin DoDot:1
 +26               SET GMRDAT("BAD")=$SELECT($DATA(^GMR(120.5,+GMRVDA,0)):^(0),1:"")
 +27               KILL GMRVX,GMRVX(0),GMRVX(1)
 +28               SET GMRVX=$PIECE(^GMRD(120.51,GMRVITY,0),"^",2)
 +29               SET GMRVX(0)=$PIECE(GMRDAT("BAD"),"^",8)
 +30               if GMRVX(0)>0
                       DO EN1^GMVSAS0
 +31               SET GMRVX(1)=$SELECT('$DATA(GMRVX(1)):"",'GMRVX(1):"",1:"*")
 +32               SET GMRVX(0)=$$WRTDAT(GMRVX,GMRVX(0))
 +33               SET GMRZZ=""
 +34               IF $PIECE($GET(^GMR(120.5,GMRVDA,5,0)),"^",4)>0
                       Begin DoDot:2
 +35                       KILL GMRVARY
 +36                       SET GMRVARY=""
 +37                       DO CHAR^GMVCHAR(GMRVDA,.GMRVARY,GMRVITY)
 +38                       SET GMRZZ=$$WRITECH^GMVCHAR(GMRVDA,.GMRVARY,9)
 +39                       if GMRZZ'=""&(GMRVX'="PO2")
                               SET GMRZZ=" ("_GMRZZ_")"
 +40                       QUIT 
                       End DoDot:2
 +41               IF GMRVX="P"
                       Begin DoDot:2
 +42                       IF GMRZZ'=""
                               IF GMRVX(0)=1
                                   if $FIND(GMRZZ,"DORSALIS PEDIS")>0
                                       SET GMRVX(1)=""
 +43                       IF GMRZZ'=""
                               IF GMRVX(0)=0
                                   if $FIND(GMRZZ,"DORSALIS PEDIS")>0
                                       SET GMRVX(1)="*"
 +44                       QUIT 
                       End DoDot:2
 +45               SET GMRVPO=$PIECE(^GMR(120.5,GMRVDA,0),"^",10)
 +46              SET $PIECE(GMRDAT("BAD"),"^",8)=GMRVX(0)_GMRVX(1)_$SELECT(GMRVPO'="":" with supplemental O2 "_$SELECT(GMRVPO["l/min":...
                   ... $PIECE(GMRVPO," l/min")_"L/min",1:"")_$SELECT(GMRVPO["l/min":$PIECE(GMRVPO," l/min",2),1:GMRVPO),1:"")_$SELECT(GMRZZ'=""&(GMRVX="PO2"):" via ",1:"")_GMRZZ
 +47               SET GREASON=""
                   DO ERREASON
               End DoDot:1
 +48       SET GMRPR("VSDT")=$$FMTE^XLFDT(GMRDATE)
 +49       SET GMRPR("ENUS")=$EXTRACT($$PERSON^GMVUTL1(+$PIECE(GMRDAT("BAD"),U,6)),1,21)
 +50       SET GMRPR("TYPE")=$SELECT(GMRVITY="":"",$DATA(^GMRD(120.51,GMRVITY,0)):$PIECE(^(0),"^"),1:"")
 +51       SET GMVNODE=""
 +52      ;line of spaces
           SET GMVSPACE=$$REPEAT^XLFSTR(" ",79)
 +53       SET GMVNODE=GMRPR("VSDT")
 +54       SET GMVNODE=GMVNODE_$$FILLER^GMVUTL1(21,$LENGTH(GMVNODE),GMVSPACE)_GMRPR("TYPE")
 +55       SET GMVNODE=GMVNODE_$$FILLER^GMVUTL1(58,$LENGTH(GMVNODE),GMVSPACE)_GMRPR("ENUS")
 +56       SET ^TMP($JOB,"ERRORS",GMRDATE,GMRVITY,GMRVDA,1)=GMVNODE
 +57       SET ^TMP($JOB,"ERRORS",GMRDATE,GMRVITY,GMRVDA,2)="   Reason: "_GREASON
 +58       SET GMVNODE=""
 +59       IF $GET(GMRVERR)>0
               SET GMVNODE="   (Revised)  "_$PIECE(GMRDAT("GOOD"),"^",8)
               Begin DoDot:1
 +60               IF GMRVX="PN"
                       Begin DoDot:2
 +61                       SET GOODRATE=$PIECE(GMRDAT("GOOD"),U,8)
 +62                       SET GMVNODE=GMVNODE_$SELECT(GOODRATE=0:" No pain",GOODRATE=10:" Worst imaginable pain",GOODRATE=99:" Unable to respond",1:"")
 +63                       QUIT 
                       End DoDot:2
 +64               QUIT 
               End DoDot:1
 +65       IF $LENGTH(GMVNODE)>0
               Begin DoDot:1
 +66               SET ^TMP($JOB,"ERRORS",GMRDATE,GMRVITY,GMRVDA,3)=GMVNODE
 +67               QUIT 
               End DoDot:1
 +68       SET GMVNODE=""
 +69       IF GMRVDA>0
               SET GMVNODE="   (Bad data)  "_$PIECE(GMRDAT("BAD"),"^",8)
               Begin DoDot:1
 +70               IF GMRVX="PN"
                       Begin DoDot:2
 +71                       SET BADRATE=$PIECE(GMRDAT("BAD"),U,8)
 +72                       SET GMVNODE=GMVNODE_$SELECT(BADRATE=0:" No pain",BADRATE=10:" Worst imaginable pain",BADRATE=99:" Unable to respond",1:"")
 +73                       QUIT 
                       End DoDot:2
 +74               QUIT 
               End DoDot:1
 +75       IF $LENGTH(GMVNODE)>0
               Begin DoDot:1
 +76               SET ^TMP($JOB,"ERRORS",GMRDATE,GMRVITY,GMRVDA,4)=GMVNODE
 +77               QUIT 
               End DoDot:1
 +78       QUIT 
ERREASON  ;ERROR REASON
 +1        if '$DATA(^GMR(120.5,+GMRVDA,2.1))
               QUIT 
 +2        SET GER=0
 +3        FOR 
               SET GER=$ORDER(^GMR(120.5,+GMRVDA,2.1,GER))
               if GER'>0
                   QUIT 
               SET GER(1)=+$GET(^GMR(120.5,+GMRVDA,2.1,GER,0))
               Begin DoDot:1
 +4                SET GER(2)=$SELECT(GER(1)=1:"incorrect date/time",GER(1)=2:"incorrect reading",GER(1)=3:"incorrect patient",GER(1)=4:"invalid record",1:"")
 +5                IF GER(2)'=""
                       SET GREASON=GREASON_$SELECT(GREASON'="":", ",1:"")_GER(2)
 +6                QUIT 
               End DoDot:1
 +7        KILL GER
 +8        QUIT 
WRTDAT(TYPE,DATA) ;
 +1        IF '((TYPE="BP")!(TYPE="P")!(TYPE="R"))
               IF DATA>0
                   DO @($$UP^XLFSTR(TYPE))
 +2        QUIT DATA
T          SET DATA=DATA_" F  ("_$JUSTIFY(+DATA-32*5/9,0,1)_" C)"
           QUIT 
WT         SET DATA=DATA_" lb  ("_$JUSTIFY(DATA/2.2,0,2)_" kg)"
           QUIT 
HT         SET DATA=$SELECT(DATA\12:DATA\12_" ft ",1:"")_$SELECT(DATA#12:DATA#12_" in",1:"")_" ("_$JUSTIFY(DATA*2.54,0,2)_" cm)"
           QUIT 
CG         SET DATA=DATA_" in ("_$JUSTIFY(+DATA/.3937,0,2)_" cm)"
           QUIT 
CVP        SET DATA=DATA_" cmH2O ("_$JUSTIFY(DATA/1.36,0,1)_" mmHg)"
           QUIT 
PO2        SET DATA=DATA_"%"
           QUIT 
PN         IF DATA=0
               SET DATA=DATA_" No pain "
               QUIT 
 +1        IF DATA=99
               SET DATA=DATA_" Unable to respond "
               QUIT 
 +2        IF DATA=10
               SET DATA=DATA_" Worst imaginable pain "
               QUIT 
 +3        QUIT