Compare commits
No commits in common. "master" and "tags/TMG-PGC" have entirely different histories.
master
...
tags/TMG-P
142
GMRVED2.m
142
GMRVED2.m
|
@ -1,142 +0,0 @@
|
|||
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
117
GMRVPGC.m
|
@ -1,117 +0,0 @@
|
|||
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
129
GMVDCSAV.m
|
@ -1,129 +0,0 @@
|
|||
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
|
|
@ -1,181 +0,0 @@
|
|||
<?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
1078
PEDHTML-T14.KID
File diff suppressed because it is too large
Load Diff
BIN
PGC.tar.gz
BIN
PGC.tar.gz
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,159 @@
|
|||
$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
|
Loading…
Reference in New Issue