VistA-WorldVistAEHR/r/GEN_MED_REC_VITALS-GMRV/GMRVFIX.m

144 lines
4.9 KiB
Mathematica

GMRVFIX ;HIOFO/FT-CONVERT C TEMPERATURES TO F, THEN REPLACE ;3/12/04 09:50
;;4.0;Vitals/Measurements;**16**;Apr 25, 1997
;
; This routine uses the following IAs:
; #2320 - ^%ZISH calls (supported)
; #10063 - ^%ZTLOAD calls (supported)
; #10070 - ^XMD calls (supported)
; #10103 - ^XLFDT calls (supported)
; #10104 - ^XLFSTR calls (supported)
;
EN ; Main entry point
D QUEUE
Q
QUEUE ; Queue the clean-up
N ZTDESC,ZTDTH,ZTRTN,ZTIO,ZTSAVE,ZTSK
S ZTRTN="START^GMRVFIX",ZTIO=""
S ZTDTH=$$NOW^XLFDT(),ZTDESC="GMRV*4*16 DATA REPAIR"
D ^%ZTLOAD
I ZTSK>0 D
.D EN^DDIOL("Task "_ZTSK_" has started. I'll send you a MailMan message when I finish.","","!?5")
.Q
I ZTSK'>0 D
.S GMRVMSG="I couldn't start the task to repair the data."
.D EN^DDIOL(GMRVMSG,"","!?5")
.D ERRMAIL(GMRVMSG)
.Q
Q
START ; Start looping through the database
I $D(ZTQUEUED) S ZTREQ="@"
N GMRVCNT,GMRVFILE,GMRVFIXD,GMRVIEN,GMRVLINE,GMRVLOOP,GMRVMSG,GMRVNEW,GMRVNODE,GMRVPATH,GMRVOLD,GMRVOUT,GMRVSTOP,GMRVTEMP,GMRVTMP,GMRVTOTL
N POP
; get TEMPERATURE ien
S GMRVTEMP=$O(^GMRD(120.51,"C","T",0))
I GMRVTEMP'>0 D Q
.S GMRVMSG="Can't find TEMPERATURE in the VITAL types file (120.5). Please log a NOIS."
.D ERRMAIL(GMRVMSG)
.Q
;
S GMRVTMP(1)="The following TEMPERATURE readings in the GMRV VITAL MEASUREMENT (#120.5)"
S GMRVTMP(2)="file were modified. The old value was a number less than 45. It was assumed"
S GMRVTMP(3)="that the reading was done in Celsius units but not converted to Fahrenheit"
S GMRVTMP(4)="before being stored in the database. These entries have now been converted"
S GMRVTMP(5)="to Fahrenheit and saved. IEN indicates the record number in FILE 120.5."
S GMRVTMP(6)="OLD indicates the previous value and NEW indicates the new value."
S GMRVTMP(7)=" "
; set host file name and directory path
S GMRVFILE="GMRV_4_16.DAT"
S GMRVPATH=$$PWD^%ZISH ;current directory
; Open up device to print to
D OPEN^%ZISH("VITAL",GMRVPATH,GMRVFILE,"A") ;'A' for append
I POP D Q ;send email if device cannot be opened
.S GMRVMSG="Could not open file "_GMRVFILE_" in path "_GMRVPATH_"."
.D ERRMAIL(GMRVMSG)
.Q
U IO
; from this point on, the Write commands are writing to the host file.
F GMRVLOOP=1:1:7 W !,GMRVTMP(GMRVLOOP)
S (GMRVFIXD,GMRVIEN,GMRVOUT,GMRVSTOP,GMRVTOTL)=0,GMRVCNT=7
F S GMRVIEN=$O(^GMR(120.5,"T",GMRVTEMP,GMRVIEN)) Q:'GMRVIEN!(GMRVOUT=1) D
.S GMRVSTOP=GMRVSTOP+1,GMRVTOTL=GMRVTOTL+1
.I GMRVSTOP=1000 D Q:GMRVOUT=1 ;check if the user stopped the task
..S GMRVSTOP=0
..I $$S^%ZTLOAD D
...S GMRVOUT=1
...S GMRVMSG="Job stopped by user while checking entry # "_GMRVIEN
...W !,GMRVMSG
...D ERRMAIL(GMRVMSG)
...Q
..Q
.Q:$P($G(^GMR(120.5,GMRVIEN,2)),U,1)=1 ;entered-in-error
.S GMRVNODE=$G(^GMR(120.5,GMRVIEN,0))
.Q:GMRVNODE=""
.Q:$P(GMRVNODE,U,3)'=GMRVTEMP ;not a temperature
.Q:+$P(GMRVNODE,U,8)'>0 ;not a numeric reading
.I +$P(GMRVNODE,U,8)>45!(+$P(GMRVNODE,U,8)=45) Q ;not celsius value
.S GMRVOLD=$P(GMRVNODE,U,8)
.S GMRVNEW=(+$P(GMRVNODE,U,8)*1.8)+32
.S GMRVNEW=$$ROUND(GMRVNEW) ;round to 2 decimal places
.S $P(^GMR(120.5,GMRVIEN,0),U,8)=GMRVNEW
.S GMRVFIXD=GMRVFIXD+1
.S GMRVLINE="IEN="_GMRVIEN_" "_"OLD="_GMRVOLD_" / "_"NEW="_GMRVNEW
.W !,GMRVLINE
.Q
I GMRVFIXD'>0 D
.S GMRVCNT=GMRVCNT+1
.S GMRVTMP(GMRVCNT)="No entries needed to be changed."
.W !,GMRVTMP(GMRVCNT)
.Q
S GMRVCNT=GMRVCNT+1
S GMRVTMP(GMRVCNT)=" "
W !,GMRVTMP(GMRVCNT)
S GMRVCNT=GMRVCNT+1
S GMRVTMP(GMRVCNT)="Total number of entries checked: "_GMRVTOTL
W !,GMRVTMP(GMRVCNT)
S GMRVCNT=GMRVCNT+1
S GMRVTMP(GMRVCNT)="Number of entries fixed: "_GMRVFIXD
W !,GMRVTMP(GMRVCNT)
S GMRVCNT=GMRVCNT+1
S GMRVTMP(GMRVCNT)=GMRVFILE_" in path "_GMRVPATH_" contains a listing of entries changed."
W !,GMRVTMP(GMRVCNT)
D CLOSE^%ZISH("VITAL")
K GMRVTMP
S GMRVTMP(1)="The GMRV*4*16 data repair is finished."
S GMRVTMP(2)=" "
S GMRVTMP(3)="Total number of entries checked: "_GMRVTOTL
S GMRVTMP(4)=" Number of entries fixed: "_GMRVFIXD
S GMRVTMP(5)=" "
S GMRVTMP(6)="The "_GMRVFILE_" file in the "_GMRVPATH_" directory"
S GMRVTMP(7)="contains a listing of entries changed."
D EMAIL(.GMRVTMP)
K GMRVFILE,GMRVPATH
Q
EMAIL(GMRVTMP) ; send Mailman message when job is done
; Input
; GMRVTMP is message text
N DIFROM,XMDUZ,XMSUB,XMTEXT,XMY
S XMSUB="GMRV*4*16 DATA REPAIR"
S XMY(DUZ)="",XMDUZ=.5
S XMTEXT="GMRVTMP("
D ^XMD
Q
ERRMAIL(GMRVMSG) ; Send email with error message
; Input
; GMRVMSG is error message text
N DIFROM,GMRVTEXT,XMDUZ,XMSUB,XMTEXT,XMY
S XMSUB="Error with GMRV*4*16 Post-Installation"
S XMY(DUZ)="",XMDUZ=.5
S GMRVTEXT(1)="The following error occurred:"
S GMRVTEXT(2)=GMRVMSG
S GMRVTEXT(3)=" "
S GMRVTEXT(4)="When the error is fixed, please D EN^GMRVFIX to complete the"
S GMRVTEXT(5)="database repair."
S XMTEXT="GMRVTEXT("
D ^XMD
Q
ROUND(X) ; Round off a number
N Y
S X=+$G(X)
S Y=$J(X,6,2)
S Y=$$STRIP^XLFSTR(Y," ")
S Y=+Y
Q Y
;