Compare commits

..

No commits in common. "tags/TMG-PGC" and "master" have entirely different histories.

9 changed files with 1647 additions and 21405 deletions

142
GMRVED2.m Normal file
View File

@ -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

117
GMRVPGC.m Normal file
View File

@ -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.
;;

129
GMVDCSAV.m Normal file
View File

@ -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

181
GrowthChart.class.php Normal file
View File

@ -0,0 +1,181 @@
<?php
include ("jpgraph-2.1.1/src/jpgraph.php");
include ("jpgraph-2.1.1/src/jpgraph_line.php");
include ("jpgraph-2.1.1/src/jpgraph_regstat.php");
/**
* GrowthChart class
*
* @author Jonathan Abbett <jonathan.abbett@childrens.harvard.edu>
* @version 1.1
* @copyright Jonathan Abbett and Children's Hospital Informatics Program, 2007
*
*/
class GrowthChart
{
/**
* Male sex
*
*/
const SEX_MALE = 1;
/**
* Female sex
*
*/
const SEX_FEMALE = 2;
private $style;
private $title;
private $sex;
private $maxAgeMonths;
private $patientXarray;
private $patientYarray;
private $width;
private $height;
/**
* Constructor, used to initialize necessary variables.
*
* @param string $style Chart style, from available dataset filenames, i.e. bmi-age, weight-length
* @param string $title Title for the graph, provided by M program
* @param integer $sex Patient sex, from available SEX constants
* @param decimal $maxAgeMonths The greatest patient age used in the chart, used to decide whether chart is infant (0-36 mo.) or regular (2-20 yrs.)
* @param integer $width Width of chart in pixels
* @param integer $height Height of chart in pixels
* @param array $patientXarray Array of decimals for patient X data (i.e. age in months)
* @param array $patientYarray Array of decimals for patient Y data (i.e. length, height, BMI, etc.)
* @return GrowthChart
*/
public function GrowthChart($style, $title = null, $sex, $maxAgeMonths, $width = 800, $height = 800, $patientXarray = null, $patientYarray = null)
{
$this->style = $style;
$this->title = $title;
$this->sex = $sex;
$this->maxAgeMonths = $maxAgeMonths;
$this->width = $width;
$this->height = $height;
$this->patientXarray = $patientXarray;
$this->patientYarray = $patientYarray;
}
private static function generateSourceXData($min, $max) {
$data = array();
$data[] = $min;
for ($i = $min + 0.5; $i < $max; $i++) {
$data[] = $i;
}
$data[] = $max;
return $data;
}
/**
* Renders the chart, outputting a PNG image.
*
*/
public function render()
{
// Create and set-up the graph
$g = new Graph($this->width, $this->height, "auto");
$g->SetColor('white');
$g->SetFrame(false);
$g->SetMargin(25,20,20,25);
$g->SetMarginColor('white');
// Load data from XML
if ($this->sex == GrowthChart::SEX_MALE) {
$this->style .= '-male';
} else {
$this->style .= '-female';
}
if ($this->maxAgeMonths <= 36) {
$this->style .= '-infant';
}
$xml = simplexml_load_file("data/$this->style.xml");
$xdata = GrowthChart::generateSourceXData((float)$xml->sourceXStart, (float)$xml->sourceXEnd);
$g->SetScale("linlin", (float)$xml->yMin, (float)$xml->yMax, (float)$xml->xMin, (float)$xml->xMax);
if ((float)$xml->ticksMajor != 0) {
$g->yscale->ticks->Set((float)$xml->ticksMajor, (float)$xml->ticksMinor);
}
$g->xaxis->SetLabelFormat('%1.1f');
$g->xaxis->SetFont(FF_TREBUCHE, FS_NORMAL, 9);
$g->xgrid->Show(true);
$g->yaxis->HideZeroLabel();
$g->yaxis->SetFont(FF_TREBUCHE, FS_NORMAL, 9);
$g->ygrid->SetFill(true,'#EFEFEF@0.5','#FFFFFF@0.5');
if (!empty($this->title))
{
$g->title->Set($this->title);
$g->title->SetColor("red");
$g->title->SetFont( FF_FONT2, FS_BOLD);
}
$xml = simplexml_load_file("data/$this->style.xml");
foreach ($xml->percentile as $p) {
$percentile = $p->label;
$yp = array();
foreach ($p->value as $value) {
$yp[] = (float)$value;
}
// Create the spline
$spline = new Spline($xdata, $yp);
// Get smoothed points
list($newx, $newy) = $spline->Get(100);
$lplot = new LinePlot($newy, $newx);
$lplot->SetColor('#CCCCCC');
if ($percentile == '50')
{
$lplot->SetColor('#666666');
}
// Add the plots to the graph and stroke
$g->Add($lplot);
// Add percentile label to graph
$txt = new Text($percentile . ($percentile == '3' ? 'rd' : 'th'));
$txt->SetScalePos($xdata[sizeof($xdata)-1]+(float)$xml->percentileXNudge,$yp[sizeof($yp)-1]+(float)$xml->percentileYNudge);
$txt->SetColor('#666666');
$txt->SetFont(FF_TREBUCHE, FS_NORMAL, 9);
$g->AddText($txt);
}
if (!empty($this->patientXarray) && !empty($this->patientYarray) && sizeof($this->patientXarray) == sizeof($this->patientYarray))
{
$patientPlot = new LinePlot($this->patientYarray, $this->patientXarray);
$patientPlot->SetColor('orange');
$patientPlot->SetWeight(3);
$patientPlot->value->Show();
$patientPlot->value->SetColor('brown');
$patientPlot->value->SetFont(FF_COURIER, FS_BOLD);
$patientPlot->value->SetAlign('left', 'top');
$patientPlot->value->SetMargin(-5);
$patientPlot->mark->SetType(MARK_DIAMOND);
$patientPlot->mark->SetWidth(7);
$patientPlot->mark->SetColor('orange');
$patientPlot->mark->SetFillColor('red');
$g->Add($patientPlot);
}
$g->Stroke();
}
}
?>

