| 1 | C0QERTIM        ; Time from admission to leaving a hospital location ;
 | 
|---|
| 2 |         ;;0.1;C0Q;;;Build 26
 | 
|---|
| 3 | EN      ;Get Location
 | 
|---|
| 4 |         S DIC=42,DIC(0)="AEMQ" D ^DIC I Y<1 G EXIT
 | 
|---|
| 5 |         S LOCATION=+Y
 | 
|---|
| 6 |         ;Start date
 | 
|---|
| 7 |         S %DT="AE",%DT("A")="Start DATE: " D ^%DT G:Y=-1 EXIT S START=Y
 | 
|---|
| 8 |         ;End date
 | 
|---|
| 9 |         S %DT="AE",%DT("A")="Stop DATE: " D ^%DT G:Y=-1 EXIT S STOP=Y
 | 
|---|
| 10 |         ;select device:
 | 
|---|
| 11 |         S %ZIS="Q" D ^%ZIS G EXIT:POP
 | 
|---|
| 12 |         I $D(IO("Q")) D  G EXIT
 | 
|---|
| 13 |         . S ZTRTN="DQ^C0QERTIM",ZTDESC="Time from admission to leaving a hospital location"
 | 
|---|
| 14 |         . S ZTSAVE("LOCATION")="",ZTSAVE("START")="",ZTSAVE("STOP")=""
 | 
|---|
| 15 |         . D ^%ZTLOAD D HOME^%ZIS K IO("Q")
 | 
|---|
| 16 |         . Q
 | 
|---|
| 17 | DQ      ; Get down to business
 | 
|---|
| 18 |         ;sort on admit date/time in file 45, screen on LOSING WARD in sub-file 535.
 | 
|---|
| 19 |         ;^DGPT("AF",date/time,DA)
 | 
|---|
| 20 |         S PATCOUNT=0,ADMITIME=START
 | 
|---|
| 21 |         F  S ADMITIME=$O(^DGPT("AF",ADMITIME)) Q:ADMITIME'>0  D
 | 
|---|
| 22 |         . Q:ADMITIME>STOP
 | 
|---|
| 23 |         . ;FMIN from ADMISSION DATE piece 2
 | 
|---|
| 24 |         . S X=ADMITIME D H^%DTC S FMINDAY=%H,FMINSEC=%T
 | 
|---|
| 25 |         . S D0="" F  S D0=$O(^DGPT("AF",ADMITIME,D0)) Q:D0'>0  D
 | 
|---|
| 26 |         . . S D1=0 F  S D1=$O(^DGPT(D0,535,D1)) Q:D1'>0  D
 | 
|---|
| 27 |         . . . ;Losing ward in piece 6 of ^DGPT(D0,535,D1,0)
 | 
|---|
| 28 |         . . . Q:$P($G(^DGPT(D0,535,D1,0)),U,6)'=LOCATION
 | 
|---|
| 29 |         . . . ;FMOUT from MOVEMENT DATE on leaving in piece 10
 | 
|---|
| 30 |         . . . S X=$P($G(^DGPT(D0,535,D1,0)),U,10) D H^%DTC S FMOUTDAY=%H,FMOUTSEC=%T
 | 
|---|
| 31 |         . . . I FMINDAY=FMOUTDAY S MINUTES=$P((FMOUTSEC-FMINSEC)/60,".")
 | 
|---|
| 32 |         . . . I FMINDAY'=FMOUTDAY D
 | 
|---|
| 33 |         . . . . S DIFFDAY=FMOUTDAY-FMINDAY
 | 
|---|
| 34 |         . . . . S MINUTES=1440*(DIFFDAY-1)+$P((FMOUTSEC+86400-FMINSEC)/60,".")
 | 
|---|
| 35 |         . . . . Q
 | 
|---|
| 36 |         . . . S PATCOUNT=PATCOUNT+1
 | 
|---|
| 37 |         . . . S ^TMP($J,"PATIENTS",$P(^DPT(+^DGPT(D0,0),0),U))=MINUTES
 | 
|---|
| 38 |         . . . S ^TMP($J,"MINUTES",MINUTES)=1+$G(^TMP($J,"MINUTES",MINUTES))
 | 
|---|
| 39 |         . . . Q
 | 
|---|
| 40 |         . . Q
 | 
|---|
| 41 |         . Q
 | 
|---|
| 42 |         U IO W @IOF
 | 
|---|
| 43 |         ;list median time from Admission to leaving hospital LOCATION
 | 
|---|
| 44 |         S MID=$P(PATCOUNT/2,"."),SUM=0
 | 
|---|
| 45 |         S MEDIAN=0 F  S MEDIAN=$O(^TMP($J,"MINUTES",MEDIAN)) Q:MEDIAN'>0  D
 | 
|---|
| 46 |         . S SUM=SUM+^TMP($J,"MINUTES",MEDIAN) Q:SUM>MID
 | 
|---|
| 47 |         . Q
 | 
|---|
| 48 |         W "The median time spent in ",$P(^DIC(42,LOCATION,0),U)," is ",MEDIAN," minutes.",!
 | 
|---|
| 49 |         W !,"Patient",?40,"Minutes in ",$P(^DIC(42,LOCATION,0),U)
 | 
|---|
| 50 |         ;list patient and time from admission to leaving the location
 | 
|---|
| 51 |         S PATIENT="" F  S PATIENT=$O(^TMP($J,"PATIENTS",PATIENT)) Q:PATIENT=""  D
 | 
|---|
| 52 |         . W !,PATIENT,?40," ",^TMP($J,"PATIENTS",PATIENT)
 | 
|---|
| 53 | EXIT    ; DO CLEANUP
 | 
|---|
| 54 |         S:$D(ZTQUEUED) ZTREQ="@"
 | 
|---|
| 55 |         K DIC,START,STOP,LOCATION,PATCOUNT,ADMITIME,FMINDAY,FMINSEC,FMOUTDAY,FMOUTSEC
 | 
|---|
| 56 |         K POP,D0,D1,DIFFDAY,MINUTES,MID,MEDIAN,PATIENT,^TMP($J)
 | 
|---|
| 57 |         Q
 | 
|---|
| 58 |         
 | 
|---|