GMVUTL ;HOIFO/RM,MD,FT-CALLABLE ENTRY POINTS FOR PROGRAMMER UTILITIES ;08/12/09  17:15
 ;;5.0;GEN. MED. REC. - VITALS;**23**;Oct 31, 2002;Build 25
 ;
 ; This routine uses the following IAs:
 ;  #5076 - MDCLIO1 calls          (private)
 ;  #5269 - MDTERM calls           (private)
 ; #10103 - XLFDT calls            (supported)
 ;
 ; This routine supports the following IAs:
 ; #5046 - CLIO, F1250 entry points       (supported)
 ;
EN1 ; CALL TO CONVERT TEMPERATURE (F) IN VARIABLE X TO TEMPERATURE (C)
 ; IN VARIABLE Y
 S Y=$J(X-32*5/9,0,1)
 Q
EN2 ; CALL TO CONVERT AN INCHES MEASUREMENT IN X TO A CENTIMETER 
 ; MEASUREMENT IN Y
 S Y=$J(2.54*X,0,2)
 Q
EN3 ; CALL TO CONVERT A WEIGHT (LBS) IN VARIABLE X TO A WEIGHT (KG)
 ; IN VARIABLE Y
 S Y=$J(X/2.2,0,2)
 Q
CLIO(GMVCLIO,GMVGUID) ; Calls Clinical Observations to get a single record
 ; Input:
 ;   GMVCLIO = array name (required)
 ;   GMVGUID = Global Unique ID (required)
 ; Output:
 ;   GMVCLIO(0) =
 ;
 I $G(GMVGUID)="" S GMVCLIO(0)="" Q
 N GMVARRAY,GMVCNT,GMVCS,GMVDATE,GMVDY,GMVFLAG,GMVFLD,GMVFR,GMVHR,GMVL,GMVLOOP,GMVM,GMVMI,GMVMO
 N GMVO2,GMVP,GMVPAIN,GMVPO2,GMVQ,GMVQFLAG,GMVQLOOP,GMVS,GMVSC,GMVSUP,GMVTIME,GMVU,GMVX,GMVY,GMVYR,X,Y
 I $T(QRYOBS^MDCLIO1)="" S GMVCLIO(0)="",GMVCLIO(5)="" Q
 D QRYOBS^MDCLIO1("GMVARRAY",GMVGUID)
 I '$D(GMVARRAY("OBSERVED_DATE_TIME")) S GMVCLIO(0)="",GMVCLIO(5)="" Q
 S GMVPAIN=$$GETIEN^GMVGETVT("PN",2),GMVCNT=0
 S GMVPO2=$$GETIEN^GMVGETVT("PO2",2),(GMVFR,GMVO2,GMVSUP)=""
 S $P(GMVCLIO(0),U,1)=$G(GMVARRAY("OBSERVED_DATE_TIME","I"))
 S $P(GMVCLIO(0),U,2)=$G(GMVARRAY("PATIENT_ID","I"))
 S $P(GMVCLIO(0),U,4)=$G(GMVARRAY("ENTERED_DATE_TIME","I"))
 S $P(GMVCLIO(0),U,5)=$G(GMVARRAY("HOSPITAL_LOCATION_ID","I"))
 S $P(GMVCLIO(0),U,6)=$G(GMVARRAY("ENTERED_BY_ID","I"))
 S $P(GMVCLIO(0),U,8)=$G(GMVARRAY("SVALUE","I"))
 S GMVX=$G(GMVARRAY("TERM_ID","I"))
 I GMVX]"" D
 .S GMVX=$$GETIEN^GMVGETVT(GMVX,4)
 .S $P(GMVCLIO(0),U,3)=GMVX
 .Q
 ; NOTE: PAIN needs external value from CLIO
 I $P(GMVCLIO(0),U,3)=GMVPAIN D
 .S $P(GMVCLIO(0),U,8)=$G(GMVARRAY("SVALUE","E"))
 .Q
 S GMVFLAG=0
 F GMVLOOP=1,2,3,8 D  Q:GMVFLAG
 .S:$P(GMVCLIO(0),U,GMVLOOP)="" GMVFLAG=1
 .Q
 I GMVFLAG S GMVCLIO(0)="",GMVCLIO(5)="" Q
 ;check unit of measurement and convert value if needed
 I $G(GMVARRAY("UNIT_ID","E"))="DEGREES C" D
 .S $P(GMVCLIO(0),U,8)=+$$CVTVAL^MDTERM($P(GMVCLIO(0),U,8),"DEGREES C","DEGREES F",1)
 I $G(GMVARRAY("UNIT_ID","E"))="CENTIMETER" D
 .S $P(GMVCLIO(0),U,8)=+$$CVTVAL^MDTERM($P(GMVCLIO(0),U,8),"CENTIMETER","INCH",2)
 I $G(GMVARRAY("UNIT_ID","E"))="KILOGRAM" D
 .S $P(GMVCLIO(0),U,8)=+$$CVTVAL^MDTERM($P(GMVCLIO(0),U,8),"KILOGRAM","POUND",2)
 I $G(GMVARRAY("UNIT_ID","E"))="MILLIMETERS OF MERCURY" D
 .S $P(GMVCLIO(0),U,8)=+$$CVTVAL^MDTERM($P(GMVCLIO(0),U,8),"MILLIMETERS OF MERCURY","CENTIMETERS H2O",1)
 ; entered-in-error - won't get errors from clio
 S $P(GMVCLIO(2),U,1)="" ;error flag
 S $P(GMVCLIO(2),U,2)="" ;error entered by
 S $P(GMVCLIO(2),U,3)="" ;reason entered in error
 ;
 S GMVCLIO(5)="",GMVCNT=0
 S GMVCS=$G(GMVARRAY("CUFF_SIZE_ID","I"))
 I GMVCS]"" D
 .S GMVCS=$$GETIEN^GMVGETQL(GMVCS,2)
 .S GMVCNT=GMVCNT+1
 .S $P(GMVCLIO(5),U,GMVCNT)=GMVCS
 .Q
 S GMVL=$G(GMVARRAY("LOCATION_ID","I"))
 I GMVL]"" D
 .S GMVL=$$GETIEN^GMVGETQL(GMVL,2)
 .S GMVCNT=GMVCNT+1
 .S $P(GMVCLIO(5),U,GMVCNT)=GMVL
 .Q
 S GMVM=$G(GMVARRAY("METHOD_ID","I"))
 I GMVM]"" D
 .S GMVM=$$GETIEN^GMVGETQL(GMVM,2)
 .S GMVCNT=GMVCNT+1
 .S $P(GMVCLIO(5),U,GMVCNT)=GMVM
 .Q
 S GMVP=$G(GMVARRAY("POSITION_ID","I"))
 I GMVP]"" D
 .S GMVP=$$GETIEN^GMVGETQL(GMVP,2)
 .S GMVCNT=GMVCNT+1
 .S $P(GMVCLIO(5),U,GMVCNT)=GMVP
 .Q
 S GMVS=$G(GMVARRAY("SITE_ID","I"))
 I GMVS]"" D
 .S GMVS=$$GETIEN^GMVGETQL(GMVS,2)
 .S GMVCNT=GMVCNT+1
 .S $P(GMVCLIO(5),U,GMVCNT)=GMVS
 .Q
 S GMVQ=$G(GMVARRAY("QUALITY_ID","I"))
 I GMVQ]"" D
 .S GMVQ=$$GETIEN^GMVGETQL(GMVQ,2)
 .S GMVCNT=GMVCNT+1
 .S $P(GMVCLIO(5),U,GMVCNT)=GMVQ
 .Q
 I $P(GMVCLIO(0),U,3)=GMVPO2 D
 .S GMVLOOP=0
 .F  S GMVLOOP=$O(GMVARRAY("CONTEXT",GMVLOOP)) Q:'GMVLOOP  D
 ..I $G(GMVARRAY("CONTEXT",GMVLOOP,"TERM_ID","E"))="SUPPLEMENTAL OXYGEN CONCENTRATION" D
 ...S GMVO2=$G(GMVARRAY("CONTEXT",GMVLOOP,"SVALUE","E"))
 ..I $G(GMVARRAY("CONTEXT",GMVLOOP,"TERM_ID","E"))="SUPPLEMENTAL OXYGEN FLOW RATE" D
 ...S GMVFR=$G(GMVARRAY("CONTEXT",GMVLOOP,"SVALUE","E"))
 ..S GMVM=$G(GMVARRAY("CONTEXT",GMVLOOP,"METHOD_ID","I"))
 ..I GMVM]"" D
 ...S GMVM=$$GETIEN^GMVGETQL(GMVM,2)
 ...Q:'GMVM
 ...S GMVQFLAG=0
 ...F GMVQLOOP=1:1 Q:$P($G(GMVCLIO(5)),U,GMVQLOOP)=""  I $P($G(GMVCLIO(5)),U,GMVQLOOP)=GMVM S GMVQFLAG=1 Q
 ...I GMVQFLAG=0 S GMVCNT=GMVCNT+1,$P(GMVCLIO(5),U,GMVCNT)=GMVM
 S:GMVO2]"" GMVO2=GMVO2_"%"
 S:GMVFR]"" GMVFR=GMVFR_" l/min"
 I GMVFR="",GMVO2="" S GMVSUP=""
 I GMVFR'="",GMVO2="" S GMVSUP=GMVFR
 I GMVFR="",GMVO2'="" S GMVSUP=GMVO2
 I GMVFR'="",GMVO2'="" S GMVSUP=GMVFR_" "_GMVO2
 S $P(GMVCLIO(0),U,10)=GMVSUP
 Q
 ;
