| 1 | PSOCMOPR ;BHAM ISC/PDW - CMOP CONTROLLED SUBSTANCE RX DISPENSE REPORT ; 05 Nov 1999  9:39 AM | 
|---|
| 2 | ;;7.0;OUTPATIENT PHARMACY;**33,52**;DEC 1997 | 
|---|
| 3 | ; External reference to file #550.2 granted by DBIA 2231 | 
|---|
| 4 | ; External reference to file #50 granted by DBIA 221 | 
|---|
| 5 | Q | 
|---|
| 6 | ; | 
|---|
| 7 | S ;ENTRY | 
|---|
| 8 | I '$D(PSOPAR) D ^PSOLSET I '$D(PSOPAR) W $C(7),!!,"A Pharmacy Division Must Be Selected!",! G EXIT | 
|---|
| 9 | ; check for multi divisions | 
|---|
| 10 | ; | 
|---|
| 11 | S X=0,I=0 F  S I=$O(^PS(59,I)) Q:'I  S X=X+1 | 
|---|
| 12 | I X<2 S QDIV="A" G CNT1 | 
|---|
| 13 | K DIR S DIR(0)="SA^A:All divisions;S:Single division" | 
|---|
| 14 | S DIR("A")="Print for (A)ll or a (S)ingle division? (A/S) " | 
|---|
| 15 | S DIR("B")="S" | 
|---|
| 16 | D ^DIR K DIR | 
|---|
| 17 | G:$D(DIRUT) EXIT | 
|---|
| 18 | S QDIV=Y | 
|---|
| 19 | ; select division if QDIV="S" | 
|---|
| 20 | I QDIV="S" D  G:Y'>0 S | 
|---|
| 21 | . K DIC | 
|---|
| 22 | . S DIC(0)="AEQM",DIC=59 D ^DIC | 
|---|
| 23 | . S:+Y QDIV=+Y | 
|---|
| 24 | . K DIC | 
|---|
| 25 | CNT1 ;Continue point 1 | 
|---|
| 26 | K DIR S DIR(0)="S^1:Sort by Release Date;2:Sort by Drug" | 
|---|
| 27 | S DIR("A")="Select one of the following: " | 
|---|
| 28 | S DIR("B")=1 | 
|---|
| 29 | D ^DIR K DIR | 
|---|
| 30 | G:$D(DIRUT) EXIT | 
|---|
| 31 | S QSORT=Y | 
|---|
| 32 | DATE ; ask date range | 
|---|
| 33 | K %DT | 
|---|
| 34 | S %DT(0)="-NOW",%DT("A")="Enter Start date: ",%DT="AEPX" D ^%DT | 
|---|
| 35 | G:"^"[$E(X) EXIT | 
|---|
| 36 | S (%DT(0),SCANBDT)=Y | 
|---|
| 37 | S Y=DT X ^DD("DD") S END=Y S %DT("A")="Ending date: ",%DT("B")=END D ^%DT K %DT | 
|---|
| 38 | G:"^"[$E(X) EXIT | 
|---|
| 39 | S SCANEDT=Y D DD^%DT S EDATE=Y | 
|---|
| 40 | S Y=SCANBDT D DD^%DT S BDATE=Y | 
|---|
| 41 | ; | 
|---|
| 42 | W !!,"This report is designed for a 132-column format.",! | 
|---|
| 43 | W !,"It is recommended that this report be queued.",!! | 
|---|
| 44 | ;*** | 
|---|
| 45 | K IO("Q"),%ZIS,IOP,ZTSK S %ZIS="Q" | 
|---|
| 46 | D ^%ZIS I POP S IOP=PSOION D ^%ZIS K IOP,PSOION G EXIT | 
|---|
| 47 | K PSOION | 
|---|
| 48 | ; set subscript for ^XTMP storage | 
|---|
| 49 | S PSOJOB=$J_"_"_$P($H,",",2) | 
|---|
| 50 | S PSOSUB="PSO_CMOP_CS"_PSOJOB | 
|---|
| 51 | ; setup queing | 
|---|
| 52 | I $D(IO("Q")) D  G EXIT | 
|---|
| 53 | . F X="BDATE","EDATE","QDIV","QSORT","SCANBDT","SCANEDT","PSOSUB" S ZTSAVE(X)="" | 
|---|
| 54 | . S ZTRTN="DEQUEUE^PSOCMOPR",ZTDESC="Report of CMOP CS RX Dispenses" | 
|---|
| 55 | . D ^%ZTLOAD W:$D(ZTSK) !,"Report Queued to Print !!",! K ZTSK,IO("Q") | 
|---|
| 56 | ; | 
|---|
| 57 | DEQUEUE ; TASKING RE-ENTRY POINT AND PROCESSING | 
|---|
| 58 | D COMPUTE,PRINT | 
|---|
| 59 | G EXIT | 
|---|
| 60 | Q | 
|---|
| 61 | COMPUTE ; Deque point for computing | 
|---|
| 62 | ; store in ^XTMP(PSOSUB, for printing queue | 
|---|
| 63 | K ^XTMP(PSOSUB),PSOQUIT | 
|---|
| 64 | S X1=DT,X2=2 D C^%DTC | 
|---|
| 65 | S ^XTMP(PSOSUB,0)=X_U_DT_"^  Storage for CMOP-CS-RX STATUS DIVISION REPORT" | 
|---|
| 66 | S SCANDT=SCANBDT\1-.1 | 
|---|
| 67 | ; Set status catagories | 
|---|
| 68 | ; | 
|---|
| 69 | F  S SCANDT=$O(^PSRX("AD",SCANDT)) Q:SCANDT>SCANEDT  Q:SCANDT'>0  D | 
|---|
| 70 | . S RX=0 F  S RX=$O(^PSRX("AD",SCANDT,RX)) Q:RX'>0  D | 
|---|
| 71 | .. S FILL="" F  S FILL=$O(^PSRX("AD",SCANDT,RX,FILL)) Q:FILL=""  D RX | 
|---|
| 72 | Q | 
|---|
| 73 | RX ; check & gather RX,Fills data | 
|---|
| 74 | ; | 
|---|
| 75 | I '$D(^PSRX(RX,4)) Q  ;no CMOP events | 
|---|
| 76 | I '$O(^PSRX(RX,4,0)) Q  ; no CMOP events | 
|---|
| 77 | D CMOP ;                          get CMOP ST - FAC | 
|---|
| 78 | Q:'TRANDA  ; no CMOP event for FILL | 
|---|
| 79 | ; | 
|---|
| 80 | ;    test for CS category 3,4,5 & C | 
|---|
| 81 | S DRUGDA=$$GET1^DIQ(52,RX,6,"I") | 
|---|
| 82 | S DEA=$$GET1^DIQ(50,DRUGDA,3) | 
|---|
| 83 | I DEA'[3,DEA'[4,DEA'[5 Q | 
|---|
| 84 | ; | 
|---|
| 85 | ; get qty & div & reldt per original or refil | 
|---|
| 86 | I FILL=0 S QTY=$$GET1^DIQ(52,RX,7),DIV=$$GET1^DIQ(52,RX,20),DIVDA=$$GET1^DIQ(52,RX,20,"I") S RELDT=$$GET1^DIQ(52,RX,31,"I") I 1 | 
|---|
| 87 | E  D | 
|---|
| 88 | . S RXF=^PSRX(RX,1,FILL,0) | 
|---|
| 89 | . S QTY=$P(RXF,U,4),DIVDA=$P(RXF,U,9) | 
|---|
| 90 | . S RELDT=$P(RXF,U,18) | 
|---|
| 91 | . S DIV=$$GET1^DIQ(59,DIVDA,.01) | 
|---|
| 92 | ; test div if QDIV | 
|---|
| 93 | I +QDIV,DIVDA'=QDIV Q | 
|---|
| 94 | ; | 
|---|
| 95 | S:RELDT="" RELDT="Not Released" | 
|---|
| 96 | S DRUG=$$GET1^DIQ(50,DRUGDA,.01) ; get DRG; | 
|---|
| 97 | S PAT=$$GET1^DIQ(52,RX,2) ;       get PAT | 
|---|
| 98 | S PATDA=$$GET1^DIQ(52,RX,2,"I") | 
|---|
| 99 | S SSN=$$GET1^DIQ(2,PATDA,.09),SSN="("_$E(SSN,6,9)_")" | 
|---|
| 100 | ; | 
|---|
| 101 | ; store according to sort | 
|---|
| 102 | I QSORT=2 S ^XTMP(PSOSUB,DIV,DRUG,RELDT,TRANDA)=PAT_U_SSN_U_QTY_U_ST_U_FAC_U_RX_U_FILL_U_DRUG | 
|---|
| 103 | E  S ^XTMP(PSOSUB,DIV,RELDT,TRANDA)=PAT_U_SSN_U_QTY_U_ST_U_FAC_U_RX_U_FILL_U_DRUG | 
|---|
| 104 | ; | 
|---|
| 105 | Q | 
|---|
| 106 | ; | 
|---|
| 107 | CMOP ;loop CMOP event for fill, status, and facility | 
|---|
| 108 | ; sets TRANDA for XTMP subscript | 
|---|
| 109 | S EVTRDA=0,TRANDA=0 | 
|---|
| 110 | S (ST,FAC)="" | 
|---|
| 111 | ; loop events : EVTRDA will be the last event for the FILL in question | 
|---|
| 112 | S EVDA=0 | 
|---|
| 113 | F  S EVDA=$O(^PSRX(RX,4,EVDA)) Q:EVDA'>0  S:FILL=$P(^(EVDA,0),U,3) EVTRDA=EVDA | 
|---|
| 114 | Q:'EVTRDA | 
|---|
| 115 | S EVENT=^PSRX(RX,4,EVTRDA,0) | 
|---|
| 116 | S ST=$P(EVENT,U,4) | 
|---|
| 117 | S ST=$S(ST=0:"T",ST=1:"D",ST=2:"RT",ST=3:"ND",1:"") | 
|---|
| 118 | S TRANDA=$P(EVENT,U,1) | 
|---|
| 119 | S FAC=$$GET1^DIQ(550.2,TRANDA,3) | 
|---|
| 120 | K EVDA,EVTRDA | 
|---|
| 121 | Q | 
|---|
| 122 | PRINT ; print entry point | 
|---|
| 123 | K PSOQUIT,PSOPG,DIV | 
|---|
| 124 | S PSOQUIT=0 | 
|---|
| 125 | D COLUMN ; set column spacing | 
|---|
| 126 | D PGHDR | 
|---|
| 127 | I $O(^XTMP(PSOSUB,0))="" D  G EXIT | 
|---|
| 128 | . W !!,?5,"No Data To Report",!! | 
|---|
| 129 | D:QSORT=1 BYDATE | 
|---|
| 130 | D:QSORT=2 BYDRUG | 
|---|
| 131 | K ^XTMP(PSOSUB) | 
|---|
| 132 | Q | 
|---|
| 133 | BYDATE ; print report by release date | 
|---|
| 134 | ;^XTMP(PSOSUB,DIV,SCANDT,TRANDA)=PAT_U_SSN_U_QTY_U_ST_U_FAC_U_RX_U_FILL_U_DRUG | 
|---|
| 135 | S DIV=0 F  S DIV=$O(^XTMP(PSOSUB,DIV)) Q:DIV=""  Q:$G(PSOQUIT)  D | 
|---|
| 136 | . D DIVHDR | 
|---|
| 137 | . S SCANDT=0 F  S SCANDT=$O(^XTMP(PSOSUB,DIV,SCANDT)) Q:SCANDT=""  Q:$G(PSOQUIT)  D | 
|---|
| 138 | .. S TRANDA=0 F  S TRANDA=$O(^XTMP(PSOSUB,DIV,SCANDT,TRANDA)) Q:TRANDA'>0  Q:$G(PSOQUIT)  D PRTDATE | 
|---|
| 139 | Q | 
|---|
| 140 | PRTDATE ; print by date output | 
|---|
| 141 | ;^XTMP(PSOSUB,DIV,SCANDT,TRANDA)=PAT_U_SSN_U_QTY_U_ST_U_FAC_U_RX_U_FILL_U_DRUG | 
|---|
| 142 | S X=^XTMP(PSOSUB,DIV,SCANDT,TRANDA) | 
|---|
| 143 | S PAT=$P(X,U,1),SSN=$P(X,U,2),QTY=$P(X,U,3),ST=$P(X,U,4) | 
|---|
| 144 | S FAC=$P(X,U,5),RX=$P(X,U,6),FILL=$P(X,U,7),DRUG=$P(X,U,8) | 
|---|
| 145 | S (DATE,Y)=SCANDT I +Y D DD^%DT S DATE=Y | 
|---|
| 146 | S PAT=PAT_" "_SSN | 
|---|
| 147 | S RX=$$GET1^DIQ(52,RX,.01) | 
|---|
| 148 | ; | 
|---|
| 149 | D PG Q:$G(PSOQUIT) | 
|---|
| 150 | W !,DATE,?C1,RX_" ("_FILL_")",?C2,PAT,?C3,ST,?C4,FAC,!,DRUG,?C5,"QTY: ",QTY,! | 
|---|
| 151 | Q | 
|---|
| 152 | BYDRUG ; pull in & print byDrug | 
|---|
| 153 | ;^XTMP(PSOSUB,DIV,DRUG,SCANDT,TRANDA)=PAT_U_SSN_U_QTY_U_ST_U_FAC_U_RX_U_FILL_U_DRUG | 
|---|
| 154 | S DIV=0 F  S DIV=$O(^XTMP(PSOSUB,DIV)) Q:DIV=""  Q:$G(PSOQUIT)  D | 
|---|
| 155 | . D DIVHDR | 
|---|
| 156 | . S DRUG="" F  S DRUG=$O(^XTMP(PSOSUB,DIV,DRUG)) Q:DRUG=""  Q:$G(PSOQUIT)  D | 
|---|
| 157 | .. W !!,?3,DRUG | 
|---|
| 158 | .. S SCANDT=0 F  S SCANDT=$O(^XTMP(PSOSUB,DIV,DRUG,SCANDT)) Q:SCANDT=""  Q:$G(PSOQUIT)  D | 
|---|
| 159 | ... S TRANDA=0 F  S TRANDA=$O(^XTMP(PSOSUB,DIV,DRUG,SCANDT,TRANDA)) Q:TRANDA'>0  Q:$G(PSOQUIT)  D PRTDRUG | 
|---|
| 160 | Q | 
|---|
| 161 | PRTDRUG ; print by Drug | 
|---|
| 162 | ;^XTMP(PSOSUB,DIV,DRUG,SCANDT,TRANDA)=PAT_U_SSN_U_QTY_U_ST_U_FAC_U_RX_U_FILL_U_DRUG | 
|---|
| 163 | S X=^XTMP(PSOSUB,DIV,DRUG,SCANDT,TRANDA) | 
|---|
| 164 | S PAT=$P(X,U,1),SSN=$P(X,U,2),QTY=$P(X,U,3),ST=$P(X,U,4) | 
|---|
| 165 | S FAC=$P(X,U,5),RX=$P(X,U,6),FILL=$P(X,U,7) | 
|---|
| 166 | S (DATE,Y)=SCANDT I +Y D DD^%DT S DATE=Y | 
|---|
| 167 | S PAT=PAT_" "_SSN,RX=$$GET1^DIQ(52,RX,.01),RX=RX_" ("_FILL_")" | 
|---|
| 168 | D PG Q:$G(PSOQUIT) | 
|---|
| 169 | ;"Release Date",?D1,"Rx#",?D2,"QTY",?D3,"Patient",?D4,"CMOP",?D5,"CMOP | 
|---|
| 170 | W !,DATE,?D1,RX,?D2,QTY,?D3,PAT,?D4,ST,?D5,FAC | 
|---|
| 171 | Q | 
|---|
| 172 | EXIT ;EXIT | 
|---|
| 173 | K BDATE,C1,C2,C3,C4,C5,C6,CMOP,D1,D2,D3,D4,D5,DATE,DEA,DIV,DIVDA,DRUG | 
|---|
| 174 | K DRUGDA,EDATE,END,FAC,FIL,FLD,PAT,PATDA,PSOPG,PSOSUB,EVENT,RXF | 
|---|
| 175 | K QDIV,QSORT,QTY,RX,SCANDT,SCANBDT,SCANEDT,SSN,ST,TRANDA,PSOQUIT | 
|---|
| 176 | K FILL,EVDA,PSOJOB,PSOPAR,PSUIOP,PSUFQ,PSURC,PSURP,PSURX,PSUNS,X1,X2 | 
|---|
| 177 | D ^%ZISC S:$D(ZTQUEUED) ZTREQ="@" | 
|---|
| 178 | Q | 
|---|
| 179 | PG ;EP  Page controller | 
|---|
| 180 | ;S PSOQUIT=0 | 
|---|
| 181 | Q:$G(PSOQUIT) | 
|---|
| 182 | I $Y<(IOSL-4) Q | 
|---|
| 183 | I $E(IOST)="C" K DIR S DIR(0)="E" D ^DIR I $D(DIRUT) S PSOQUIT=1 Q | 
|---|
| 184 | ; | 
|---|
| 185 | PGHDR ; Write Page Header | 
|---|
| 186 | U IO W @IOF | 
|---|
| 187 | S PSOPG("PG")=$G(PSOPG("PG"))+1 | 
|---|
| 188 | W !,"CMOP Controlled Substance Prescription Dispensing Report",?(IOM-12),"Page: ",PSOPG("PG") | 
|---|
| 189 | W !,BDATE," through ",EDATE | 
|---|
| 190 | D:$D(DIV) DIVHDR | 
|---|
| 191 | Q | 
|---|
| 192 | ; | 
|---|
| 193 | DIVHDR ; write division header | 
|---|
| 194 | S X=DIV_"  Division" | 
|---|
| 195 | W !!,?((IOM-$L(X))\2),X,!! | 
|---|
| 196 | I QSORT=1 D | 
|---|
| 197 | . W !,"Release Date",?C1,"Rx#",?C2,"Patient",?C3,"CMOP",?C4,"CMOP" | 
|---|
| 198 | . W !,?C3,"STATUS",?C4,"Facility",! ; RX at C5 QTY AT C6 | 
|---|
| 199 | . F X=1:1:IOM-2 W "-" | 
|---|
| 200 | I QSORT=2 D | 
|---|
| 201 | . W !,"Release Date",?D1,"Rx#",?D2,"QTY",?D3,"Patient",?D4,"CMOP",?D5,"CMOP" | 
|---|
| 202 | . W !,?D4,"STATUS",?D5,"Facility",! | 
|---|
| 203 | . F X=1:1:IOM-2 W "-" | 
|---|
| 204 | . I PSOPG("PG")>1,$L($G(DRUG)) W !,?3,DRUG | 
|---|
| 205 | Q | 
|---|
| 206 | COLUMN ; setup column spacing | 
|---|
| 207 | C1 ; setup column spacing for byDate | 
|---|
| 208 | S C1=23,C2=39,C3=77,C4=85,C5=42 | 
|---|
| 209 | ;W !,DATE,?C1,RX_" ("_FILL_")",?C2,PAT,?C3,ST,?C4,FAC,!,DRUG,?C5,"QT: ",QTY | 
|---|
| 210 | D1 ; setup column spacing for byDrug | 
|---|
| 211 | ;"Release Date",?D1,"Rx#",?D2,"QTY",?D3,"Patient",?D4,"CMOP",?D5,"CMOP | 
|---|
| 212 | S D1=23,D2=39,D3=53,D4=91,D5=99 | 
|---|
| 213 | Q | 
|---|
| 214 | CLEAR ; clear ^XTMP | 
|---|
| 215 | S X="PSO_CMOP_",Y=X | 
|---|
| 216 | F  S X=$O(^XTMP(X)) Q:X'[Y  K ^XTMP(X) | 
|---|
| 217 | Q | 
|---|