PSOBAIRP ;BIR/RTR-Report of prescription mail labels with bad address ;08/16/2006
;;7.0;OUTPATIENT PHARMACY;**233,326**;DEC 1997;Build 11
;
EN ;
N PSOFORM,PSOAPAT,PSOSDT,PSOEDT,PSOSDTX,PSOEDTX,X,Y,X1,X2
W !!,"This option provides a report that shows patients and prescriptions whose last"
W !,"label activity had a routing of mail and no valid permanent or temporary"
W !,"address. It will also indicate whether the patient now has a good address.",!!
K DIR S DIR(0)="SB^S:Single;A:All",DIR("A")="Print report for a Single patient, or All patients",DIR("B")="Single",DIR("?")=" ",DIR("?",1)="Enter 'S' to print address changes for one patient over the selected"
S DIR("?",2)="date range, enter 'A' to print address changes for all patients",DIR("?",3)="over the selected date range."
D ^DIR K DIR I Y["^"!($D(DTOUT))!($D(DUOUT)) D MESS Q
S PSOFORM=$S(Y="S":1,1:0)
I 'PSOFORM G DATE
K DIC W ! S DIC(0)="QEAM",DIC("A")="Select PATIENT: " D EN^PSOPATLK S Y=PSOPTLK K DIC,PSOPTLK I Y<1!($D(DUOUT))!($D(DTOUT)) D MESS Q
S PSOAPAT=+Y
DATE ;
W !!
W ! K %DT S %DT="AEX",%DT("A")="Start fill date: " D ^%DT K %DT I Y<0!($D(DTOUT))!($D(DUOUT)) D MESS Q
S (%DT(0),PSOSDT)=Y D DD^%DT S PSOSDTX=Y
W ! S %DT="AEX",%DT("A")="End fill date: " D ^%DT K %DT I Y<0!($D(DTOUT))!($D(DUOUT)) D MESS Q
S PSOEDT=Y D DD^%DT S PSOEDTX=Y
S X1=PSOSDT,X2=-1 D C^%DTC S PSOSDT=X_".9999"
S X1=PSOEDT,X2=+1 D C^%DTC S PSOEDT=X
K IOP,%ZIS,POP S %ZIS="QM" D ^%ZIS I $G(POP) D MESS Q
I $D(IO("Q")) D Q
.S ZTRTN="REP^PSOBAIRP",ZTDESC="Pharmacy bad address mail label report",ZTSAVE("PSOFORM")="",ZTSAVE("PSOAPAT")="",ZTSAVE("PSOSDT")="",ZTSAVE("PSOEDT")="",ZTSAVE("PSOEDTX")="",ZTSAVE("PSOSDTX")="" D ^%ZTLOAD K %ZIS
.W !!,"Report queued to print.",!
REP ;
K ^TMP("PSOBADL",$J)
N PSODEV,PSOUT,PSOLINE,PSOPAGE,PSOADND,PSOADF,PSOADFF,PSOAOPT,PSOAOPTA,PSOAOPTZ,PSOAOPTB,PSOAOPTC,PSOADLP,PSOANODE,PSOADX,PSORX,PSOADATE,PSOC,PSOAALL,PSOADFN,PSOANAME,PSONI,PSONX,PSONB,PSOASN,VA,DFN,PSONSSN,PSOAFLAG
U IO
S (PSOUT,PSOAFLAG)=0,PSODEV=$S($E(IOST,1,2)'="C-":0,1:1),PSOPAGE=1
S $P(PSOLINE,"-",78)=""
ALL ;Print report for all patients
N PSORD,PSORX,PSOLBL,PSOX
S PSORD=PSOSDT F S PSORD=$O(^PSRX("AD",PSORD)) Q:'PSORD!(PSORD>PSOEDT) D
.S PSORX=0 F S PSORX=$O(^PSRX("AD",PSORD,PSORX)) Q:'PSORX D
..S PSOLBL=$O(^PSRX(PSORX,"L",999999),-1) I 'PSOLBL Q
..S PSOX=$G(^PSRX(PSORX,"L",PSOLBL,0)) I PSOX["(BAD ADDRESS",PSOX'["WINDOW" D
...S PSOADFN=$P($G(^PSRX(PSORX,0)),"^",2) Q:'PSOADFN
...I $G(PSOFORM),PSOADFN'=PSOAPAT Q
...S PSOANAME=$P($G(^DPT(PSOADFN,0)),"^") Q:PSOANAME=""
...S ^TMP("PSOBADL",$J,PSOANAME,PSOADFN,PSORD,PSORX)=""
D HD
I '$D(^TMP("PSOBADL",$J)) W !!,"No data found to print for this date range.",! G END
S PSONI="" F S PSONI=$O(^TMP("PSOBADL",$J,PSONI)) Q:PSONI=""!(PSOUT) D
.S PSONX="" F S PSONX=$O(^TMP("PSOBADL",$J,PSONI,PSONX)) Q:PSONX=""!(PSOUT) D NAME,PRALL D
..S PSONB="" F S PSONB=$O(^TMP("PSOBADL",$J,PSONI,PSONX,PSONB)) Q:PSONB=""!(PSOUT) D
...S PSORX="" F S PSORX=$O(^TMP("PSOBADL",$J,PSONI,PSONX,PSONB,PSORX)) Q:PSORX=""!(PSOUT) D
....I ($Y+5)>IOSL D HD Q:PSOUT
....S Y=PSONB D DD^%DT S PSOADATE=Y
....D PRONE
END ;
K ^TMP("PSOBADL",$J)
K DTOUT,DUOUT
I '$G(PSOUT),PSODEV W !!,"End of Report." K DIR S DIR(0)="E",DIR("A")="Press Return to continue" D ^DIR K DIR
I 'PSODEV W !!,"End of Report."
I PSODEV W !
E W @IOF
D ^%ZISC S:$D(ZTQUEUED) ZTREQ="@"
Q
HD ;
I '$G(PSOFORM) S PSOAFLAG=1
I PSODEV,PSOPAGE'=1 W ! K DIR S DIR(0)="E",DIR("A")="Press Return to continue, '^' to exit" D ^DIR K DIR I 'Y S PSOUT=1 Q
I PSOPAGE=1,'PSODEV W ! I 1
E W @IOF
D W ?67,"PAGE: "_PSOPAGE S PSOPAGE=PSOPAGE+1
.I PSOFORM W !,"Bad address mail label report for "_$G(PSOANAME) Q
.W !,"Bad address mail label report for ALL Patients"
W !,"for fill date between "_$G(PSOSDTX)_" and "_$G(PSOEDTX)
W !,PSOLINE
Q
MESS ;
W !!,"Nothing queued to print.",!
Q
NAME ;Set name(ssn)
K VA S DFN=PSONX D PID^VADPT6
S PSONSSN=$G(PSONI)_" ("_$E(VA("PID"),5,12)_")"
K VA
Q
PRALL ;Print data for all patients
N PSOADDR
S PSOADDR=""
S PSOAFLAG=0
W !!,$G(PSONSSN) D CHKADDR W ?30," ",PSOADDR I ($Y+5)>IOSL D HD Q:PSOUT
Q
PRONE ;Print data for one patient
N PSORX0
S PSORX0=$G(^PSRX(PSORX,0)) I PSORX0=""!($P(PSORX0,"^",6)="") Q
D CON W !,$G(PSOADATE),?15," Rx#: ",$P(PSORX0,"^"),?30," ",$P($G(^PSDRUG($P(PSORX0,"^",6),0)),"^")
I ($Y+5)>IOSL D HD Q:PSOUT
Q
CON ;
I PSOAFLAG,'PSOFORM W !,$G(PSONSSN) S PSOAFLAG=0
Q
;
CHKADDR ;
N PSOBADR,PSOTEMP
I $G(PSONX)="" Q
S PSOBADR=$$BADADR^DGUTL3(PSONX)
I PSOBADR D
.S PSOTEMP=$$CHKTEMP^PSOBAI(PSONX)
I PSOBADR,'PSOTEMP S PSOADDR="** BAD ADDRESS **" Q
S PSOADDR="PATIENT NOW HAS A VALID ADDRESS"
Q
PSOBAIRP ;BIR/RTR-Report of prescription mail labels with bad address ;08/16/2006
+1 ;;7.0;OUTPATIENT PHARMACY;**233,326**;DEC 1997;Build 11
+2 ;
EN ;
+1 NEW PSOFORM,PSOAPAT,PSOSDT,PSOEDT,PSOSDTX,PSOEDTX,X,Y,X1,X2
+2 WRITE !!,"This option provides a report that shows patients and prescriptions whose last"
+3 WRITE !,"label activity had a routing of mail and no valid permanent or temporary"
+4 WRITE !,"address. It will also indicate whether the patient now has a good address.",!!
+5 KILL DIR
SET DIR(0)="SB^S:Single;A:All"
SET DIR("A")="Print report for a Single patient, or All patients"
SET DIR("B")="Single"
SET DIR("?")=" "
SET DIR("?",1)="Enter 'S' to print address changes for one patient over the selected"
+6 SET DIR("?",2)="date range, enter 'A' to print address changes for all patients"
SET DIR("?",3)="over the selected date range."
+7 DO ^DIR
KILL DIR
IF Y["^"!($DATA(DTOUT))!($DATA(DUOUT))
DO MESS
QUIT
+8 SET PSOFORM=$SELECT(Y="S":1,1:0)
+9 IF 'PSOFORM
GOTO DATE
+10 KILL DIC
WRITE !
SET DIC(0)="QEAM"
SET DIC("A")="Select PATIENT: "
DO EN^PSOPATLK
SET Y=PSOPTLK
KILL DIC,PSOPTLK
IF Y<1!($DATA(DUOUT))!($DATA(DTOUT))
DO MESS
QUIT
+11 SET PSOAPAT=+Y
DATE ;
+1 WRITE !!
+2 WRITE !
KILL %DT
SET %DT="AEX"
SET %DT("A")="Start fill date: "
DO ^%DT
KILL %DT
IF Y<0!($DATA(DTOUT))!($DATA(DUOUT))
DO MESS
QUIT
+3 SET (%DT(0),PSOSDT)=Y
DO DD^%DT
SET PSOSDTX=Y
+4 WRITE !
SET %DT="AEX"
SET %DT("A")="End fill date: "
DO ^%DT
KILL %DT
IF Y<0!($DATA(DTOUT))!($DATA(DUOUT))
DO MESS
QUIT
+5 SET PSOEDT=Y
DO DD^%DT
SET PSOEDTX=Y
+6 SET X1=PSOSDT
SET X2=-1
DO C^%DTC
SET PSOSDT=X_".9999"
+7 SET X1=PSOEDT
SET X2=+1
DO C^%DTC
SET PSOEDT=X
+8 KILL IOP,%ZIS,POP
SET %ZIS="QM"
DO ^%ZIS
IF $GET(POP)
DO MESS
QUIT
+9 IF $DATA(IO("Q"))
Begin DoDot:1
+10 SET ZTRTN="REP^PSOBAIRP"
SET ZTDESC="Pharmacy bad address mail label report"
SET ZTSAVE("PSOFORM")=""
SET ZTSAVE("PSOAPAT")=""
SET ZTSAVE("PSOSDT")=""
SET ZTSAVE("PSOEDT")=""
SET ZTSAVE("PSOEDTX")=""
SET ZTSAVE("PSOSDTX")=""
DO ^%ZTLOAD
KILL %ZIS
+11 WRITE !!,"Report queued to print.",!
End DoDot:1
QUIT
REP ;
+1 KILL ^TMP("PSOBADL",$JOB)
+2 NEW PSODEV,PSOUT,PSOLINE,PSOPAGE,PSOADND,PSOADF,PSOADFF,PSOAOPT,PSOAOPTA,PSOAOPTZ,PSOAOPTB,PSOAOPTC,PSOADLP,PSOANODE,PSOADX,PSORX,PSOADATE,PSOC,PSOAALL,PSOADFN,PSOANAME,PSONI,PSONX,PSONB,PSOASN,VA,DFN,PSONSSN,PSOAFLAG
+3 USE IO
+4 SET (PSOUT,PSOAFLAG)=0
SET PSODEV=$SELECT($EXTRACT(IOST,1,2)'="C-":0,1:1)
SET PSOPAGE=1
+5 SET $PIECE(PSOLINE,"-",78)=""
ALL ;Print report for all patients
+1 NEW PSORD,PSORX,PSOLBL,PSOX
+2 SET PSORD=PSOSDT
FOR
SET PSORD=$ORDER(^PSRX("AD",PSORD))
IF 'PSORD!(PSORD>PSOEDT)
QUIT
Begin DoDot:1
+3 SET PSORX=0
FOR
SET PSORX=$ORDER(^PSRX("AD",PSORD,PSORX))
IF 'PSORX
QUIT
Begin DoDot:2
+4 SET PSOLBL=$ORDER(^PSRX(PSORX,"L",999999),-1)
IF 'PSOLBL
QUIT
+5 SET PSOX=$GET(^PSRX(PSORX,"L",PSOLBL,0))
IF PSOX["(BAD ADDRESS"
IF PSOX'["WINDOW"
Begin DoDot:3
+6 SET PSOADFN=$PIECE($GET(^PSRX(PSORX,0)),"^",2)
IF 'PSOADFN
QUIT
+7 IF $GET(PSOFORM)
IF PSOADFN'=PSOAPAT
QUIT
+8 SET PSOANAME=$PIECE($GET(^DPT(PSOADFN,0)),"^")
IF PSOANAME=""
QUIT
+9 SET ^TMP("PSOBADL",$JOB,PSOANAME,PSOADFN,PSORD,PSORX)=""
End DoDot:3
End DoDot:2
End DoDot:1
+10 DO HD
+11 IF '$DATA(^TMP("PSOBADL",$JOB))
WRITE !!,"No data found to print for this date range.",!
GOTO END
+12 SET PSONI=""
FOR
SET PSONI=$ORDER(^TMP("PSOBADL",$JOB,PSONI))
IF PSONI=""!(PSOUT)
QUIT
Begin DoDot:1
+13 SET PSONX=""
FOR
SET PSONX=$ORDER(^TMP("PSOBADL",$JOB,PSONI,PSONX))
IF PSONX=""!(PSOUT)
QUIT
DO NAME
DO PRALL
Begin DoDot:2
+14 SET PSONB=""
FOR
SET PSONB=$ORDER(^TMP("PSOBADL",$JOB,PSONI,PSONX,PSONB))
IF PSONB=""!(PSOUT)
QUIT
Begin DoDot:3
+15 SET PSORX=""
FOR
SET PSORX=$ORDER(^TMP("PSOBADL",$JOB,PSONI,PSONX,PSONB,PSORX))
IF PSORX=""!(PSOUT)
QUIT
Begin DoDot:4
+16 IF ($Y+5)>IOSL
DO HD
IF PSOUT
QUIT
+17 SET Y=PSONB
DO DD^%DT
SET PSOADATE=Y
+18 DO PRONE
End DoDot:4
End DoDot:3
End DoDot:2
End DoDot:1
END ;
+1 KILL ^TMP("PSOBADL",$JOB)
+2 KILL DTOUT,DUOUT
+3 IF '$GET(PSOUT)
IF PSODEV
WRITE !!,"End of Report."
KILL DIR
SET DIR(0)="E"
SET DIR("A")="Press Return to continue"
DO ^DIR
KILL DIR
+4 IF 'PSODEV
WRITE !!,"End of Report."
+5 IF PSODEV
WRITE !
+6 IF '$TEST
WRITE @IOF
+7 DO ^%ZISC
IF $DATA(ZTQUEUED)
SET ZTREQ="@"
+8 QUIT
HD ;
+1 IF '$GET(PSOFORM)
SET PSOAFLAG=1
+2 IF PSODEV
IF PSOPAGE'=1
WRITE !
KILL DIR
SET DIR(0)="E"
SET DIR("A")="Press Return to continue, '^' to exit"
DO ^DIR
KILL DIR
IF 'Y
SET PSOUT=1
QUIT
+3 IF PSOPAGE=1
IF 'PSODEV
WRITE !
IF 1
+4 IF '$TEST
WRITE @IOF
+5 Begin DoDot:1
+6 IF PSOFORM
WRITE !,"Bad address mail label report for "_$GET(PSOANAME)
QUIT
+7 WRITE !,"Bad address mail label report for ALL Patients"
End DoDot:1
WRITE ?67,"PAGE: "_PSOPAGE
SET PSOPAGE=PSOPAGE+1
+8 WRITE !,"for fill date between "_$GET(PSOSDTX)_" and "_$GET(PSOEDTX)
+9 WRITE !,PSOLINE
+10 QUIT
MESS ;
+1 WRITE !!,"Nothing queued to print.",!
+2 QUIT
NAME ;Set name(ssn)
+1 KILL VA
SET DFN=PSONX
DO PID^VADPT6
+2 SET PSONSSN=$GET(PSONI)_" ("_$EXTRACT(VA("PID"),5,12)_")"
+3 KILL VA
+4 QUIT
PRALL ;Print data for all patients
+1 NEW PSOADDR
+2 SET PSOADDR=""
+3 SET PSOAFLAG=0
+4 WRITE !!,$GET(PSONSSN)
DO CHKADDR
WRITE ?30," ",PSOADDR
IF ($Y+5)>IOSL
DO HD
IF PSOUT
QUIT
+5 QUIT
PRONE ;Print data for one patient
+1 NEW PSORX0
+2 SET PSORX0=$GET(^PSRX(PSORX,0))
IF PSORX0=""!($PIECE(PSORX0,"^",6)="")
QUIT
+3 DO CON
WRITE !,$GET(PSOADATE),?15," Rx#: ",$PIECE(PSORX0,"^"),?30," ",$PIECE($GET(^PSDRUG($PIECE(PSORX0,"^",6),0)),"^")
+4 IF ($Y+5)>IOSL
DO HD
IF PSOUT
QUIT
+5 QUIT
CON ;
+1 IF PSOAFLAG
IF 'PSOFORM
WRITE !,$GET(PSONSSN)
SET PSOAFLAG=0
+2 QUIT
+3 ;
CHKADDR ;
+1 NEW PSOBADR,PSOTEMP
+2 IF $GET(PSONX)=""
QUIT
+3 SET PSOBADR=$$BADADR^DGUTL3(PSONX)
+4 IF PSOBADR
Begin DoDot:1
+5 SET PSOTEMP=$$CHKTEMP^PSOBAI(PSONX)
End DoDot:1
+6 IF PSOBADR
IF 'PSOTEMP
SET PSOADDR="** BAD ADDRESS **"
QUIT
+7 SET PSOADDR="PATIENT NOW HAS A VALID ADDRESS"
+8 QUIT