DGPPRP3 ;LIB/MKN - PRESUMPTIVE PSYCHOSIS PATIENT PROFILES;08/02/2019
;;5.3;Registration;**977**August 02, 2019;;Build 177
;
;IA's
; 664 Sup DIVISION^VAUTOMA
; 10003 Sup ^%DT
; 10004 Sup ^DIQ: $$GET1, GETS
; 10026 Sup ^DIR
; 10063 Sup ^%ZTLOAD
; 10086 Sup ^%ZIS: HOME
; 10089 Sup ^%ZISC
; 10103 Sup ^XLFDT: $$FMTE, $$FMADD
;
Q
;
EN ;entry point from Menu Option: PRESUMPTIVE PSYCHOSIS PATIENT PROFILE REPORT
N DFN,DGCAT,DGDASH,DGDIV,DGDIVSEL,DGRET,DGDT,DGDTDEF,DGDTF,DGDTFRM,DGDTFSEL,DGDTSEL,DGDTT,DGDTTO,DGDTTSEL,DGRTYP
N DGRES,DGSAVIOM,DGSELDIV,DGSET,DGTEMP,DGYN,IENDFN,POP,VAUTD,Y,ZTDESC,ZTRTN,ZTSAVE,ZTSK,%ZIS
S DGTEMP=$NA(^TMP("DGPPRP3",$J)) K @DGTEMP
;DG*5.3*977 PP
;B9S3
W @IOF
W !,"PRESUMPTIVE PSYCHOSIS PATIENT PROFILE REPORT"
;PRESUMPTIVE PSYCHOSIS PATIENT PROFILE REPORT help text
D HELP(1)
W !!,*7,!,"THIS REPORT REQUIRES 132 COLUMN OUTPUT"
ASKDIV ;Select Division
Q:'$$SELDIV^DGPPRP1(.DGDIVSEL)
;
S DGDTDEF=$$GETDEFD^DGPPRP1() I DGDTDEF="" W !!,"There is no record of patch DG*5.3*977 being installed!",!! Q
S DGDTSEL=$$DTFRMTO^DGPPRP1("Select dates") ;G:'DGDTSEL ASKDIV
Q:DGDTSEL=0
S DGDTFSEL=$P(DGDTSEL,U,2),DGDTTSEL=$P(DGDTSEL,U,3)
; Allow queueing
K IOP,IO("Q") S %ZIS="MQ",%ZIS("B")="" S POP=0 D ^%ZIS Q:POP
I $D(IO("Q")) D Q ;Queued report settings
.S ZTDESC="Presumptive Psychosis Report",ZTRTN="DQ^DGPPRP3"
.S ZTSAVE("DGRTYP")="",ZTSAVE("DGDTFRMT")="",ZTSAVE("DGDTFRM")="",ZTSAVE("ZTREQ")="@",ZTSAVE("DGDTTO")=""
.D ^%ZTLOAD,HOME^%ZIS
.I $G(ZTSK) W !!,"Report compilation has started with task# ",ZTSK,".",! S DIR(0)="E" D ^DIR K DIR
DQ ;
S DGDT=$$FMADD^XLFDT(DGDTFSEL,-1)_".2399" F S DGDT=$O(^DGPP(33.1,"AC",DGDT)) Q:DGDT=""!(DGDT<DGDTFSEL&(DGDT>DGDTTSEL)) D
. S DGCAT="" F S DGCAT=$O(^DGPP(33.1,"AC",DGDT,DGCAT)) Q:DGCAT="" D
.. S IENDFN=0 F S IENDFN=$O(^DGPP(33.1,"AC",DGDT,DGCAT,IENDFN)) Q:'IENDFN D
... S DFN=$P($G(^DGPP(33.1,IENDFN,0)),U) Q:'DFN
... K DGRET D CHKTREAT^DGPPRP1(.DGRET,DFN,DGDTFSEL,DGDTTSEL,.DGDIVSEL) Q:'$D(DGRET)
... S DGDIV="" F S DGDIV=$O(DGRET(DGDIV)) Q:DGDIV="" D DQ1
S DGDASH="",$P(DGDASH,"-",133)=""
D PRINT,OUT
I $E(IOST,1,2)="C-" R !!?8,"End of the Report...Press Enter to Continue",X:DTIME W @IOF
Q
;
DQ1 ;
N DGDT1
S DGDT1="" F S DGDT1=$O(DGRET(DGDIV,DGDT1)) Q:DGDT1="" D
. I DGDIVSEL=1 D SET Q ;If all Divisions selected
. I $D(DGDIVSEL(DGDIV)) D SET ;If selected Division match
Q
;
SET ;
N DGDISCH,DGDISCTY,DGENCAT,DGFAC,DGIEN2711,DGIEN2715,DFNS,DGN,DGOUT,DGOUTP,DGPATNA,DGPE,DGSERVDT,IEN3216,IENS3216
S DFNS=DFN_"," ;,DGPATNA=$$GET1^DIQ(2,DFNS,.01)
S IEN3216=$O(^DPT(DFN,.3216,"@"),-1),(DGDISCTY,DGSERVDT)=""
K DGOUT I IEN3216 D GETS^DIQ(2.3216,IEN3216_","_DFNS,".02;.06","IE","DGOUT") D
. S IENS3216=IEN3216_","_DFNS,DGSERVDT=$G(DGOUT(2.3216,IENS3216,.02,"I")) S:DGSERVDT?1.N DGSERVDT=$$FMTE^XLFDT(DGSERVDT,"5PZ")
. S DGDISCTY=$G(DGOUT(2.3216,IENS3216,.06,"E"))
D GETS^DIQ(2,DFNS,".01;.0905;.323;.361","","DGOUTP")
S @DGTEMP@(DGDIV,DFN)=$G(DGOUTP(2,DFNS,.01))_U_$G(DGOUTP(2,DFNS,.0905))_U_DGSERVDT_U_DGDISCTY
S @DGTEMP@(DGDIV,DFN)=@DGTEMP@(DGDIV,DFN)_U_$G(DGOUTP(2,DFNS,.323))_U_$G(DGOUTP(2,DFNS,.361))_U
S DGIEN2711=$O(^DGEN(27.11,"C",DFN,"")),DGENCAT=""
I DGIEN2711 S DGIEN2715=$$GET1^DIQ(27.11,DGIEN2711_",",.04,"I"),DGENCAT=$$GET1^DIQ(27.15,DGIEN2715_",",.02)
S @DGTEMP@(DGDIV,DFN)=@DGTEMP@(DGDIV,DFN)_DGENCAT
Q
;
PRINT ;Print out results
N DGI,DGPATNA,DGX,DGY,PAGE,EXIT,DGHDRYN
W @IOF I '$D(@DGTEMP) W !!?10," << None found >> ",!! G OUT
S (EXIT,PAGE,DGHDRYN)=0
S DGDIV="" F S DGDIV=$O(@DGTEMP@(DGDIV)) Q:DGDIV=""!(EXIT) D
.S DGHDRYN=1
.S DFN="" F S DFN=$O(@DGTEMP@(DGDIV,DFN)) Q:DFN=""!(EXIT) S DGX=@DGTEMP@(DGDIV,DFN) D PRINT2
.Q
W !
I $E(IOST,1,2)="C-",'EXIT R !!?8,"End of the Report...Press Enter to Continue",X:DTIME W @IOF
Q
;
PRINT2 ;
I $Y+5>IOSL!DGHDRYN,PAGE>0 I ($E(IOST,1,2)="C-")&(IO=IO(0)) W ! S DIR(0)="E" D ^DIR K DIR D
.I $D(DTOUT)!($D(DUOUT)) S EXIT=1 Q
.W @IOF D HDR S DGHDRYN=0
.Q
Q:EXIT
I DGHDRYN D HDR S DGHDRYN=0
W !,$E($P(DGX,U),1,20),?22,$P(DGX,U,2),?29,$$FMTE^XLFDT($P(DGX,U,3)),?43,$E($P(DGX,U,4),1,14),?58,$E($P(DGX,U,5),1,20),?81,$E($P(DGX,U,6),1,19),?103,$E($P(DGX,U,7),1,29)
Q
;
HDR ; Print page header
N DGX
S PAGE=PAGE+1
S DGX="Presumptive Psychosis Patient Profile",DGX=$J(" ",132-$L(DGX)\2)_DGX
W DGX,?120,"Page: ",PAGE
S DGX="Division: "_$$GET1^DIQ(40.8,DGDIV_",",.01),DGX=$J(" ",132-$L(DGX)\2)_DGX W !,DGX
S DGX="Date Range: "_$$FMTE^XLFDT(DGDTFSEL,"5PZ")_" to "_$$FMTE^XLFDT(DGDTTSEL,"5PZ"),DGX=$J(" ",132-$L(DGX)\2)_DGX W !,DGX
W ?104,"Date Printed: ",$$FMTE^XLFDT($P($$NOW^XLFDT(),"."))
W !,DGDASH,!,"PATIENT NAME",?22,"PID",?29," SERVICE",?43,"DISCHARGE",?58,"PERIOD OF SERVICE",?81,"PRIMARY ELIGIBILITY"
W ?103,"ENROLLMENT CAT",!?27,"SEPARATION DATE",?43," TYPE",!,DGDASH
;
Q
;
DTFRMTO(PROMPT) ;Get from and to dates
N %DT,Y,X,DTOUT,OUT,DIRUT,DUOUT,STATUS,STDT,STATUS
;INPUT ; PROMPT - Message to display prior to prompting for dates
;OUTPUT: 1^BEGDT^ENDDT - Data found
; 0 - User up arrowed or timed out
;If they want to show first available date for that set of Status, use this sub
INDT ;
S OUT=0
S DIR(0)="DO^"_DT_":"_DT_":EX"
S %DT="AEX",%DT("A")="From date: " ;Enter Beginning Date: "
W ! D ^%DT K %DT
I Y<0 W !!,"No Date selected, quitting. ",!! Q OUT ;Quit if user time out or didn't enter valid date
I Y>DT W !!,"Future dates are not allowed, please re-enter" K Y,%DT G INDT ;Future dates not allowed
S DGDTFRM=+Y,%DT="AEX",%DT("A")="To date: ",%DT("B")="T" ; Get end date, default is "TODAY"
D ^%DT K %DT
;Quit if user time out or didn't enter valid date
I Y<0 W !!,"No Date selected, quitting. ",!! Q OUT
S DGDTTO=+Y,OUT=1_U_DGDTFRM_U_DGDTTO
;Switch dates if Begin Date is more recent than End Date
S:DGDTFRM>DGDTTO OUT=1_U_DGDTTO_U_DGDTFRM
Q OUT
;
;DG*5.3*977 PP
;B9S3
HELP(DGSEL) ;
I DGSEL=1 D
. W !!,"This option generates a report that prints a list of all patients treated"
. W !,"under Presumptive Psychosis authority and who had an Outpatient Encounter"
. W !,"with the STATUS=CHECKED OUT for Clinic(s) associated with the selected"
. W !,"Division(s) within the user specified date range."
Q
;
OUT ; KILL RETURN ARRAY QUIT
D ^%ZISC
K @DGTEMP
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HDGPPRP3 6403 printed Oct 16, 2024@18:51:29 Page 2
DGPPRP3 ;LIB/MKN - PRESUMPTIVE PSYCHOSIS PATIENT PROFILES;08/02/2019
+1 ;;5.3;Registration;**977**August 02, 2019;;Build 177
+2 ;
+3 ;IA's
+4 ; 664 Sup DIVISION^VAUTOMA
+5 ; 10003 Sup ^%DT
+6 ; 10004 Sup ^DIQ: $$GET1, GETS
+7 ; 10026 Sup ^DIR
+8 ; 10063 Sup ^%ZTLOAD
+9 ; 10086 Sup ^%ZIS: HOME
+10 ; 10089 Sup ^%ZISC
+11 ; 10103 Sup ^XLFDT: $$FMTE, $$FMADD
+12 ;
+13 QUIT
+14 ;
EN ;entry point from Menu Option: PRESUMPTIVE PSYCHOSIS PATIENT PROFILE REPORT
+1 NEW DFN,DGCAT,DGDASH,DGDIV,DGDIVSEL,DGRET,DGDT,DGDTDEF,DGDTF,DGDTFRM,DGDTFSEL,DGDTSEL,DGDTT,DGDTTO,DGDTTSEL,DGRTYP
+2 NEW DGRES,DGSAVIOM,DGSELDIV,DGSET,DGTEMP,DGYN,IENDFN,POP,VAUTD,Y,ZTDESC,ZTRTN,ZTSAVE,ZTSK,%ZIS
+3 SET DGTEMP=$NAME(^TMP("DGPPRP3",$JOB))
KILL @DGTEMP
+4 ;DG*5.3*977 PP
+5 ;B9S3
+6 WRITE @IOF
+7 WRITE !,"PRESUMPTIVE PSYCHOSIS PATIENT PROFILE REPORT"
+8 ;PRESUMPTIVE PSYCHOSIS PATIENT PROFILE REPORT help text
+9 DO HELP(1)
+10 WRITE !!,*7,!,"THIS REPORT REQUIRES 132 COLUMN OUTPUT"
ASKDIV ;Select Division
+1 if '$$SELDIV^DGPPRP1(.DGDIVSEL)
QUIT
+2 ;
+3 SET DGDTDEF=$$GETDEFD^DGPPRP1()
IF DGDTDEF=""
WRITE !!,"There is no record of patch DG*5.3*977 being installed!",!!
QUIT
+4 ;G:'DGDTSEL ASKDIV
SET DGDTSEL=$$DTFRMTO^DGPPRP1("Select dates")
+5 if DGDTSEL=0
QUIT
+6 SET DGDTFSEL=$PIECE(DGDTSEL,U,2)
SET DGDTTSEL=$PIECE(DGDTSEL,U,3)
+7 ; Allow queueing
+8 KILL IOP,IO("Q")
SET %ZIS="MQ"
SET %ZIS("B")=""
SET POP=0
DO ^%ZIS
if POP
QUIT
+9 ;Queued report settings
IF $DATA(IO("Q"))
Begin DoDot:1
+10 SET ZTDESC="Presumptive Psychosis Report"
SET ZTRTN="DQ^DGPPRP3"
+11 SET ZTSAVE("DGRTYP")=""
SET ZTSAVE("DGDTFRMT")=""
SET ZTSAVE("DGDTFRM")=""
SET ZTSAVE("ZTREQ")="@"
SET ZTSAVE("DGDTTO")=""
+12 DO ^%ZTLOAD
DO HOME^%ZIS
+13 IF $GET(ZTSK)
WRITE !!,"Report compilation has started with task# ",ZTSK,".",!
SET DIR(0)="E"
DO ^DIR
KILL DIR
End DoDot:1
QUIT
DQ ;
+1 SET DGDT=$$FMADD^XLFDT(DGDTFSEL,-1)_".2399"
FOR
SET DGDT=$ORDER(^DGPP(33.1,"AC",DGDT))
if DGDT=""!(DGDT<DGDTFSEL&(DGDT>DGDTTSEL))
QUIT
Begin DoDot:1
+2 SET DGCAT=""
FOR
SET DGCAT=$ORDER(^DGPP(33.1,"AC",DGDT,DGCAT))
if DGCAT=""
QUIT
Begin DoDot:2
+3 SET IENDFN=0
FOR
SET IENDFN=$ORDER(^DGPP(33.1,"AC",DGDT,DGCAT,IENDFN))
if 'IENDFN
QUIT
Begin DoDot:3
+4 SET DFN=$PIECE($GET(^DGPP(33.1,IENDFN,0)),U)
if 'DFN
QUIT
+5 KILL DGRET
DO CHKTREAT^DGPPRP1(.DGRET,DFN,DGDTFSEL,DGDTTSEL,.DGDIVSEL)
if '$DATA(DGRET)
QUIT
+6 SET DGDIV=""
FOR
SET DGDIV=$ORDER(DGRET(DGDIV))
if DGDIV=""
QUIT
DO DQ1
End DoDot:3
End DoDot:2
End DoDot:1
+7 SET DGDASH=""
SET $PIECE(DGDASH,"-",133)=""
+8 DO PRINT
DO OUT
+9 IF $EXTRACT(IOST,1,2)="C-"
READ !!?8,"End of the Report...Press Enter to Continue",X:DTIME
WRITE @IOF
+10 QUIT
+11 ;
DQ1 ;
+1 NEW DGDT1
+2 SET DGDT1=""
FOR
SET DGDT1=$ORDER(DGRET(DGDIV,DGDT1))
if DGDT1=""
QUIT
Begin DoDot:1
+3 ;If all Divisions selected
IF DGDIVSEL=1
DO SET
QUIT
+4 ;If selected Division match
IF $DATA(DGDIVSEL(DGDIV))
DO SET
End DoDot:1
+5 QUIT
+6 ;
SET ;
+1 NEW DGDISCH,DGDISCTY,DGENCAT,DGFAC,DGIEN2711,DGIEN2715,DFNS,DGN,DGOUT,DGOUTP,DGPATNA,DGPE,DGSERVDT,IEN3216,IENS3216
+2 ;,DGPATNA=$$GET1^DIQ(2,DFNS,.01)
SET DFNS=DFN_","
+3 SET IEN3216=$ORDER(^DPT(DFN,.3216,"@"),-1)
SET (DGDISCTY,DGSERVDT)=""
+4 KILL DGOUT
IF IEN3216
DO GETS^DIQ(2.3216,IEN3216_","_DFNS,".02;.06","IE","DGOUT")
Begin DoDot:1
+5 SET IENS3216=IEN3216_","_DFNS
SET DGSERVDT=$GET(DGOUT(2.3216,IENS3216,.02,"I"))
if DGSERVDT?1.N
SET DGSERVDT=$$FMTE^XLFDT(DGSERVDT,"5PZ")
+6 SET DGDISCTY=$GET(DGOUT(2.3216,IENS3216,.06,"E"))
End DoDot:1
+7 DO GETS^DIQ(2,DFNS,".01;.0905;.323;.361","","DGOUTP")
+8 SET @DGTEMP@(DGDIV,DFN)=$GET(DGOUTP(2,DFNS,.01))_U_$GET(DGOUTP(2,DFNS,.0905))_U_DGSERVDT_U_DGDISCTY
+9 SET @DGTEMP@(DGDIV,DFN)=@DGTEMP@(DGDIV,DFN)_U_$GET(DGOUTP(2,DFNS,.323))_U_$GET(DGOUTP(2,DFNS,.361))_U
+10 SET DGIEN2711=$ORDER(^DGEN(27.11,"C",DFN,""))
SET DGENCAT=""
+11 IF DGIEN2711
SET DGIEN2715=$$GET1^DIQ(27.11,DGIEN2711_",",.04,"I")
SET DGENCAT=$$GET1^DIQ(27.15,DGIEN2715_",",.02)
+12 SET @DGTEMP@(DGDIV,DFN)=@DGTEMP@(DGDIV,DFN)_DGENCAT
+13 QUIT
+14 ;
PRINT ;Print out results
+1 NEW DGI,DGPATNA,DGX,DGY,PAGE,EXIT,DGHDRYN
+2 WRITE @IOF
IF '$DATA(@DGTEMP)
WRITE !!?10," << None found >> ",!!
GOTO OUT
+3 SET (EXIT,PAGE,DGHDRYN)=0
+4 SET DGDIV=""
FOR
SET DGDIV=$ORDER(@DGTEMP@(DGDIV))
if DGDIV=""!(EXIT)
QUIT
Begin DoDot:1
+5 SET DGHDRYN=1
+6 SET DFN=""
FOR
SET DFN=$ORDER(@DGTEMP@(DGDIV,DFN))
if DFN=""!(EXIT)
QUIT
SET DGX=@DGTEMP@(DGDIV,DFN)
DO PRINT2
+7 QUIT
End DoDot:1
+8 WRITE !
+9 IF $EXTRACT(IOST,1,2)="C-"
IF 'EXIT
READ !!?8,"End of the Report...Press Enter to Continue",X:DTIME
WRITE @IOF
+10 QUIT
+11 ;
PRINT2 ;
+1 IF $Y+5>IOSL!DGHDRYN
IF PAGE>0
IF ($EXTRACT(IOST,1,2)="C-")&(IO=IO(0))
WRITE !
SET DIR(0)="E"
DO ^DIR
KILL DIR
Begin DoDot:1
+2 IF $DATA(DTOUT)!($DATA(DUOUT))
SET EXIT=1
QUIT
+3 WRITE @IOF
DO HDR
SET DGHDRYN=0
+4 QUIT
End DoDot:1
+5 if EXIT
QUIT
+6 IF DGHDRYN
DO HDR
SET DGHDRYN=0
+7 WRITE !,$EXTRACT($PIECE(DGX,U),1,20),?22,$PIECE(DGX,U,2),?29,$$FMTE^XLFDT($PIECE(DGX,U,3)),?43,$EXTRACT($PIECE(DGX,U,4),1,14),?58,$EXTRACT($PIECE(DGX,U,5),1,20),?81,$EXTRACT($PIECE(DGX,U,6),1,19),?103,$EXTRACT($PIECE(DGX,U,7),1,29)
+8 QUIT
+9 ;
HDR ; Print page header
+1 NEW DGX
+2 SET PAGE=PAGE+1
+3 SET DGX="Presumptive Psychosis Patient Profile"
SET DGX=$JUSTIFY(" ",132-$LENGTH(DGX)\2)_DGX
+4 WRITE DGX,?120,"Page: ",PAGE
+5 SET DGX="Division: "_$$GET1^DIQ(40.8,DGDIV_",",.01)
SET DGX=$JUSTIFY(" ",132-$LENGTH(DGX)\2)_DGX
WRITE !,DGX
+6 SET DGX="Date Range: "_$$FMTE^XLFDT(DGDTFSEL,"5PZ")_" to "_$$FMTE^XLFDT(DGDTTSEL,"5PZ")
SET DGX=$JUSTIFY(" ",132-$LENGTH(DGX)\2)_DGX
WRITE !,DGX
+7 WRITE ?104,"Date Printed: ",$$FMTE^XLFDT($PIECE($$NOW^XLFDT(),"."))
+8 WRITE !,DGDASH,!,"PATIENT NAME",?22,"PID",?29," SERVICE",?43,"DISCHARGE",?58,"PERIOD OF SERVICE",?81,"PRIMARY ELIGIBILITY"
+9 WRITE ?103,"ENROLLMENT CAT",!?27,"SEPARATION DATE",?43," TYPE",!,DGDASH
+10 ;
+11 QUIT
+12 ;
DTFRMTO(PROMPT) ;Get from and to dates
+1 NEW %DT,Y,X,DTOUT,OUT,DIRUT,DUOUT,STATUS,STDT,STATUS
+2 ;INPUT ; PROMPT - Message to display prior to prompting for dates
+3 ;OUTPUT: 1^BEGDT^ENDDT - Data found
+4 ; 0 - User up arrowed or timed out
+5 ;If they want to show first available date for that set of Status, use this sub
INDT ;
+1 SET OUT=0
+2 SET DIR(0)="DO^"_DT_":"_DT_":EX"
+3 ;Enter Beginning Date: "
SET %DT="AEX"
SET %DT("A")="From date: "
+4 WRITE !
DO ^%DT
KILL %DT
+5 ;Quit if user time out or didn't enter valid date
IF Y<0
WRITE !!,"No Date selected, quitting. ",!!
QUIT OUT
+6 ;Future dates not allowed
IF Y>DT
WRITE !!,"Future dates are not allowed, please re-enter"
KILL Y,%DT
GOTO INDT
+7 ; Get end date, default is "TODAY"
SET DGDTFRM=+Y
SET %DT="AEX"
SET %DT("A")="To date: "
SET %DT("B")="T"
+8 DO ^%DT
KILL %DT
+9 ;Quit if user time out or didn't enter valid date
+10 IF Y<0
WRITE !!,"No Date selected, quitting. ",!!
QUIT OUT
+11 SET DGDTTO=+Y
SET OUT=1_U_DGDTFRM_U_DGDTTO
+12 ;Switch dates if Begin Date is more recent than End Date
+13 if DGDTFRM>DGDTTO
SET OUT=1_U_DGDTTO_U_DGDTFRM
+14 QUIT OUT
+15 ;
+16 ;DG*5.3*977 PP
+17 ;B9S3
HELP(DGSEL) ;
+1 IF DGSEL=1
Begin DoDot:1
+2 WRITE !!,"This option generates a report that prints a list of all patients treated"
+3 WRITE !,"under Presumptive Psychosis authority and who had an Outpatient Encounter"
+4 WRITE !,"with the STATUS=CHECKED OUT for Clinic(s) associated with the selected"
+5 WRITE !,"Division(s) within the user specified date range."
End DoDot:1
+6 QUIT
+7 ;
OUT ; KILL RETURN ARRAY QUIT
+1 DO ^%ZISC
+2 KILL @DGTEMP
+3 QUIT