VistA-WorldVistAEHR/r/SURGERY-SR/SROANEST.m

144 lines
7.8 KiB
Mathematica

SROANEST ;BIR/TJH - ANESTHESIA ENTRY ;01 Jun 2003
;;3.0;Surgery;**119,150,152**;24 Jun 93
SINPUT ;
N SRSTART
S Z=$E($P(^SRF($S($D(SRTN):SRTN,1:DA(1)),0),"^",9),1,7),X=$S(X?1.4N.A!(X?1.2N1":"2N.A):Z_"@"_X,1:X) K %DT,Z S %DT="RTX" D ^%DT S X=Y K:Y<1 X
I '$D(X),$G(SRFLAG)=1 D K SRFLAG Q
.W !!,"Check date format.",!," Examples of Valid Dates:",!," JAN 20 1957 or 20 JAN 57 or 1/20/57 or 012057",!," T (for TODAY), T+1 (for TOMORROW), T+2, T+7, etc."
.W !," T-1 (for YESTERDAY), T-3W (for 3 WEEKS AGO), etc.",!," If the year is omitted, the computer uses CURRENT YEAR. Two digit year"
.W !," assumes no more than 20 years in the future, or 80 years in the past.",!," If only the time is entered, the current date is assumed."
.W !," Follow the date with a time, such as JAN 20@10, T@10AM, 10:30, etc.",!," You may enter a time, such as NOON, MIDNIGHT or NOW."
.W !," You may enter NOW+3' (for current date and time Plus 3 minutes",!," *Note--the Apostrophe following the number of minutes)"
.W !," Time is REQUIRED in this response.",!," Enter the time a member of the Anesthesia staff begins preparing the",!," patient for surgery in the O.R. suite or if the care is interrupted, the"
.W !," time the care resumes."
Q:'$D(X)
S SRSTART=$P($G(^SRF($S($D(SRTN):SRTN,1:DA(1)),.2)),"^",15)
I SRSTART="" K SRFLAG Q
I X<SRSTART W !!,"The time entered is before the 'TIME PAT IN HOLD AREA'. Please check the",!,"DATE/TIME entered for this field." H 2
K SRFLAG
Q
STIME ;
I '$D(X) Q
N SRSPREC,SRPET,SRTIME,SRCRET
S SRCRET=$$GET1^DIQ(130.213,DA(2)_","_DA(1)_",",1,"I")
I SRCRET,(X>SRCRET) W !!,"Start time is after current end time. Please correct." K X Q
S SRSPREC=$O(^SRF(DA(1),50,DA(2)),-1)
I SRSPREC'=0 D
.S SRPET=$$GET1^DIQ(130.213,SRSPREC_","_DA(1)_",",1,"I")
.I SRPET="" W !!,"New start time entry not permitted until previous end time is entered." K X Q
.I SRPET>X W !!,"Start time is prior to previous end time. Please correct." K X
I $D(X),(DA(2)=1) S SRTIME(130,DA(1)_",",.21)=X D FILE^DIE("","SRTIME","^TMP(""SR"",$J)")
Q
FINALT ;
N SRCST,SRLET,SRYN,SRSNREC,SRFDA,SRTIME,SRLREC,SRCON
I $D(^SRF(DA(1),"CON")),$P(^("CON"),"^") S SRCON=$P(^SRF(DA(1),"CON"),"^")
S SRCST=$$GET1^DIQ(130.213,DA(2)_","_DA(1)_",",.01,"I")
I X<SRCST W !!,"End time prior to start time. Please correct." K X Q
S SRSNREC=$O(^SRF(DA(1),50,DA(2)))
I SRSNREC'="B" Q
ASK W !!,"Does this entry complete all start and end times for this case? (Y/N)// " R SRYN:DTIME I '$T!(SRYN["^") S SRYN="N" Q
S SRYN=$E(SRYN) I "YyNn?"'[SRYN W !,"Invalid response, please enter Yes or No. Use ? for help." G ASK
I "?"[SRYN D HELP G ASK
I ("Nn"[SRYN) S SRFDA(130,DA(1)_",",.214)="@" D FILE^DIE("","SRFDA","^TMP(""SR"",$J)") K SRFDA Q
D CHKTIME
I SRAFLAG=1 K SRAFLAG Q
S SRLREC=$O(^SRF(DA(1),50,"B"),-1)
I SRLREC'=DA(2) S SRLET=$$GET1^DIQ(130.213,SRLREC_","_DA(1)_",",1,"I")
I SRLREC=DA(2) S SRLET=X
S SRTIME(130,DA(1)_",",.24)=SRLET,SRTIME(130,DA(1)_",",.214)="1" D FILE^DIE("","SRTIME","^TMP(""SR"",$J)")
K SRAFLAG
Q:'$D(SRCON)
ASK2 ;
W !,"Does this entry complete all start and end times for the concurrent",!,"case? (Y/N)// " R SRYN:DTIME I '$T!(SRYN["^") S SRYN="N" Q
I "?"[SRYN D HELP^SROCON D HELP G ASK2
S SRYN=$E(SRYN) I "YyNn"'[SRYN W !,"Invalid response, please enter Yes or No. Use ? for help." G ASK2
I ("Nn"[SRYN),(($P(^SRF(SRCON,.2),"^",17)=1)) S SRFDA(130,SRCON_",",.214)="@" D FILE^DIE("","SRFDA","^TMP(""SR"",$J)") K SRFDA Q
S SRTIME(130,SRCON_",",.214)="1" D FILE^DIE("","SRTIME","^TMP(""SR"",$J)")
Q
CHKTIME ; verify blocks of time are valid
N SRSREC,SRCST,SRCET,SRAFLAG1,SRSNREC,SRNST,SRLREC
S SRAFLAG=0,SRSREC=0,SRAFLAG1=0
F S SRSREC=$O(^SRF(DA(1),50,SRSREC)) Q:'SRSREC!(SRAFLAG1=1) D
.S SRCST=$$GET1^DIQ(130.213,SRSREC_","_DA(1)_",",.01,"I"),SRCET=$$GET1^DIQ(130.213,SRSREC_","_DA(1)_",",1,"I")
.S SRLREC=$O(^SRF(DA(1),50,"B"),-1)
.I (SRCET=""),(SRSREC'=SRLREC) W !!,"One or more time entries missing end time. Please correct." S SRAFLAG=1,SRAFLAG1=1 Q
.S SRSNREC=$O(^SRF(DA(1),50,SRSREC))
.I SRSNREC="B" S SRAFLAG1=1 Q
.S SRNST=$$GET1^DIQ(130.213,SRSNREC_","_DA(1)_",",.01,"I")
.I SRNST<SRCET W !!,"Some time entries overlap. Please correct." S SRAFLAG=1,SRAFLAG1=1 Q
Q
CSET ; caled by set xref of mult anes start and end times used for concurrent case anes field stuffing
N SRSREC,SRCST,SRCET,SRTIME
I $$GET1^DIQ(130,DA(1),.214,"I")'=1 Q
S SRSREC=0
F S SRSREC=$O(^SRF(DA(1),50,SRSREC)) Q:'SRSREC D
.S:'$D(SRCST) SRCST=$$GET1^DIQ(130.213,SRSREC_","_DA(1)_",",.01,"I")
.S SRCET=$$GET1^DIQ(130.213,SRSREC_","_DA(1)_",",1,"I")
S SRTIME(130,DA(1)_",",.24)=SRCET,SRTIME(130,DA(1)_",",.21)=SRCST D FILE^DIE("","SRTIME","^TMP(""SR"",$J)")
Q
DEL ; called by kill xref of mult anes start and end times
I '$D(DA(2)) Q
I (DA(2)=1),(D=.01) S SRFDA(130,DA(1)_",",.21)="@" D FILE^DIE("","SRFDA","^TMP(""SR"",$J)") K SRFDA
I ($O(^SRF(DA(1),50,DA(2)))="B"),(D=1) S SRFDA(130,DA(1)_",",.24)="@",SRFDA(130,DA(1)_",",.214)="@" D FILE^DIE("","SRFDA","^TMP(""SR"",$J)") K SRFDA
Q
HELP ;
W !,"Enter ""Y"" only if the block of time entered is the final block of time for"
W !,"this case. If the block of time is not the final block, enter ""N""."
Q
BILLTIME() ; calculate total minutes for mult anes start and end times
N SRSREC,SRCST,SRCET,SRTTIME
S SRSREC=0,SRTTIME=0
I $$GET1^DIQ(130,D0,.214,"I")'=1 Q SRTTIME
I '$D(^SRF(D0,50)) Q SRTTIME
F S SRSREC=$O(^SRF(D0,50,SRSREC)) Q:'SRSREC D
.S SRCST=$$GET1^DIQ(130.213,SRSREC_","_D0_",",.01,"I"),SRCET=$$GET1^DIQ(130.213,SRSREC_","_D0_",",1,"I")
.D CALC
Q SRTTIME
CALC ; calculate minutes between start and end times
N SRETH,SRDHRS,SRSHR,SREHR,SRSMN,SREMN,SRSTH,X1,X2,Y,%H
S X1=SRCST,X2=0 D C^%DTC S SRSTH=%H
S X1=SRCET,X2=0 D C^%DTC S SRETH=%H
S SRDHRS=(SRETH-SRSTH)*24
S SRSHR=$E(($P(SRCST_"0",".",2)),1,2)
S SREHR=$E(($P(SRCET_"0",".",2)),1,2)
I SREHR<SRSHR S SREHR=SREHR+24,SRDHRS=SRDHRS-24
S SRSMN=$E(($P(SRCST_"00",".",2)),3,4)
S SREMN=$E(($P(SRCET_"00",".",2)),3,4)
I SREMN<SRSMN S SREMN=SREMN+60,SREHR=SREHR-1
S Y=(SRDHRS*60)+((SREHR-SRSHR)*60)+(SREMN-SRSMN)
S SRTTIME=SRTTIME+Y
Q
ANESTIME(SRDFN,SRFDATE,SRTDATE) ; API to return multiple anesthesia records and times
N SRCASE,SRREC,SRCNT,SRNON,SRX,SRDATE,SRRES,SRSC,SRCV,SRQO,SRIR,SREC,SRMST,SRHNC,SRAO,SRSREC,SRCST,SRCET,SRTTIME,SR,SRDIAG,SRSHAD
S (SRREC,SRCNT,SRRES)=0
I '$D(SRDFN)!'$D(SRFDATE) Q -1
I '$D(SRTDATE) S SRTDATE=SRFDATE
I '$D(^SRF("B",SRDFN)) Q 0
S SRFDATE=$P(SRFDATE,"."),SRTDATE=$P(SRTDATE,".")
F S SRREC=$O(^SRF("B",SRDFN,SRREC)) Q:'SRREC S SRCNT=SRCNT+1,SRCASE(SRCNT)=SRREC
S SRREC=0
F S SRREC=$O(SRCASE(SRREC)) Q:'SRREC D
.S SRCASE=SRCASE(SRREC)
.S SRNON=$S($P($G(^SRF(SRCASE,"NON")),"^")="Y":1,1:0)
.I 'SRNON S SRX=$G(^SRF(SRCASE,.2)),SRDATE=$P(SRX,"^",10)
.I SRNON S SRX=$G(^SRF(SRCASE,"NON")),SRDATE=$P(SRX,"^",4)
.S SRDATE=$P(SRDATE,".")
.I (SRDATE<SRFDATE)!(SRDATE>SRTDATE) K SRCASE(SRREC) Q
S SRREC=0
F S SRREC=$O(SRCASE(SRREC)) Q:'SRREC D
.S SRCASE=SRCASE(SRREC)
.I $$GET1^DIQ(130,SRCASE,.214,"I")'=1 S SRRES=-2 Q
.S SRDIAG=$P($G(^SRO(136,SRCASE,0)),"^",3)
.I 'SRDIAG S SRDIAG=$P($G(^SRF(SRCASE,34)),"^",2)
.S (SRAO,SREC,SRHNC,SRIR,SRMST,SRSHAD)=0
.S SR(0)=$G(^SRF(SRCASE,0))
.S SRSC=$P(SR(0),"^",16),SRAO=$P(SR(0),"^",17),SRIR=$P(SR(0),"^",18),SREC=$P(SR(0),"^",19),SRMST=$P(SR(0),"^",22),SRHNC=$P(SR(0),"^",23),SRCV=$P(SR(0),"^",24),SRSHAD=$P(SR(0),"^",25)
.I '$D(^SRF(SRCASE,50)) S:SRRES'=1 SRRES=-2 Q
.S SRRES=1,SRREC=0
.F S SRREC=$O(^SRF(SRCASE,50,SRREC)) Q:(SRREC="B")!(SRREC="") D
..S SRCST=$$GET1^DIQ(130.213,SRREC_","_SRCASE_",",.01,"I"),SRCET=$$GET1^DIQ(130.213,SRREC_","_SRCASE_",",1,"I")
..I 'SRCET K ^TMP("SRANES",$J,SRCASE) S SRRES=-2,SRREC="" Q
..S SRTTIME=0 D CALC
..S ^TMP("SRANES",$J,SRCASE,SRCST,SRCET)=SRDFN_"^"_SRTTIME_"^"_SRDIAG_"^"_SRSC_"^"_SRCV_"^"_SRAO_"^"_SRIR_"^"_SREC_"^"_SRMST_"^"_SRHNC_"^"_SRSHAD
Q SRRES