| 1 | BPSSCRU2 ;BHAM ISC/SS - ECME SCREEN UTILITIES ;05-APR-05
 | 
|---|
| 2 |  ;;1.0;E CLAIMS MGMT ENGINE;**1,3,5**;JUN 2004;Build 45
 | 
|---|
| 3 |  ;;Per VHA Directive 2004-038, this routine should not be modified.
 | 
|---|
| 4 |  ;USER SCREEN
 | 
|---|
| 5 |  Q
 | 
|---|
| 6 |  ;/**
 | 
|---|
| 7 |  ;Input:
 | 
|---|
| 8 |  ; BP59 - pointer to file #9002313.59
 | 
|---|
| 9 |  ;Output:
 | 
|---|
| 10 |  ;get filling "location" like "WINDOW/LOCALMAIL/CMOP"
 | 
|---|
| 11 | GETMWC(BP59) ;*/
 | 
|---|
| 12 |  N BP1 S BP1=$$RXREF(BP59)
 | 
|---|
| 13 |  Q:+BP1=0 ""
 | 
|---|
| 14 |  Q $$MWC($P(BP1,U),$P(BP1,U,2))
 | 
|---|
| 15 |  ;
 | 
|---|
| 16 |  ;initially this was designed to convert numbers to letters to display on the screen
 | 
|---|
| 17 |  ;but later the Pharmacy designed API that returns letters instead of numbers
 | 
|---|
| 18 |  ;so now this function just returns what it receives in its parameter, while it does not 
 | 
|---|
| 19 |  ;make any sense, we still keep it in order to prevent changes in other four routines:
 | 
|---|
| 20 |  ; BPSREOP1, BPSSCR02, BPSSCR03, BPSSCR04
 | 
|---|
| 21 | MWCNAME(BPMWC) ;
 | 
|---|
| 22 |  Q BPMWC
 | 