Binary file not shown.

1078
PEDHTML-T14.KID Normal file

File diff suppressed because it is too large Load Diff

BIN
PGC.tar.gz Normal file

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -1,159 +0,0 @@
$TXT Created by TOPPENBERG,KEVIN at FAMILY PHYSICANS OF GREENEVILLE (KIDS) on 11/22/10
=============================================================================
Run Date: 11/22/10 Designation: TMG*1.0*17
Package : TMG - FAMILY PHYSICANS OF GREENEVILLE Priority: ROUTINE
Version : 1 SEQ #17 Status: Released
=============================================================================
Associated patches: None
Subject: 1. Adds pediatric growth charts into an unmodified CPRS (as well as TMG-CPRS)
2. Provides Text Objects to access percentiles for pediatric height, weight,
head circumference, and BMI
Category: New features in CPRS (all work in unmodified CPRS)
Note: This is a replacement for TMG Kids patch Version 1.0 Seq 16. This includes an update of the
javascript library to version 2.3 and corrects a few bugs that existed in Seq 16 (e.g. Labels
for tic marks on graphs and proper plotting of points).
Description:
============
1. PEDIATRIC GROWTH CHARTS:
After installation of this patch, graphic pediatric growth charts will be added as a
report on the REPORTS tab in CPRS. (This does NOT require TMG-CPRS to work.) It
makes use of VA standard HTML type reports. The internal text of the report includes
javascript code that graphs out pediatric patient data.
NOTES:
-- For pediatric patients, both HEIGHT and LENGTH must be stored in the
HEIGHT field. For the purpose of these graphs, it has been assumed that for
age < 2 yrs, that "HEIGHT" is actually a length. (HEIGHT is a standing stature,
while LENGTH is measured with patient laying flat on table.)
-- Head circumference measurements must be stored as a CIRC/GIRTH type vital.
-- To print out graphs, right click on the graph and select PRINT from the context
menu.
-- We have paid the $99 license fee to the author of the javascript library, and
the author (Josh Gebelein) has assured me that this covers all users of our
open source release.
-- We have tried to create installer code that inserts our growth charts report
in a manner that does not disrupt other reports. However, if a site has a
unforseen setup, then a CAC may have to edit this manually:
1. Navigate to Fileman menu option XPAR EDIT PARAMETER
2. Choose: ORWRP REPORT LIST
3. Move the entry for TMG GROWTH CHARTS to the appropriate section
for your site.
2. TEXT OBJECTS TO INCLUDE PERCENTILES
Text objects are smart objects that can be dropped into templates in CPRS.
When used, they contact the server and return appropriate information. E.g.
|PHONE NUMBER| would return the patient's telephone number.
The following text objects have been created. They will include a percentile
for the measurements (the same percentile that would show up in a growth chart)
TMG PATIENT BMI
TMG PATIENT HC
TMG PATIENT WT
TMG PATIENT HT
E.g. |TMG PATIENT HT| resulted in this output
(07/12/2010 @ 10.5 yr) Ht 53 in [134.6 cm], 13rd %tile
The date is only added when the vital measurement date is different from the
note date.
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
INSTALLATION INSTRUCTIONS:
==========================
Users should be logged off the system.
Note: the follow instructions were copied from another KIDS install and modified.
There may be some discrepancies.
The following are instructions for those using the Packman method:
------------------------------------------------------------------
1. Use the INSTALL/CHECK MESSAGE option on the PackMan menu.
2. Review your mapped set. If any of the routines listed in the
ROUTINE SUMMARY section are mapped, they should be removed
from the mapped set at this time.
3. From the Kernel Installation and Distribution System Menu, select
the Installation menu.
4. From this menu, you may elect to use the following options
(when prompted for INSTALL NAME, enter TMG1-1.0-17:
a. Backup a Transport Global
b. Compare Transport Global to Current System
c. Verify Checksums in Transport Global
5. Use the Install Package(s) option and select the package TMG1-1.0-17
6. When prompted 'Want KIDS to INHIBIT LOGONs during the install? YES//'
respond NO.
7. When prompted 'Want to DISABLE Scheduled Options, Menu Options, and
Protocols? YES//', respond NO.
8. If routines were unmapped as part of step 2, they should be returned
to the mapped set once the installation has run to completion.
9. (See step 9 below)
The following are instructions for those loading the patch via Host File System:
---------------------------------------------------------------------------------
1. Navigate the menu option path to reach the Kernel Installation and Distribution
System Menu. Or, the menu option XPD MAIN may be entered directly.
2. Next, at the menu displaying:
Edits and Distribution ...
Utilities ...
Installation ... <---------- pick this one.
3. Next, at the menu displaying the options as below, choose each of the options
in a step-by-step fashion, in numerical order (i.e. 1, 2, 3 etc.) Step #1 will
prompt the user to enter the file path on the host file system where the source
file is stored. The filename to enter is TMG1-1.0-16.KIDS, but add the
appropriate path. E.g. /tmp/TMG1-1.0-16.KIDS
1 Load a Distribution
2 Verify Checksums in Transport Global
3 Print Transport Global
4 Compare Transport Global to Current System
5 Backup a Transport Global
6 Install Package(s)
Restart Install of Package(s)
Unload a Distribution
4. From this menu, you may elect to use the following options
(when prompted for INSTALL NAME, enter TMG*1.0*16
a. Backup a Transport Global
b. Compare Transport Global to Current System
c. Verify Checksums in Transport Global
5. Use the Install Package(s) option and select the package TMG*1.0*16
6. When prompted 'Want KIDS to INHIBIT LOGONs during the install? YES//'
respond NO.
7. When prompted 'Want to DISABLE Scheduled Options, Menu Options, and
Protocols? YES//', respond NO.
8. If routines were unmapped as part of step 2, they should be returned
to the mapped set once the installation has run to completion.
=============================================================================
User Information:
Entered By : TOPPENBERG,KEVIN Date Entered : 11/22/10
Completed By: TOPPENBERG,KEVIN Date Completed: 11/22/10
Released By : TOPPENBERG,KEVIN Date Released : 11/22/10
=============================================================================
Packman Mail Message:
=====================
$END TXT