F1205(GMV1205,GMVX,GMVY) ; Return file 120.5 record as nodes
 ;  Input: GMV1205 = array name to hold nodes (required)
 ;            GMVX = File 120.5 IEN or CliO GUID (required)
 ;            GMVY = Return records marked as errors? (optional)
 ;               0 = don't return, 1 = return error records
 ;                   (default = 0)
 ; Output:GMV1205(0) = file 120.5 zero node
 ;               (2) = 120.5,#2 ^ 120.5, #3 ^ 120.5, #4 delimited by
 ;                     tilde (~)
 ;               (3) = qualifier IENS delimited by caret (^)
 ;         
 N GMVCNT,GMVFLAG,GMVLIST,GMVLOOP,GMVNODE,GMVNODE2,GMVIEN1
 S GMVX=$G(GMVX),GMVY=$G(GMVY,0)
 S (GMV1205(0),GMV1205(2),GMV1205(5))=""
 I GMVX'=+GMVX Q
 S GMVY=$S(GMVY=1:1,1:0)
 S GMVNODE2=$G(^GMR(120.5,+GMVX,2))
 I GMVY=0,$P(GMVNODE2,U,1)=1 Q 
 S GMV1205(0)=$G(^GMR(120.5,GMVX,0))
 S GMVFLAG=0
 F GMVLOOP=1,2,3,8 D  Q:GMVFLAG
 .S:$P(GMV1205(0),U,GMVLOOP)="" GMVFLAG=1
 .Q
 I GMVFLAG S (GMV1205(0),GMV1205(2),GMV1205(5))="" Q
 S GMV1205(2)=GMVNODE2
 S (GMVCNT,GMVIEN1)=0,GMVLIST=""
 F  S GMVIEN1=$O(^GMR(120.5,GMVX,2.1,GMVIEN1)) Q:'GMVIEN1  D
 .S GMVCNT=GMVCNT+1
 .S $P(GMVLIST,"~",GMVCNT)=+$P($G(^GMR(120.5,GMVX,2.1,GMVIEN1,0)),U,1)
 .Q
 S $P(GMV1205(2),U,3)=GMVLIST
 S (GMVCNT,GMVIEN1)=0
 F  S GMVIEN1=$O(^GMR(120.5,GMVX,5,"B",GMVIEN1))  Q:'GMVIEN1  D
 .S GMVCNT=GMVCNT+1
 .S $P(GMV1205(5),U,GMVCNT)=GMVIEN1
 .Q
 Q
 ;