|---|
| 23 |  ;/**
 | 
|---|
| 24 |  ;Input:
 | 
|---|
| 25 |  ; BP59 - pointer to file #9002313.59
 | 
|---|
| 26 |  ;Output:
 | 
|---|
| 27 |  ;get RX pointer in file #52 and refill number in its multiple (0 - original refill)
 | 
|---|
| 28 | RXREF(BP59) ;
 | 
|---|
| 29 |  N BPRX,BPREF
 | 
|---|
| 30 |  S BPRX=+$P($G(^BPST(BP59,1)),U,11) ;ptr to RX node in #52
 | 
|---|
| 31 |  S BPREF=+$P($G(^BPST(BP59,1)),U) ;ptr to refill multiple in #52
 | 
|---|
| 32 |  Q BPRX_U_BPREF
 | 
|---|
| 33 |  ; determines if the refill was MAIL/WINDOW/CMOP
 | 
|---|
| 34 | MWC(BPRX,BPREF) ;MAIL/WINDOW/CMOP
 | 
|---|
| 35 |  ;input:
 | 
|---|
| 36 |  ; BPRX ptr to #52 (RX)
 | 
|---|
| 37 |  ; BPREF ptr to #52.1 (refills)
 | 
|---|
| 38 |  ;return value:
 | 
|---|
| 39 |  ; 2-MAIL/3-WINDOW/4-CMOP
 | 
|---|
| 40 |  Q $$MWC^PSOBPSU2(BPRX,BPREF)
 | 
|---|
| 41 |  ;
 | 
|---|
| 42 |  ;
 | 
|---|
| 43 |  ;/**
 | 
|---|
| 44 |  ;Input:
 | 
|---|
| 45 |  ; BP59 - pointer to file #9002313.59
 | 
|---|
| 46 |  ;Output:
 | 
|---|
| 47 |  ; insurance ien ^ name ^ phone
 | 
|---|
| 48 | GETINSUR(BP59) ;get insurance info by the pointer of #9002313.59
 | 
|---|
| 49 |  N BPHONE,BPINSNM,BPINSID,BP57,BPINSN,BPX
 | 
|---|
| 50 |  S BPX=$$NAMEPHON^BPSSCRU3(BP59)
 | 
|---|
| 51 |  S BPINSNM=$P(BPX,U,1)
 | 
|---|
| 52 |  S BPHONE=$P(BPX,U,2)
 | 
|---|
| 53 |  ;Get a temporary ID for the insurance from ^TMP list of insurances.
 | 
|---|
| 54 |  ;If doesn't exist yet then create a new record in ^TMP list of insurances 
 | 
|---|
| 55 |  ;   for this insurance and return the ID for the record.
 | 
|---|
| 56 |  ;A lifetime for ^TMP list of insurances is the time period the user is using 
 | 
|---|
| 57 |  ;   the User Screen menu option
 | 
|---|
| 58 |  S BPINSID=$$CHKINSUR^BPSSCR(BPINSNM,BPHONE)
 | 
|---|
| 59 |  I $L(BPHONE)=0 S BPHONE=" "
 | 
|---|
| 60 |  I $L(BPINSNM)=0 S BPINSNM="?NODATA?"
 | 
|---|
| 61 |  Q BPINSID_U_BPINSNM_U_BPHONE
 | 
|---|
| 62 |  ;
 | 
|---|
| 63 |  ;/**
 | 
|---|
| 64 |  ;Input:
 | 
|---|
| 65 |  ; BP59 - pointer to file #9002313.59
 | 
|---|
| 66 |  ;Output:
 | 
|---|
| 67 |  ;transaction date
 | 
|---|
| 68 | TRANDT(BP59) ;
 | 
|---|
| 69 |  Q $P($G(^BPST(BP59,0)),U,8)\1
 | 
|---|
| 70 |  ;
 | 
|---|
| 71 |  ;/**
 | 
|---|
| 72 |  ;Input:
 | 
|---|
| 73 |  ; BP59 - pointer to file #9002313.59
 | 
|---|
| 74 |  ;Output:
 | 
|---|
| 75 |  ;ECME pharmacy division (9002313.56)
 | 
|---|
| 76 | DIVIS(BP59) ;
 | 
|---|
| 77 |  Q $P($G(^BPST(BP59,1)),U,7)
 | 
|---|
| 78 |  ;
 | 
|---|
| 79 |  ;/**
 | 
|---|
| 80 |  ;Input:
 | 
|---|
| 81 |  ; BP59 - pointer to file #9002313.59
 | 
|---|
| 82 |  ;Output:
 | 
|---|
| 83 |  ;patient's DFN (file #2)
 | 
|---|
| 84 | GETPATID(BP59) ;
 | 
|---|
| 85 |  Q $P($G(^BPST(BP59,0)),U,6)
 | 
|---|
| 86 |  ;
 | 
|---|
| 87 |  ;return RX status as ACT/DIS/etc
 | 
|---|
| 88 | RXST(BP59) ;
 | 
|---|
| 89 |  N BPRXREF
 | 
|---|
| 90 |  S BPRXREF=$$RXREF^BPSSCRU2(BP59)
 | 
|---|
| 91 |  ;display status ONLY if the refill is the most recent 
 | 
|---|
| 92 |  ;otherwise display blanks (three spaces for sorting purposes)
 | 
|---|
| 93 |  I +$P(BPRXREF,U,2)'=(+$$LSTRFL^PSOBPSU1(+$P(BPRXREF,U,1))) Q "***"
 | 
|---|
| 94 |  Q $$RXSTANAM($$RXSTATUS(+$P(BPRXREF,U,1)))
 | 
|---|
| 95 |  ;/**
 | 
|---|
| 96 |  ;RX status
 | 
|---|
| 97 |  ;Input 
 | 
|---|
| 98 |  ; RXNUM:
 | 
|---|
| 99 |  ;  ien of file #52 (if MODE=0) 
 | 
|---|
| 100 |  ;  or RX number (if MODE=1)
 | 
|---|
| 101 |  ;----------
 | 
|---|
| 102 |  ;Output:
 | 
|---|
| 103 |  ; 0    if not found
 | 
|---|
| 104 |  ; status set#
 | 
|---|
| 105 | RXSTATUS(RXNUM) ;*/
 | 
