DGOIL ;ALB/AAS - INPATIENT LIST ; 28-SEPT-90
;;5.3;Registration;**162,279,498,1015**;Aug 13, 1993;Build 21
;
% ; -- start here
D HOME^%ZIS W @IOF
W !!,?32,"Inpatient List",!!!
;
WARD ; -- by ward or by name
S DIR("B")="WARD",DIR(0)="S^1:WARD;0:NAME",DIR("A")="SORT BY" D ^DIR K DIR G:$D(DIRUT) END1 S DGWARD=+Y
;
FIRST ; -- get range of the output
S DIR("B")="FIRST",DIR(0)="F^1:30",DIR("A")="START WITH "_$S(DGWARD:"WARD LOCATION",1:"NAME")
S DIR("?",1)="Enter all or part of a ward name. If the FROM and TO wards are pure"
S DIR("?")="numbers (no alphas), no wards with an alpha suffix will appear on the sort."
D ^DIR K DIR G:$D(DIRUT) END1
S DGBEG=$$CAP(Y)
S:DGBEG="FIRST" DGBEG=""
;
S DIR("B")="LAST",DIR(0)="F^1:30",DIR("A")="GO TO "_$S(DGWARD:"WARD LOCATION",1:"NAME") D ^DIR K DIR G:$D(DIRUT) END1
S DGEND=$$CAP(Y)
S:DGEND="LAST" DGEND="ZZZZZZZ"
;
I DGBEG'=DGEND,DGBEG]DGEND W !!,"End must be after beginning",! G FIRST
; Ask Division (sets VAUTD)
I '$$ASKDIV^DGUTL() G END1
;
BRKOUT ; -- with ward breakout
W !! S DIR("B")="YES",DIR(0)="Y",DIR("A")="PRINT WITH WARD BREAKOUT" D ^DIR K DIR G:$D(DIRUT) END1 S DGBRK=+Y
;
DRG ; -- with DGR breakout
S DGDRG=0 I DGBRK S DIR("B")="YES",DIR(0)="Y",DIR("A")="PRINT WITH DRG BREAKOUT" D ^DIR G:$D(DIRUT) END1 S DGDRG=+Y
;
DEV W:DGDRG !,*7,"This output requires 132 column output"
S DGPGM="DQ^DGOIL",DGVAR="DGWARD^DGBEG^DGEND^DGBRK^DGDRG^VAUTD#"
D ZIS^DGUTQ G:POP END U IO
;
DQ ; -- entry point to start processing
K ^UTILITY($J)
S (POP,DGPG)=0 D NOW^%DTC S Y=$E(%,1,12) D D^DIQ S DGDATE=Y
S AFFIL=$S($D(^DG(43,1,"GL")):$P(^("GL"),"^",4),1:0)
S:DGBEG]""&(+DGBEG'=DGBEG) DGBEG=$E(DGBEG,1,($L(DGBEG)-1))_$C($A($E(DGBEG,$L(DGBEG)))-1)_"~"
S:DGBEG]""&(+DGBEG=DGBEG) DGBEG=DGBEG-.0000001
;
SORT ; -- sort inpatients, store in ^utility($j,
S W=$S(DGWARD:DGBEG,1:"") ;if sorting by ward start with DGBEG
F I=0:0 Q:W=DGEND S W=$O(^DPT("CN",W)) Q:W']""!(DGWARD&(W]DGEND)) S DFN="" F J=0:0 S DFN=$O(^DPT("CN",W,DFN)) Q:'DFN S DGPM=^(DFN) D
.I 'VAUTD S DGWD=$O(^DIC(42,"B",W,0)) Q:'DGWD S DGWD=$S('$D(^DIC(42,DGWD,0)):0,+$P(^(0),U,11):$P(^(0),U,11),1:0) Q:'$D(VAUTD(DGWD))
.D SETU
;
D HDR1 I '$D(^UTILITY($J)) W !,"No Matches Found" G END
BYWARD ; -- if by ward get entries to print
I DGWARD S W="" F I=0:0 S W=$O(^UTILITY($J,W)) Q:W']""!($D(DUOUT)) D HDR:$D(N) S N="" F J=0:0 S N=$O(^UTILITY($J,W,N)) Q:N']""!($D(DUOUT)) S DFN="" F K=0:0 S DFN=$O(^UTILITY($J,W,N,DFN)) Q:'DFN!($D(DUOUT)) S DGPM=^(DFN) D ^DGOIL1
;
BYNAME ; -- if by name get entries to print
I 'DGWARD S N=DGBEG F I=0:0 S N=$O(^UTILITY($J,N)) Q:N']""!(N]DGEND)!($D(DUOUT)) S W="" F J=0:0 S W=$O(^UTILITY($J,N,W)) Q:W']""!($D(DUOUT)) S DFN="" F K=0:0 S DFN=$O(^UTILITY($J,N,W,DFN)) Q:'DFN!($D(DUOUT)) S DGPM=^(DFN) D ^DGOIL1
G END
;
SETU ; -- set utility($j,$s(sort by ward:ward,1:name),$s(sort by ward:name,1:ward),dfn)=pointer to dgpm
Q:'$D(^DPT(DFN,0))
S NAME=$P(^DPT(DFN,0),"^")
S ^UTILITY($J,$S(DGWARD:W,1:NAME),$S(DGWARD:NAME,1:W),DFN)=DGPM
Q
;
HDR D LEGEND Q:$D(DUOUT)
HDR1 S DGPG=DGPG+1 W @IOF,"INPATIENT LIST",?(IOM-29) W DGDATE," PAGE: ",DGPG
W !,"Patient name",?19,"PT ID",?27,"Admit/Tran Ward",?51,"LOS AA Pass UA ASIH" I DGDRG W ?76,"DRG",?83,"Avg",?88,$S('AFFIL:"non-",AFFIL=2:"Int-",1:"Affil"),?96,"L/H",?104,"local",?112,"Days to",?120,"% in ",?128,"flag"
W !?30,"date",?38,"location" I DGDRG W ?83,"LOS",?88,$S(AFFIL'=1:"Affil",1:""),?96,"Trim",?104,"L/H",?112,"Trim",?120,"Trim"
I DGDRG W !?104,"Trim",?112,"Nat/Loc",?120,"Nat/Loc"
W ! F I=1:1:IOM W "="
I $D(^UTILITY($J)),DGWARD W !,?8,"WARD LOCATION: ",$S('$D(N):$O(^UTILITY($J,"")),$D(W):W,1:"") D
.S I=0 F S I=$O(VAUTD(I)) Q:'I W ?45,"DIVISION(S): ",VAUTD(I),!
Q
END K ^UTILITY($J) D:'$D(DUOUT)&('POP)&('$D(DIRUT)) LEGEND Q:$D(ZTQUEUED)
END1 K %,I,J,K,L,N,M,W,NAME,X,X1,X2,X3,Y,Z,AFFIL,DFN,VA,DGBEG,DGBRK,DGDATE,DGDRG,DGEND,DGPM,DGPGM,DGVAR,DGWARD,DIR,DUOUT,DGOUT,DGL,DRG,DRGCAL,DGPG,DIRUT,VAIN,DGASIH,ADM,DIS,VAUTD
D ^%ZISC Q
;
LEGEND ; -legend for flag column
F L=1:1 Q:IOSL<($Y+6) W !
W !,"'+' Before the Patient name indicates patient is currently ASIH, '!' Indicates patient chose not to be in Facility Directory"
W:DGDRG&($E(IOST,1,2)'="C-") !,"LEGEND: '####' - Stay exceeds high trim, '**' - Stay exceeds 69% of high trim, '@' Stay exceeds 49% of high trim"
I $E(IOST,1,2)="C-" R !,"Press '^' to QUIT or Return to Continue",Z:DTIME I '$T!(Z["^") S DUOUT=1 Q
Q
CAP(X) ; -convert lower case input to upper case.
Q $TR(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
;
DGOIL ;ALB/AAS - INPATIENT LIST ; 28-SEPT-90
+1 ;;5.3;Registration;**162,279,498,1015**;Aug 13, 1993;Build 21
+2 ;
% ; -- start here
+1 DO HOME^%ZIS
WRITE @IOF
+2 WRITE !!,?32,"Inpatient List",!!!
+3 ;
WARD ; -- by ward or by name
+1 SET DIR("B")="WARD"
SET DIR(0)="S^1:WARD;0:NAME"
SET DIR("A")="SORT BY"
DO ^DIR
KILL DIR
IF $DATA(DIRUT)
GOTO END1
SET DGWARD=+Y
+2 ;
FIRST ; -- get range of the output
+1 SET DIR("B")="FIRST"
SET DIR(0)="F^1:30"
SET DIR("A")="START WITH "_$SELECT(DGWARD:"WARD LOCATION",1:"NAME")
+2 SET DIR("?",1)="Enter all or part of a ward name. If the FROM and TO wards are pure"
+3 SET DIR("?")="numbers (no alphas), no wards with an alpha suffix will appear on the sort."
+4 DO ^DIR
KILL DIR
IF $DATA(DIRUT)
GOTO END1
+5 SET DGBEG=$$CAP(Y)
+6 IF DGBEG="FIRST"
SET DGBEG=""
+7 ;
+8 SET DIR("B")="LAST"
SET DIR(0)="F^1:30"
SET DIR("A")="GO TO "_$SELECT(DGWARD:"WARD LOCATION",1:"NAME")
DO ^DIR
KILL DIR
IF $DATA(DIRUT)
GOTO END1
+9 SET DGEND=$$CAP(Y)
+10 IF DGEND="LAST"
SET DGEND="ZZZZZZZ"
+11 ;
+12 IF DGBEG'=DGEND
IF DGBEG]DGEND
WRITE !!,"End must be after beginning",!
GOTO FIRST
+13 ; Ask Division (sets VAUTD)
+14 IF '$$ASKDIV^DGUTL()
GOTO END1
+15 ;
BRKOUT ; -- with ward breakout
+1 WRITE !!
SET DIR("B")="YES"
SET DIR(0)="Y"
SET DIR("A")="PRINT WITH WARD BREAKOUT"
DO ^DIR
KILL DIR
IF $DATA(DIRUT)
GOTO END1
SET DGBRK=+Y
+2 ;
DRG ; -- with DGR breakout
+1 SET DGDRG=0
IF DGBRK
SET DIR("B")="YES"
SET DIR(0)="Y"
SET DIR("A")="PRINT WITH DRG BREAKOUT"
DO ^DIR
IF $DATA(DIRUT)
GOTO END1
SET DGDRG=+Y
+2 ;
DEV IF DGDRG
WRITE !,*7,"This output requires 132 column output"
+1 SET DGPGM="DQ^DGOIL"
SET DGVAR="DGWARD^DGBEG^DGEND^DGBRK^DGDRG^VAUTD#"
+2 DO ZIS^DGUTQ
IF POP
GOTO END
USE IO
+3 ;
DQ ; -- entry point to start processing
+1 KILL ^UTILITY($JOB)
+2 SET (POP,DGPG)=0
DO NOW^%DTC
SET Y=$EXTRACT(%,1,12)
DO D^DIQ
SET DGDATE=Y
+3 SET AFFIL=$SELECT($DATA(^DG(43,1,"GL")):$PIECE(^("GL"),"^",4),1:0)
+4 IF DGBEG]""&(+DGBEG'=DGBEG)
SET DGBEG=$EXTRACT(DGBEG,1,($LENGTH(DGBEG)-1))_$CHAR($ASCII($EXTRACT(DGBEG,$LENGTH(DGBEG)))-1)_"~"
+5 IF DGBEG]""&(+DGBEG=DGBEG)
SET DGBEG=DGBEG-.0000001
+6 ;
SORT ; -- sort inpatients, store in ^utility($j,
+1 ;if sorting by ward start with DGBEG
SET W=$SELECT(DGWARD:DGBEG,1:"")
+2 FOR I=0:0
IF W=DGEND
QUIT
SET W=$ORDER(^DPT("CN",W))
IF W']""!(DGWARD&(W]DGEND))
QUIT
SET DFN=""
FOR J=0:0
SET DFN=$ORDER(^DPT("CN",W,DFN))
IF 'DFN
QUIT
SET DGPM=^(DFN)
Begin DoDot:1
+3 IF 'VAUTD
SET DGWD=$ORDER(^DIC(42,"B",W,0))
IF 'DGWD
QUIT
SET DGWD=$SELECT('$DATA(^DIC(42,DGWD,0)):0,+$PIECE(^(0),U,11):$PIECE(^(0),U,11),1:0)
IF '$DATA(VAUTD(DGWD))
QUIT
+4 DO SETU
End DoDot:1
+5 ;
+6 DO HDR1
IF '$DATA(^UTILITY($JOB))
WRITE !,"No Matches Found"
GOTO END
BYWARD ; -- if by ward get entries to print
+1 IF DGWARD
SET W=""
FOR I=0:0
SET W=$ORDER(^UTILITY($JOB,W))
IF W']""!($DATA(DUOUT))
QUIT
IF $DATA(N)
DO HDR
SET N=""
FOR J=0:0
SET N=$ORDER(^UTILITY($JOB,W,N))
IF N']""!($DATA(DUOUT))
QUIT
SET DFN=""
FOR K=0:0
SET DFN=$ORDER(^UTILITY($JOB,W,N,DFN))
IF 'DFN!($DATA(DUOUT))
QUIT
SET DGPM=^(DFN)
DO ^DGOIL1
+2 ;
BYNAME ; -- if by name get entries to print
+1 IF 'DGWARD
SET N=DGBEG
FOR I=0:0
SET N=$ORDER(^UTILITY($JOB,N))
IF N']""!(N]DGEND)!($DATA(DUOUT))
QUIT
SET W=""
FOR J=0:0
SET W=$ORDER(^UTILITY($JOB,N,W))
IF W']""!($DATA(DUOUT))
QUIT
SET DFN=""
FOR K=0:0
SET DFN=$ORDER(^UTILITY($JOB,N,W,DFN))
IF 'DFN!($DATA(DUOUT))
QUIT
SET DGPM=^(DFN)
DO ^DGOIL1
+2 GOTO END
+3 ;
SETU ; -- set utility($j,$s(sort by ward:ward,1:name),$s(sort by ward:name,1:ward),dfn)=pointer to dgpm
+1 IF '$DATA(^DPT(DFN,0))
QUIT
+2 SET NAME=$PIECE(^DPT(DFN,0),"^")
+3 SET ^UTILITY($JOB,$SELECT(DGWARD:W,1:NAME),$SELECT(DGWARD:NAME,1:W),DFN)=DGPM
+4 QUIT
+5 ;
HDR DO LEGEND
IF $DATA(DUOUT)
QUIT
HDR1 SET DGPG=DGPG+1
WRITE @IOF,"INPATIENT LIST",?(IOM-29)
WRITE DGDATE," PAGE: ",DGPG
+1 WRITE !,"Patient name",?19,"PT ID",?27,"Admit/Tran Ward",?51,"LOS AA Pass UA ASIH"
IF DGDRG
WRITE ?76,"DRG",?83,"Avg",?88,$SELECT('AFFIL:"non-",AFFIL=2:"Int-",1:"Affil"),?96,"L/H",?104,"local",?112,"Days to",?120,"% in ",?128,"flag"
+2 WRITE !?30,"date",?38,"location"
IF DGDRG
WRITE ?83,"LOS",?88,$SELECT(AFFIL'=1:"Affil",1:""),?96,"Trim",?104,"L/H",?112,"Trim",?120,"Trim"
+3 IF DGDRG
WRITE !?104,"Trim",?112,"Nat/Loc",?120,"Nat/Loc"
+4 WRITE !
FOR I=1:1:IOM
WRITE "="
+5 IF $DATA(^UTILITY($JOB))
IF DGWARD
WRITE !,?8,"WARD LOCATION: ",$SELECT('$DATA(N):$ORDER(^UTILITY($JOB,"")),$DATA(W):W,1:"")
Begin DoDot:1
+6 SET I=0
FOR
SET I=$ORDER(VAUTD(I))
IF 'I
QUIT
WRITE ?45,"DIVISION(S): ",VAUTD(I),!
End DoDot:1
+7 QUIT
END KILL ^UTILITY($JOB)
IF '$DATA(DUOUT)&('POP)&('$DATA(DIRUT))
DO LEGEND
IF $DATA(ZTQUEUED)
QUIT
END1 KILL %,I,J,K,L,N,M,W,NAME,X,X1,X2,X3,Y,Z,AFFIL,DFN,VA,DGBEG,DGBRK,DGDATE,DGDRG,DGEND,DGPM,DGPGM,DGVAR,DGWARD,DIR,DUOUT,DGOUT,DGL,DRG,DRGCAL,DGPG,DIRUT,VAIN,DGASIH,ADM,DIS,VAUTD
+1 DO ^%ZISC
QUIT
+2 ;
LEGEND ; -legend for flag column
+1 FOR L=1:1
IF IOSL<($Y+6)
QUIT
WRITE !
+2 WRITE !,"'+' Before the Patient name indicates patient is currently ASIH, '!' Indicates patient chose not to be in Facility Directory"
+3 IF DGDRG&($EXTRACT(IOST,1,2)'="C-")
WRITE !,"LEGEND: '####' - Stay exceeds high trim, '**' - Stay exceeds 69% of high trim, '@' Stay exceeds 49% of high trim"
+4 IF $EXTRACT(IOST,1,2)="C-"
READ !,"Press '^' to QUIT or Return to Continue",Z:DTIME
IF '$TEST!(Z["^")
SET DUOUT=1
QUIT
+5 QUIT
CAP(X) ; -convert lower case input to upper case.
+1 QUIT $TRANSLATE(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
+2 ;