GETREC(GMVARRAY,GMVID,GMVERR) ; Checks CLIO and Vitals databases. Returns
 ; record as nodes with internal values.
 ;  Input: GMVARRAY = array name passed by reference (required)
 ;            GMVID = File 120.5 IEN or CliO GUID (required)
 ;           GMVERR = Return records marked as errors? (optional)
 ;                0 = don't return, 1 = return error records
 ;                   (default = 0)
 ; Output:GMVARRAY(0) = same as File 120.5 zero node
 ;                (2) = 120.5, #2 ^ 120.5, #3 ^ 120.5, #4 delimited by
 ;                      tilde (~)
 ;                (3) = qualifier IENS (File 120.52) delimited by caret (^)
 ;
 ; example:
 ; >D GETREC^GMVUTL(.RESULT,12196,0) ZW RESULT     
 ; RESULT(0)="3080108.093626^217^21^3080108.0937^67^4658^^4^^1.0 l/min 22%"
 ; RESULT(2)="^^"
 ; RESULT(5)=134
 ;
 S GMVID=$G(GMVID),GMVERR=$G(GMVERR)
 I GMVID="" Q
 S GMVERR=$S(GMVERR=1:1,1:0)
 I GMVID=+GMVID D  Q
 .D F1205(.GMVARRAY,GMVID,GMVERR)
 .Q
 I GMVID'=+GMVID D  Q
 .D CLIO(.GMVARRAY,GMVID)
 .Q
 Q