|---|
| 106 |  N BPRET
 | 
|---|
| 107 |  S BPRET=$$RXAPI1^BPSUTIL1(RXNUM,100,"I")
 | 
|---|
| 108 |  I BPRET="" Q -1
 | 
|---|
| 109 |  Q BPRET
 | 
|---|
| 110 |  ;/**
 | 
|---|
| 111 |  ;if RX "valid" 
 | 
|---|
| 112 | RXACTIVE(BPRXSTAT) ;*/
 | 
|---|
| 113 |  ; 0    not valid
 | 
|---|
| 114 |  ; 1    valid (i.e. ACTIVE/NON-VERIFIED/REFILL/HOLD/DRUG INTERACTIONS/SUSPENDED) 
 | 
|---|
| 115 |  ; -1   doesn't exist
 | 
|---|
| 116 |  Q:BPRXSTAT<6 1  ;active
 | 
|---|
| 117 |  ;/**
 | 
|---|
| 118 |  ;RX status text
 | 
|---|
| 119 | RXSTANAM(BPRXSTAT) ;*/
 | 
|---|
| 120 |  Q:BPRXSTAT=0 "ACT"  ; ACTIVE; 
 | 
|---|
| 121 |  Q:BPRXSTAT=1 "NVER"  ; NON-VERIFIED; 
 | 
|---|
| 122 |  Q:BPRXSTAT=3 "HLD"  ; HOLD; 
 | 
|---|
| 123 |  Q:BPRXSTAT=5 "SUS"  ; SUSPENDED; 
 | 
|---|
| 124 |  Q:BPRXSTAT=11 "EXP"  ; EXPIRED; 
 | 
|---|
| 125 |  Q:BPRXSTAT=12 "DIS"  ; DISCONTINUED; 
 | 
|---|
| 126 |  Q:BPRXSTAT=13 "DEL"  ; DELETED; 
 | 
|---|
| 127 |  Q:BPRXSTAT=14 "DIS"  ; DISCONTINUED BY PROVIDER; 
 | 
|---|
| 128 |  Q:BPRXSTAT=15 "DIS"  ; DISCONTINUED (EDIT); 
 | 
|---|
| 129 |  Q:BPRXSTAT=16 "HLD"  ; PROVIDER HOLD; 
 | 
|---|
| 130 |  Q:BPRXSTAT=-1 "???"
 | 
|---|
| 131 |  Q ""
 | 
|---|
| 132 |  ;/**
 | 
|---|
| 133 |  ;Input:
 | 
|---|
| 134 |  ; BP59 - pointer to file #9002313.59
 | 
|---|
| 135 |  ;Output:
 | 
|---|
| 136 |  ;returns:
 | 
|---|
| 137 |  ;>0  Released
 | 
|---|
| 138 |  ;0   non released
 | 
|---|
| 139 |  ;-1  error
 | 
|---|
| 140 | ISRXREL(BP59) ;
 | 
|---|
| 141 |  N BP1
 | 
|---|
| 142 |  S BP1=$$REFILINF(BP59)
 | 
|---|
| 143 |  Q:BP1<0 -1
 | 
|---|
| 144 |  Q $P(BP1,U,2) ; i.e. it is non-released if there is no any release date
 | 
|---|
| 145 |  ;
 | 
|---|
| 146 |  ;release status
 | 
|---|
| 147 | RL(BP59) ;
 | 
|---|
| 148 |  Q $S($$ISRXREL(BP59)>0:"RL",1:"NR")
 | 
|---|
| 149 |  ;/**
 | 
|---|
| 150 |  ;get refill (including original refill) info by BP59
 | 
|---|
| 151 |  ;Input:
 | 
|---|
| 152 |  ; BP59 - pointer to file #9002313.59
 | 
|---|
| 153 |  ;Output:
 | 
|---|
| 154 |  ;returns:
 | 
|---|
| 155 |  ;on error : "-1"  
 | 
|---|
| 156 |  ;on success : refill# ^ release date ^label print date ^ fill date ^ issue date
 | 
|---|
| 157 | REFILINF(BP59) ;*/
 | 
