PSJSFRQ ; SMT - SEARCH FOR ERRONEOUS FREQS ; 4/23/09 3:28pm
;;5.0; INPATIENT MEDICATIONS ;**221**; FEB 09;Build 11
; Enter EN^PSJSFRQ for Programmer
; QUE^PSJSFRQ to QUEUE for the past 6 months
; Mail sends to DUZ and anyone holding "PSJ RPHARM" key
Q ; No entry from ^PSJSFRQ
;
QUE ;
N NAMSP,PATCH,JOBN,DTOUT,DUOUT,ZTSK,ZTRTN,ZTIO,ZTDTH,ZTDESC,QUIT,Y,ZTQUEUED,ZTREQ,ZTSAVE,PSJQUE,PSRUN
S NAMSP=$$NAMSP
S JOBN="Frequency Report"
S PATCH="PSJ*5*221"
S PSRUN="U" ;This is the type of run UD or IV for the report.
;
L +^XTMP(NAMSP):$S($G(DILOCKTM)>0:DILOCKTM,1:3) I '$T D Q
. D BMES^XPDUTL(JOBN_" job is already running. Halting...")
. D MES^XPDUTL("")
. D QUIT
;
I '$D(^XTMP(NAMSP)) D INITXTMP(NAMSP,JOBN_", "_PATCH,90) ;90 day life
S QUIT=0
;
I $G(^XTMP(NAMSP,0,"LAST"))["COMPLETED" D Q
. W !!,*7,"This job has been run before to completion on "
. W $$FMTE^XLFDT($P($G(^XTMP(NAMSP,0,"LAST")),"^",2)),!!
. W "If you want to run it again, the global subscript ^XTMP('"_NAMSP_"') must be",!
. W "deleted prior to doing so.",!!
. D QUIT
;
;ques 2, if running from mumps prompt
I '$D(XPDQUES("POS2")) D I 'ZTDTH D QUIT Q
. K DIR
. S DIR("A",1)=" Enter when to Queue the "_JOBN_" job to run"
. S DIR("A")=" in date@time format"
. S DIR("B")="NOW"
. S DIR(0)="D^::%DT"
. S DIR("?")=" Enter when to start the job. The default is Now. You can enter a date and time in the format like this: 021506@3:30p"
. D ^DIR I $D(DUOUT) W !,"Halting..." S ZTDTH="" Q
. S:$D(DTOUT) Y=$$NOW^XLFDT S ZTDTH=$$FMTH^XLFDT(Y)
;
;ques 2, if running from kids install
I $D(XPDQUES("POS2")) S ZTDTH=$$FMTH^XLFDT(XPDQUES("POS2"))
;
D BMES^XPDUTL("=============================================================")
D MES^XPDUTL("Queuing background job for "_JOBN_"...")
D MES^XPDUTL("Start time: "_$$HTE^XLFDT(ZTDTH))
D MES^XPDUTL("==============================================================")
I ZTDTH="" D BMES^XPDUTL(JOBN_" NOT QUEUED") D QUIT Q
;
S:$D(^XTMP(NAMSP,0,"LAST")) ^XTMP(NAMSP,0,"ZAUDIT",$H)="RE-STARTED ON"_"^"_$$NOW^XLFDT_"^"_$P(^XTMP(NAMSP,0,"LAST"),"^",2,5)
;
I $P($G(^XTMP(NAMSP,0,"LAST")),"^")="STOP" D
. S $P(^XTMP(NAMSP,0,"LAST"),"^",1,2)="RUN^"_$$NOW^XLFDT
E D
. S ^XTMP(NAMSP,0,"LAST")="RUN^"_$$NOW^XLFDT_"^^^"
;
S ZTRTN="EN^"_NAMSP,ZTIO="",PSJQUE=1
S ZTDESC="Background job for "_JOBN_" on prescriptions updated via "_PATCH
S ZTSAVE("JOBN")="",ZTSAVE("PSJQUE")="",ZTSAVE("PSRUN")=""
L -^XTMP(NAMSP)
D ^%ZTLOAD
D:$D(ZTSK)
. D MES^XPDUTL("*** Task #"_ZTSK_" Queued! ***")
. D BMES^XPDUTL("")
D BMES^XPDUTL("")
K XPDQUES
Q
;
EN ;
N MSG,MCNT,START,STOP,I,DFN,IEN,ORD,SCH,OINFO,CNT,I,SUBJ,STARTH,STOPH,VADM,INF,Y,X,% K ERORD
I '$G(PSJQUE) W !,"This report will generate a mailman of problem Orders with incorrect frequency"
I '$G(PSJQUE),'$G(PSRUN) S PSRUN="" F D Q:(PSRUN="U")!(PSRUN="I")!(PSRUN="UI")!(PSRUN="")!(PSRUN["^")
. W !,"Please Select, type of order to run this report on",!,"U - Unit Dose",!,"I - IV",!,"UI - Both",!,"Selection:"
. R PSRUN:$S($G(DTIME):DTIME,1:9999) E S PSRUN="^" Q
. I (PSRUN'="U")&(PSRUN'="I")&(PSRUN'="UI")&(PSRUN'["^")&(PSRUN'="") W " <??>",$C(7)
Q:(PSRUN["^")!(PSRUN="")
D RANGE Q:START=-1
;UD Orders
I PSRUN["U" D
. S I=START F S I=$O(^PS(55,"AUDS",I)) Q:'I!(I>STOP) D
. . S DFN=0 F S DFN=$O(^PS(55,"AUDS",I,DFN)) Q:'DFN D
. . . S IEN=0 F S IEN=$O(^PS(55,"AUDS",I,DFN,IEN)) Q:'IEN D
. . . . S ORD=DFN_";"_IEN_"U"
. . . . K OINFO,SCH S OINFO=$$INFO(ORD) S SCH=$$GETSCH($P(OINFO,"^")) Q:SCH=0
. . . . I $$CHKSDT(ORD) S ERORD(ORD)=""
. . . . I ("AH"[$P(OINFO,"^",4)),+$P(OINFO,"^",3)'=+$P(SCH,"^",3) Q:'$P(OINFO,"^",3)!($P(OINFO,"^",6)'="C") S ERORD(ORD)=""
;IV orders
I PSRUN["I" D
. S I=START F S I=$O(^PS(55,"AIVS",I)) Q:'I!(I>STOP) D
. . S DFN=0 F S DFN=$O(^PS(55,"AIVS",I,DFN)) Q:'DFN D
. . . S IEN=0 F S IEN=$O(^PS(55,"AIVS",I,DFN,IEN)) Q:'IEN D
. . . . S ORD=DFN_";"_IEN_"I"
. . . . K OINFO,SCH S OINFO=$$INFO(ORD) S SCH=$$GETSCH($P(OINFO,"^")) Q:SCH=0
. . . . I ("AH"[$P(OINFO,"^",4)),+$P(OINFO,"^",3)'=+$P(SCH,"^",3) Q:'$P(OINFO,"^",3)!($P(OINFO,"^",6)'="P") S ERORD(ORD)=""
;Pending Orders
;TBD
;
;CREATE Message to send based on ERORD
S CNT=1
S Y=START D DD^%DT S STARTH=Y
S Y=STOP D DD^%DT S STOPH=Y
S SUBJ="FREQUENCY MISMATCH :"_RUNTM
S MSG(CNT)="This is a list of orders with mismatching frequencies and possible",CNT=CNT+1
S MSG(CNT)="start date problems. This excludes orders with no frequency and invalid",CNT=CNT+1
S MSG(CNT)="schedules, the orders on this list need to be reviewed!",CNT=CNT+1
S MSG(CNT)="This report range is from:"_STARTH_" to "_STOPH,CNT=CNT+1
I '$D(ERORD) S MSG(CNT)="There are no problems.",CNT=CNT+1
S I=0 F S I=$O(ERORD(I)) Q:'I D
. S INF=$$INFO(I),DFN=$P(I,";") K VA,VADM D
. . N I D ^VADPT
. S MSG(CNT)="",CNT=CNT+1
. S MSG(CNT)="PATIENT:"_VADM(1)_" SSN:"_VA("BID"),CNT=CNT+1 I I'["I" S MSG(CNT-1)=MSG(CNT-1)_" DRUG:"_$P(^PSDRUG($P(INF,"^",5),0),"^")
. S MSG(CNT)="DFN:"_$P(I,";")_" ORDER#:"_+$P(I,";",2)_" SCHED:"_$P(INF,"^")_" STATUS:"_$P(INF,"^",4),CNT=CNT+1
. S MSG(CNT)=" TYPE:"_$S(I["I":"IV",I["U":"UNIT DOSE",1:"PENDING")_" FREQ:"_$P(INF,"^",3),CNT=CNT+1
;
;Send message
D MAIL(.MSG,SUBJ)
Q
RANGE ;
N NOW,%DT,Y,X,X1,X2,% K START,STOP,RUNTM
D NOW^%DTC S NOW=% S Y=$P(%,".") D DD^%DT S RUNTM=Y
;If this is qued, don't ask, just set to 6 months.
I $G(PSJQUE) S STOP=NOW,X1=NOW,X2=-183 D C^%DTC S START=X Q
S %DT="AEPT",%DT("A")="Start Date:",%DT(0)="-NOW" D ^%DT
S START=Y I Y=-1 Q
S %DT="AEPT",%DT("A")="Stop Date:",%DT(0)=START D ^%DT
S STOP=Y I Y=-1 Q
Q
;
GETSCH(SCHED) ;
;
; Returns "SCHED^AT^FREQ^PKG"
;
N I,FRQ,PKG,AT K FREQ
Q:SCHED']"" 0
I '$O(^PS(51.1,"APPSJ",SCHED,0)) Q 0
S I=0 F S I=$O(^PS(51.1,"APPSJ",SCHED,I)) Q:'I D
. ;Get Data
. S FRQ=$P(^PS(51.1,I,0),"^",3),PKG=$P(^(0),"^",4),AT=$P(^(0),"^",2)
;
Q $G(SCHED)_"^"_$G(AT)_"^"_$G(FRQ)_"^"_$G(PKG)
;
INFO(ORD) ;
;
; IEN=DFN;IEN(TYPE)
; ex 2222;102U or 2222;32I or ;23P
;
; Return "SCHED^AT^FRQ^STATUS^DRUG^SCHTP" (SCHTP is Schedule Type for UD and TYPE for IV
;
N F,SCHED,AT,FRQ,DFN,STAT,DRUG,X,SCHTP,DSPDG,ND0 K DTA55
S DFN=$P(ORD,";")
I ORD["P" S F="^PS(53.1,"_+$P(ORD,";",2)_","
E S F="^PS(55,"_DFN_","_$S(ORD["U":"5",1:"""IV""")_","_+$P(ORD,";",2)_","
;Unit Dose
I (ORD["U")!(ORD["P") D
. S ND0=F_"0)"
. S DSPDG=F_"1," S X=DSPDG_"0)" S X=$O(@X),DSPDG=$G(@(DSPDG_$S(+X:X,1:1)_",0)"))
. S F=F_"2)"
. S SCHED=$P(@F,"^"),AT=$P(@F,"^",5),FRQ=$P(@F,"^",6),STAT=$P(@ND0,"^",9),DRUG=$P(DSPDG,"^"),SCHTP=$P(@ND0,"^",7)
;IV
I ORD["I" D
. S DRUG=""
. S F=F_"0)"
. S SCHED=$P(@F,"^",9),AT=$P(@F,"^",11),FRQ=$P(@F,"^",15),STAT=$P(@F,"^",17),SCHTP=$P(@F,"^",4)
;
Q $G(SCHED)_"^"_$G(AT)_"^"_$G(FRQ)_"^"_$G(STAT)_"^"_$G(DRUG)_"^"_$G(SCHTP)
;
CHKSDT(ORD) ;
;
; If this function returns 1 there is a start date problem.
;
N DFN,ERR,ND2,ND0,I,LIDT,STDT,F,ND
Q:ORD["I" 0
S DFN=$P(ORD,";")
I ORD["P" S F="^PS(53.1,"_+$P(ORD,";",2)_","
E S F="^PS(55,"_DFN_","_$S(ORD["U":"5",1:"""IV""")_","_+$P(ORD,";",2)_","
S ND2=F_"2)",ND2=@ND2,ND0=F_"0)",ND0=@ND0,ERR=0
I ORD["U" D
. S STDT=$P(ND2,"^",2),LIDT=$P(ND0,"^",14),I=""
. F S I=$O(^PS(55,DFN,5,+$P(ORD,";",2),9,I),-1) Q:'I S ND=^(I,0) I $P(ND,"^",3)["Start Date" D Q
. . Q:STDT=LIDT
. . I STDT'=$P(ND,"^",5) S ERR=1
Q ERR
;
MAIL(MSG,SBJ) ; Send out some mail!
N DIFROM,XMDUZ,XMSUB,XMTEXT,XMY,I
S XMDUZ="INPT PHARMACY",XMSUB=SBJ,XMTEXT="MSG("
S XMY(DUZ)="",I=0 F S I=$O(^XUSEC("PSJ RPHARM",I)) Q:'I S XMY(I)=""
D ^XMD
Q ""
;
NAMSP() ;
Q $T(+0)
;
STOP ;stop job command
I $$ST S ^XTMP($$NAMSP,0,"STOP")="" D
. W !,"TALLY MISSING EXPIRATION DATES Job - set to STOP Soon"
. W !!,"Check Status to be sure it has stopped and is not running..."
. W !," (D STATUS^PSOTEXP1)"
Q
;
ST() ;status
L +^XTMP($$NAMSP):3 I $T D Q 0
. L -^XTMP($$NAMSP)
. W !,"*** NOT CURRENTLY RUNNING! ***",!
Q 1
;
INITXTMP(NAMSP,TITLE,LIFE) ;create ^Xtmp according to SAC std
N BEGDT,PURGDT
S BEGDT=$$NOW^XLFDT()
S PURGDT=$$FMADD^XLFDT(BEGDT,LIFE)
S ^XTMP(NAMSP,0)=PURGDT_"^"_BEGDT_"^"_TITLE
Q
;
QUIT ;
L -^XTMP(NAMSP)
Q
;
PSJSFRQ ; SMT - SEARCH FOR ERRONEOUS FREQS ; 4/23/09 3:28pm
+1 ;;5.0; INPATIENT MEDICATIONS ;**221**; FEB 09;Build 11
+2 ; Enter EN^PSJSFRQ for Programmer
+3 ; QUE^PSJSFRQ to QUEUE for the past 6 months
+4 ; Mail sends to DUZ and anyone holding "PSJ RPHARM" key
+5 ; No entry from ^PSJSFRQ
QUIT
+6 ;
QUE ;
+1 NEW NAMSP,PATCH,JOBN,DTOUT,DUOUT,ZTSK,ZTRTN,ZTIO,ZTDTH,ZTDESC,QUIT,Y,ZTQUEUED,ZTREQ,ZTSAVE,PSJQUE,PSRUN
+2 SET NAMSP=$$NAMSP
+3 SET JOBN="Frequency Report"
+4 SET PATCH="PSJ*5*221"
+5 ;This is the type of run UD or IV for the report.
SET PSRUN="U"
+6 ;
+7 LOCK +^XTMP(NAMSP):$SELECT($GET(DILOCKTM)>0:DILOCKTM,1:3)
IF '$TEST
Begin DoDot:1
+8 DO BMES^XPDUTL(JOBN_" job is already running. Halting...")
+9 DO MES^XPDUTL("")
+10 DO QUIT
End DoDot:1
QUIT
+11 ;
+12 ;90 day life
IF '$DATA(^XTMP(NAMSP))
DO INITXTMP(NAMSP,JOBN_", "_PATCH,90)
+13 SET QUIT=0
+14 ;
+15 IF $GET(^XTMP(NAMSP,0,"LAST"))["COMPLETED"
Begin DoDot:1
+16 WRITE !!,*7,"This job has been run before to completion on "
+17 WRITE $$FMTE^XLFDT($PIECE($GET(^XTMP(NAMSP,0,"LAST")),"^",2)),!!
+18 WRITE "If you want to run it again, the global subscript ^XTMP('"_NAMSP_"') must be",!
+19 WRITE "deleted prior to doing so.",!!
+20 DO QUIT
End DoDot:1
QUIT
+21 ;
+22 ;ques 2, if running from mumps prompt
+23 IF '$DATA(XPDQUES("POS2"))
Begin DoDot:1
+24 KILL DIR
+25 SET DIR("A",1)=" Enter when to Queue the "_JOBN_" job to run"
+26 SET DIR("A")=" in date@time format"
+27 SET DIR("B")="NOW"
+28 SET DIR(0)="D^::%DT"
+29 SET DIR("?")=" Enter when to start the job. The default is Now. You can enter a date and time in the format like this: 021506@3:30p"
+30 DO ^DIR
IF $DATA(DUOUT)
WRITE !,"Halting..."
SET ZTDTH=""
QUIT
+31 IF $DATA(DTOUT)
SET Y=$$NOW^XLFDT
SET ZTDTH=$$FMTH^XLFDT(Y)
End DoDot:1
IF 'ZTDTH
DO QUIT
QUIT
+32 ;
+33 ;ques 2, if running from kids install
+34 IF $DATA(XPDQUES("POS2"))
SET ZTDTH=$$FMTH^XLFDT(XPDQUES("POS2"))
+35 ;
+36 DO BMES^XPDUTL("=============================================================")
+37 DO MES^XPDUTL("Queuing background job for "_JOBN_"...")
+38 DO MES^XPDUTL("Start time: "_$$HTE^XLFDT(ZTDTH))
+39 DO MES^XPDUTL("==============================================================")
+40 IF ZTDTH=""
DO BMES^XPDUTL(JOBN_" NOT QUEUED")
DO QUIT
QUIT
+41 ;
+42 IF $DATA(^XTMP(NAMSP,0,"LAST"))
SET ^XTMP(NAMSP,0,"ZAUDIT",$HOROLOG)="RE-STARTED ON"_"^"_$$NOW^XLFDT_"^"_$P(^XTMP(NAMSP,0,"LAST"),"^",2,5)
+43 ;
+44 IF $PIECE($GET(^XTMP(NAMSP,0,"LAST")),"^")="STOP"
Begin DoDot:1
+45 SET $PIECE(^XTMP(NAMSP,0,"LAST"),"^",1,2)="RUN^"_$$NOW^XLFDT
End DoDot:1
+46 IF '$TEST
Begin DoDot:1
+47 SET ^XTMP(NAMSP,0,"LAST")="RUN^"_$$NOW^XLFDT_"^^^"
End DoDot:1
+48 ;
+49 SET ZTRTN="EN^"_NAMSP
SET ZTIO=""
SET PSJQUE=1
+50 SET ZTDESC="Background job for "_JOBN_" on prescriptions updated via "_PATCH
+51 SET ZTSAVE("JOBN")=""
SET ZTSAVE("PSJQUE")=""
SET ZTSAVE("PSRUN")=""
+52 LOCK -^XTMP(NAMSP)
+53 DO ^%ZTLOAD
+54 IF $DATA(ZTSK)
Begin DoDot:1
+55 DO MES^XPDUTL("*** Task #"_ZTSK_" Queued! ***")
+56 DO BMES^XPDUTL("")
End DoDot:1
+57 DO BMES^XPDUTL("")
+58 KILL XPDQUES
+59 QUIT
+60 ;
EN ;
+1 NEW MSG,MCNT,START,STOP,I,DFN,IEN,ORD,SCH,OINFO,CNT,I,SUBJ,STARTH,STOPH,VADM,INF,Y,X,%
KILL ERORD
+2 IF '$GET(PSJQUE)
WRITE !,"This report will generate a mailman of problem Orders with incorrect frequency"
+3 IF '$GET(PSJQUE)
IF '$GET(PSRUN)
SET PSRUN=""
FOR
Begin DoDot:1
+4 WRITE !,"Please Select, type of order to run this report on",!,"U - Unit Dose",!,"I - IV",!,"UI - Both",!,"Selection:"
+5 READ PSRUN:$SELECT($GET(DTIME):DTIME,1:9999)
IF '$TEST
SET PSRUN="^"
QUIT
+6 IF (PSRUN'="U")&(PSRUN'="I")&(PSRUN'="UI")&(PSRUN'["^")&(PSRUN'="")
WRITE " <??>",$CHAR(7)
End DoDot:1
IF (PSRUN="U")!(PSRUN="I")!(PSRUN="UI")!(PSRUN="")!(PSRUN["^")
QUIT
+7 IF (PSRUN["^")!(PSRUN="")
QUIT
+8 DO RANGE
IF START=-1
QUIT
+9 ;UD Orders
+10 IF PSRUN["U"
Begin DoDot:1
+11 SET I=START
FOR
SET I=$ORDER(^PS(55,"AUDS",I))
IF 'I!(I>STOP)
QUIT
Begin DoDot:2
+12 SET DFN=0
FOR
SET DFN=$ORDER(^PS(55,"AUDS",I,DFN))
IF 'DFN
QUIT
Begin DoDot:3
+13 SET IEN=0
FOR
SET IEN=$ORDER(^PS(55,"AUDS",I,DFN,IEN))
IF 'IEN
QUIT
Begin DoDot:4
+14 SET ORD=DFN_";"_IEN_"U"
+15 KILL OINFO,SCH
SET OINFO=$$INFO(ORD)
SET SCH=$$GETSCH($PIECE(OINFO,"^"))
IF SCH=0
QUIT
+16 IF $$CHKSDT(ORD)
SET ERORD(ORD)=""
+17 IF ("AH"[$PIECE(OINFO,"^",4))
IF +$PIECE(OINFO,"^",3)'=+$PIECE(SCH,"^",3)
IF '$PIECE(OINFO,"^",3)!($PIECE(OINFO,"^",6)'="C")
QUIT
SET ERORD(ORD)=""
End DoDot:4
End DoDot:3
End DoDot:2
End DoDot:1
+18 ;IV orders
+19 IF PSRUN["I"
Begin DoDot:1
+20 SET I=START
FOR
SET I=$ORDER(^PS(55,"AIVS",I))
IF 'I!(I>STOP)
QUIT
Begin DoDot:2
+21 SET DFN=0
FOR
SET DFN=$ORDER(^PS(55,"AIVS",I,DFN))
IF 'DFN
QUIT
Begin DoDot:3
+22 SET IEN=0
FOR
SET IEN=$ORDER(^PS(55,"AIVS",I,DFN,IEN))
IF 'IEN
QUIT
Begin DoDot:4
+23 SET ORD=DFN_";"_IEN_"I"
+24 KILL OINFO,SCH
SET OINFO=$$INFO(ORD)
SET SCH=$$GETSCH($PIECE(OINFO,"^"))
IF SCH=0
QUIT
+25 IF ("AH"[$PIECE(OINFO,"^",4))
IF +$PIECE(OINFO,"^",3)'=+$PIECE(SCH,"^",3)
IF '$PIECE(OINFO,"^",3)!($PIECE(OINFO,"^",6)'="P")
QUIT
SET ERORD(ORD)=""
End DoDot:4
End DoDot:3
End DoDot:2
End DoDot:1
+26 ;Pending Orders
+27 ;TBD
+28 ;
+29 ;CREATE Message to send based on ERORD
+30 SET CNT=1
+31 SET Y=START
DO DD^%DT
SET STARTH=Y
+32 SET Y=STOP
DO DD^%DT
SET STOPH=Y
+33 SET SUBJ="FREQUENCY MISMATCH :"_RUNTM
+34 SET MSG(CNT)="This is a list of orders with mismatching frequencies and possible"
SET CNT=CNT+1
+35 SET MSG(CNT)="start date problems. This excludes orders with no frequency and invalid"
SET CNT=CNT+1
+36 SET MSG(CNT)="schedules, the orders on this list need to be reviewed!"
SET CNT=CNT+1
+37 SET MSG(CNT)="This report range is from:"_STARTH_" to "_STOPH
SET CNT=CNT+1
+38 IF '$DATA(ERORD)
SET MSG(CNT)="There are no problems."
SET CNT=CNT+1
+39 SET I=0
FOR
SET I=$ORDER(ERORD(I))
IF 'I
QUIT
Begin DoDot:1
+40 SET INF=$$INFO(I)
SET DFN=$PIECE(I,";")
KILL VA,VADM
Begin DoDot:2
+41 NEW I
DO ^VADPT
End DoDot:2
+42 SET MSG(CNT)=""
SET CNT=CNT+1
+43 SET MSG(CNT)="PATIENT:"_VADM(1)_" SSN:"_VA("BID")
SET CNT=CNT+1
IF I'["I"
SET MSG(CNT-1)=MSG(CNT-1)_" DRUG:"_$PIECE(^PSDRUG($PIECE(INF,"^",5),0),"^")
+44 SET MSG(CNT)="DFN:"_$PIECE(I,";")_" ORDER#:"_+$PIECE(I,";",2)_" SCHED:"_$PIECE(INF,"^")_" STATUS:"_$PIECE(INF,"^",4)
SET CNT=CNT+1
+45 SET MSG(CNT)=" TYPE:"_$SELECT(I["I":"IV",I["U":"UNIT DOSE",1:"PENDING")_" FREQ:"_$PIECE(INF,"^",3)
SET CNT=CNT+1
End DoDot:1
+46 ;
+47 ;Send message
+48 DO MAIL(.MSG,SUBJ)
+49 QUIT
RANGE ;
+1 NEW NOW,%DT,Y,X,X1,X2,%
KILL START,STOP,RUNTM
+2 DO NOW^%DTC
SET NOW=%
SET Y=$PIECE(%,".")
DO DD^%DT
SET RUNTM=Y
+3 ;If this is qued, don't ask, just set to 6 months.
+4 IF $GET(PSJQUE)
SET STOP=NOW
SET X1=NOW
SET X2=-183
DO C^%DTC
SET START=X
QUIT
+5 SET %DT="AEPT"
SET %DT("A")="Start Date:"
SET %DT(0)="-NOW"
DO ^%DT
+6 SET START=Y
IF Y=-1
QUIT
+7 SET %DT="AEPT"
SET %DT("A")="Stop Date:"
SET %DT(0)=START
DO ^%DT
+8 SET STOP=Y
IF Y=-1
QUIT
+9 QUIT
+10 ;
GETSCH(SCHED) ;
+1 ;
+2 ; Returns "SCHED^AT^FREQ^PKG"
+3 ;
+4 NEW I,FRQ,PKG,AT
KILL FREQ
+5 IF SCHED']""
QUIT 0
+6 IF '$ORDER(^PS(51.1,"APPSJ",SCHED,0))
QUIT 0
+7 SET I=0
FOR
SET I=$ORDER(^PS(51.1,"APPSJ",SCHED,I))
IF 'I
QUIT
Begin DoDot:1
+8 ;Get Data
+9 SET FRQ=$PIECE(^PS(51.1,I,0),"^",3)
SET PKG=$PIECE(^(0),"^",4)
SET AT=$PIECE(^(0),"^",2)
End DoDot:1
+10 ;
+11 QUIT $GET(SCHED)_"^"_$GET(AT)_"^"_$GET(FRQ)_"^"_$GET(PKG)
+12 ;
INFO(ORD) ;
+1 ;
+2 ; IEN=DFN;IEN(TYPE)
+3 ; ex 2222;102U or 2222;32I or ;23P
+4 ;
+5 ; Return "SCHED^AT^FRQ^STATUS^DRUG^SCHTP" (SCHTP is Schedule Type for UD and TYPE for IV
+6 ;
+7 NEW F,SCHED,AT,FRQ,DFN,STAT,DRUG,X,SCHTP,DSPDG,ND0
KILL DTA55
+8 SET DFN=$PIECE(ORD,";")
+9 IF ORD["P"
SET F="^PS(53.1,"_+$PIECE(ORD,";",2)_","
+10 IF '$TEST
SET F="^PS(55,"_DFN_","_$SELECT(ORD["U":"5",1:"""IV""")_","_+$PIECE(ORD,";",2)_","
+11 ;Unit Dose
+12 IF (ORD["U")!(ORD["P")
Begin DoDot:1
+13 SET ND0=F_"0)"
+14 SET DSPDG=F_"1,"
SET X=DSPDG_"0)"
SET X=$ORDER(@X)
SET DSPDG=$GET(@(DSPDG_$SELECT(+X:X,1:1)_",0)"))
+15 SET F=F_"2)"
+16 SET SCHED=$PIECE(@F,"^")
SET AT=$PIECE(@F,"^",5)
SET FRQ=$PIECE(@F,"^",6)
SET STAT=$PIECE(@ND0,"^",9)
SET DRUG=$PIECE(DSPDG,"^")
SET SCHTP=$PIECE(@ND0,"^",7)
End DoDot:1
+17 ;IV
+18 IF ORD["I"
Begin DoDot:1
+19 SET DRUG=""
+20 SET F=F_"0)"
+21 SET SCHED=$PIECE(@F,"^",9)
SET AT=$PIECE(@F,"^",11)
SET FRQ=$PIECE(@F,"^",15)
SET STAT=$PIECE(@F,"^",17)
SET SCHTP=$PIECE(@F,"^",4)
End DoDot:1
+22 ;
+23 QUIT $GET(SCHED)_"^"_$GET(AT)_"^"_$GET(FRQ)_"^"_$GET(STAT)_"^"_$GET(DRUG)_"^"_$GET(SCHTP)
+24 ;
CHKSDT(ORD) ;
+1 ;
+2 ; If this function returns 1 there is a start date problem.
+3 ;
+4 NEW DFN,ERR,ND2,ND0,I,LIDT,STDT,F,ND
+5 IF ORD["I"
QUIT 0
+6 SET DFN=$PIECE(ORD,";")
+7 IF ORD["P"
SET F="^PS(53.1,"_+$PIECE(ORD,";",2)_","
+8 IF '$TEST
SET F="^PS(55,"_DFN_","_$SELECT(ORD["U":"5",1:"""IV""")_","_+$PIECE(ORD,";",2)_","
+9 SET ND2=F_"2)"
SET ND2=@ND2
SET ND0=F_"0)"
SET ND0=@ND0
SET ERR=0
+10 IF ORD["U"
Begin DoDot:1
+11 SET STDT=$PIECE(ND2,"^",2)
SET LIDT=$PIECE(ND0,"^",14)
SET I=""
+12 FOR
SET I=$ORDER(^PS(55,DFN,5,+$PIECE(ORD,";",2),9,I),-1)
IF 'I
QUIT
SET ND=^(I,0)
IF $PIECE(ND,"^",3)["Start Date"
Begin DoDot:2
+13 IF STDT=LIDT
QUIT
+14 IF STDT'=$PIECE(ND,"^",5)
SET ERR=1
End DoDot:2
QUIT
End DoDot:1
+15 QUIT ERR
+16 ;
MAIL(MSG,SBJ) ; Send out some mail!
+1 NEW DIFROM,XMDUZ,XMSUB,XMTEXT,XMY,I
+2 SET XMDUZ="INPT PHARMACY"
SET XMSUB=SBJ
SET XMTEXT="MSG("
+3 SET XMY(DUZ)=""
SET I=0
FOR
SET I=$ORDER(^XUSEC("PSJ RPHARM",I))
IF 'I
QUIT
SET XMY(I)=""
+4 DO ^XMD
+5 QUIT ""
+6 ;
NAMSP() ;
+1 QUIT $TEXT(+0)
+2 ;
STOP ;stop job command
+1 IF $$ST
SET ^XTMP($$NAMSP,0,"STOP")=""
Begin DoDot:1
+2 WRITE !,"TALLY MISSING EXPIRATION DATES Job - set to STOP Soon"
+3 WRITE !!,"Check Status to be sure it has stopped and is not running..."
+4 WRITE !," (D STATUS^PSOTEXP1)"
End DoDot:1
+5 QUIT
+6 ;
ST() ;status
+1 LOCK +^XTMP($$NAMSP):3
IF $TEST
Begin DoDot:1
+2 LOCK -^XTMP($$NAMSP)
+3 WRITE !,"*** NOT CURRENTLY RUNNING! ***",!
End DoDot:1
QUIT 0
+4 QUIT 1
+5 ;
INITXTMP(NAMSP,TITLE,LIFE) ;create ^Xtmp according to SAC std
+1 NEW BEGDT,PURGDT
+2 SET BEGDT=$$NOW^XLFDT()
+3 SET PURGDT=$$FMADD^XLFDT(BEGDT,LIFE)
+4 SET ^XTMP(NAMSP,0)=PURGDT_"^"_BEGDT_"^"_TITLE
+5 QUIT
+6 ;
QUIT ;
+1 LOCK -^XTMP(NAMSP)
+2 QUIT
+3 ;