QRYDATE(RESULT,SDATE,EDATE) ; Returns a list of GUIDs found in the
 ; Clinical Observations package for the date range specified
 ;  Input: RESULT = array name surrounded by quotes (required)
 ;                  ex: "ARRAY", "^TMP($J)"
 ;          SDATE = start date of search range in FileMan internal
 ;                  format (optional)
 ;                  default is T-24 hours
 ;          EDATE = end date in FileMan internal format (optional)
 ;                  default is current date/time
 ; Output: RESULT(0)=number of entries returned 
 ;                   or "-1^error message"
 ;         RESULT(n)=Global Unique ID (aka GUID)
 ; where n is a sequential number starting with 1
 ;
 ; example:
 ; >D QRYDATE^GMVUTL("ARRAY",3070301,3070401)
 ; >ZW ARRAY
 ; ARRAY(0)=3
 ; ARRAY(1)="{FD0FEBBC-8EC1-42E4-9483-4BDBE6370728}"
 ; ARRAY(2)="{A7C7FFEB-0CD5-4D55-BB34-35B9620F4ECC}"
 ; ARRAY(3)="{D0CEA9D2-A519-41C2-A4AE-9C24C7498E56}"
 ;
 I $T(QRYDATE^MDCLIO1)="" D  Q
 .S @RESULT@(0)="-1^QRYDATE entry point not found in MDCLIO1"
 .Q
 K ^TMP($J),@RESULT
 S SDATE=$G(SDATE,$$FMADD^XLFDT($$NOW^XLFDT(),,-24))
 S EDATE=$G(EDATE,$$NOW^XLFDT())
 I SDATE>EDATE D  Q
 .S @RESULT@(0)="-1^Start Date is after end date"
 .Q
 D QRYDATE^MDCLIO1(RESULT,SDATE,EDATE)
 Q
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HGMVUTL   8700     printed  Sep 23, 2025@19:36:07                                                                                                                                                                                                      Page 2
GMVUTL    ;HOIFO/RM,MD,FT-CALLABLE ENTRY POINTS FOR PROGRAMMER UTILITIES ;08/12/09  17:15
 +1       ;;5.0;GEN. MED. REC. - VITALS;**23**;Oct 31, 2002;Build 25
 +2       ;
 +3       ; This routine uses the following IAs:
 +4       ;  #5076 - MDCLIO1 calls          (private)
 +5       ;  #5269 - MDTERM calls           (private)
 +6       ; #10103 - XLFDT calls            (supported)
 +7       ;
 +8       ; This routine supports the following IAs:
 +9       ; #5046 - CLIO, F1250 entry points       (supported)
 +10      ;
EN1       ; CALL TO CONVERT TEMPERATURE (F) IN VARIABLE X TO TEMPERATURE (C)
 +1       ; IN VARIABLE Y
 +2        SET Y=$JUSTIFY(X-32*5/9,0,1)
 +3        QUIT 
EN2       ; CALL TO CONVERT AN INCHES MEASUREMENT IN X TO A CENTIMETER 
 +1       ; MEASUREMENT IN Y
 +2        SET Y=$JUSTIFY(2.54*X,0,2)
 +3        QUIT 
EN3       ; CALL TO CONVERT A WEIGHT (LBS) IN VARIABLE X TO A WEIGHT (KG)
 +1       ; IN VARIABLE Y
 +2        SET Y=$JUSTIFY(X/2.2,0,2)
 +3        QUIT 
