| [623] | 1 | PSOMAUEX ;BIR/SAB-Auto expire of prescriptions ;10/10/96
 | 
|---|
 | 2 |  ;;7.0;OUTPATIENT PHARMACY;**40,73,139,148**;DEC 1997
 | 
|---|
 | 3 |  ;External reference to ^PS(59.7 is supported by DBIA 694
 | 
|---|
 | 4 |  ;External reference to STATUS^ORQOR2 is supported by DBIA 3458
 | 
|---|
 | 5 |  ;
 | 
|---|
 | 6 |  I '$G(DT) S DT=$$DT^XLFDT
 | 
|---|
 | 7 |  W @IOF,!!?10," ******* Auto Expire of Prescriptions *******"
 | 
|---|
 | 8 |  W !!,"You need to run this job only if expired prescriptions are showing up as active"
 | 
|---|
 | 9 |  W !,"orders on the Orders tab in CPRS. This could be due to the following:"
 | 
|---|
 | 10 |  W !,"1. The Expire Prescriptions [PSO EXPIRE PRESCRIPTIONS] option was not"
 | 
|---|
 | 11 |  W !,"   queued as a daily task.       *****  AND *****"
 | 
|---|
 | 12 |  W !,"2. Those patient's prescription(s) were never being accessed/viewed in"
 | 
|---|
 | 13 |  W !,"   Patient Prescription Processing [PSO LM BACKDOOR ORDERS] option.",!
 | 
|---|
 | 14 |  W !,"*******************************************************************************"
 | 
|---|
 | 15 |  W !,"* For sites that have not queued the Expire Prescriptions job on their        *"
 | 
|---|
 | 16 |  W !,"* daily task schedule, you  should do so by selecting the Queue Background    *"
 | 
|---|
 | 17 |  W !,"* Jobs [PSO AUTOQUEUE JOBS] option from the Maintenance (Outpatient Pharmacy) *"
 | 
|---|
 | 18 |  W !,"* [PSO MAINTENANCE] option and in the Edit Option Schedule template make an   *"
 | 
|---|
 | 19 |  W !,"* entry for Expire Prescriptions [PSO EXPIRE PRESCRIPTIONS] option and        *"
 | 
|---|
 | 20 |  W !,"* schedule it to run daily.                                                   *"
 | 
|---|
 | 21 |  W !,"*******************************************************************************"
 | 
|---|
 | 22 |  W !!
 | 
|---|
 | 23 |  S ZZIDT=$S($P($G(^PS(59.7,1,49.99)),"^",7):$P(^PS(59.7,1,49.99),"^",7),1:$P($G(^PS(59.7,1,49.99)),"^",4))
 | 
|---|
 | 24 |  I 'ZZIDT D  Q  ; V7.0 inst. dt not found, quit this job
 | 
|---|
 | 25 |  .W !!!,"***** Outpatient installation date was not found, *****"
 | 
|---|
 | 26 |  .W !,"***** therefore this job cannot be run!!!!!       *****",!!
 | 
|---|
 | 27 |  ;
 | 
|---|
 | 28 |  ; - Ask for START DATE
 | 
|---|
 | 29 |  K %DT S %DT(0)=-DT,%DT="AEP",%DT("A")="Start Date: "
 | 
|---|
 | 30 |  S %DT("B")=$$FMTE^XLFDT($$FMADD^XLFDT(ZZIDT\1-121))
 | 
|---|
 | 31 |  W ! D ^%DT I Y<0!($D(DTOUT)) Q
 | 
|---|
 | 32 |  S ZZIDT=Y
 | 
|---|
 | 33 |  ;
 | 
|---|
 | 34 |  K %DT D NOW^%DTC S %DT="RAEX",%DT(0)=%,%DT("A")="Select the Date/Time to queue this job: "
 | 
|---|
 | 35 |  W ! D ^%DT K %DT I $D(DTOUT)!(Y<0) W !!!?10,"Job not queued!" Q
 | 
|---|
 | 36 |  S ZTDTH=$G(Y),ZTSAVE("ZZIDT")="",ZTIO="",ZTRTN="EN^PSOMAUEX",ZTDESC="Auto expire of Rxs "
 | 
|---|
 | 37 |  D ^%ZTLOAD
 | 
|---|
 | 38 |  W:$D(ZTSK) !!,"Task Queued !",!
 | 
|---|
 | 39 |  Q
 | 
|---|
 | 40 | EN S X1=ZZIDT,X2=-121 D C^%DTC S ZZDT=X  ;setting the start date to 120 days before the install date
 | 
|---|
 | 41 |  S X1=DT,X2=-1 D C^%DTC S CDT=X  ; setting the end date to todate-1
 | 
|---|
 | 42 |  F  S ZZDT=$O(^PSRX("AG",ZZDT)) Q:'ZZDT!(ZZDT>CDT)  D EN1
 | 
|---|
 | 43 |  K PSOEXRX,PSOEXSTA,ZZIDT,ZZDT,CDT,ORN,PIFN,PSUSD,PRFDT,PDA,PSDTEST S:$D(ZTQUEUED) ZTREQ="@"
 | 
|---|
 | 44 |  Q
 | 
|---|
 | 45 | EN1 ;
 | 
|---|
 | 46 |  F PSOEXRX=0:0 S PSOEXRX=$O(^PSRX("AG",ZZDT,PSOEXRX)) Q:'PSOEXRX  D
 | 
|---|
 | 47 |  .Q:$P($G(^PSRX(PSOEXRX,2)),"^",6)'=ZZDT
 | 
|---|
 | 48 |  .I $D(^PSRX(PSOEXRX,0)) D EN2
 | 
|---|
 | 49 |  Q
 | 
|---|
 | 50 | EN2 ;
 | 
|---|
 | 51 |  S DA=$O(^PS(52.5,"B",PSOEXRX,0))
 | 
|---|
 | 52 |  I DA,$P($G(^PS(52.5,DA,0)),"^",2),$P($G(^(0)),"^",3) S DIK="^PS(52.5," D ^DIK K DIK
 | 
|---|
 | 53 |  I $D(^PS(52.4,PSOEXRX,0)) S DIK="^PS(52.4,",DA=PSOEXRX D ^DIK K DIK
 | 
|---|
 | 54 |  I $G(^PSRX(PSOEXRX,"H"))]"" K:$P(^PSRX(PSOEXRX,"H"),"^") ^PSRX("AH",$P(^PSRX(PSOEXRX,"H"),"^"),PSOEXRX) S ^PSRX(PSOEXRX,"H")=""
 | 
