| [613] | 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
 | 
|---|