|---|
| 158 |  N BP1 S BP1=$$RXREF(BP59)
 | 
|---|
| 159 |  N BPRX S BPRX=$P(BP1,U,1) ;ptr to #52
 | 
|---|
| 160 |  N BPREF S BPREF=$P(BP1,U,2) ;ptr in its refill multiple
 | 
|---|
| 161 |  I BPREF,$$IFREFILL(BPRX,BPREF)=0 Q -1  ;if bad data
 | 
|---|
| 162 |  ;original refill
 | 
|---|
| 163 |  I BPREF=0 Q "0"_U_$$RXRELDT(BPRX)_U_U_$$RXFILDT(BPRX)_U_$$RXISSDT(BPRX)
 | 
|---|
| 164 |  ;refill's release date
 | 
|---|
| 165 |  I BPREF>0 Q BPREF_U_$$REFRELDT(BPRX,BPREF)_U_U_$$REFFILDT(BPRX,BPREF)_U_$$REFISSDT(BPRX,BPREF)
 | 
|---|
| 166 |  Q -1
 | 
|---|
| 167 |  ;
 | 
|---|
| 168 |  ;-Prescriptions-----------------------
 | 
|---|
| 169 |  ;RX issue date
 | 
|---|
| 170 | RXISSDT(BPRX) ;
 | 
|---|
| 171 |  Q +$$RXAPI1^BPSUTIL1(BPRX,1,"I")
 | 
|---|
| 172 |  ;
 | 
|---|
| 173 |  ;RX's release date
 | 
|---|
| 174 | RXRELDT(BPRX) ;
 | 
|---|
| 175 |  Q +$$RXAPI1^BPSUTIL1(BPRX,31,"I")
 | 
|---|
| 176 |  ;
 | 
|---|
| 177 |  ;RX's fill date
 | 
|---|
| 178 | RXFILDT(BPRX) ;
 | 
|---|
| 179 |  Q +$$RXAPI1^BPSUTIL1(BPRX,22,"I")
 | 
|---|
| 180 |  ;
 | 
|---|
| 181 |  ;refill's release date
 | 
|---|
| 182 | REFRELDT(BPRX,BPREF) ;
 | 
|---|
| 183 |  Q +$$RXSUBF1^BPSUTIL1(BPRX,52,52.1,BPREF,17,"I")
 | 
|---|
| 184 |  ;
 | 
|---|
| 185 |  ;refill's refill date
 | 
|---|
| 186 | REFFILDT(BPRX,BPREF) ;
 | 
|---|
| 187 |  Q $$RXSUBF1^BPSUTIL1(BPRX,52,52.1,BPREF,.01,"I")
 | 
|---|
| 188 |  ;
 | 
|---|
| 189 |  ;refill's issue date
 | 
|---|
| 190 | REFISSDT(BPRX,BPREF) ;
 | 
|---|
| 191 |  Q $$REFDISDT(BPRX,BPREF)
 | 
|---|
| 192 |  ;
 | 
|---|
| 193 |  ;refill's dispense date
 | 
|---|
| 194 | REFDISDT(BPRX,BPREF) ;
 | 
|---|
| 195 |  Q $$RXSUBF1^BPSUTIL1(BPRX,52,52.1,BPREF,10.1,"I")
 | 
