| [613] | 1 | PSOREJP2 ;BIRM/MFR - Third Party Rejects View/Process ;04/28/05 | 
|---|
|  | 2 | ;;7.0;OUTPATIENT PHARMACY;**148,247,260**;DEC 1997;Build 84 | 
|---|
|  | 3 | ;Reference to ^PSSLOCK supported by IA #2789 | 
|---|
|  | 4 | ; | 
|---|
|  | 5 | N PSORJSRT,PSOPTFLT,PSODRFLT,PSORXFLT,PSOBYFLD,PSOSTFLT,DIR,DIRUT,DUOUT,DTOUT | 
|---|
|  | 6 | N PSOINFLT,PSODTRNG,PSOINGRP | 
|---|
|  | 7 | S PSORJASC=1,PSOINGRP=0 | 
|---|
|  | 8 | ; | 
|---|
|  | 9 | ; - Division/Site selection | 
|---|
|  | 10 | D SEL^PSOREJU1("DIVISION","^PS(59,",.PSOREJST,$$GET1^DIQ(59,+$G(PSOSITE),.01)) I $G(PSOREJST)="^" G EXIT | 
|---|
|  | 11 | ; | 
|---|
|  | 12 | ; - Date range selection | 
|---|
|  | 13 | W ! S PSODTRNG=$$DTRNG("T-90","T") I PSODTRNG="^" G EXIT | 
|---|
|  | 14 | ; | 
|---|
|  | 15 | SEL ; - Field Selection (Patient/Drug/Rx) | 
|---|
|  | 16 | S DIR(0)="S^P:PATIENT;D:DRUG;R:Rx;I:INSURANCE",DIR("B")="P" | 
|---|
|  | 17 | S DIR("A")="By (P)atient, (D)rug, (R)x or (I)nsurance" D ^DIR I $D(DIRUT) G EXIT | 
|---|
|  | 18 | S PSOBYFLD=Y,DIR("B")="" | 
|---|
|  | 19 | ; | 
|---|
|  | 20 | I PSOBYFLD="P" D  I $G(PSOPTFLT)="^" G SEL | 
|---|
|  | 21 | . S (PSODRFLT,PSORXFLT,PSOINFLT)="ALL",PSORJSRT="DR" | 
|---|
|  | 22 | . D SEL^PSOREJU1("PATIENT","^DPT(",.PSOPTFLT) | 
|---|
|  | 23 | ; | 
|---|
|  | 24 | I PSOBYFLD="D" D  I $G(PSODRFLT)="^" G SEL | 
|---|
|  | 25 | . S (PSOPTFLT,PSORXFLT,PSOINFLT)="ALL",PSORJSRT="PA" | 
|---|
|  | 26 | . D SEL^PSOREJU1("DRUG","^PSDRUG(",.PSODRFLT) | 
|---|
|  | 27 | ; | 
|---|
|  | 28 | I PSOBYFLD="R" D  I $D(DUOUT)!$D(DTOUT)!'$G(PSORXFLT) G SEL | 
|---|
|  | 29 | . S (PSOPTFLT,PSODRFLT,PSOINFLT)="ALL",PSORJSRT="PA" | 
|---|
|  | 30 | . N DIC,Y,X,OK K PSOSTFLT,PSORXFLT | 
|---|
|  | 31 | . S DIC=52,DIC(0)="QEZA",DIC("A")="PRESCRIPTION: " | 
|---|
|  | 32 | . F  W ! D ^DIC D  Q:$G(OK) | 
|---|
|  | 33 | . . I $D(DUOUT)!$D(DTOUT)!(X="") S OK=1 Q | 
|---|
|  | 34 | . . I '$O(^PSRX(+Y,"REJ",0)) D  Q | 
|---|
|  | 35 | . . . W !?40,"Prescription does not have rejects!",$C(7) | 
|---|
|  | 36 | . . S PSORXFLT=+Y,OK=1 | 
|---|
|  | 37 | ; | 
|---|
|  | 38 | I PSOBYFLD="I" D  I $O(PSOINFLT(""))="" G SEL | 
|---|
|  | 39 | . S (PSOPTFLT,PSODRFLT,PSORXFLT)="ALL",PSORJSRT="PA" | 
|---|
|  | 40 | . N DIR,Y,X,OK K PSOINFLT W ! | 
|---|
|  | 41 | . S DIR("A",1)="Enter the whole or part of the Insurance Company" | 
|---|
|  | 42 | . S DIR("A",2)="name for which you want to view/process REJECTS." | 
|---|
|  | 43 | . S DIR("A",3)="" | 
|---|
|  | 44 | . S DIR(0)="FO^3:30",DIR("A")="  INSURANCE" | 
|---|
|  | 45 | . F  D ^DIR D  Q:$G(OK) | 
|---|
|  | 46 | . . I $D(DIRUT)!(X="") S OK=1 Q | 
|---|
|  | 47 | . . S PSOINFLT(X)="" K DIR("A") S DIR("A")="ANOTHER ONE" | 
|---|
|  | 48 | ; | 
|---|
|  | 49 | ; - Status Selection (UNRESOLVED or RESOLVED) | 
|---|
|  | 50 | I $G(PSOSTFLT)="" D  I $D(DIRUT) G EXIT | 
|---|
|  | 51 | . S DIR(0)="S^U:UNRESOLVED;R:RESOLVED;B:BOTH",DIR("B")="B" | 
|---|
|  | 52 | . S DIR("A")="(U)NRESOLVED, (R)RESOLVED or (B)OTH REJECT statuses" D ^DIR | 
|---|
|  | 53 | . S PSOSTFLT=Y | 
|---|
|  | 54 | ; | 
|---|
|  | 55 | D LST^PSOREJP0("VP") | 
|---|
|  | 56 | ; | 
|---|
|  | 57 | EXIT Q | 
|---|
|  | 58 | ; | 
|---|
|  | 59 | CLO      ; - Ignore a REJECT hidden action | 
|---|
|  | 60 | I $$CLOSED^PSOREJP1(RX,REJ) D  Q | 
|---|
|  | 61 | . S VALMSG="This Reject is marked resolved!",VALMBCK="R" | 
|---|
|  | 62 | N DIR,COM | 
|---|
|  | 63 | D FULL^VALM1 | 
|---|
|  | 64 | I '$$SIG^PSOREJU1() S VALMBCK="R" Q | 
|---|
|  | 65 | W ! | 
|---|
|  | 66 | S COM=$$COM^PSOREJU1() I COM="^" S VALMBCK="R" Q | 
|---|
|  | 67 | W ! | 
|---|
|  | 68 | S DIR(0)="Y",DIR("A")="     Confirm? ",DIR("B")="NO" | 
|---|
|  | 69 | S DIR("A",1)="     When you confirm this REJECT will be marked RESOLVED." | 
|---|
|  | 70 | S DIR("A",2)=" " | 
|---|
|  | 71 | D ^DIR I $G(Y)=0!$D(DIRUT) S VALMBCK="R" Q | 
|---|
|  | 72 | W ?40,"[Closing..." D CLOSE^PSOREJUT(RX,FILL,REJ,DUZ,6,COM) W "OK]",!,$C(7) H 1 | 
|---|
|  | 73 | I $D(PSOSTFLT),PSOSTFLT'="B" S CHANGE=1 | 
|---|
|  | 74 | ; | 
|---|
|  | 75 | I $$PTLBL(RX,FILL) D PRINT^PSOREJP1(RX,FILL) | 
|---|
|  | 76 | ; | 
|---|
|  | 77 | Q | 
|---|
|  | 78 | ; | 
|---|
|  | 79 | OPN ; - Re-open a Closed/Resolved Reject | 
|---|
|  | 80 | I '$$CLOSED^PSOREJP1(RX,REJ) D  Q | 
|---|
|  | 81 | . S VALMSG="This Reject is NOT marked resolved!",VALMBCK="R" | 
|---|
|  | 82 | N DIR,COM,REJDATA,NEWDATA,X | 
|---|
|  | 83 | D FULL^VALM1 | 
|---|
|  | 84 | I '$$SIG^PSOREJU1() S VALMBCK="R" Q | 
|---|
|  | 85 | W ! | 
|---|
|  | 86 | S DIR(0)="Y",DIR("A")="     Confirm",DIR("B")="NO" | 
|---|
|  | 87 | S DIR("A",1)="     When you confirm this REJECT will be marked UNRESOLVED." | 
|---|
|  | 88 | S DIR("A",2)=" " | 
|---|
|  | 89 | D ^DIR I $G(Y)=0!$D(DIRUT) S VALMBCK="R" Q | 
|---|
|  | 90 | ; | 
|---|
|  | 91 | W ?40,"[Re-opening..." | 
|---|
|  | 92 | K REJDATA D GET^PSOREJU2(RX,FILL,.REJDATA,REJ,1) D SETOPN^PSOREJU2(RX,REJ) | 
|---|
|  | 93 | K NEWDATA M NEWDATA=REJDATA(REJ) S NEWDATA("PHARMACIST")=DUZ | 
|---|
|  | 94 | D SAVE^PSOREJUT(RX,FILL,.NEWDATA) | 
|---|
|  | 95 | I $G(NEWDATA("REJECT IEN")),$D(REJDATA(REJ,"COMMENTS")) D | 
|---|
|  | 96 | . S COM=0 F  S COM=$O(REJDATA(REJ,"COMMENTS",COM)) Q:'COM  D | 
|---|
|  | 97 | . . S X(1)=REJDATA(REJ,"COMMENTS",COM,"COMMENTS") | 
|---|
|  | 98 | . . S X(2)=REJDATA(REJ,"COMMENTS",COM,"DATE/TIME") | 
|---|
|  | 99 | . . S X(3)=REJDATA(REJ,"COMMENTS",COM,"USER") | 
|---|
|  | 100 | . . D SAVECOM^PSOREJP3(RX,NEWDATA("REJECT IEN"),X(1),X(2),X(3)) | 
|---|
|  | 101 | D RETRXF^PSOREJU2(RX,FILL,0) | 
|---|
|  | 102 | W "OK]",!,$C(7) H 1 | 
|---|
|  | 103 | S CHANGE=1 | 
|---|
|  | 104 | Q | 
|---|
|  | 105 | ; | 
|---|
|  | 106 | CHG ; - Change Suspense Date action | 
|---|
|  | 107 | I $$CLOSED^PSOREJP1(RX,REJ) D  Q | 
|---|
|  | 108 | . S VALMSG="This Reject is marked resolved!",VALMBCK="R" W $C(7) | 
|---|
|  | 109 | ; | 
|---|
|  | 110 | N SUSDT,PSOMSG,Y,SUSRX,%DT,DA,DIE,DR,ISSDT,EXPDT,PSOMSG | 
|---|
|  | 111 | ; | 
|---|
|  | 112 | S RFL=+$$GET1^DIQ(52.25,REJ_","_RX,5),SUSDT=$$RXSUDT^PSOBPSUT(RX,RFL) | 
|---|
|  | 113 | I SUSDT="" S VALMSG="Prescription is not suspended!",VALMBCK="R" W $C(7) Q | 
|---|
|  | 114 | I $$RXRLDT^PSOBPSUT(RX,RFL) S VALMSG="Prescription has been released already!",VALMBCK="R" W $C(7) Q | 
|---|
|  | 115 | D PSOL^PSSLOCK(RX) I '$G(PSOMSG) S VALMSG=$P(PSOMSG,"^",2),VALMBCK="R" W $C(7) Q | 
|---|
|  | 116 | ; | 
|---|
|  | 117 | S ISSDT=$$GET1^DIQ(52,RX,1,"I"),EXPDT=$$GET1^DIQ(52,RX,26,"I") | 
|---|
|  | 118 | S SUSRX=$O(^PS(52.5,"B",RX,0)) | 
|---|
|  | 119 | ; | 
|---|
|  | 120 | SUDT ; Asks for the new Suspense Date | 
|---|
|  | 121 | D FULL^VALM1 S %DT("B")=$$FMTE^XLFDT(SUSDT),%DT="EA",%DT("A")="SUSPENSE DATE: " | 
|---|
|  | 122 | W ! D ^%DT I Y<0!($D(DTOUT)) D PSOUL^PSSLOCK(RX) S VALMBCK="R" Q | 
|---|
|  | 123 | I Y<ISSDT D  G SUDT | 
|---|
|  | 124 | . W !!?5,"Suspense Date cannot be before Issue Date: ",$$FMTE^XLFDT(ISSDT),$C(7) | 
|---|
|  | 125 | I Y>EXPDT D  G SUDT | 
|---|
|  | 126 | . W !!?5,"Suspense Date cannot be after Expiration Date: ",$$FMTE^XLFDT(EXPDT),$C(7) | 
|---|
|  | 127 | S SUSDT=Y | 
|---|
|  | 128 | ; | 
|---|
|  | 129 | N DIR,DIRUT W ! | 
|---|
|  | 130 | S DIR("A",1)="     When you confirm, this REJECT will be marked resolved. A" | 
|---|
|  | 131 | S DIR("A",2)="     new claim will be re-submitted to the 3rd party payer" | 
|---|
|  | 132 | I $$GET1^DIQ(52.5,SUSRX,3)="" D | 
|---|
|  | 133 | . I SUSDT>DT D | 
|---|
|  | 134 | . . S DIR("A",3)="     when the prescription label for this fill is printed" | 
|---|
|  | 135 | . . S DIR("A",4)="     from suspense on "_$$FMTE^XLFDT(SUSDT)_"." | 
|---|
|  | 136 | . . S DIR("A",5)=" " | 
|---|
|  | 137 | . . S DIR("A",6)="     Note: THE LABEL FOR THIS PRESCRIPTION FILL WILL NOT BE" | 
|---|
|  | 138 | . . S DIR("A",7)="           PRINTED LOCAL FROM SUSPENSE BEFORE "_$$FMTE^XLFDT(SUSDT)_"." | 
|---|
|  | 139 | . E  D | 
|---|
|  | 140 | . . S DIR("A",3)="     the next time local labels are printed from suspense." | 
|---|
|  | 141 | E  D | 
|---|
|  | 142 | . I SUSDT>DT D | 
|---|
|  | 143 | . . S DIR("A",3)="     when the prescription is transmitted to CMOP on " | 
|---|
|  | 144 | . . S DIR("A",4)="     "_$$FMTE^XLFDT(SUSDT)_"." | 
|---|
|  | 145 | . . S DIR("A",5)=" " | 
|---|
|  | 146 | . . S DIR("A",6)="     Note: THIS PRESCRIPTION FILL WILL NOT BE TRANSMITTED TO" | 
|---|
|  | 147 | . . S DIR("A",7)="           CMOP BEFORE "_$$FMTE^XLFDT(SUSDT)_"." | 
|---|
|  | 148 | . E  D | 
|---|
|  | 149 | . . S DIR("A",3)="     when this prescription fill is transmitted to CMOP on" | 
|---|
|  | 150 | . . S DIR("A",4)="     the next CMOP transmission." | 
|---|
|  | 151 | ; | 
|---|
|  | 152 | S DIR("A",$O(DIR("A",""),-1)+1)=" " | 
|---|
|  | 153 | S DIR(0)="Y",DIR("A")="     Confirm? ",DIR("B")="YES" | 
|---|
|  | 154 | D ^DIR I $G(Y)=0!$D(DIRUT) S VALMBCK="R" D PSOUL^PSSLOCK(RX) Q | 
|---|
|  | 155 | ; | 
|---|
|  | 156 | ; - Suspense/Fill Date updates | 
|---|
|  | 157 | I SUSDT'=$$RXSUDT^PSOBPSUT(RX,RFL) D | 
|---|
|  | 158 | . N DA,DIE,DR,PSOX,SFN,INDT,DEAD | 
|---|
|  | 159 | . S DA=SUSRX,DIE="^PS(52.5,",DR=".02///"_SUSDT D ^DIE | 
|---|
|  | 160 | . S SFN=SUSRX,DEAD=0,INDT=SUSDT D CHANGE^PSOSUCH1(RX,RFL) | 
|---|
|  | 161 | ; | 
|---|
|  | 162 | ; - Flagging the prescription to be re-submitted to ECME on the next CMOP/Print from Suspense | 
|---|
|  | 163 | D RETRXF^PSOREJU2(RX,RFL,1) | 
|---|
|  | 164 | W ?40,"[Closing..." | 
|---|
|  | 165 | D CLOSE^PSOREJUT(RX,RFL,REJ,DUZ,8,"Fill Date changed to "_$$FMTE^XLFDT(SUSDT)_". A new claim will be re-submitted on this date.") | 
|---|
|  | 166 | W "OK]",!,$C(7) H 1 I $D(PSOSTFLT),PSOSTFLT'="B" S CHANGE=1 | 
|---|
|  | 167 | D PSOUL^PSSLOCK(RX) | 
|---|
|  | 168 | Q | 
|---|
|  | 169 | ; | 
|---|
|  | 170 | PTLBL(RX,RFL) ; Returns whether the user should be prompted for 'Print Label?' or not | 
|---|
|  | 171 | N PTLBL,CMP,LBL | 
|---|
|  | 172 | I $$FIND^PSOREJUT(RX,RFL) Q 0       ; Has OPEN/UNRESOLVED 3rd pary payer reject | 
|---|
|  | 173 | I $$GET1^DIQ(52,RX,100,"I") Q 0     ; Rx status not ACTIVE | 
|---|
|  | 174 | I $$RXRLDT^PSOBPSUT(RX,RFL) Q 0     ; Rx Released | 
|---|
|  | 175 | ; - CMOP Rx fill? | 
|---|
|  | 176 | S PTLBL=1,CMP=0 | 
|---|
|  | 177 | F  S CMP=$O(^PSRX(RX,4,CMP)) Q:'CMP  D  Q:'PTLBL | 
|---|
|  | 178 | . I +$$GET1^DIQ(52.01,CMP_","_RX,2,"I")=RFL S PTLBL=0 | 
|---|
|  | 179 | I 'PTLBL Q 0 | 
|---|
|  | 180 | ; - Label already printed for Rx fill? | 
|---|
|  | 181 | S LBL=0 | 
|---|
|  | 182 | F  S LBL=$O(^PSRX(RX,"L",LBL)) Q:'LBL  D  Q:'PTLBL | 
|---|
|  | 183 | . I +$$GET1^DIQ(52.032,LBL_","_RX,1,"I")'=RFL Q | 
|---|
|  | 184 | . I $$GET1^DIQ(52.032,LBL_","_RX,4,"I") Q | 
|---|
|  | 185 | . I $$GET1^DIQ(52.032,LBL_","_RX,2)["INTERACTION" Q | 
|---|
|  | 186 | . S PTLBL=0 | 
|---|
|  | 187 | ; | 
|---|
|  | 188 | I PTLBL D | 
|---|
|  | 189 | . N DIR,DIRUT,Y | 
|---|
|  | 190 | . W ! S DIR(0)="Y",DIR("A")="Print Label? ",DIR("B")="YES" | 
|---|
|  | 191 | . D ^DIR I $G(Y)=0!$D(DIRUT) S PTLBL=0 Q | 
|---|
|  | 192 | ; | 
|---|
|  | 193 | Q PTLBL | 
|---|
|  | 194 | ; | 
|---|
|  | 195 | DTRNG(BGN,END) ; Date Range Selection | 
|---|
|  | 196 | ;Input: (o) BGN - Default Begin Date | 
|---|
|  | 197 | ;       (o) END - Default End Date | 
|---|
|  | 198 | ; | 
|---|
|  | 199 | N %DT,DTOUT,DUOUT,DTRNG,X,Y | 
|---|
|  | 200 | S DTRNG="" | 
|---|
|  | 201 | S %DT="AEST",%DT("A")="BEGIN REJECT DATE: ",%DT("B")=$G(BGN) K:$G(BGN)="" %DT("B") D ^%DT | 
|---|
|  | 202 | I $G(DUOUT)!$G(DTOUT)!($G(Y)=-1) Q "^" | 
|---|
|  | 203 | S $P(DTRNG,U)=Y | 
|---|
|  | 204 | ; | 
|---|
|  | 205 | W ! K %DT | 
|---|
|  | 206 | S %DT="AEST",%DT("A")="END REJECT DATE: ",%DT("B")=$G(END),%DT(0)=Y K:$G(END)="" %DT("B") D ^%DT | 
|---|
|  | 207 | I $G(DUOUT)!$G(DTOUT)!($G(Y)=-1) Q "^" | 
|---|
|  | 208 | ; | 
|---|
|  | 209 | ;Define Entry | 
|---|
|  | 210 | S $P(DTRNG,U,2)=Y | 
|---|
|  | 211 | ; | 
|---|
|  | 212 | Q DTRNG | 
|---|