- 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 ;