|---|
| 196 |  ;
 | 
|---|
| 197 |  ;if refill exists
 | 
|---|
| 198 | IFREFILL(BPRX,BPREF) ;
 | 
|---|
| 199 |  Q $$RXSUBF1^BPSUTIL1(BPRX,52,52.1,BPREF,.01,"I")'=""
 | 
|---|
| 200 |  ;/**
 | 
|---|
| 201 |  ;input 
 | 
|---|
| 202 |  ;ptr to 9002313.59
 | 
|---|
| 203 |  ;output :
 | 
|---|
| 204 |  ; BB - back billing
 | 
|---|
| 205 |  ; RT - all other values in (#1201) RX ACTION field on 9002313.59
 | 
|---|
| 206 | RTBB(BP59) ;*/
 | 
|---|
| 207 |  N BPTRBB
 | 
|---|
| 208 |  S BPTRBB=$P($G(^BPST(BP59,12)),U)
 | 
|---|
| 209 |  I BPTRBB="" Q "**"
 | 
|---|
| 210 |  I BPTRBB="BB" Q "BB"
 | 
|---|
| 211 |  Q "RT"
 | 
|---|
| 212 |  ;
 | 
|---|
| 213 |  ;------------ patient's name
 | 
|---|
| 214 | PATNAME(BPDFN) ;
 | 
|---|
| 215 |  Q $E($P($G(^DPT(BPDFN,0)),U),1,15)
 | 
|---|
| 216 |  ;
 | 
|---|
| 217 | SSN4(DFN) ;last 4 SSN
 | 
|---|
| 218 |  N X
 | 
|---|
| 219 |  S X=$P($G(^DPT(DFN,0)),U,9)
 | 
|---|
| 220 |  Q "("_$E(X,$L(X)-3,$L(X))_")"
 | 
|---|
| 221 |  ;
 | 
|---|
| 222 |  ;get drug generic name
 | 
|---|
| 223 | DRGNAM(BP50) ;
 | 
|---|
| 224 |  ;BP50 - ptr to #50
 | 
|---|
| 225 |  Q $E($$DRUGDIE^BPSUTIL1(BP50,.01,"E"),1,35)
 | 
|---|
| 226 |  ;get drug
 | 
|---|
| 227 | GETDRUG(BP52) ;
 | 
|---|
| 228 |  ;return value:
 | 
|---|
| 229 |  ; 0 - unknown
 | 
|---|
| 230 |  ; n - ptr to DRUG file #50
 | 
|---|
| 231 |  Q +$$RXAPI1^BPSUTIL1(BP52,6,"I")
 | 
|---|
| 232 |  ;
 | 
|---|
| 233 | GETDRG59(BP59) ;
 | 
|---|
| 234 |  N BPX
 | 
|---|
| 235 |  S BPX=$$RXREF(BP59)
 | 
|---|
| 236 |  Q $$GETDRUG(+BPX)
 | 
|---|
| 237 |  ;
 | 
|---|
| 238 |  ;
 | 
|---|
| 239 |  ;review %% for each of claims in the array 
 | 
|---|
| 240 |  ;and calculate "overall" "done" status
 | 
|---|
| 241 |  ;input:
 | 
|---|
| 242 |  ; BPARR59 - array of ptr to #9002313.59
 | 
|---|
| 243 |  ;output:
 | 
|---|
| 244 |  ; status
 | 
|---|
| 245 | FINISHST(BPARR59) ;
 | 
|---|
| 246 |  N BPFIN,BP59
 | 
|---|
| 247 |  S BPFIN=1,BP59=0
 | 
|---|
| 248 |  F  S BP59=$O(BPARR59(BP59)) Q:+BP59=0  D  Q:BPFIN=0
 | 
|---|
| 249 |  . I $$PRCNTG^BPSSCRU3(BP59)<99 S BPFIN=0
 | 
|---|
| 250 |  I BPFIN=1 Q "**FINISHED**"
 | 