CLIO(GMVCLIO,GMVGUID) ; Calls Clinical Observations to get a single record
 +1       ; Input:
 +2       ;   GMVCLIO = array name (required)
 +3       ;   GMVGUID = Global Unique ID (required)
 +4       ; Output:
 +5       ;   GMVCLIO(0) =
 +6       ;
 +7        IF $GET(GMVGUID)=""
               SET GMVCLIO(0)=""
               QUIT 
 +8        NEW GMVARRAY,GMVCNT,GMVCS,GMVDATE,GMVDY,GMVFLAG,GMVFLD,GMVFR,GMVHR,GMVL,GMVLOOP,GMVM,GMVMI,GMVMO
 +9        NEW GMVO2,GMVP,GMVPAIN,GMVPO2,GMVQ,GMVQFLAG,GMVQLOOP,GMVS,GMVSC,GMVSUP,GMVTIME,GMVU,GMVX,GMVY,GMVYR,X,Y
 +10       IF $TEXT(QRYOBS^MDCLIO1)=""
               SET GMVCLIO(0)=""
               SET GMVCLIO(5)=""
               QUIT 
 +11       DO QRYOBS^MDCLIO1("GMVARRAY",GMVGUID)
 +12       IF '$DATA(GMVARRAY("OBSERVED_DATE_TIME"))
               SET GMVCLIO(0)=""
               SET GMVCLIO(5)=""
               QUIT 
 +13       SET GMVPAIN=$$GETIEN^GMVGETVT("PN",2)
           SET GMVCNT=0
 +14       SET GMVPO2=$$GETIEN^GMVGETVT("PO2",2)
           SET (GMVFR,GMVO2,GMVSUP)=""
 +15       SET $PIECE(GMVCLIO(0),U,1)=$GET(GMVARRAY("OBSERVED_DATE_TIME","I"))
 +16       SET $PIECE(GMVCLIO(0),U,2)=$GET(GMVARRAY("PATIENT_ID","I"))
 +17       SET $PIECE(GMVCLIO(0),U,4)=$GET(GMVARRAY("ENTERED_DATE_TIME","I"))
 +18       SET $PIECE(GMVCLIO(0),U,5)=$GET(GMVARRAY("HOSPITAL_LOCATION_ID","I"))
 +19       SET $PIECE(GMVCLIO(0),U,6)=$GET(GMVARRAY("ENTERED_BY_ID","I"))
 +20       SET $PIECE(GMVCLIO(0),U,8)=$GET(GMVARRAY("SVALUE","I"))
 +21       SET GMVX=$GET(GMVARRAY("TERM_ID","I"))
 +22       IF GMVX]""
               Begin DoDot:1
 +23               SET GMVX=$$GETIEN^GMVGETVT(GMVX,4)
 +24               SET $PIECE(GMVCLIO(0),U,3)=GMVX
 +25               QUIT 
               End DoDot:1
 +26      ; NOTE: PAIN needs external value from CLIO
 +27       IF $PIECE(GMVCLIO(0),U,3)=GMVPAIN
               Begin DoDot:1
 +28               SET $PIECE(GMVCLIO(0),U,8)=$GET(GMVARRAY("SVALUE","E"))
 +29               QUIT 
               End DoDot:1
 +30       SET GMVFLAG=0
 +31       FOR GMVLOOP=1,2,3,8
               Begin DoDot:1
 +32               if $PIECE(GMVCLIO(0),U,GMVLOOP)=""
                       SET GMVFLAG=1
 +33               QUIT 
               End DoDot:1
               if GMVFLAG
                   QUIT 
 +34       IF GMVFLAG
               SET GMVCLIO(0)=""
               SET GMVCLIO(5)=""
               QUIT 
 +35      ;check unit of measurement and convert value if needed
 +36       IF $GET(GMVARRAY("UNIT_ID","E"))="DEGREES C"
               Begin DoDot:1
 +37               SET $PIECE(GMVCLIO(0),U,8)=+$$CVTVAL^MDTERM($PIECE(GMVCLIO(0),U,8),"DEGREES C","DEGREES F",1)
               End DoDot:1
 +38       IF $GET(GMVARRAY("UNIT_ID","E"))="CENTIMETER"
               Begin DoDot:1
 +39               SET $PIECE(GMVCLIO(0),U,8)=+$$CVTVAL^MDTERM($PIECE(GMVCLIO(0),U,8),"CENTIMETER","INCH",2)
               End DoDot:1
 +40       IF $GET(GMVARRAY("UNIT_ID","E"))="KILOGRAM"
               Begin DoDot:1
 +41               SET $PIECE(GMVCLIO(0),U,8)=+$$CVTVAL^MDTERM($PIECE(GMVCLIO(0),U,8),"KILOGRAM","POUND",2)
               End DoDot:1
 +42       IF $GET(GMVARRAY("UNIT_ID","E"))="MILLIMETERS OF MERCURY"
               Begin DoDot:1
 +43               SET $PIECE(GMVCLIO(0),U,8)=+$$CVTVAL^MDTERM($PIECE(GMVCLIO(0),U,8),"MILLIMETERS OF MERCURY","CENTIMETERS H2O",1)
               End DoDot:1
 +44      ; entered-in-error - won't get errors from clio
 +45      ;error flag
           SET $PIECE(GMVCLIO(2),U,1)=""
 +46      ;error entered by
           SET $PIECE(GMVCLIO(2),U,2)=""
 +47      ;reason entered in error
           SET $PIECE(GMVCLIO(2),U,3)=""
 +48      ;
 +49       SET GMVCLIO(5)=""
           SET GMVCNT=0
 +50       SET GMVCS=$GET(GMVARRAY("CUFF_SIZE_ID","I"))
 +51       IF GMVCS]""
               Begin DoDot:1
 +52               SET GMVCS=$$GETIEN^GMVGETQL(GMVCS,2)
 +53               SET GMVCNT=GMVCNT+1
 +54               SET $PIECE(GMVCLIO(5),U,GMVCNT)=GMVCS
 +55               QUIT 
               End DoDot:1
 +56       SET GMVL=$GET(GMVARRAY("LOCATION_ID","I"))
 +57       IF GMVL]""
               Begin DoDot:1
 +58               SET GMVL=$$GETIEN^GMVGETQL(GMVL,2)
 +59               SET GMVCNT=GMVCNT+1
 +60               SET $PIECE(GMVCLIO(5),U,GMVCNT)=GMVL
 +61               QUIT 
               End DoDot:1
 +62       SET GMVM=$GET(GMVARRAY("METHOD_ID","I"))
 +63       IF GMVM]""
               Begin DoDot:1
 +64               SET GMVM=$$GETIEN^GMVGETQL(GMVM,2)
 +65               SET GMVCNT=GMVCNT+1
 +66               SET $PIECE(GMVCLIO(5),U,GMVCNT)=GMVM
 +67               QUIT 
               End DoDot:1
 +68       SET GMVP=$GET(GMVARRAY("POSITION_ID","I"))
 +69       IF GMVP]""
               Begin DoDot:1
 +70               SET GMVP=$$GETIEN^GMVGETQL(GMVP,2)
 +71               SET GMVCNT=GMVCNT+1
 +72               SET $PIECE(GMVCLIO(5),U,GMVCNT)=GMVP
 +73               QUIT 
               End DoDot:1
 +74       SET GMVS=$GET(GMVARRAY("SITE_ID","I"))
 +75       IF GMVS]""
               Begin DoDot:1
 +76               SET GMVS=$$GETIEN^GMVGETQL(GMVS,2)
 +77               SET GMVCNT=GMVCNT+1
 +78               SET $PIECE(GMVCLIO(5),U,GMVCNT)=GMVS
 +79               QUIT 
               End DoDot:1
 +80       SET GMVQ=$GET(GMVARRAY("QUALITY_ID","I"))
 +81       IF GMVQ]""
               Begin DoDot:1
 +82               SET GMVQ=$$GETIEN^GMVGETQL(GMVQ,2)
 +83               SET GMVCNT=GMVCNT+1
 +84               SET $PIECE(GMVCLIO(5),U,GMVCNT)=GMVQ
 +85               QUIT 
               End DoDot:1
 +86       IF $PIECE(GMVCLIO(0),U,3)=GMVPO2
               Begin DoDot:1
 +87               SET GMVLOOP=0
 +88               FOR 
                       SET GMVLOOP=$ORDER(GMVARRAY("CONTEXT",GMVLOOP))
                       if 'GMVLOOP
                           QUIT 
                       Begin DoDot:2
 +89                       IF $GET(GMVARRAY("CONTEXT",GMVLOOP,"TERM_ID","E"))="SUPPLEMENTAL OXYGEN CONCENTRATION"
                               Begin DoDot:3
 +90                               SET GMVO2=$GET(GMVARRAY("CONTEXT",GMVLOOP,"SVALUE","E"))
                               End DoDot:3
 +91                       IF $GET(GMVARRAY("CONTEXT",GMVLOOP,"TERM_ID","E"))="SUPPLEMENTAL OXYGEN FLOW RATE"
                               Begin DoDot:3
 +92                               SET GMVFR=$GET(GMVARRAY("CONTEXT",GMVLOOP,"SVALUE","E"))
                               End DoDot:3
 +93                       SET GMVM=$GET(GMVARRAY("CONTEXT",GMVLOOP,"METHOD_ID","I"))
 +94                       IF GMVM]""
                               Begin DoDot:3
 +95                               SET GMVM=$$GETIEN^GMVGETQL(GMVM,2)
 +96                               if 'GMVM
                                       QUIT 
 +97                               SET GMVQFLAG=0
 +98                               FOR GMVQLOOP=1:1
                                       if $PIECE($GET(GMVCLIO(5)),U,GMVQLOOP)=""
                                           QUIT 
                                       IF $PIECE($GET(GMVCLIO(5)),U,GMVQLOOP)=GMVM
                                           SET GMVQFLAG=1
                                           QUIT 
 +99                               IF GMVQFLAG=0
                                       SET GMVCNT=GMVCNT+1
                                       SET $PIECE(GMVCLIO(5),U,GMVCNT)=GMVM
                               End DoDot:3
                       End DoDot:2
               End DoDot:1
 +100      if GMVO2]""
               SET GMVO2=GMVO2_"%"
 +101      if GMVFR]""
               SET GMVFR=GMVFR_" l/min"
 +102      IF GMVFR=""
               IF GMVO2=""
                   SET GMVSUP=""
 +103      IF GMVFR'=""
               IF GMVO2=""
                   SET GMVSUP=GMVFR
 +104      IF GMVFR=""
               IF GMVO2'=""
                   SET GMVSUP=GMVO2
 +105      IF GMVFR'=""
               IF GMVO2'=""
                   SET GMVSUP=GMVFR_" "_GMVO2
 +106      SET $PIECE(GMVCLIO(0),U,10)=GMVSUP
 +107      QUIT 
 +108     ;
