[613] | 1 | PSOPI136 ;BHM/MFR,BI - Patient Merge Clean-up ;07/10/03
|
---|
| 2 | ;;7.0;OUTPATIENT PHARMACY;**136**;DEC 1997
|
---|
| 3 | ;
|
---|
| 4 | ;External reference to ^OR(100 supported by DBIA 3582
|
---|
| 5 | ;External reference to ^OR(100 supported by DBIA 3463
|
---|
| 6 | ;External reference to ^PS(55 supported by DBIA 2228
|
---|
| 7 | ;External reference to GET1^DIQ supported by DBIA 2056
|
---|
| 8 | ;External reference to DPT(OLDDFN,-9) supported by DBIA 2762
|
---|
| 9 | ;External reference to ^XMD supported by DBIA 10070
|
---|
| 10 | ;
|
---|
| 11 | I $G(XPDENV)'=1 W !,"The Environment Check Routine is designed",!,"to run during the installation step only.",! Q
|
---|
| 12 | W !,"This patch queues a job to perform Patient Merge Clean-up",!
|
---|
| 13 | REPEAT W "It should be queued to run when there are no users processing outpatient prescriptions."
|
---|
| 14 | S %DT="AR",%DT("A")="ENTER QUEUE DATE@TIME: ",%DT("B")="T@2000" D ^%DT
|
---|
| 15 | I $G(DTOUT) S XPDQUIT=2 W !,"The program did not run, the patch will not install.",! G OUT
|
---|
| 16 | I Y=-1 S XPDQUIT=2 W !,"The program did not run, the patch will not install..",! G OUT
|
---|
| 17 | D NOW^%DTC I Y'>% W !,"MUST BE IN THE FUTURE",! H 3 G REPEAT
|
---|
| 18 | S X=Y D H^%DTC S Y=%H_","_%T
|
---|
| 19 | W ! S ZTDTH=Y S ZTRTN="EN^PSOPI136",ZTDESC="Pharmacy Patient Merge Clean-up",ZTIO="",ZTSAVE("XPDQUIT")="" D ^%ZTLOAD
|
---|
| 20 | W !!,"JOB QUEUED AS ",$G(ZTSK),".",!
|
---|
| 21 | OUT K DIR S DIR(0)="E",DIR("A")="Press Return to Continue" D ^DIR K DIR
|
---|
| 22 | K X,Y,%DT
|
---|
| 23 | Q
|
---|
| 24 | ;
|
---|
| 25 | EN N OLDDFN,NEWDFN,RXCNT,STCNT,%,X1,X2,X,RUNCNT
|
---|
| 26 | ;
|
---|
| 27 | L +^XTMP("PSOPI136"):0 I '$T W "Job is already running",! G END
|
---|
| 28 | ;
|
---|
| 29 | S X1=DT,X2=90 D C^%DTC S ^XTMP("PSOPI136",0)=$G(X)_"^"_DT_"^Pharmacy Patient Merge Clean-up, Run by DUZ: "_DUZ
|
---|
| 30 | S ^XTMP("PSOPI136",0,0)=$G(^XTMP("PSOPI136",0,0))+1,RUNCNT=^XTMP("PSOPI136",0,0)
|
---|
| 31 | ;
|
---|
| 32 | D NOW^%DTC S ^XTMP("PSOPI136",RUNCNT,"START")=%
|
---|
| 33 | S (RXCNT,STCNT)=0
|
---|
| 34 | S OLDDFN=0 F S OLDDFN=$O(^DPT(OLDDFN)) Q:'OLDDFN D
|
---|
| 35 | . I '$D(^DPT(OLDDFN,-9)) Q ;Patient not merged
|
---|
| 36 | . S NEWDFN=+^DPT(OLDDFN,-9) I '$D(^DPT(NEWDFN,0)) Q
|
---|
| 37 | . D FIX(OLDDFN,NEWDFN)
|
---|
| 38 | D NOW^%DTC S ^XTMP("PSOPI136",RUNCNT,"FINISH")=%
|
---|
| 39 | D MAIL
|
---|
| 40 | ;
|
---|
| 41 | L -^XTMP("PSOPI136")
|
---|
| 42 | ;
|
---|
| 43 | END Q
|
---|
| 44 | ;
|
---|
| 45 | FIX(OLDDFN,NEWDFN) ; Fix problems caused by Patient Merge
|
---|
| 46 | N DIE,DA,DR,EXPDT,RXIEN,ORIEN,RXST,ORST,RXSTN,ORSTN,COMM
|
---|
| 47 | ;
|
---|
| 48 | S EXPDT=0 F S EXPDT=$O(^PS(55,NEWDFN,"P","A",EXPDT)) Q:'EXPDT D
|
---|
| 49 | . S RXIEN=0 F S RXIEN=$O(^PS(55,NEWDFN,"P","A",EXPDT,RXIEN)) Q:'RXIEN D
|
---|
| 50 | . . I '$D(^PSRX(RXIEN,0)) Q
|
---|
| 51 | . . I $P($G(^PSRX(RXIEN,0)),"^",2)=NEWDFN Q
|
---|
| 52 | . . S DIE=52,DA=RXIEN,DR="2///"_NEWDFN D ^DIE S RXCNT=$G(RXCNT)+1
|
---|
| 53 | . . S ORIEN=$P($G(^PSRX(RXIEN,"OR1")),"^",2) Q:'ORIEN
|
---|
| 54 | . . S RXST=+$G(^PSRX(RXIEN,"STA"))
|
---|
| 55 | . . S RXSTN=$$GET1^DIQ(52,RXIEN,100),ORSTN=$$GET1^DIQ(100,ORIEN,5)
|
---|
| 56 | . . I '$D(^XTMP("PSOPI136",RUNCNT,RXIEN)) D
|
---|
| 57 | . . . S ^XTMP("PSOPI136",RUNCNT,RXIEN)=OLDDFN_"^"_NEWDFN_"^"_RXSTN_"^"_ORSTN_"^^"_$H
|
---|
| 58 | . . I $E(RXSTN,1,10)=$E(ORSTN,1,10) Q
|
---|
| 59 | . . I RXST'=11,RXST'=12,RXST'=14,RXST'=15 Q
|
---|
| 60 | . . S STCNT=$G(STCNT)+1
|
---|
| 61 | . . I RXST=11 D EXP S $P(^XTMP("PSOPI136",RUNCNT,RXIEN),"^",5)="EXPIRED" Q
|
---|
| 62 | . . D DSC S $P(^XTMP("PSOPI136",RUNCNT,RXIEN),"^",5)="DISCONTINUED"
|
---|
| 63 | ;
|
---|
| 64 | Q
|
---|
| 65 | ;
|
---|
| 66 | EXP ; Sets CPRS order status to EXPIRED
|
---|
| 67 | I $P(^PSRX(RXIEN,0),"^",19)=2 S $P(^PSRX(RXIEN,0),"^",19)=1
|
---|
| 68 | S COMM="Prescription past expiration date"
|
---|
| 69 | D EN^PSOHLSN1(RXIEN,"SC","ZE",COMM)
|
---|
| 70 | I $D(^OR(100,ORIEN,3)) S $P(^OR(100,ORIEN,3),"^")=EXPDT
|
---|
| 71 | Q
|
---|
| 72 | ;
|
---|
| 73 | DSC ; Sets CPRS order status to DISCONTINUED
|
---|
| 74 | N ACTLOG,LSTACT,PHARM,ACTDT,RSN,ACT0,ACTCOM,SAVEDUZ,NACT
|
---|
| 75 | ;
|
---|
| 76 | S (ACTLOG,LSTACT,PHARM,ACTDT)=0
|
---|
| 77 | F S ACTLOG=$O(^PSRX(RXIEN,"A",ACTLOG)) Q:'ACTLOG D
|
---|
| 78 | . S RSN=$P($G(^PSRX(RXIEN,"A",ACTLOG,0)),"^",2)
|
---|
| 79 | . I RSN="C"!(RSN="L") S LSTACT=ACTLOG
|
---|
| 80 | I 'LSTACT S COMM="Discontinued by Pharmacy",NACT=""
|
---|
| 81 | I LSTACT S ACT0=$G(^PSRX(RXIEN,"A",LSTACT,0)) D
|
---|
| 82 | . S PHARM=$P(ACT0,"^",3),ACTCOM=$P(ACT0,"^",5)
|
---|
| 83 | . S ACTDT=$P(ACT0,"^"),(NACT,COMM)=""
|
---|
| 84 | . I ACTCOM["Renewed" D
|
---|
| 85 | . . S COMM="Renewed by Pharmacy"
|
---|
| 86 | . I ACTCOM["Auto Discontinued" D
|
---|
| 87 | . . S PHARM="",NACT="A",COMM=$E($P(ACTCOM,".",2),2,99)
|
---|
| 88 | . . S:COMM="" COMM=ACTCOM
|
---|
| 89 | . I ACTCOM["Discontinued During" D
|
---|
| 90 | . . S COMM="Discontinued by Pharmacy"
|
---|
| 91 | S SAVEDUZ=$G(DUZ) S:$G(PHARM) DUZ=PHARM
|
---|
| 92 | D EN^PSOHLSN1(RXIEN,"OD",$S(RXST=15:"RP",1:""),COMM,NACT)
|
---|
| 93 | S DUZ=SAVEDUZ W "."
|
---|
| 94 | I '$G(ACTDT) S ACTDT=DT_".2200"
|
---|
| 95 | I $D(^OR(100,ORIEN,3)) S $P(^OR(100,ORIEN,3),"^")=$E(ACTDT,1,12)
|
---|
| 96 | I $D(^OR(100,ORIEN,6)) S $P(^OR(100,ORIEN,6),"^",3)=$E(ACTDT,1,12)
|
---|
| 97 | ;
|
---|
| 98 | Q
|
---|
| 99 | MAIL ; Send mail about the Clean-up
|
---|
| 100 | N CNT,DASH,START,FINISH,%,X,Y,XMDUZ,XMSUB,XMTEXT,DIFROM
|
---|
| 101 | ;
|
---|
| 102 | K ^TMP("PSO",$J)
|
---|
| 103 | S Y=$G(^XTMP("PSOPI136",RUNCNT,"START")) D DD^%DT S START=Y
|
---|
| 104 | S Y=$G(^XTMP("PSOPI136",RUNCNT,"FINISH")) D DD^%DT S FINISH=Y
|
---|
| 105 | S XMDUZ="Patch PSO*7*136",XMY(DUZ)=""
|
---|
| 106 | S XMSUB="PSO*7*136 PRESCRIPTION file (#52) - Patient Merge clean up"
|
---|
| 107 | S CNT=0,$P(DASH,"-",79)=""
|
---|
| 108 | S CNT=CNT+1,^TMP("PSO",$J,CNT)="Patch PSO*7*136 PRESCRIPTION file (#52) clean-up is complete."
|
---|
| 109 | S CNT=CNT+1,^TMP("PSO",$J,CNT)="It started on "_$G(START)_"."
|
---|
| 110 | S CNT=CNT+1,^TMP("PSO",$J,CNT)="It ended on "_$G(FINISH)_"."
|
---|
| 111 | S CNT=CNT+1,^TMP("PSO",$J,CNT)=" "
|
---|
| 112 | S CNT=CNT+1,^TMP("PSO",$J,CNT)=DASH
|
---|
| 113 | S CNT=CNT+1,^TMP("PSO",$J,CNT)=DASH
|
---|
| 114 | S CNT=CNT+1,^TMP("PSO",$J,CNT)="NEW PATIENT NAME"
|
---|
| 115 | S X="RX",$E(X,14)="OLD PATIENT",$E(X,27)="NEW PATIENT"
|
---|
| 116 | S $E(X,40)="PHARM STATUS",$E(X,54)="CPRS STATUS"
|
---|
| 117 | S $E(X,68)="NEW CPRS ST"
|
---|
| 118 | S CNT=CNT+1,^TMP("PSO",$J,CNT)=X
|
---|
| 119 | S CNT=CNT+1,^TMP("PSO",$J,CNT)=DASH
|
---|
| 120 | S DA=0 F S DA=$O(^XTMP("PSOPI136",RUNCNT,DA)) Q:'DA D
|
---|
| 121 | . S Z=$G(^XTMP("PSOPI136",RUNCNT,DA))
|
---|
| 122 | . S CNT=CNT+1,^TMP("PSO",$J,CNT)=$$GET1^DIQ(2,$P(Z,"^",2)_",",.01)
|
---|
| 123 | . S X=$P($G(^PSRX(DA,0)),"^"),$E(X,14)=$J($P(Z,"^"),11)
|
---|
| 124 | . S $E(X,27)=$J($P(Z,"^",2),11),$E(X,40)=$E($P(Z,"^",3),1,12)
|
---|
| 125 | . S $E(X,54)=$E($P(Z,"^",4),1,12),$E(X,68)=$E($P(Z,"^",5),1,11)
|
---|
| 126 | . S CNT=CNT+1,^TMP("PSO",$J,CNT)=X
|
---|
| 127 | . S CNT=CNT+1,^TMP("PSO",$J,CNT)=DASH
|
---|
| 128 | S CNT=CNT+1,^TMP("PSO",$J,CNT)=" "
|
---|
| 129 | S CNT=CNT+1,^TMP("PSO",$J,CNT)=+$G(RXCNT)_" prescriptions had the wrong Patient IEN and have been fixed."
|
---|
| 130 | S CNT=CNT+1,^TMP("PSO",$J,CNT)=+$G(STCNT)_" prescriptions had their status in CPRS adjusted to match Pharmacy."
|
---|
| 131 | S ^TMP("PSO",$J,CNT+1)=" "
|
---|
| 132 | S XMTEXT="^TMP(""PSO"",$J," D ^XMD
|
---|
| 133 | K ^TMP("PSO",$J)
|
---|
| 134 | Q
|
---|