|---|
| 251 |  Q ""
 | 
|---|
| 252 |  ;
 | 
|---|
| 253 |  ;/**
 | 
|---|
| 254 |  ;BP59 - ptr to 9002313.59
 | 
|---|
| 255 |  ;output :
 | 
|---|
| 256 |  ;ECME number 
 | 
|---|
| 257 |  ; 7 digits of the prescription IEN file 52
 | 
|---|
| 258 |  ;or 7 spaces
 | 
|---|
| 259 | ECMENUM(BP59) ;*/
 | 
|---|
| 260 |  N X
 | 
|---|
| 261 |  S X=$P($G(^BPST(BP59,0)),"^")
 | 
|---|
| 262 |  I X="" Q $$FORMAT(X,7," ",1)
 | 
|---|
| 263 |  Q $$FORMAT(X\1,7,"0",1)
 | 
|---|
| 264 |  ;
 | 
|---|
| 265 |  ;BPRX - ptr to #52
 | 
|---|
| 266 | RXNUM(BPRX) ;
 | 
|---|
| 267 |  Q $$RXAPI1^BPSUTIL1(BPRX,.01,"E")_$S(+$$RXAPI1^BPSUTIL1(BPRX,105,"I"):"$",1:"")
 | 
|---|
| 268 |  ;
 | 
|---|
| 269 |  ;/**
 | 
|---|
| 270 |  ;get NDC
 | 
|---|
| 271 |  ;input 
 | 
|---|
| 272 |  ;BPRX - ptr to #52
 | 
|---|
| 273 |  ;BPREF - refill # (0,1,2,3...)
 | 
|---|
| 274 | NDC(BPRX,BPREF) ;*/
 | 
|---|
| 275 |  Q $$GETNDC^PSONDCUT(BPRX,BPREF)
 | 
|---|
| 276 |  ;
 | 
|---|
| 277 | DRGNAME(BP59) ;drug name BP59 -ptr to .59 file
 | 
|---|
| 278 |  N BPRX
 | 
|---|
| 279 |  S BPRX=+$P($G(^BPST(BP59,1)),U,11) ;ptr to RX node in #52
 | 
|---|
| 280 |  Q $E($$DRGNAM($$GETDRUG(BPRX)),1,23)
 | 
|---|
| 281 |  ;
 | 
|---|
| 282 |  ;is the number even?
 | 
|---|
| 283 |  ;1-yes
 | 
|---|
| 284 |  ;0 -no
 | 
|---|
| 285 | ISEVEN(BPNUM) ;
 | 
|---|
| 286 |  Q ((BPNUM/2)-(BPNUM\2))=0
 | 
|---|
| 287 |  ;
 | 
|---|
| 288 |  ;BPSTR - string to format
 | 
|---|
| 289 |  ;BPSMLEN - max lenght
 | 
|---|
| 290 |  ;BPSCHR - char to add
 | 
|---|
| 291 |  ;BPSLFT - 1 - add from the left, 0 - from the right
 | 
|---|
| 292 | FORMAT(BPSTR,BPSMLEN,BPSCHR,BPSLFT) ;
 | 
|---|
| 293 |  N LN S LN=$L(BPSTR)
 | 
|---|
| 294 |  N ZZ S ZZ=""
 | 
|---|
| 295 |  I LN=BPSMLEN Q BPSTR
 | 
|---|
| 296 |  I LN>BPSMLEN Q:BPSLFT $E(BPSTR,LN-BPSMLEN+1,9999) Q $E(BPSTR,1,BPSMLEN)
 | 
|---|
| 297 |  S $P(ZZ,BPSCHR,BPSMLEN-LN+1)=""
 | 
|---|
| 298 |  Q:BPSLFT ZZ_BPSTR
 | 
|---|
| 299 |  Q BPSTR_ZZ
 | 
|---|
| 300 |  ;
 | 
|---|