|---|
 | 55 |  S PSOEXSTA=$P($G(^PSRX(PSOEXRX,"STA")),"^")
 | 
|---|
 | 56 |  I PSOEXSTA=11 D
 | 
|---|
 | 57 |  .S $P(^PSRX(PSOEXRX,0),"^",19)=1
 | 
|---|
 | 58 |  .S ORN=$P($G(^PSRX(PSOEXRX,"OR1")),"^",2)
 | 
|---|
 | 59 |  .I ORN,+$$STATUS^ORQOR2(ORN)=6 D
 | 
|---|
 | 60 |  ..D EN^PSOHLSN1(PSOEXRX,"SC","ZE","Prescription is expired")
 | 
|---|
 | 61 |  I (PSOEXSTA="")!(PSOEXSTA>9) Q
 | 
|---|
 | 62 |  ;
 | 
|---|
 | 63 |  ;get only those Rxs whoes status lies within 0 & 9
 | 
|---|
 | 64 |  I PSOEXSTA?1N,+$P($G(^PSRX(PSOEXRX,2)),"^",6),+$P($G(^(2)),"^",6)<DT D
 | 
|---|
 | 65 |  .S $P(^PSRX(PSOEXRX,"STA"),"^")=11
 | 
|---|
 | 66 |  .I $P($G(^PSRX(PSOEXRX,"OR1")),"^",2) D
 | 
|---|
 | 67 |  ..D EN^PSOHLSN1(PSOEXRX,"SC","ZE","Prescription past expiration date")
 | 
|---|
 | 68 |  .S (PIFN,PSUSD,PRFDT)=0
 | 
|---|
 | 69 |  .F  S PIFN=$O(^PSRX(PSOEXRX,1,PIFN)) Q:'PIFN  S PSUSD=PIFN,PRFDT=+$P($G(^PSRX(PSOEXRX,1,PIFN,0)),"^")
 | 
|---|
 | 70 |  .D REVERSE^PSOBPSU1(PSOEXRX,+PSUSD,"DE",5,"RX EXPIRED")
 | 
|---|
 | 71 |  .I $G(PSUSD),'$P($G(^PSRX(PSOEXRX,1,PSUSD,0)),"^",18) D EN3
 | 
|---|
 | 72 |  Q
 | 
|---|
 | 73 | EN3 ;
 | 
|---|
 | 74 |  S (PSDTEST,PDA)=0 F  S PDA=$O(^PSRX(PSOEXRX,"L",PDA)) Q:'PDA  S:$P($G(^PSRX(PSOEXRX,"L",PDA,0)),"^",2)=PSUSD PSDTEST=1
 | 
|---|
 | 75 |  Q:PSDTEST
 | 
|---|
 | 76 |  S DA=PSOEXRX K CMOP D ^PSOCMOPA
 | 
|---|
 | 77 |  I $G(CMOP(CMOP("L")))="",$G(CMOP("S"))="L" S PSDTEST=1
 | 
|---|
 | 78 | ENX I 'PSDTEST K ^PSRX(PSOEXRX,1,PSUSD),^PSRX("AD",PRFDT,PSOEXRX,PSUSD),^PSRX(PSOEXRX,1,"B",PRFDT,PSUSD) D NSET
 | 
|---|
 | 79 |  Q
 | 
|---|
 | 80 | NSET ;
 | 
|---|
 | 81 |  N PSONM,PSONMX
 | 
|---|
 | 82 |  S PSONM="" F PSONMX=0:0 S PSONMX=$O(^PSRX(PSOEXRX,1,PSONMX)) Q:'PSONMX  S PSONM=PSONMX
 | 
|---|
 | 83 |  S ^PSRX(PSOEXRX,1,0)="^52.1DA^"_$G(PSONM)_"^"_$G(PSONM)
 | 
|---|
 | 84 |  Q
 | 
|---|