F1205(GMV1205,GMVX,GMVY) ; Return file 120.5 record as nodes
 +1       ;  Input: GMV1205 = array name to hold nodes (required)
 +2       ;            GMVX = File 120.5 IEN or CliO GUID (required)
 +3       ;            GMVY = Return records marked as errors? (optional)
 +4       ;               0 = don't return, 1 = return error records
 +5       ;                   (default = 0)
 +6       ; Output:GMV1205(0) = file 120.5 zero node
 +7       ;               (2) = 120.5,#2 ^ 120.5, #3 ^ 120.5, #4 delimited by
 +8       ;                     tilde (~)
 +9       ;               (3) = qualifier IENS delimited by caret (^)
 +10      ;         
 +11       NEW GMVCNT,GMVFLAG,GMVLIST,GMVLOOP,GMVNODE,GMVNODE2,GMVIEN1
 +12       SET GMVX=$GET(GMVX)
           SET GMVY=$GET(GMVY,0)
 +13       SET (GMV1205(0),GMV1205(2),GMV1205(5))=""
 +14       IF GMVX'=+GMVX
               QUIT 
 +15       SET GMVY=$SELECT(GMVY=1:1,1:0)
 +16       SET GMVNODE2=$GET(^GMR(120.5,+GMVX,2))
 +17       IF GMVY=0
               IF $PIECE(GMVNODE2,U,1)=1
                   QUIT 
 +18       SET GMV1205(0)=$GET(^GMR(120.5,GMVX,0))
 +19       SET GMVFLAG=0
 +20       FOR GMVLOOP=1,2,3,8
               Begin DoDot:1
 +21               if $PIECE(GMV1205(0),U,GMVLOOP)=""
                       SET GMVFLAG=1
 +22               QUIT 
               End DoDot:1
               if GMVFLAG
                   QUIT 
 +23       IF GMVFLAG
               SET (GMV1205(0),GMV1205(2),GMV1205(5))=""
               QUIT 
 +24       SET GMV1205(2)=GMVNODE2
 +25       SET (GMVCNT,GMVIEN1)=0
           SET GMVLIST=""
 +26       FOR 
               SET GMVIEN1=$ORDER(^GMR(120.5,GMVX,2.1,GMVIEN1))
               if 'GMVIEN1
                   QUIT 
               Begin DoDot:1
 +27               SET GMVCNT=GMVCNT+1
 +28               SET $PIECE(GMVLIST,"~",GMVCNT)=+$PIECE($GET(^GMR(120.5,GMVX,2.1,GMVIEN1,0)),U,1)
 +29               QUIT 
               End DoDot:1
 +30       SET $PIECE(GMV1205(2),U,3)=GMVLIST
 +31       SET (GMVCNT,GMVIEN1)=0
 +32       FOR 
               SET GMVIEN1=$ORDER(^GMR(120.5,GMVX,5,"B",GMVIEN1))
               if 'GMVIEN1
                   QUIT 
               Begin DoDot:1
 +33               SET GMVCNT=GMVCNT+1
 +34               SET $PIECE(GMV1205(5),U,GMVCNT)=GMVIEN1
 +35               QUIT 
               End DoDot:1
 +36       QUIT 
 +37      ;
