| 1 | PSUOP8 ;BIR/DAM - Outpatient AMIS Summary Message;04 MAR 2004 | 
|---|
| 2 | ;;4.0;PHARMACY BENEFITS MANAGEMENT;;MARCH, 2005 | 
|---|
| 3 | ; | 
|---|
| 4 | ;Reference to file #59  supported by DBIA 2510 | 
|---|
| 5 | ; | 
|---|
| 6 | EN ;Entry point for MailMan message | 
|---|
| 7 | ;Called from PSUOP0 | 
|---|
| 8 | ; | 
|---|
| 9 | Q:$D(^XTMP("PSU_"_PSUJOB,"PSUFLAG"))  ;Quit if Provider extract only | 
|---|
| 10 | D MSG | 
|---|
| 11 | D MAIL | 
|---|
| 12 | Q | 
|---|
| 13 | ; | 
|---|
| 14 | MSG ;Create the Rx AMIS summary mailman message | 
|---|
| 15 | ;Called from PSUOP0 | 
|---|
| 16 | ; | 
|---|
| 17 | S (PSU30,PSU60,PSU90,PSUNADJ,PSUEQ,PSUTCST,PSUNADC,PSUCFIL)="" | 
|---|
| 18 | S (PSUNEW,PSUREF,PSUWN,PSUWNCS,PSUML,PSUMLCS,PSUMP,PSULC)="" | 
|---|
| 19 | S (PSUSTF,PSUFEE,PSULOCS,PSUSTNM)="" | 
|---|
| 20 | ; | 
|---|
| 21 | S PSUST=$P($G(^XTMP("PSU_"_PSUJOB,"PSUSITE")),U,1)    ;Facility # | 
|---|
| 22 | S PSUSTNM=$P($G(^XTMP("PSU_"_PSUJOB,"PSUSITE")),U,2)  ;Facility name | 
|---|
| 23 | ; | 
|---|
| 24 | D TCOST      ;Calculate total cost for all Rx fills | 
|---|
| 25 | ; | 
|---|
| 26 | S Y=PSUSDT X ^DD("DD") S PSUDTS=Y | 
|---|
| 27 | S Y=PSUEDT X ^DD("DD") S PSUDTE=Y | 
|---|
| 28 | S AMIS(1)="Outpatient AMIS Summary for "_PSUDTS_" through "_PSUDTE_" for "_PSUSTNM | 
|---|
| 29 | ; | 
|---|
| 30 | S AMIS(2)="" | 
|---|
| 31 | ; | 
|---|
| 32 | S AMIS(3)="                                                         Unadj     30Day                      Cost/          Cost/" | 
|---|
| 33 | ; | 
|---|
| 34 | S AMIS(4)="                      30Day        60Day      90Day      Total     Equiv        Total        Unadj          30Day" | 
|---|
| 35 | ; | 
|---|
| 36 | S AMIS(5)="Division              Fills        Fills      Fills      Fills     Fills        Cost          Fill           Fill" | 
|---|
| 37 | ; | 
|---|
| 38 | S $P(AMIS(6),"-",132)=""      ;Separator bar | 
|---|
| 39 | ; | 
|---|
| 40 | S PSULN=7 | 
|---|
| 41 | ; | 
|---|
| 42 | S PSUDVN=0 | 
|---|
| 43 | F  S PSUDVN=$O(^TMP($J,"FILL",PSUDVN)) Q:PSUDVN=""  D | 
|---|
| 44 | .S X=PSUDVN,DIC=59,DIC(0)="XM" D ^DIC     ;Find division name | 
|---|
| 45 | .S X=+Y,PSUDIVNM=$$VAL^PSUTL(59,X,.01) | 
|---|
| 46 | .I '$G(PSUDIVNM) S X=PSUDVN,DIC=40.8,DIC(0)="X",D="C" D IX^DIC D | 
|---|
| 47 | ..S X=+Y S PSUDIVNM=$$VAL^PSUTL(40.8,X,.01) | 
|---|
| 48 | .D VAR | 
|---|
| 49 | .D UNADCST | 
|---|
| 50 | .D FILL | 
|---|
| 51 | .D TOTAL1 | 
|---|
| 52 | .; | 
|---|
| 53 | .;Construct line with spacing | 
|---|
| 54 | .S PSULINE="" | 
|---|
| 55 | .S $E(PSULINE,1,17)=PSUDIVNM | 
|---|
| 56 | .S $E(PSULINE,18,28)=$J(FILL30,11) | 
|---|
| 57 | .S $E(PSULINE,29,39)=$J(FILL60,11) | 
|---|
| 58 | .S $E(PSULINE,40,50)=$J(FILL90,11) | 
|---|
| 59 | .S $E(PSULINE,51,61)=$J(UNAD,11) | 
|---|
| 60 | .S $E(PSULINE,62,72)=$J(EQUIV,11) | 
|---|
| 61 | .S $E(PSULINE,74,75)="$" | 
|---|
| 62 | .S $E(PSULINE,76,88)=$J(TCOST(PSUDVN),13) | 
|---|
| 63 | .S $E(PSULINE,90,91)="$" | 
|---|
| 64 | .S $E(PSULINE,92,102)=$J(UNADC(PSUDVN),11) | 
|---|
| 65 | .S $E(PSULINE,104,105)="$" | 
|---|
| 66 | .S $E(PSULINE,106,116)=$J(CFILL(PSUDVN),11) | 
|---|
| 67 | .;End line | 
|---|
| 68 | .S AMIS(PSULN)=PSULINE S PSULN=PSULN+1 | 
|---|
| 69 | ; | 
|---|
| 70 | S $P(AMIS(PSULN),"-",132)="" S PSULN=PSULN+1      ;Separator bar | 
|---|
| 71 | ; | 
|---|
| 72 | ;Construct line with spacing | 
|---|
| 73 | S PSULINE="" | 
|---|
| 74 | S $E(PSULINE,1,17)="Total" | 
|---|
| 75 | S $E(PSULINE,18,28)=$J(PSU30,11) | 
|---|
| 76 | S $E(PSULINE,29,39)=$J(PSU60,11) | 
|---|
| 77 | S $E(PSULINE,40,50)=$J(PSU90,11) | 
|---|
| 78 | S $E(PSULINE,51,61)=$J(PSUNADJ,11) | 
|---|
| 79 | S $E(PSULINE,62,72)=$J(PSUEQ,11) | 
|---|
| 80 | S $E(PSULINE,74,75)="$" | 
|---|
| 81 | S $E(PSULINE,76,88)=$J(PSUTCST,13) | 
|---|
| 82 | S $E(PSULINE,90,91)="$" | 
|---|
| 83 | S $E(PSULINE,92,102)=$J(PSUNADC,11) | 
|---|
| 84 | S $E(PSULINE,104,105)="$" | 
|---|
| 85 | S $E(PSULINE,106,116)=$J(PSUCFIL,11) | 
|---|
| 86 | ;End line construction | 
|---|
| 87 | ; | 
|---|
| 88 | S AMIS(PSULN)=PSULINE S PSULN=PSULN+1 | 
|---|
| 89 | ; | 
|---|
| 90 | F PSULN=PSULN:1:(PSULN+2) S AMIS(PSULN)=""     ;Blank lines | 
|---|
| 91 | S PSULN=PSULN+1 | 
|---|
| 92 | ; | 
|---|
| 93 | S AMIS(PSULN)="Unadjusted             New       Ref          Win           Mail               CMOP         Local           Staff         Fee" S PSULN=PSULN+1 | 
|---|
| 94 | ; | 
|---|
| 95 | S AMIS(PSULN)="Division                Rx        Rx         Rx(CS)        Rx(CS)               Rx          Rx(CS)            Rx           Rx" S PSULN=PSULN+1 | 
|---|
| 96 | ; | 
|---|
| 97 | S $P(AMIS(PSULN),"-",132)="" S PSULN=PSULN+1      ;Separator bar | 
|---|
| 98 | ; | 
|---|
| 99 | S PSUDVN=0 | 
|---|
| 100 | F  S PSUDVN=$O(^TMP($J,"NEW",PSUDVN)) Q:PSUDVN=""  D | 
|---|
| 101 | .S X=PSUDVN,DIC=59,DIC(0)="XM" D ^DIC     ;Find division name | 
|---|
| 102 | .S X=+Y,PSUDIVNM=$$VAL^PSUTL(59,X,.01) | 
|---|
| 103 | .I '$G(PSUDIVNM) S X=PSUDVN,DIC=40.8,DIC(0)="X",D="C" D IX^DIC D | 
|---|
| 104 | ..S X=+Y S PSUDIVNM=$$VAL^PSUTL(40.8,X,.01) | 
|---|
| 105 | .D VAR2 | 
|---|
| 106 | .D TOTAL2 | 
|---|
| 107 | .;Construct line with spacing | 
|---|
| 108 | .S PSULINE="" | 
|---|
| 109 | .S $E(PSULINE,1,17)=PSUDIVNM | 
|---|
| 110 | .S $E(PSULINE,18,27)=$J(PSUN,10) | 
|---|
| 111 | .S $E(PSULINE,28,37)=$J(PSUR,10) | 
|---|
| 112 | .S $E(PSULINE,38,47)=$J(PSUW,10) | 
|---|
| 113 | .S $E(PSULINE,48,57)="("_PSUWCS_")" | 
|---|
| 114 | .S $E(PSULINE,58,67)=$J(PSUM,10) | 
|---|
| 115 | .S $E(PSULINE,68,77)="("_PSUMCS_")" | 
|---|
| 116 | .S $E(PSULINE,78,87)=$J(PSUMOP,10) | 
|---|
| 117 | .S $E(PSULINE,88,97)=$J(PSULOC,10) | 
|---|
| 118 | .S $E(PSULINE,98,107)="("_PSULCS_")" | 
|---|
| 119 | .S $E(PSULINE,108,117)=$J(PSUTF,10) | 
|---|
| 120 | .S $E(PSULINE,118,127)=$J(PSUFE,10) | 
|---|
| 121 | .;End construction of line | 
|---|
| 122 | .S AMIS(PSULN)=PSULINE S PSULN=PSULN+1 | 
|---|
| 123 | ; | 
|---|
| 124 | S $P(AMIS(PSULN),"-",132)="" S PSULN=PSULN+1      ;Separator bar | 
|---|
| 125 | ; | 
|---|
| 126 | ;Construct line with spacing | 
|---|
| 127 | S PSULINE="" | 
|---|
| 128 | S $E(PSULINE,1,15)="Total" | 
|---|
| 129 | S $E(PSULINE,18,27)=$J(PSUNEW,10) | 
|---|
| 130 | S $E(PSULINE,28,37)=$J(PSUREF,10) | 
|---|
| 131 | S $E(PSULINE,38,47)=$J(PSUWN,10) | 
|---|
| 132 | S $E(PSULINE,48,57)="("_PSUWNCS_")" | 
|---|
| 133 | S $E(PSULINE,58,67)=$J(PSUML,10) | 
|---|
| 134 | S $E(PSULINE,68,77)="("_PSUMLCS_")" | 
|---|
| 135 | S $E(PSULINE,78,87)=$J(PSUMP,10) | 
|---|
| 136 | S $E(PSULINE,88,97)=$J(PSULC,10) | 
|---|
| 137 | S $E(PSULINE,98,107)="("_PSULOCS_")" | 
|---|
| 138 | S $E(PSULINE,108,117)=$J(PSUSTF,10) | 
|---|
| 139 | S $E(PSULINE,118,127)=$J(PSUFEE,10) | 
|---|
| 140 | ;End construction of line | 
|---|
| 141 | S AMIS(PSULN)=PSULINE S PSULN=PSULN+1 | 
|---|
| 142 | ; | 
|---|
| 143 | Q | 
|---|
| 144 | ; | 
|---|
| 145 | VAR ;Set contents of ^TMP global into VARIABLES | 
|---|
| 146 | ; | 
|---|
| 147 | S (FILL30,FILL60,FILL90,UNAD,EQUIV)="" | 
|---|
| 148 | ; | 
|---|
| 149 | S FILL30=^TMP($J,"FILL",PSUDVN,30)      ;30 DAY FILLS | 
|---|
| 150 | ; | 
|---|
| 151 | S FILL60=^TMP($J,"FILL",PSUDVN,60)      ;60 DAY FILLS | 
|---|
| 152 | ; | 
|---|
| 153 | S FILL90=^TMP($J,"FILL",PSUDVN,90)      ;90 DAY FILLS | 
|---|
| 154 | ; | 
|---|
| 155 | S UNAD=^TMP($J,"UNAD",PSUDVN)           ;UNADJUSTED TOTAL FILLS | 
|---|
| 156 | ; | 
|---|
| 157 | S EQUIV=^TMP($J,"EQUIV",PSUDVN)         ;30 DAY EQUIV FILLS | 
|---|
| 158 | ; | 
|---|
| 159 | Q | 
|---|
| 160 | ; | 
|---|
| 161 | TCOST ;Calculate total cost for prescription fills | 
|---|
| 162 | ; | 
|---|
| 163 | S PSUTC="",PSUTCOST="" | 
|---|
| 164 | ; | 
|---|
| 165 | S PSUDIVN=0 | 
|---|
| 166 | F  S PSUDIVN=$O(^TMP($J,"COST",PSUDIVN)) Q:PSUDIVN=""  D | 
|---|
| 167 | .S PSURXIEN=0 | 
|---|
| 168 | .F  S PSURXIEN=$O(^TMP($J,"COST",PSUDIVN,PSURXIEN)) Q:PSURXIEN=""  D | 
|---|
| 169 | ..S PSUTCOST=^TMP($J,"COST",PSUDIVN,PSURXIEN) | 
|---|
| 170 | ..S TCOST(PSUDIVN)=$G(TCOST(PSUDIVN))+PSUTCOST | 
|---|
| 171 | ..I TCOST(PSUDIVN)'["." S TCOST(PSUDIVN)=TCOST(PSUDIVN)_".00" Q | 
|---|
| 172 | ..N A,B,C | 
|---|
| 173 | ..S A=$F(TCOST(PSUDIVN),".")  ;Find 1st position after decimal | 
|---|
| 174 | ..S B=$E(TCOST(PSUDIVN),1,(A-1))   ;Extract dollars and decimal | 
|---|
| 175 | ..S C=$E(TCOST(PSUDIVN),A,(A+1))   ;Extract cents after decimal | 
|---|
| 176 | ..I $L(C)'=2 S C=$E(C,1)_0 | 
|---|
| 177 | ..S TCOST(PSUDIVN)=B_C | 
|---|
| 178 | ; | 
|---|
| 179 | Q | 
|---|
| 180 | ; | 
|---|
| 181 | UNADCST ;Calculate Cost Per Unadjusted Fill | 
|---|
| 182 | ; | 
|---|
| 183 | N A,B,C | 
|---|
| 184 | S UNADC(PSUDVN)=TCOST(PSUDVN)/UNAD | 
|---|
| 185 | ; | 
|---|
| 186 | I UNADC(PSUDVN)'["." S UNADC(PSUDVN)=UNADC(PSUDVN)_".00" Q | 
|---|
| 187 | ; | 
|---|
| 188 | S A=$F(UNADC(PSUDVN),".")    ;Find position of 1st # after decimal | 
|---|
| 189 | ; | 
|---|
| 190 | S B=$E(UNADC(PSUDVN),1,(A-1)) ;Extract "dollars" up to decimal | 
|---|
| 191 | ; | 
|---|
| 192 | S C=$E(UNADC(PSUDVN),A,(A+1)) ;Extract "cents" after decimal | 
|---|
| 193 | ; | 
|---|
| 194 | S UNADC(PSUDVN)=B_C | 
|---|
| 195 | Q | 
|---|
| 196 | ; | 
|---|
| 197 | FILL ;Calculate Cost Per 30-day Fill | 
|---|
| 198 | ; | 
|---|
| 199 | N A,B,C | 
|---|
| 200 | S CFILL(PSUDVN)=TCOST(PSUDVN)/EQUIV | 
|---|
| 201 | ; | 
|---|
| 202 | I CFILL(PSUDVN)'["." S CFILL(PSUDVN)=CFILL(PSUDVN)_".00" Q | 
|---|
| 203 | ; | 
|---|
| 204 | S A=$F(CFILL(PSUDVN),".")    ;Find position of 1st # after decimal | 
|---|
| 205 | ; | 
|---|
| 206 | S B=$E(CFILL(PSUDVN),1,(A-1)) ;Extract "dollars" up to decimal | 
|---|
| 207 | ; | 
|---|
| 208 | S C=$E(CFILL(PSUDVN),A,(A+1)) ;Extract "cents" after decimal | 
|---|
| 209 | ; | 
|---|
| 210 | S CFILL(PSUDVN)=B_C | 
|---|
| 211 | ; | 
|---|
| 212 | Q | 
|---|
| 213 | ; | 
|---|
| 214 | VAR2 ;Set contents of ^TMP globals into variables | 
|---|
| 215 | ; | 
|---|
| 216 | S (PSUN,PSUR,PSUW,PSUWCS,PSUM,PSUMCS)="" | 
|---|
| 217 | S (PSUMOP,PSULOC,PSULCS,PSUTF,PSUFE)="" | 
|---|
| 218 | ; | 
|---|
| 219 | S PSUN=^TMP($J,"NEW",PSUDVN)           ;NEW FILLS | 
|---|
| 220 | ; | 
|---|
| 221 | S PSUR=^TMP($J,"REF",PSUDVN)           ;REFILLS | 
|---|
| 222 | ; | 
|---|
| 223 | S PSUW=^TMP($J,"WIN",PSUDVN)           ;WINDOW FILLS | 
|---|
| 224 | ; | 
|---|
| 225 | S PSUWCS=^TMP($J,"WINCS",PSUDVN)       ;WINDOW CS | 
|---|
| 226 | ; | 
|---|
| 227 | S PSUM=^TMP($J,"MAIL",PSUDVN)          ;MAIL FILLS | 
|---|
| 228 | ; | 
|---|
| 229 | S PSUMCS=^TMP($J,"MAILCS",PSUDVN)      ;MAIL CS | 
|---|
| 230 | ; | 
|---|
| 231 | S PSUMOP=^TMP($J,"CMOP",PSUDVN)        ;CMOP FILLS | 
|---|
| 232 | ; | 
|---|
| 233 | S PSULOC=^TMP($J,"LOC",PSUDVN)         ;LOCAL FILLS | 
|---|
| 234 | ; | 
|---|
| 235 | S PSULCS=^TMP($J,"LOCS",PSUDVN)        ;LOCAL CS | 
|---|
| 236 | ; | 
|---|
| 237 | S PSUTF=^TMP($J,"STAFF",PSUDVN)        ;STAFF FILLS | 
|---|
| 238 | ; | 
|---|
| 239 | S PSUFE=^TMP($J,"FEE",PSUDVN)          ;FEE FILLS | 
|---|
| 240 | ; | 
|---|
| 241 | Q | 
|---|
| 242 | ; | 
|---|
| 243 | TOTAL1 ;Add each column to get totals for all divisions | 
|---|
| 244 | ; | 
|---|
| 245 | ; | 
|---|
| 246 | S PSU30=$G(PSU30)+FILL30               ;Total 30 day fills | 
|---|
| 247 | ; | 
|---|
| 248 | S PSU60=$G(PSU60)+FILL60               ;Total 60 day fills | 
|---|
| 249 | ; | 
|---|
| 250 | S PSU90=$G(PSU90)+FILL90               ;Total 90 day fills | 
|---|
| 251 | ; | 
|---|
| 252 | S PSUNADJ=$G(PSUNADJ)+UNAD             ;Total unadjusted fills | 
|---|
| 253 | ; | 
|---|
| 254 | S PSUEQ=$G(PSUEQ)+EQUIV                ;Total 30 day equiv fills | 
|---|
| 255 | ; | 
|---|
| 256 | S PSUTCST=$G(PSUTCST)+TCOST(PSUDVN)    ;Total of Total Cost | 
|---|
| 257 | ; | 
|---|
| 258 | ;S PSUNADC=$G(PSUNADC)+UNADC(PSUDVN)    ;Total of Cost/Unadj fill | 
|---|
| 259 | I $G(PSUNADJ) S PSUNADC=$G(PSUTCST)/PSUNADJ D | 
|---|
| 260 | .I PSUNADC'["." S PSUNADC=PSUNADC_".00" Q | 
|---|
| 261 | .N A,B,C | 
|---|
| 262 | .S A=$F(PSUNADC,".")  ;Find 1st position after decimal | 
|---|
| 263 | .S B=$E(PSUNADC,1,(A-1))   ;Extract dollars and decimal | 
|---|
| 264 | .S C=$E(PSUNADC,A,(A+1))   ;Extract cents after decimal | 
|---|
| 265 | .I $L(C)'=2 S C=$E(C,1)_0 | 
|---|
| 266 | .S PSUNADC=B_C | 
|---|
| 267 | ; | 
|---|
| 268 | ;S PSUCFIL=$G(PSUCFIL)+CFILL(PSUDVN)    ;Total of Cost/30day fill | 
|---|
| 269 | I $G(PSUEQ) S PSUCFIL=$G(PSUTCST)/PSUEQ D | 
|---|
| 270 | .I PSUCFIL'["." S PSUCFIL=PSUCFIL_".00" Q | 
|---|
| 271 | .N A,B,C | 
|---|
| 272 | .S A=$F(PSUCFIL,".")  ;Find 1st position after decimal | 
|---|
| 273 | .S B=$E(PSUCFIL,1,(A-1))   ;Extract dollars and decimal | 
|---|
| 274 | .S C=$E(PSUCFIL,A,(A+1))   ;Extract cents after decimal | 
|---|
| 275 | .I $L(C)'=2 S C=$E(C,1)_0 | 
|---|
| 276 | .S PSUCFIL=B_C | 
|---|
| 277 | ; | 
|---|
| 278 | Q | 
|---|
| 279 | ; | 
|---|
| 280 | TOTAL2 ;Add each column to get totals for all divisions | 
|---|
| 281 | ; | 
|---|
| 282 | S PSUNEW=$G(PSUNEW)+^TMP($J,"NEW",PSUDVN) | 
|---|
| 283 | ; | 
|---|
| 284 | S PSUREF=$G(PSUREF)+^TMP($J,"REF",PSUDVN) | 
|---|
| 285 | ; | 
|---|
| 286 | S PSUWN=$G(PSUWN)+^TMP($J,"WIN",PSUDVN) | 
|---|
| 287 | ; | 
|---|
| 288 | S PSUWNCS=$G(PSUWNCS)+^TMP($J,"WINCS",PSUDVN) | 
|---|
| 289 | ; | 
|---|
| 290 | S PSUML=$G(PSUML)+^TMP($J,"MAIL",PSUDVN) | 
|---|
| 291 | ; | 
|---|
| 292 | S PSUMLCS=$G(PSUMLCS)+^TMP($J,"MAILCS",PSUDVN) | 
|---|
| 293 | ; | 
|---|
| 294 | S PSUMP=$G(PSUMP)+^TMP($J,"CMOP",PSUDVN) | 
|---|
| 295 | ; | 
|---|
| 296 | S PSULC=$G(PSULC)+^TMP($J,"LOC",PSUDVN) | 
|---|
| 297 | ; | 
|---|
| 298 | S PSULOCS=$G(PSULOCS)+^TMP($J,"LOCS",PSUDVN) | 
|---|
| 299 | ; | 
|---|
| 300 | S PSUSTF=$G(PSUSTF)+^TMP($J,"STAFF",PSUDVN) | 
|---|
| 301 | ; | 
|---|
| 302 | S PSUFEE=$G(PSUFEE)+^TMP($J,"FEE",PSUDVN) | 
|---|
| 303 | ; | 
|---|
| 304 | Q | 
|---|
| 305 | ; | 
|---|
| 306 | MAIL ;Send AMIS summary mailman message | 
|---|
| 307 | ; | 
|---|
| 308 | ;Do not send report if option selection includes 1,2,3,4,6 | 
|---|
| 309 | I $D(^XTMP("PSU_"_PSUJOB,"CBAMIS")) D  Q | 
|---|
| 310 | .M ^XTMP("PSU_"_PSUJOB,"OPCOMBO")=AMIS | 
|---|
| 311 | .S ^XTMP("PSU_"_PSUJOB,"OPCOMBO",1)="OUTPATIENT:" | 
|---|
| 312 | ; | 
|---|
| 313 | S XMSUB="V. 4.0 PBMOP "_PSUMON_" "_PSUST_" "_PSUSTNM | 
|---|
| 314 | S XMTEXT="AMIS(" | 
|---|
| 315 | M ^XTMP("PSU_"_PSUJOB,"OPAMIS")=AMIS | 
|---|
| 316 | S XMCHAN=1 | 
|---|
| 317 | M XMY=PSUXMYS2 | 
|---|
| 318 | D ^XMD | 
|---|
| 319 | ; | 
|---|
| 320 | Q | 
|---|