| 1 | PSXBPSRP ;BHAM ISC/MFR - CMOP/ECME ACTIVITY REPORT ;09/01/2006 | 
|---|
| 2 | ;;2.0;CMOP;**63**;11 Apr 97;Build 8 | 
|---|
| 3 | ;External reference to ^PSRX( supported by IA #1221 | 
|---|
| 4 | ;External reference to ^PS(59 supported by IA #1976 | 
|---|
| 5 | ;External reference to ^PSOBPSUT supported by IA #4701 | 
|---|
| 6 | ;External reference to ^BPSUTIL supported by IA #4410 | 
|---|
| 7 | ;External reference to ^IBNCPDPI supported by IA #4729 | 
|---|
| 8 | ; | 
|---|
| 9 | EN ; Entry Point | 
|---|
| 10 | N %,%ZIS,EXCEL,STDT,TERM,ENDT,DIVDA,DIVNM,DTOUT,I,LINE,POP,VA,VAERR | 
|---|
| 11 | N X,Y,ZTDESC,ZTIO,ZTQUEUED,ZTREQ,ZTRTN,ZTSAVE,ZTSK | 
|---|
| 12 | ; | 
|---|
| 13 | BDT ; - Prompt to select Date Range (Return: Start Date^End Date) | 
|---|
| 14 | S X=$$SELDATE() I X="^" S POP=1 G EXIT | 
|---|
| 15 | S STDT=$P(X,U),ENDT=$P(X,U,2) | 
|---|
| 16 | ; | 
|---|
| 17 | DIV ; - Get Division(s) (Return: DIVDA and DIVNM arrays) | 
|---|
| 18 | D SELDIV I '$D(DIVNM) S POP=1 G EXIT | 
|---|
| 19 | ; | 
|---|
| 20 | EXC ;- Prompt for Excel Capture | 
|---|
| 21 | S EXCEL=$$EXCEL^PSXBPSUT() I EXCEL="^" S POP=1 G EXIT | 
|---|
| 22 | ; | 
|---|
| 23 | DEV ; - Prompt for Device | 
|---|
| 24 | W !! S %ZIS="MQ",%ZIS("A")="Select Printer: ",%ZIS("B")="" | 
|---|
| 25 | D ^%ZIS I POP S POP=1 G EXIT | 
|---|
| 26 | S TERM=$S($E($G(IOST),1,2)="C-":1,1:0) | 
|---|
| 27 | I '$D(IO("Q")) G START | 
|---|
| 28 | ; | 
|---|
| 29 | QUE ; - Process queue device | 
|---|
| 30 | S ZTSAVE("*")="" | 
|---|
| 31 | S ZTRTN="START^PSXBPSRP" | 
|---|
| 32 | S ZTDESC="CMOP/ECME Activity Report" | 
|---|
| 33 | D ^%ZTLOAD | 
|---|
| 34 | W !,$S($D(ZTSK):"REQUEST QUEUED TASK="_ZTSK,1:"REQUEST CANCELLED") | 
|---|
| 35 | D HOME^%ZIS | 
|---|
| 36 | S TERM=$S($E($G(IOST),1,2)="C-":1,1:0) | 
|---|
| 37 | G EXIT | 
|---|
| 38 | ; | 
|---|
| 39 | ;Report Processing Tag | 
|---|
| 40 | ; | 
|---|
| 41 | START N BPFND,STDTE,ENDTE,LINE,POP,Y | 
|---|
| 42 | S BPFND=0,LINE="W ! F I=1:1:80 W ""=""" | 
|---|
| 43 | U IO | 
|---|
| 44 | ; | 
|---|
| 45 | ;Excel Display - Print Header Record | 
|---|
| 46 | I EXCEL D PLINEX | 
|---|
| 47 | ; | 
|---|
| 48 | S Y=STDT X ^DD("DD") S STDTE=Y | 
|---|
| 49 | S Y=ENDT X ^DD("DD") S ENDTE=Y | 
|---|
| 50 | ; | 
|---|
| 51 | ;Loop through divisions and display | 
|---|
| 52 | S DIVDA=0 F  S DIVDA=$O(DIVDA(DIVDA)) Q:DIVDA'>0  D ONEDIV(.BPFND,STDTE,ENDTE) Q:$G(POP) | 
|---|
| 53 | ; | 
|---|
| 54 | ;Make sure a record was printed | 
|---|
| 55 | I '$G(POP),BPFND=0 D | 
|---|
| 56 | .I 'EXCEL D TITLE | 
|---|
| 57 | .W !,"NO DATA FOUND FOR CHOSEN PARAMETERS" | 
|---|
| 58 | .I TERM,'EXCEL D PAUSE2 | 
|---|
| 59 | ; | 
|---|
| 60 | I '$G(POP),'EXCEL S POP=2 | 
|---|
| 61 | G EXIT | 
|---|
| 62 | ; | 
|---|
| 63 | ONEDIV(BPFND,STDTE,ENDTE) ; - Display information for one division | 
|---|
| 64 | N %,PSXDT,TRX,PS,Y | 
|---|
| 65 | S PSXDT=STDT-.1 | 
|---|
| 66 | F  S PSXDT=$O(^PSX(550.2,"D",PSXDT)) Q:'PSXDT!(PSXDT>(ENDT+.24))  D  Q:$G(POP) | 
|---|
| 67 | .S (PS,TRX)=0 F  S TRX=$O(^PSX(550.2,"D",PSXDT,TRX)) Q:'TRX  D  Q:$G(POP) | 
|---|
| 68 | . . N TEMP,DATA | 
|---|
| 69 | . . D GETS^DIQ(550.2,TRX,".01;1;2;3;5;6;7;8;9;10;13;14","","TEMP") | 
|---|
| 70 | . . M DATA=TEMP(550.2,TRX_",") | 
|---|
| 71 | . . I $G(DATA(.01))="" Q | 
|---|
| 72 | ..I '$D(DIVNM(DATA(2))) Q | 
|---|
| 73 | ..I DATA(2)'=DIVDA(DIVDA) Q | 
|---|
| 74 | ..; | 
|---|
| 75 | ..;Set flag that at least one record was found | 
|---|
| 76 | ..S BPFND=1 | 
|---|
| 77 | ..; | 
|---|
| 78 | ..;Display Transmission Information - Normal Display Only | 
|---|
| 79 | ..I 'EXCEL D | 
|---|
| 80 | ...D TITLE | 
|---|
| 81 | ...W !!,?7,"TRANSMISSION:",?35,DATA(.01) | 
|---|
| 82 | ...W !,?7,"STATUS:",?35,DATA(1) | 
|---|
| 83 | ...W !,?7,"DIVISION:",?35,DATA(2) | 
|---|
| 84 | ...W !,?7,"CMOP SYSTEM:",?35,DATA(3) | 
|---|
| 85 | ...W !,?7,"TRANSMISSION DATE/TIME:",?35,DATA(5) | 
|---|
| 86 | ...I DATA(6) W !,?7,"CREATED DATE/TIME:",?35,DATA(6) | 
|---|
| 87 | ...I DATA(7) W !,?7,"RECEIVED DATE/TIME:",?35,DATA(7) | 
|---|
| 88 | ...I DATA(8) W !,?7,"RETRANSMISSION #:",?35,DATA(8) | 
|---|
| 89 | ...I DATA(9) W !,?7,"ORIGINAL TRANS.:",?35,DATA(9) | 
|---|
| 90 | ...I DATA(10) W !,?7,"CLOSED DATE/TIME:",?35,DATA(10) | 
|---|
| 91 | ...W !,?7,"TOTAL PATIENTS:",?35,DATA(13) | 
|---|
| 92 | ...W !,?7,"TOTAL RXS:",?35,DATA(14) | 
|---|
| 93 | ..; | 
|---|
| 94 | ..;Display Records in Normal Format | 
|---|
| 95 | ..I 'EXCEL D  Q | 
|---|
| 96 | ...S PS=$$PDET(TRX) Q:$G(POP) | 
|---|
| 97 | ...I 'PS D CHKP(3) Q:$G(POP)  D NDAT | 
|---|
| 98 | ...I TERM,'EXCEL D PAUSE Q:$G(POP) | 
|---|
| 99 | ..; | 
|---|
| 100 | ..;Display Records in Excel Format | 
|---|
| 101 | ..D PDETEX(TRX) | 
|---|
| 102 | Q | 
|---|
| 103 | ; | 
|---|
| 104 | ;Display Record(s) - Normal Format | 
|---|
| 105 | PDET(TRX) N BIEN,DFN,RFL,M,N,NDCR,NDCS,RXS,PS,RDT,RXI,VA | 
|---|
| 106 | D PLINE | 
|---|
| 107 | S (PS,RXS)=0 F  S RXS=$O(^PSX(550.2,TRX,15,RXS)) Q:'RXS  D  Q:$G(POP) | 
|---|
| 108 | .S RXI=+$$GET1^DIQ(550.215,RXS_","_TRX,".01","I") | 
|---|
| 109 | .S RFL=+$$GET1^DIQ(550.215,RXS_","_TRX,".02","I") | 
|---|
| 110 | .S DFN=+$$GET1^DIQ(550.215,RXS_","_TRX,".03","I") | 
|---|
| 111 | .Q:$$STATUS^PSOBPSUT(RXI,RFL)="" | 
|---|
| 112 | .D CHKP(2) Q:$G(POP) | 
|---|
| 113 | .S PS=1 D PID^VADPT | 
|---|
| 114 | .S BIEN=RXI_"."_$E($TR($J("",4-$L(RFL))," ","0")_RFL,1,4)_1 | 
|---|
| 115 | .S RDT=$S(RFL=0:$$GET1^DIQ(52,RXI,31,"I"),1:$$GET1^DIQ(52.1,RFL_","_RXI_",",17,"I")) | 
|---|
| 116 | .W !,$E($$GET1^DIQ(2,DFN,.01),1,14)_" ("_$G(VA("BID"))_")" | 
|---|
| 117 | .W ?22,RXI_"/"_$$GET1^DIQ(52,RXI,.01)_$S($G(^PSRX(RXI,"IB")):"$",1:"")_$$ECME^PSOBPSUT(RXI)_"/"_RFL | 
|---|
| 118 | .S (NDCS,NDCR)="",(M,N)=0 | 
|---|
| 119 | .F  S M=$O(^PSRX(RXI,4,M)) Q:'M  S N=^(M,0) I $P(N,"^",3)=RFL S NDCR=$P(N,"^",8),NDCS=$P(N,"^",9) | 
|---|
| 120 | .W ?45,$E(NDCS,1,13),?59,$E(NDCR,1,13),?73,$S(RDT:"DISPENS",1:"TRANSMI") | 
|---|
| 121 | .W !,?3,$E($$GET1^DIQ(52,RXI,6),1,18),?22,$$BPSPLN^BPSUTIL(RXI,RFL) | 
|---|
| 122 | .W ?38,$E($$STATUS^PSOBPSUT(RXI,RFL),1,7),?48,$P($$BILLINFO^IBNCPDPI(RXI,RFL),"^",1) | 
|---|
| 123 | .W ?58,$S(RDT:$E(RDT,4,5)_"/"_$E(RDT,6,7)_"/"_$E(RDT,2,3),1:"") | 
|---|
| 124 | Q PS | 
|---|
| 125 | ; | 
|---|
| 126 | ;Display Record(s) - Excel Format | 
|---|
| 127 | PDETEX(TRX) N BIEN,DFN,RFL,M,N,NDCR,NDCS,RXS,PS,RDT,RXI,VA | 
|---|
| 128 | S RXS=0 F  S RXS=$O(^PSX(550.2,TRX,15,RXS)) Q:'RXS  D | 
|---|
| 129 | .S RXI=+$$GET1^DIQ(550.215,RXS_","_TRX,".01","I") | 
|---|
| 130 | .S RFL=+$$GET1^DIQ(550.215,RXS_","_TRX,".02","I") | 
|---|
| 131 | .S DFN=+$$GET1^DIQ(550.215,RXS_","_TRX,".03","I") | 
|---|
| 132 | .Q:$$STATUS^PSOBPSUT(RXI,RFL)="" | 
|---|
| 133 | .S PS=1 D PID^VADPT | 
|---|
| 134 | .S BIEN=RXI_"."_$E($TR($J("",4-$L(RFL))," ","0")_RFL,1,4)_1 | 
|---|
| 135 | .S RDT=$S(RFL=0:$$GET1^DIQ(52,RXI,31,"I"),1:$$GET1^DIQ(52.1,RFL_","_RXI_",",17,"I")) | 
|---|
| 136 | .W !,DATA(.01),U  ;Transmission | 
|---|
| 137 | .W DATA(1),U  ;Status | 
|---|
| 138 | .W DATA(2),U  ;Division | 
|---|
| 139 | .W DATA(3),U  ;CMOP System | 
|---|
| 140 | .W DATA(5),U  ;Transmission Date/Time | 
|---|
| 141 | .W $E($$GET1^DIQ(2,DFN,.01),1,14),U  ;Name | 
|---|
| 142 | .W "("_$G(VA("BID"))_")",U  ;Pt.ID | 
|---|
| 143 | .W RXI,U                             ;ECME# | 
|---|
| 144 | .W $$GET1^DIQ(52,RXI,.01)_$S($G(^PSRX(RXI,"IB")):"$",1:"")_$$ECME^PSOBPSUT(RXI),U  ;RX# | 
|---|
| 145 | .W RFL,U                     ;RFL# | 
|---|
| 146 | .N NDCS,NDCR,M,N S (NDCS,NDCR)="",(M,N)=0 | 
|---|
| 147 | .F  S M=$O(^PSRX(RXI,4,M)) Q:'M  S N=^(M,0) I $P(N,"^",3)=RFL S NDCR=$P(N,"^",8),NDCS=$P(N,"^",9) | 
|---|
| 148 | .W $E(NDCS,1,13),U          ;NDC SENT | 
|---|
| 149 | .W $E(NDCR,1,13),U          ;NDC RECVD | 
|---|
| 150 | .W $S(RDT:"DISPENS",1:"TRANSMI"),U  ;CMOP-STAT | 
|---|
| 151 | .W $E($$GET1^DIQ(52,RXI,6),1,18),U  ;DRUG | 
|---|
| 152 | .W $$BPSPLN^BPSUTIL(RXI,RFL),U ;INSURANCE | 
|---|
| 153 | .W $E($$STATUS^PSOBPSUT(RXI,RFL),1,7),U  ;PAY-STAT | 
|---|
| 154 | .W $P($$BILLINFO^IBNCPDPI(RXI,RFL),"^"),U  ;BILL# | 
|---|
| 155 | .W $S(RDT:$E(RDT,4,5)_"/"_$E(RDT,6,7)_"/"_$E(RDT,2,3),1:"")  ;REL-DATE | 
|---|
| 156 | Q | 
|---|
| 157 | ; | 
|---|
| 158 | ;- Display Header - Normal | 
|---|
| 159 | PLINE W !,"NAME",?22,"ECME#/RX#/FL#",?45,"NDC SENT",?59,"NDC RECVD",?71,"CMOP-STAT" | 
|---|
| 160 | W !,"   DRUG",?22,"INSURANCE",?38,"PAY-STAT",?48,"BILL#",?58,"REL-DATE" | 
|---|
| 161 | X LINE | 
|---|
| 162 | Q | 
|---|
| 163 | ; | 
|---|
| 164 | ;- Display Header - Excel | 
|---|
| 165 | PLINEX W !,"TRANSMISSION",U,"STATUS",U,"DIVISION",U,"CMOP SYSTEM",U,"TRANSMISSION DATE/TIME",U | 
|---|
| 166 | W "NAME",U,"Pt.ID",U,"ECME#",U,"RX#",U,"FL#",U,"NDC SENT",U,"NDC RECVD",U,"CMOP-STAT",U | 
|---|
| 167 | W "DRUG",U,"INSURANCE",U,"PAY-STAT",U,"BILL#",U,"REL-DATE" | 
|---|
| 168 | Q | 
|---|
| 169 | ; | 
|---|
| 170 | EXIT I '$G(POP) D PAUSE2 | 
|---|
| 171 | I $D(ZTQUEUED) S ZTREQ="@" Q | 
|---|
| 172 | I $G(POP)'=1 D ^%ZISC | 
|---|
| 173 | Q | 
|---|
| 174 | ; | 
|---|
| 175 | ;- Print message if no billable prescriptions | 
|---|
| 176 | NDAT W !!,"********* BATCH HAS NO ECME BILLABLE PRESCRIPTIONS *******",! | 
|---|
| 177 | Q | 
|---|
| 178 | ; | 
|---|
| 179 | TITLE W @IOF | 
|---|
| 180 | W !,?25,"CMOP/ECME ACTIVITY REPORT "_$S($G(BPFND)=1:"for "_$E(DIVDA(DIVDA),1,24),1:"") | 
|---|
| 181 | W !,"For ",STDTE,"  thru  ",$P(ENDTE,"@"),?40,"Printed: ",$$FMTE^XLFDT($$NOW^XLFDT()) | 
|---|
| 182 | X LINE | 
|---|
| 183 | Q | 
|---|
| 184 | ; | 
|---|
| 185 | CHKP(BPLINES) Q:$G(EXCEL) | 
|---|
| 186 | S BPLINES=BPLINES+1 | 
|---|
| 187 | I $G(TERM) S BPLINES=BPLINES+2 | 
|---|
| 188 | I $Y>(IOSL-BPLINES) D:$G(TERM) PAUSE Q:$G(POP)  D TITLE,PLINE Q | 
|---|
| 189 | Q | 
|---|
| 190 | ; | 
|---|
| 191 | ; Enter Date Range | 
|---|
| 192 | ; | 
|---|
| 193 | ; Return Value -> P1^P2 | 
|---|
| 194 | ; | 
|---|
| 195 | ;           where P1 = From Date | 
|---|
| 196 | ;                    = ^ Exit | 
|---|
| 197 | ;                 P2 = To Date | 
|---|
| 198 | ;                    = blank for Exit | 
|---|
| 199 | ; | 
|---|
| 200 | SELDATE() N DIR,DIRUT,DTOUT,DUOUT,VAL,X,Y | 
|---|
| 201 | S VAL="" | 
|---|
| 202 | S DIR(0)="DA",DIR("A")="ENTER BEGINNING TRANSMISSION DATE: " | 
|---|
| 203 | D ^DIR | 
|---|
| 204 | ; | 
|---|
| 205 | ;Check for "^", timeout, or blank entry | 
|---|
| 206 | I ($G(DUOUT)=1)!($G(DTOUT)=1)!($G(X)="") S VAL="^" | 
|---|
| 207 | ; | 
|---|
| 208 | I VAL="" D | 
|---|
| 209 | .S $P(VAL,U)=Y | 
|---|
| 210 | .S DIR(0)="DA^"_VAL,DIR("A")="ENTER ENDING TRANSMISSION DATE: " | 
|---|
| 211 | .D ^DIR | 
|---|
| 212 | .; | 
|---|
| 213 | .;Check for "^", timeout, or blank entry | 
|---|
| 214 | .I ($G(DUOUT)=1)!($G(DTOUT)=1)!($G(X)="") S VAL="^" Q | 
|---|
| 215 | .; | 
|---|
| 216 | .;Define Entry | 
|---|
| 217 | .S $P(VAL,U,2)=Y | 
|---|
| 218 | ; | 
|---|
| 219 | Q VAL | 
|---|
| 220 | ; | 
|---|
| 221 | ;Select Divisions | 
|---|
| 222 | ; | 
|---|
| 223 | ; Returns Arrays -> DIVNM("names of divisions") = selection number | 
|---|
| 224 | ;                   DIVDA("iens of divisions") = name of division | 
|---|
| 225 | SELDIV N DIR,DIV,DIVX,DIRUT,DUOUT,DTOUT,I,X,Y | 
|---|
| 226 | W !!,"SELECTION OF DIVISION(S)",! | 
|---|
| 227 | S DIV="" F I=1:1 S DIV=$O(^PS(59,"B",DIV)) Q:DIV=""  S DIVNM(I)=DIV,DIVNM(DIV)=I,DIVDA=$O(^PS(59,"B",DIV,0)),DIVNM(I,"I")=DIVDA | 
|---|
| 228 | S I=I-1 | 
|---|
| 229 | K DIR S DIR(0)="S^A:ALL DIVISIONS;S:SELECT DIVISIONS" | 
|---|
| 230 | ; | 
|---|
| 231 | D ^DIR | 
|---|
| 232 | ; | 
|---|
| 233 | ;Check for "^", timeout, or blank entry | 
|---|
| 234 | I ($G(DUOUT)=1)!($G(DTOUT)=1)!($G(Y)="^") K DIVNM Q | 
|---|
| 235 | ; | 
|---|
| 236 | ;All Divisions | 
|---|
| 237 | I Y="A" D ALL Q | 
|---|
| 238 | ; | 
|---|
| 239 | ;Select Divisions | 
|---|
| 240 | I Y="S" D SELECT(I),ALL | 
|---|
| 241 | Q | 
|---|
| 242 | ; | 
|---|
| 243 | ;Select which divisions to display | 
|---|
| 244 | SELECT(I) N C,DIR,DIVX,DIRUT,DUOUT,DTOUT,X,Y | 
|---|
| 245 | F C=1:1:I S DIR("A",C)=C_"    "_DIVNM(C) | 
|---|
| 246 | S DIR(0)="LO^1:"_I,DIR("A")="Select Division(s) " | 
|---|
| 247 | D ^DIR | 
|---|
| 248 | ; | 
|---|
| 249 | ;Check for "^", timeout, or blank entry | 
|---|
| 250 | I ($G(DUOUT)=1)!($G(DTOUT)=1)!($G(Y)="^")!('+Y) K DIVNM Q | 
|---|
| 251 | ; | 
|---|
| 252 | M DIVX=DIVNM K DIVNM | 
|---|
| 253 | F I=1:1 S X=$P(Y,",",I) Q:'X  M DIVNM(X)=DIVX(X) S DIVNM=DIVX(X),DIVNM(DIVNM)=X | 
|---|
| 254 | Q | 
|---|
| 255 | ; | 
|---|
| 256 | ;Display selected divisions | 
|---|
| 257 | ALL N DA,DIR,DIV,DIRUT,DUOUT,DTOUT,X,Y | 
|---|
| 258 | Q:'$D(DIVNM) | 
|---|
| 259 | W !!,"You have selected:",! S DIV=0 F  S DIV=$O(DIVNM(DIV)) Q:'DIV  W !,DIV,?5,DIVNM(DIV) | 
|---|
| 260 | S DIR(0)="Y",DIR("A")="Is this correct",DIR("B")="YES" D ^DIR | 
|---|
| 261 | K DIR | 
|---|
| 262 | I Y=1 S DIV=0 F  S DIV=$O(DIVNM(DIV)) Q:'DIV  S DA=DIVNM(DIV,"I"),DIVDA(DA)=DIVNM(DIV) K DIVNM(DIV) | 
|---|
| 263 | ; | 
|---|
| 264 | ;Check for "^", timeout, or non-yes entry | 
|---|
| 265 | I ($G(DUOUT)=1)!($G(DTOUT)=1)!($G(Y)'=1) K DIVNM | 
|---|
| 266 | Q | 
|---|
| 267 | ; | 
|---|
| 268 | ;Screen Pause 2 | 
|---|
| 269 | PAUSE2 Q:'$G(TERM) | 
|---|
| 270 | N X | 
|---|
| 271 | U IO(0) W !!,"Press RETURN to continue:" | 
|---|
| 272 | R X:$G(DTIME) | 
|---|
| 273 | U IO | 
|---|
| 274 | Q | 
|---|
| 275 | ; | 
|---|
| 276 | ;Screen Pause 1 | 
|---|
| 277 | ; | 
|---|
| 278 | ; Return variable - BPQ = 0 Continue | 
|---|
| 279 | ;                         2 Quit | 
|---|
| 280 | PAUSE N X | 
|---|
| 281 | U IO(0) W !!,"Press RETURN to continue, '^' to exit:" | 
|---|
| 282 | R X:$G(DTIME) S:'$T X="^" S:X["^" POP=2 | 
|---|
| 283 | U IO | 
|---|
| 284 | Q | 
|---|