GETREC(GMVARRAY,GMVID,GMVERR) ; Checks CLIO and Vitals databases. Returns
 +1       ; record as nodes with internal values.
 +2       ;  Input: GMVARRAY = array name passed by reference (required)
 +3       ;            GMVID = File 120.5 IEN or CliO GUID (required)
 +4       ;           GMVERR = Return records marked as errors? (optional)
 +5       ;                0 = don't return, 1 = return error records
 +6       ;                   (default = 0)
 +7       ; Output:GMVARRAY(0) = same as File 120.5 zero node
 +8       ;                (2) = 120.5, #2 ^ 120.5, #3 ^ 120.5, #4 delimited by
 +9       ;                      tilde (~)
 +10      ;                (3) = qualifier IENS (File 120.52) delimited by caret (^)
 +11      ;
 +12      ; example:
 +13      ; >D GETREC^GMVUTL(.RESULT,12196,0) ZW RESULT     
 +14      ; RESULT(0)="3080108.093626^217^21^3080108.0937^67^4658^^4^^1.0 l/min 22%"
 +15      ; RESULT(2)="^^"
 +16      ; RESULT(5)=134
 +17      ;
 +18       SET GMVID=$GET(GMVID)
           SET GMVERR=$GET(GMVERR)
 +19       IF GMVID=""
               QUIT 
 +20       SET GMVERR=$SELECT(GMVERR=1:1,1:0)
 +21       IF GMVID=+GMVID
               Begin DoDot:1
 +22               DO F1205(.GMVARRAY,GMVID,GMVERR)
 +23               QUIT 
               End DoDot:1
               QUIT 
 +24       IF GMVID'=+GMVID
               Begin DoDot:1
 +25               DO CLIO(.GMVARRAY,GMVID)
 +26               QUIT 
               End DoDot:1
               QUIT 
 +27       QUIT 
