Index: PGC/trunk/p/GMRVED2.m
===================================================================
--- PGC/trunk/p/GMRVED2.m	(revision 958)
+++ PGC/trunk/p/GMRVED2.m	(revision 958)
@@ -0,0 +1,142 @@
+GMRVED2	;HIOFO/RM,YH,FT-VITAL SIGNS EDIT SHORT FORM ;7/20/07  13:43
+	;;5.0;GEN. MED. REC. - VITALS;**2**;Oct 31, 2002;Build 15
+	;
+	; This routine uses the following IAs:
+	; #10035 - ^DPT( references       (supported)
+	; #10061 - ^VADPT calls           (supported)
+	; #10103 - ^XLFDT calls           (supported)
+	; #10104 - ^XLFSTR calls          (supported)
+	; 
+EN1	; SORT PATIENTS ON WARD
+	K ^TMP($J)
+WSA1	; SET ^TMP($J, FOR SORT
+	D DEM^VADPT,INP^VADPT S GMRRMBD=$S(VAIN(5)'="":VAIN(5),1:"  BLANK"),GMRNAM=$S(VADM(1)'="":VADM(1),1:"  BLANK") D KVAR^VADPT K VA
+	S:$S("Aa"[GMREDB:1,$D(GMRROOM($P(GMRRMBD,"-"))):1,1:0) ^TMP($J,GMRRMBD,GMRNAM,DFN)=""
+	S DFN=$O(^DPT("CN",GMRWARD(1),DFN))
+	Q:DFN=""  G WSA1
+EN2	; BEGIN EDITING WARD VITALS
+	I $O(^TMP($J,0))="" S GMROUT=1 Q
+	W !,"Begin entering patient vitals." S GMRDT0=GMRVIDT
+	S GMRRMBD="" F GMRI=0:0 S GMRRMBD=$O(^TMP($J,GMRRMBD)) Q:GMRRMBD=""!GMROUT  S GMRNAM="" F GMRI=0:0 S GMRNAM=$O(^TMP($J,GMRRMBD,GMRNAM)) Q:GMRNAM=""!GMROUT  F DFN=0:0 S DFN=$O(^TMP($J,GMRRMBD,GMRNAM,DFN)) Q:DFN'>0  D V1 Q:GMROUT
+	W !,"Enter return to continue" R X:DTIME Q
+V1	;
+	W !!,$S(GMRNAM'="  BLANK":GMRNAM,1:DFN),?$X+10,$S(GMRRMBD'="  BLANK":GMRRMBD,1:""),"  OK? YES// " R GMRX:DTIME
+	I GMRX="^"!('$T) S GMROUT=1 Q
+	S GMRX=$$UP^XLFSTR(GMRX) I ((GMRX="")!($E(GMRX)="Y")) K GMRTO S GDT=GMRVIDT D EN1^GMRVADM G:GMROUT&'$D(GMRTO) V2 D EN2^GMRVED3 G:GMROUT&'$D(GMRTO) V2 Q
+	G:GMRX?1"N".E V2
+	W !,"ANSWER YES OR NO" G V1
+V2	;
+	W !!,"Do you wish to stop looping through names? YES//" R GMRX:DTIME
+	S GMRX=$$UP^XLFSTR(GMRX) I (('$T)!(GMRX="")!($E(GMRX)="Y")!(GMRX="^")) S GMROUT=1 Q
+	I GMRX?1"N".E S GMROUT=0 Q
+	W !,"ANSWER YES OR NO" G V2
+EN4	; ENTRY FROM GMRVED0 TO ADD THE PATIENT DATA TO THE 120.5 FILE
+	D NOW^%DTC S GMRDATE=%
+	F GMRX=2:1:$L(GMRSTR(0),";")-1 S GMRVITY=$P(GMRSTR(0),";",GMRX) D
+	. S GMRVIT=$S(GMRVITY="T":"TEMPERATURE",GMRVITY="P":"PULSE",GMRVITY="R":"RESPIRATION",GMRVITY="BP":"BLOOD PRESSURE",GMRVITY="HT":"HEIGHT",GMRVITY="CG":"CIRCUMFERENCE/GIRTH",1:"")
+	. S:GMRVIT="" GMRVIT=$S(GMRVITY="WT":"WEIGHT",GMRVITY="CVP":"CENTRAL VENOUS PRESSURE",GMRVITY="PO2":"PULSE OXIMETRY",GMRVITY="PN":"PAIN",1:"")
+	. D:$G(GMRDAT(GMRVITY))'=""&(GMRVIT'="") ADDNODE
+	Q
+ADDNODE	; add data to the 120.5 file
+	N GMVDTDUN,GMVFDA,GMVIEN
+	S GMVDTDUN=GMRVIDT
+	S GMRVIT(1)=$O(^GMRD(120.51,"B",GMRVIT,0))
+	S GMVDTDUN=$$CHKDT(GMRVIDT,GMRVIT(1))
+	S GMVFDA(120.5,"+1,",.01)=GMVDTDUN ;Date/Time
+	S GMVFDA(120.5,"+1,",.02)=DFN ;Patient
+	S GMVFDA(120.5,"+1,",.03)=GMRVIT(1) ;Vital Type
+	S GMVFDA(120.5,"+1,",.04)=GMRDATE ;Date Time entered
+	S GMVFDA(120.5,"+1,",.05)=GMRVHLOC ;Hospital
+	S GMVFDA(120.5,"+1,",.06)=DUZ ;Entered by (DUZ)
+	S GMVFDA(120.5,"+1,",1.2)=GMRDAT(GMRVITY) ;Rate
+	S GMVFDA(120.5,"+1,",1.4)=$G(GMRO2(GMRVITY)) ;Sup 02
+	S GMVIEN=""
+	D UPDATE^DIE("","GMVFDA","GMVIEN")
+	;file any qualifiers
+	I $D(GMRSITE(GMRVITY))!$D(GMRINF(GMRVITY)) D
+	.I $G(GMRSITE(GMRVITY))'="" D
+	..S GDATA=+$P(GMRSITE(GMRVITY),U,2)
+	..Q:'GDATA
+	..D ADDQUAL(GMVIEN(1)_"^"_GDATA)
+	..Q
+	.I $D(GMRINF(GMRVITY)) D
+	..S I=0
+	..F  S I=$O(GMRINF(GMRVITY,I)) Q:I'>0  D
+	...S I(1)=""
+	...F  S I(1)=$O(GMRINF(GMRVITY,I,I(1))) Q:I(1)=""  D
+	....S GDATA=+$P(GMRINF(GMRVITY,I,I(1)),"^")
+	....Q:'GDATA
+	....D ADDQUAL(GMVIEN(1)_"^"_GDATA)
+	....Q
+	...Q
+	..Q
+	.Q
+	S DA=+GMVIEN(1)
+	I GMREDB="P1" S GMRVIEN(GMRVITY)=DA_"^"_GMRDAT(GMRVITY)_"^"_$G(GMRSITE(GMRVITY))
+	S:GMRENTY>4 GLAST=GMRVIDT,GLAST(1)=$G(GLAST(1))+1
+	; for VOE Pediatric Growth Charts
+	I "8920"[(+GMRVIT(1)) D EN^GMRVPGC(DFN) ; 8=Height 9=Weight 20=Circumference
+	Q
+XREF(DA)	; Set cross-references for FILE 120.5 entry
+	; Execute SET logic only.  Set's all cross-references for this entry.
+	; DA is the record number
+	N DIC,DIK,X,Y
+	Q:'DA
+	S DIK="^GMR(120.5,"
+	D IX1^DIK
+	Q
+XREF1(DA)	; Set cross-references for FILE 120.5 entry
+	; Execute SET logic only.  Set's all cross-references for this entry.
+	; DA is the record number
+	N DIC,DIK,GMRVDA,GMRVIEN,X,Y
+	Q:'DA
+	S GMRVIEN=0,GMRVDA=DA
+	F  S GMRVIEN=$O(^GMR(120.5,GMRVDA,5,GMRVIEN)) Q:'GMRVIEN  D
+	.S DA(1)=GMRVDA,DA=GMRVIEN
+	.S DIK="^GMR(120.5,DA(1),5,"
+	.D IX1^DIK
+	.Q
+	Q
+SETPRMT	; SET VITAL TYPE PATTERN MATCH
+	S G=$P(GMRSTR(0),";",GMRX)
+	S GMRHELP=GMRHELP_$S(G="P":"PPP",G="WT":"WWW.WW",G="R":"RR",G="CG":"NNN.NN",G="CVP":"NN",G="PO2":"NNN",G="HT":"HH",G="BP":"BBB/BBB/BBB (or BBB/BBB)",G="T":"TTT.T",G="PN":"NN",1:"")_$S(GMRX'=($L(GMRSTR(0),";")-1):"-",1:"")
+	S GMRHELP(1)=GMRHELP(1)_$S(GMRHELP(1)'="":",",1:"")_$P(GMRSTR(0),";",GMRX)_"^GMRVUT1"
+	S GMRPRMT=GMRPRMT_$S(G="T":"Temp",G="P":"Pulse",G="WT":"Wt.",G="R":"Resp",G="HT":"Ht.",G="BP":"BP",G="CG":"Circumference/Girth",G="CVP":"CVP",G="PO2":"PO2",G="PN":"Pain",1:"")_$S(GMRX'=($L(GMRSTR(0),";")-1):"-",1:"")
+	Q
+CHKDT(GMVDT,GMVSAV)	;Check if there is an entry for that date & time
+	N GMVA,GMVTY
+	S GMVA=0
+	F  S GMVA=$O(^GMR(120.5,"B",GMVDT,GMVA)) Q:'GMVA  D
+	.I DFN'=$P($G(^GMR(120.5,GMVA,0)),U,2) Q
+	.S GMVTY=$P($G(^GMR(120.5,GMVA,0)),"^",3)
+	.I GMVTY=GMVSAV D
+	..S GMVDT=$$FMADD^XLFDT(GMVDT,"","","",1)
+	..Q
+	.Q
+	Q GMVDT
+	;
+ADDQUAL(GMRVDATA)	; Add qualifiers to FILE 120.5 entry
+	; ADD QUALIFIER TO 120.505 SUBFILE
+	; Input:
+	;    GMRVDATA=120.5 IEN^QUALIFIER (120.52) IEN
+	;
+	N GMVCNT,GMVERR,GMVFDA,GMVOKAY,GMRVIEN,GMRVQUAL
+	S GMRVIEN=+$P(GMRVDATA,"^",1) ;File 120.5 ien
+	S GMRVQUAL=+$P(GMRVDATA,"^",2) ;File 120.52 ien
+	; Does File 120.5 entry exist?
+	I '$D(^GMR(120.5,GMRVIEN,0)) Q
+	; Is the qualifier already stored?
+	I $O(^GMR(120.5,GMRVIEN,5,"B",GMRVQUAL,0))>0 Q
+	; Legitimate Qualifier?
+	I '$D(^GMRD(120.52,GMRVQUAL,0)) Q
+	S GMVCNT=0 ;counter for number of tries to lock an entry
+B2	; Lock the entry
+	I GMVCNT>3 Q  ;4 strikes and you're out
+	L +^GMR(120.5,GMRVIEN,0):1
+	S GMVCNT=GMVCNT+1
+	I '$T L -^GMR(120.5,GMRVIEN,0) G B2
+	; Store the  qualifier
+	S GMVFDA(120.505,"+1,"_GMRVIEN_",",.01)=GMRVQUAL
+	D UPDATE^DIE("","GMVFDA","GMVOKAY","GMVERR")
+	L -^GMR(120.5,GMRVIEN,0)
+	Q
Index: PGC/trunk/p/GMRVPGC.m
===================================================================
--- PGC/trunk/p/GMRVPGC.m	(revision 958)
+++ PGC/trunk/p/GMRVPGC.m	(revision 958)
@@ -0,0 +1,117 @@
+GMRVPGC	;DBA/CJS - Pediatric Growth Chart HTML generator ;9/26/10 21:59
+	;;5.0;GEN. MED. REC. - VITALS;**[patch list]**;Oct 31, 2002;Build 15
+	;
+EN(DFN)	;
+	N BMI,DIC,DIV,IO,LABEL,LINE,MAXAGE,NAME,NONE,POP,REF,ROOT,SERVER,SEX,STYLE,TMP,TYPE,VAL,VDT,XPARSYS,XQDIC,XQPSM,XQVOL,XVALS,YVALS
+	S SERVER=$$GET^XPAR("SYS","GMRV PED GROWTH CHART SERVER")
+	S ROOT=$$GET^XPAR("SYS","GMRV PED GROWTH CHART FOLDER")
+	;
+	S D=^DPT(DFN,0),NAME=$P(D,U),SEX=$P(D,U,2),SEX=$S(SEX="M":1,SEX="F":2,1:0),DOB=$P(D,U,3),DOD=$P($G(^DPT(DFN,.35)),U),PID=$P($G(^DPT(DFN,.36)),U,3)
+	S Y=DOB D DD^%DT S BIRTH=Y,MAXAGE=$$MNTHSOLD($S(DOD="":DT,DOD'="":DOD),DOB)
+	;
+	; See if there are any pediatric vitals to be had
+	; ^GMR(120.5,"AA",GMRVDFN,GMRVTYP,9999999-GMRVDT,DA)=""  "rate" on 0 node piece 8
+	; types:  8 = Height,  9 - Weight,  20 = Circumference/Girth,  73 - Head qualifier
+	S NONE=1 F TYPE=8,9,20 D
+	. S XVALS(TYPE)="",YVALS(TYPE)=""
+	. S VDT=0 F  S VDT=$O(^GMR(120.5,"AA",DFN,TYPE,VDT)) Q:VDT'>0  D
+	. . S DA=+$O(^GMR(120.5,"AA",DFN,TYPE,VDT,0))
+	. . I TYPE=20 Q:'$D(^GMR(120.5,DA,5,"B",73))  ; Quit if not "HEAD"
+	. . Q:+$G(^GMR(120.5,DA,2))  ; Quit if Entered in Error
+	. . S AGE=$$MNTHSOLD(9999999-VDT,DOB),NONE=0
+	. . S XVALS(TYPE)=XVALS(TYPE)_","_AGE
+	. . S VAL=$P(^GMR(120.5,DA,0),U,8),VAL=$S("8,20"[TYPE:VAL*2.54,TYPE=9:VAL/2.2),VAL=$$ROUND(VAL)
+	. . I TYPE=8!(TYPE=9) S BMI(AGE,TYPE)=VAL
+	. . S YVALS(TYPE)=YVALS(TYPE)_","_VAL
+	. . Q
+	. Q
+	;
+	; BMI=WEIGHT/(HEIGHT**2) Weight in Kg, Height in meters
+	S AGE="",XVALS("BMI")="",YVALS("BMI")="",XVALS("WTHT")="",YVALS("WTHT")=""
+	F  S AGE=$O(BMI(AGE)) Q:AGE'>0  I $D(BMI(AGE,8)),$D(BMI(AGE,9)) D
+	. S DIV=BMI(AGE,8)**2
+	. S:DIV'=0 XVALS("BMI")=XVALS("BMI")_","_AGE,YVALS("BMI")=YVALS("BMI")_","_$$ROUND(10000*BMI(AGE,9)/DIV)
+	. S XVALS("WTHT")=XVALS("WTHT")_","_BMI(AGE,8),YVALS("WTHT")=YVALS("WTHT")_","_BMI(AGE,9)
+	. Q
+	;
+	; Establish HTML doctype & head
+	S LINE=0 F  S LINE=LINE+1,TMP(LINE)=$P($T(HEAD+LINE),";",3) Q:TMP(LINE)=""
+	;
+	; Set up the href links
+	S TMP(LINE)="<P>"_NAME_"</P><P>DOB:  "_BIRTH_"</P>",LINE=LINE+1
+	S REF="<P><a href="""
+	S LABEL(0)=$S(SEX=1:"Male",1:"Female")_" Age in months vs. Weight kilograms</a></P>"
+	S LABEL(1)=$S(SEX=1:"Male",1:"Female")_" Age in months vs. Length centimeters 0-36 months</a></P>"
+	S LABEL(2)=$S(SEX=1:"Male",1:"Female")_" Age in months vs Head Circumference in centimeters 0-36 months</a></p>"
+	S LABEL(4)=$S(SEX=1:"Male",1:"Female")_" Age in months vs. Height centimeters over 36 months</a></P>"
+	S LABEL(5)=$S(SEX=1:"Male",1:"Female")_" Body Mass Index-for age</a></P>"
+	S LABEL(6)=$S(SEX=1:"Male",1:"Female")_" Weight vs Stature</a></P>"
+	S LABEL(7)=$S(SEX=1:"Male",1:"Female")_" Weight vs Length</a></P>"
+	S TITLE(0)=$S(SEX=1:"Male",1:"Female")_" Age in months vs. Weight in kilograms"
+	S TITLE(1)=$S(SEX=1:"Male",1:"Female")_" Age in months vs. Length centimeters for 0-36 months"
+	S TITLE(2)=$S(SEX=1:"Male",1:"Female")_" Age in months vs Head Circumference in centimeters for 0-36 months"
+	S TITLE(4)=$S(SEX=1:"Male",1:"Female")_" Age in months vs. Height centimeters over 36 months"
+	S TITLE(5)=$S(SEX=1:"Male",1:"Female")_" Body Mass Index vs. Age in Months from 24-240 Months"
+	S TITLE(6)=$S(SEX=1:"Male",1:"Female")_" Weight in Kilograms vs. Height in centimeters"
+	       S TITLE(7)=$S(SEX=1:"Male",1:"Female")_" Weight in Kilograms vs. Length in centimeters"
+	F STYLE=0,1,2,4,5,6,7 S TYPE=$$TYPE(STYLE) D:$L(XVALS(TYPE))
+	. Q:("456"[STYLE)&(MAXAGE<36)
+	. S TMP(LINE)=REF_SERVER_"?style="_$$STRING(STYLE)_"&title="_TITLE(STYLE)_"&sex="_SEX_"&maxage="_$$AGE(MAXAGE,STYLE)_"&xvals="_$P(XVALS(TYPE),",",2,99)_"&yvals="_$P(YVALS(TYPE),",",2,99)_""">"_LABEL(STYLE)
+	. S LINE=LINE+1
+	. Q
+	;
+	S:NONE TMP(LINE)="<P>THERE ARE NO GROWTH VITALS TO PLOT.</P>",LINE=LINE+1
+	; last of the labels
+	S TMP(LINE)="<P>Note: should any xvals or yvals value be inappropriate, or there be an unequal number of values in both lists,",LINE=LINE+1
+	S TMP(LINE)="the patient plot will be ignored, and a ""blank"" growth chart with percentile values only will be shown.</P>",LINE=LINE+1
+	S TMP(LINE)="</body>"
+	S TMP(LINE+1)="</html>"
+	;
+	; Write out the file
+	D OPEN^%ZISH("OUTFILE",ROOT,DFN_".html","W") S:POP GMRVPGC="ERROR"
+	Q:POP
+	U IO
+	S LINE=0 F  S LINE=$O(TMP(LINE)) Q:LINE'>0  W TMP(LINE),!
+	D CLOSE^%ZISH("OUTFILE")
+	Q
+	;
+	; convert age to months
+MNTHSOLD(DATE,DOB)	;
+	S X1=DATE,X2=DOB D ^%DTC S X=X/30.42,X=$$ROUND(X)
+	Q X
+	;
+ROUND(X)	;
+	Q $P(X,".")_"."_$E($P(X,".",2),1,2)
+	;
+TYPE(STYLE)	;
+	Q $S(STYLE=0:9,STYLE=1:8,STYLE=2:20,STYLE=4:8,STYLE=5:"BMI",1:"WTHT")
+	;
+AGE(MAXAGE,STYLE)	;
+	I MAXAGE<36 Q MAXAGE
+	I "0456"[STYLE Q MAXAGE
+	Q 36
+	;
+STRING(STYLE)	;
+	I STYLE=0 Q "weight-age"
+	I STYLE=1 Q "length-age"
+	I STYLE=2 Q "head-age"
+	I STYLE=4 Q "stature-age"
+	I STYLE=5 Q "bmi-age"
+	I STYLE=6 Q "weight-stature"
+	I STYLE=7 Q "weight-length"
+	Q 0 ;oops!
+	;
+HEAD	;;
+	;;<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+	;; "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+	;;<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+	;;<head>
+	;; <title>Growth Chart Example</title>
+	;; <meta http-equiv="Content-Type" CONTENT="text/html; charset=UTF-8">
+	;; <meta http-equiv="Expires" CONTENT="0">
+	;; <meta http-equiv="Cache-Control" CONTENT="no-cache">
+	;; <meta http-equiv="PRAGMA" CONTENT="NO-CACHE">
+	;;</head>
+	;;<body>
+	;;Click on any one of the following to display the available growth charts for your patient.  Use the back button to return to the main page.
+	;;
Index: PGC/trunk/p/GMVDCSAV.m
===================================================================
--- PGC/trunk/p/GMVDCSAV.m	(revision 958)
+++ PGC/trunk/p/GMVDCSAV.m	(revision 958)
@@ -0,0 +1,129 @@
+GMVDCSAV	;HOIFO/DAD-VITALS COMPONENT: SAVE DATA ;11/15/07  11:11
+	;;5.0;GEN. MED. REC. - VITALS;**9,3**;Oct 31, 2002;Build 15
+	;
+	; This routine uses the following IAs:
+	; #10103 - ^XLFDT calls           (supported)
+	;
+	; This routine supports the following IAs:
+	; #3996 - GMV ADD VM RPC called at EN1  (private)
+	; 
+	; 01/28/2005 KAM GMRV*5*9 Record midnight with 1 second added
+	;                         Stop adding second on multiple patent entry
+	;
+EN1(RESULT,GMVDATA)	; GMV ADD VM [RPC entry point]
+	; Saves vitals data
+	N GMVCNT,GMVD0,GMVFDA,GMVINUM,GMVQNUM,GMVRNUM,GMVIEN,GMVDUN
+	N GMVVNUM,GMVVMEAS,GMVVQUAL,GMVVREAS
+	D QUALTWO
+	Q
+	;I $O(@GMVDATA@("V",0))>0 D VITMEA
+	;I $O(@GMVDATA@("I",0))>0 D ENTERR
+	;I $G(RESULT(0))="OK" D MSG("OK: Data saved")
+	;Q
+	;
+VITMEA	; *** Save vital measurement data ***
+	S GMVVNUM=0 K GMVFDA
+	S GMVCNT=+$O(@GMVDATA@("V",1E25),-1)
+	F  S GMVVNUM=$O(@GMVDATA@("V",GMVVNUM)) Q:GMVVNUM'>0  D
+	. S GMVVMEAS=$G(@GMVDATA@("V",GMVVNUM))
+	. S GMVFDA(120.5,"+"_GMVVNUM_",",.01)=GMVDTDUN ; Date time taken
+	. S GMVFDA(120.5,"+"_GMVVNUM_",",.02)=GMVDFN   ; Patient
+	. S GMVFDA(120.5,"+"_GMVVNUM_",",.03)=$P(GMVVMEAS,U) ;
+	. S GMVFDA(120.5,"+"_GMVVNUM_",",.04)=GMVDTENT  ; Date Time entered
+	. S GMVFDA(120.5,"+"_GMVVNUM_",",.05)=GMVHOSPL  ; Hospital
+	. S GMVFDA(120.5,"+"_GMVVNUM_",",.06)=GMVENTBY  ; Entered by (DUZ)
+	. S GMVFDA(120.5,"+"_GMVVNUM_",",1.2)=$P($P(GMVVMEAS,U,2),";",1) ; Rate
+	. S GMVFDA(120.5,"+"_GMVVNUM_",",1.4)=$P($P(GMVVMEAS,U,2),";",2) ; Sup 02
+	. S GMVQNUM=0
+	. F  S GMVQNUM=$O(@GMVDATA@("Q",GMVVNUM,GMVQNUM)) Q:GMVQNUM'>0  D
+	.. S GMVVQUAL=$G(@GMVDATA@("Q",GMVVNUM,GMVQNUM))
+	.. S GMVCNT=GMVCNT+1
+	.. S GMVFDA(120.505,"+"_GMVCNT_",","+"_GMVVNUM_",",.01)=GMVVQUAL
+	.. Q
+	. Q
+	D UPDATE^DIE("","GMVFDA"),FMERROR
+	S RESULT(0)="OK"
+	Q
+	;
+ENTERR	; *** Save entered in error data ***
+	S GMVINUM=0 K GMVFDA
+	S GMVCNT=+$O(@GMVDATA@("I",1E25),-1)
+	F  S GMVINUM=$O(@GMVDATA@("I",GMVINUM)) Q:GMVINUM'>0  D
+	. S GMVD0=$G(@GMVDATA@("I",GMVINUM))
+	. S GMVFDA(120.5,GMVD0_",",2)=1
+	. S GMVFDA(120.5,GMVD0_",",3)=GMVERRBY
+	. S GMVRNUM=0
+	. F  S GMVRNUM=$O(@GMVDATA@("R",GMVINUM,GMVRNUM)) Q:GMVRNUM'>0  D
+	.. S GMVVREAS=$G(@GMVDATA@("R",GMVINUM,GMVRNUM))
+	.. S GMVCNT=GMVCNT+1
+	.. S GMVFDA(120.506,"+"_GMVCNT_","_GMVD0_",",.01)=GMVVREAS
+	.. Q
+	. Q
+	D UPDATE^DIE("","GMVFDA"),FMERROR
+	S RESULT(0)="OK"
+	Q
+QUALTWO	; Add a new entry to FILE 120.5
+	S GMVVNUM=0 K GMVFDA
+	S GMVVMEAS=$P(GMVDATA,"*",1) ; 
+	S GMVDTDUN=$P(GMVVMEAS,"^",1) ; Date time
+	;01/28/2005 KAM GMRV*5*9 Added next Line PAL-0105-60940 
+	I +$P(GMVDTDUN,".",2)'>0 S GMVDTDUN=$$FMADD^XLFDT(GMVDTDUN,"","","",1)
+	S GMVDFN=$P(GMVVMEAS,"^",2) ; Patient DFN
+	S GMVVTYP=$P(GMVVMEAS,"^",3) ; Vital type
+	S GMVDTDUN=$$CHKDT(GMVDTDUN,$P(GMVVTYP,";",1))
+	S GMVDTENT=$$NOW^XLFDT ; Current date time
+	S GMVHOSPL=$P(GMVVMEAS,"^",4) ; Hospital
+	S GMVENTBY=$P(GMVVMEAS,"^",5) ; DUZ
+	S GMVFDA(120.5,"+1,",.01)=GMVDTDUN ; Date time taken
+	S GMVFDA(120.5,"+1,",.02)=GMVDFN   ; Patient
+	S GMVFDA(120.5,"+1,",.03)=$P(GMVVTYP,";",1)   ; Vital Type
+	S GMVFDA(120.5,"+1,",.04)=GMVDTENT  ; Date Time entered
+	S GMVFDA(120.5,"+1,",.05)=GMVHOSPL  ; Hospital
+	S GMVFDA(120.5,"+1,",.06)=GMVENTBY  ; Entered by (DUZ)
+	S GMVFDA(120.5,"+1,",1.2)=$P(GMVVTYP,";",2) ; Rate
+	S GMVFDA(120.5,"+1,",1.4)=$P(GMVVTYP,";",3) ; Sup 02
+	S GMVIEN=""
+	D UPDATE^DIE("","GMVFDA","GMVIEN"),FMERROR
+	S GMVCNT=1
+	S GMVQUALS=$P(GMVDATA,"*",2)
+	F GMVLOOP=1:1:$L(GMVQUALS,":")+1 D
+	. S GMVVQUAL=$P(GMVQUALS,":",GMVLOOP)
+	. Q:GMVVQUAL=""
+	. S GMVCNT=GMVCNT+1
+	. D ADDQUAL^GMVGETQ(.GMVRES,GMVIEN(1)_"^"_GMVVQUAL)
+	. Q
+	I "^HT^WT^CG^"[$P($G(^GMRD(120.51,+GMVVTYP,0)),U,2) D EN^GMRVPGC(GMVDFN)
+	Q 
+	;
+CHKDT(GMVDT,GMVSAV)	;Check id there ios a vital entered for that date and time
+	N GMVA,GMVQ
+	S GMVQ=0
+	S GMVA=""
+	F  S GMVA=$O(^GMR(120.5,"B",GMVDT,GMVA)) Q:GMVA=""  D
+	. ;01/28/2005 KAM GMRV*5*9 Added next Line BHS-0504-10643 
+	. I GMVDFN'=$P($G(^GMR(120.5,GMVA,0)),U,2) Q
+	. S GMVTY=$P($G(^GMR(120.5,GMVA,0)),"^",3)
+	. I GMVTY=GMVSAV D
+	. . S GMVDT=$$FMADD^XLFDT(GMVDT,"","","",1)
+	. . Q
+	. Q
+	Q GMVDT
+MSG(X)	; *** Add a line to the message array ***
+	S (GMVMSG,RESULT(-1))=1+$G(RESULT(-1),0)
+	S RESULT(GMVMSG)=X
+	I $P(X,":")="ERROR" S RESULT(0)="ERROR"
+	Q
+	;
+FMERROR	;
+	I $O(^TMP("DIERR",$J,0))>0 D
+	. N GMVER1,GMVER2
+	. S GMVER1=0
+	. F  S GMVER1=$O(^TMP("DIERR",$J,GMVER1)) Q:GMVER1'>0  D
+	.. S GMVER2=0
+	.. F  S GMVER2=$O(^TMP("DIERR",$J,GMVER1,"TEXT",GMVER2)) Q:GMVER2'>0  D
+	... D MSG("ERROR: "_$G(^TMP("DIERR",$J,GMVER1,"TEXT",GMVER2)))
+	... Q
+	.. Q
+	. Q
+	D CLEAN^DILF
+	Q