QRYDATE(RESULT,SDATE,EDATE) ; Returns a list of GUIDs found in the
 +1       ; Clinical Observations package for the date range specified
 +2       ;  Input: RESULT = array name surrounded by quotes (required)
 +3       ;                  ex: "ARRAY", "^TMP($J)"
 +4       ;          SDATE = start date of search range in FileMan internal
 +5       ;                  format (optional)
 +6       ;                  default is T-24 hours
 +7       ;          EDATE = end date in FileMan internal format (optional)
 +8       ;                  default is current date/time
 +9       ; Output: RESULT(0)=number of entries returned 
 +10      ;                   or "-1^error message"
 +11      ;         RESULT(n)=Global Unique ID (aka GUID)
 +12      ; where n is a sequential number starting with 1
 +13      ;
 +14      ; example:
 +15      ; >D QRYDATE^GMVUTL("ARRAY",3070301,3070401)
 +16      ; >ZW ARRAY
 +17      ; ARRAY(0)=3
 +18      ; ARRAY(1)="{FD0FEBBC-8EC1-42E4-9483-4BDBE6370728}"
 +19      ; ARRAY(2)="{A7C7FFEB-0CD5-4D55-BB34-35B9620F4ECC}"
 +20      ; ARRAY(3)="{D0CEA9D2-A519-41C2-A4AE-9C24C7498E56}"
 +21      ;
 +22       IF $TEXT(QRYDATE^MDCLIO1)=""
               Begin DoDot:1
 +23               SET @RESULT@(0)="-1^QRYDATE entry point not found in MDCLIO1"
 +24               QUIT 
               End DoDot:1
               QUIT 
 +25       KILL ^TMP($JOB),@RESULT
 +26       SET SDATE=$GET(SDATE,$$FMADD^XLFDT($$NOW^XLFDT(),,-24))
 +27       SET EDATE=$GET(EDATE,$$NOW^XLFDT())
 +28       IF SDATE>EDATE
               Begin DoDot:1
 +29               SET @RESULT@(0)="-1^Start Date is after end date"
 +30               QUIT 
               End DoDot:1
               QUIT 
 +31       DO QRYDATE^MDCLIO1(RESULT,SDATE,EDATE)
 +32       QUIT