| 1 | BPSSCRCL ;BHAM ISC/SS - ECME SCREEN CLOSE CLAIMS ;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 |  Q
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 | CLO ;entry point to close claims
 | 
|---|
| 7 |  N BPRET,BPSARR59
 | 
|---|
| 8 |  I '$D(@(VALMAR)) Q
 | 
|---|
| 9 |  D FULL^VALM1
 | 
|---|
| 10 |  W !,"Enter the line numbers for the claim(s) to be closed."
 | 
|---|
| 11 |  S BPRET=$$ASKLINES^BPSSCRU4("Select item(s)","C",.BPSARR59,VALMAR)
 | 
|---|
| 12 |  I BPRET="^" S VALMBCK="R" Q
 | 
|---|
| 13 |  ;close claims
 | 
|---|
| 14 |  ;update the content of the screen
 | 
|---|
| 15 |  ;only if at least one claim was closed
 | 
|---|
| 16 |  I $$CLOSE(.BPSARR59) D REDRAW^BPSSCRUD("Updating screen for closed claims...")
 | 
|---|
| 17 |  E  S VALMBCK="R"
 | 
|---|
| 18 |  Q
 | 
|---|
| 19 |  ;
 | 
|---|
| 20 |  ;close claims
 | 
|---|
| 21 |  ;input:
 | 
|---|
| 22 |  ; BP59ARR - array with ptrs to BPS TRANSACTION FILE
 | 
|---|
| 23 |  ;       BP59ARR(ien59)="ien in TMP ^ number on the user screen"
 | 
|---|
| 24 |  ;returns:
 | 
|---|
| 25 |  ; BPCLTOT - number of closed claims
 | 
|---|
| 26 | CLOSE(BP59ARR) ;
 | 
|---|
| 27 |  N BPNEWARR,BPRETV,BPREJFLG,X
 | 
|---|
| 28 |  N BPDFN,BP59,BPIFANY,BPQ
 | 
|---|
| 29 |  N BPREAS,BPCOMM,BP90ANSW,BPRCOPAY,BPRXINFO,BPCOP,BPCLTOT,BPINS,BPINSNM,BP59FRST
 | 
|---|
| 30 |  S BPRETV=$$MKNEWARR(.BP59ARR,.BPNEWARR,.BPINS)
 | 
|---|
| 31 |  S BPQ="",BPIFANY=0,BPREJFLG=1
 | 
|---|
| 32 |  S BPDFN=""
 | 
|---|
| 33 |  F  S BPDFN=$O(BPNEWARR(BPDFN)) Q:BPDFN=""  D  Q:BPQ="^"
 | 
|---|
| 34 |  . W !!,"You've chosen to close the following prescription(s) for",!,$E($$PATNAME^BPSSCRU2(BPDFN),1,13)_" :"
 | 
|---|
| 35 |  . S BP59="" F  S BP59=$O(BPNEWARR(BPDFN,BP59)) Q:BP59=""  D  Q:BPQ="^"
 | 
|---|
| 36 |  . . I $Y>20 D PAUSE^VALM1 W @IOF I X="^" S BPQ="^" Q
 | 
|---|
| 37 |  . . S BPIFANY=1,BPQ=""
 | 
|---|
| 38 |  . . ;I $P($G(BPNEWARR(BPDFN,BP59)),U,3)=1 W:BPREJFLG=0 ! S BPREJFLG=1
 | 
|---|
| 39 |  . . ;E  W:BPREJFLG=1 ! S BPREJFLG=0
 | 
|---|
| 40 |  . . S BPREJFLG=+$P($G(BPNEWARR(BPDFN,BP59)),U,3)
 | 
|---|
| 41 |  . . W !,@VALMAR@(+$G(BPNEWARR(BPDFN,BP59)),0)
 | 
|---|
| 42 |  . . D DISPREJ^BPSSCRU6(BP59)
 | 
|---|
| 43 |  . . W:BPREJFLG=0 !,"Claim NOT Rejected and cannot be Closed."
 | 
|---|
| 44 |  I +BPRETV=0 Q $$QUITCL()
 | 
|---|
| 45 |  I BPQ="^" Q $$QUITCL()
 | 
|---|
| 46 |  ;
 | 
|---|
| 47 |  W !!,"ALL Selected Rxs will be CLOSED using the same information gathered in the following prompts.",!
 | 
|---|
| 48 |  S BPQ=$$YESNO^BPSSCRRS("Are you sure?(Y/N)")
 | 
|---|
| 49 |  I BPQ'=1 Q $$QUITCL()
 | 
|---|
| 50 |  ;
 | 
|---|
| 51 |  ; ask questions for all of them
 | 
|---|
| 52 |  W !!
 | 
|---|
| 53 |  I $$ASKQUEST(+$P(BPRETV,U,2),.BPREAS,.BPCOMM,.BP90ANSW,.BPRCOPAY)'=1 Q $$QUITCL()
 | 
|---|
| 54 |  ;
 | 
|---|
| 55 |  ; check 2nd insurance
 | 
|---|
| 56 |  S BPQ=""
 | 
|---|
| 57 |  I BP90ANSW'="D" D
 | 
|---|
| 58 |  . S BPDFN="" F  S BPDFN=$O(BPINS(BPDFN)) Q:BPDFN=""  D  Q:BPQ="^"
 | 
|---|
| 59 |  . . S BPINSNM="" F  S BPINSNM=$O(BPINS(BPDFN,BPINSNM)) Q:BPINSNM=""  D  Q:BPQ="^"
 | 
|---|
| 60 |  . . . S BP59FRST=0
 | 
|---|
| 61 |  . . . S BP59=""
 | 
|---|
| 62 |  . . . K BPRXINFO
 | 
|---|
| 63 |  . . . F  S BP59=$O(BPINS(BPDFN,BPINSNM,BP59)) Q:BP59=""  D  Q:BPQ="^"
 | 
|---|
| 64 |  . . . . S:BP59FRST=0 BP59FRST=BP59
 | 
|---|
| 65 |  . . . . S BPRXINFO(BP59)=$E($G(@VALMAR@(+$G(BP59ARR(BP59)),0)),7,99)
 | 
|---|
| 66 |  . . . ; call CH2NDINS^BPSSCRU5 only once for all claims for this patient and insurance
 | 
|---|
| 67 |  . . . ; you can use one BP59FRST for the group of claims here as a parameter since 
 | 
|---|
| 68 |  . . . ; they all are all identical from the "patient-insurance pair" point of view
 | 
|---|
| 69 |  . . . D:BP59FRST>0 CH2NDINS^BPSSCRU5(BP59FRST,$E($$PATNAME^BPSSCRU2(BPDFN),1,13),BPINSNM,.BPRXINFO)
 | 
|---|
| 70 |  ;
 | 
|---|
| 71 |  I BPQ="^" Q $$QUITCL()
 | 
|---|
| 72 |  ;
 | 
|---|
| 73 |  W @IOF
 | 
|---|
| 74 |  ;and finally close all
 | 
|---|
| 75 |  S BPCLTOT=0
 | 
|---|
| 76 |  S BPDFN="" F  S BPDFN=$O(BPNEWARR(BPDFN)) Q:BPDFN=""  D
 | 
|---|
| 77 |  . S BP59="" F  S BP59=$O(BPNEWARR(BPDFN,BP59)) Q:BP59=""  D
 | 
|---|
| 78 |  . . I $P($G(BPNEWARR(BPDFN,BP59)),U,3)=0 Q  ;can't be closed
 | 
|---|
| 79 |  . . S BPCOP=0
 | 
|---|
| 80 |  . . I +BPRCOPAY=1,$P($G(BPNEWARR(BPDFN,BP59)),U,4)=1 S BPCOP=1 ;release copay
 | 
|---|
| 81 |  . . I $$CLOSEIT(BP59,$P(BPREAS,U,2),BPCOMM,BP90ANSW,BPCOP)>0 D
 | 
|---|
| 82 |  . . . S BPCLTOT=BPCLTOT+1
 | 
|---|
| 83 |  ;
 | 
|---|
| 84 |  W !,BPCLTOT," claim",$S(BPCLTOT'=1:"s have",1:" has")," been closed.",!
 | 
|---|
| 85 |  D PAUSE^VALM1
 | 
|---|
| 86 |  Q BPCLTOT
 | 
|---|
| 87 |  ;
 | 
|---|
| 88 | QUITCL() ;
 | 
|---|
| 89 |  W !!,"0 claims have been closed."
 | 
|---|
| 90 |  D PAUSE^VALM1
 | 
|---|
| 91 |  Q 0
 | 
|---|
| 92 |  ;/**
 | 
|---|
| 93 |  ;Ask all necessary questions
 | 
|---|
| 94 |  ;Input
 | 
|---|
| 95 |  ; BPRELCOP - ask release copay question
 | 
|---|
| 96 |  ; .BPREAZ - ptr to #356.8 ^ CLOSE REASON NAME ^ ECME FLAG ^ ECME PAPER FLAG
 | 
|---|
| 97 |  ; .BPCOMZ - close comment (string)
 | 
|---|
| 98 |  ; .BP90ANSZ - "", "D"(drop to paper) or "N" (non-billable)
 | 
|---|
| 99 |  ; .BPRCOPAZ - 1(Yes) or 0(No) , answer to "release copay" question
 | 
|---|
| 100 |  ;Output:
 | 
|---|
| 101 |  ; 0 - cancel process
 | 
|---|
| 102 |  ; ^ - emergency quit (cancel process)
 | 
|---|
| 103 |  ; 1 - ok, can proceed
 | 
|---|
| 104 | ASKQUEST(BPRELCOP,BPREAZ,BPCOMZ,BP90ANSZ,BPRCOPAZ) ;*/
 | 
|---|
| 105 |  S BPCOMZ=""
 | 
|---|
| 106 |  S BP90ANSZ=""
 | 
|---|
| 107 |  S BPRCOPAZ=0
 | 
|---|
| 108 |  ;ask the user to choose the close reason from #356.8
 | 
|---|
| 109 |  ;using set of close reasons in IB file 356.8
 | 
|---|
| 110 |  S BPREAZ=$$REASON()
 | 
|---|
| 111 |  I BPREAZ="^" Q "^"
 | 
|---|
| 112 |  I ($P(BPREAZ,U,4)=1) D  ;if has ECME PAPER FLAG
 | 
|---|
| 113 |  . ;ask if the claim is still billable thru paper?
 | 
|---|
| 114 |  . S BP90ANSZ=$$PROMPT^BPSSCRCV("S^N:NON-BILLABLE;D:DROP TO PAPER","Treat as (N)on-Billable Episode or (D)rop Bill to Paper?","")
 | 
|---|
| 115 |  I BP90ANSZ=-1 Q "^"
 | 
|---|
| 116 |  S BPCOMZ=$$COMMENT("Comment ",40)
 | 
|---|
| 117 |  I (BPCOMZ="^") Q "^"
 | 
|---|
| 118 |  I $L(BPCOMZ)>0,BPCOMZ?1" "." " S BPCOMZ=""
 | 
|---|
| 119 |  ;check copay
 | 
|---|
| 120 |  ;ask "release copay?" in all NON-BILLABLE cases, i.e. except user answered "DROP TO PAPER"
 | 
|---|
| 121 |  ;(even in cases when he was not asked about it)
 | 
|---|
| 122 |  I BP90ANSZ'="D",BPRELCOP D
 | 
|---|
| 123 |  . ; Ask user if s/he wants to release a copay
 | 
|---|
| 124 |  . S BPRCOPAZ=$$YESNO^BPSSCRRS("Release Patient CoPay(Y/N)")
 | 
|---|
| 125 |  I BPRCOPAZ=-1 Q "^"
 | 
|---|
| 126 |  ;
 | 
|---|
| 127 |  S BPQ=$$YESNO^BPSSCRRS("Are you sure?(Y/N)")
 | 
|---|
| 128 |  I BPQ=-1 Q "^" ;quit by "^"
 | 
|---|
| 129 |  I BPQ'=1 Q 0 ;doesn't want to proceed
 | 
|---|
| 130 |  Q 1 ; answers can be used
 | 
|---|
| 131 |  ;
 | 
|---|
| 132 |  ;/**
 | 
|---|
| 133 |  ;ask for the close reason
 | 
|---|
| 134 |  ;return:
 | 
|---|
| 135 |  ;   ptr to #356.8 ^ CLOSE REASON NAME ^ ECME FLAG ^ ECME PAPER FLAG
 | 
|---|
| 136 | REASON() ;
 | 
|---|
| 137 |  N DIC,BPREASNM,BP3568,Y
 | 
|---|
| 138 |  ; - Asks for REASON for Closing
 | 
|---|
| 139 |  S DIC="^IBE(356.8,",DIC(0)="AEQMZ"
 | 
|---|
| 140 |  S DIC("S")="I $P(^(0),U,2)=1"
 | 
|---|
| 141 |  D ^DIC
 | 
|---|
| 142 |  I Y=-1 Q "^"
 | 
|---|
| 143 |  Q +Y_U_Y(0)
 | 
|---|
| 144 |  ;/**
 | 
|---|
| 145 |  ;enter the comment
 | 
|---|
| 146 |  ;BPSTR  -prompt string
 | 
|---|
| 147 |  ;BPMLEN -maxlen
 | 
|---|
| 148 | COMMENT(BPSTR,BPMLEN) ;*/
 | 
|---|
| 149 |  N DIR,DTOUT,DUOUT,BPQ
 | 
|---|
| 150 |  I '$D(BPSTR) S BPSTR="Comment "
 | 
|---|
| 151 |  I '$D(BPMLEN) S BPMLEN=40
 | 
|---|
| 152 |  S DIR(0)="FO^0:250"
 | 
|---|
| 153 |  S DIR("A")=BPSTR
 | 
|---|
| 154 |  S DIR("?",1)="This response must have at least 0 characters and no more"
 | 
|---|
| 155 |  S DIR("?")="than "_BPMLEN_" characters and must not contain embedded uparrow"
 | 
|---|
| 156 |  S BPQ=0
 | 
|---|
| 157 |  F  D  Q:+BPQ'=0
 | 
|---|
| 158 |  . D ^DIR
 | 
|---|
| 159 |  . I $D(DUOUT)!($D(DTOUT)) S BPQ=-1 Q
 | 
|---|
| 160 |  . I $L(Y)'>BPMLEN S BPQ=1 Q
 | 
|---|
| 161 |  . W !!,"This response must have at least 0 characters and no more"
 | 
|---|
| 162 |  . W !,"than "_BPMLEN_" characters and must not contain embedded uparrow.",!
 | 
|---|
| 163 |  . S DIR("B")=$E(Y,1,BPMLEN)
 | 
|---|
| 164 |  Q:BPQ<0 "^"
 | 
|---|
| 165 |  Q Y
 | 
|---|
| 166 |  ;/** 
 | 
|---|
| 167 |  ;close the claim
 | 
|---|
| 168 |  ;the approach and code partially borrowed from IHS code CLOSE^BPSOS6N
 | 
|---|
| 169 |  ;BPSTRA - ptr to #9002313.59
 | 
|---|
| 170 |  ;REASON - text name of the close reason 
 | 
|---|
| 171 |  ;BPSCLCM - comment 
 | 
|---|
| 172 |  ;BPDROP:
 | 
|---|
| 173 |  ;  "D" - DROP BILL TO PAPER
 | 
|---|
| 174 |  ;  "N" - NON-BILLABLE
 | 
|---|
| 175 |  ;BPRELCOP - 1 (Yes) or 0 (No) release copay or not?
 | 
|---|
| 176 | CLOSEIT(BPSTRA,REASON,BPSCLCM,BPDROP,BPRELCOP) ;
 | 
|---|
| 177 |  N BPSCLA,ERROR,DA,DR,BPLCK,DIE
 | 
|---|
| 178 |  S BPSCLA=$$GET1^DIQ(9002313.59,BPSTRA,3,"I")
 | 
|---|
| 179 |  W !,"Closing Claim ",$$GET1^DIQ(9002313.02,BPSCLA,.01),"..."
 | 
|---|
| 180 |  S BPLCK=0
 | 
|---|
| 181 |  L +^BPSC(BPSCLA):0
 | 
|---|
| 182 |  I $T S BPLCK=1
 | 
|---|
| 183 |  E  W !,"       *** CLAIM ",$$GET1^DIQ(9002313.02,BPSCLA,.01)," IN USE ***" Q 0
 | 
|---|
| 184 |  D CLOSE^BPSBUTL(BPSCLA,BPSTRA,REASON,$S($G(BPDROP)="D":1,1:0),BPRELCOP,BPSCLCM,.ERROR)
 | 
|---|
| 185 |  I $D(ERROR) W "NOT OK" D DSPERR(ERROR) D  Q 0
 | 
|---|
| 186 |  . I BPLCK=1 L -^BPSC(BPSCLA)
 | 
|---|
| 187 |  S DIE="^BPSC(",DA=BPSCLA,DR="901///1;902///"_$$NOW^XLFDT()_";903///"_$G(DUZ)_";904///"_REASON_";905////"_BPDROP D ^DIE
 | 
|---|
| 188 |  I BPLCK=1 L -^BPSC(BPSCLA)
 | 
|---|
| 189 |  H 1 W "OK"
 | 
|---|
| 190 |  Q 1
 | 
|---|
| 191 |  ;
 | 
|---|
| 192 | DSPERR(MSG) ; Display the ERROR message
 | 
|---|
| 193 |  W !,"Error: *** ",MSG," ***"
 | 
|---|
| 194 |  Q
 | 
|---|
| 195 |  ;
 | 
|---|
| 196 |  ;/**
 | 
|---|
| 197 |  ;ECME has tried to submit the claim to insurance with the name BPINSNAM
 | 
|---|
| 198 |  ;but the claim was rejected and now we need to determine if the patient
 | 
|---|
| 199 |  ;has any other insurance with pharmacy coverage that can be billed for the RX
 | 
|---|
| 200 |  ;Input:
 | 
|---|
| 201 |  ; BP59 - pointer to file #9002313.59
 | 
|---|
| 202 |  ; BPINSNAM - insurance that have already been used by ECME
 | 
|---|
| 203 |  ;Output:
 | 
|---|
| 204 |  ; 0 - not found
 | 
|---|
| 205 |  ; 1 ^ Insurance Name ^ Group Number ^ Date  of service
 | 
|---|
| 206 | NEXTINS(BP59,BPINSNAM) ;get insurance info by the pointer of #9002313.59
 | 
|---|
| 207 |  N BPDOS,BPDFN,BPZZ,BP36,BPX,BPHONE,BPY,BPINSNM
 | 
|---|
| 208 |  N BPPHARM,BPCOORD,BPINS,BPFOUND
 | 
|---|
| 209 |  S BPY=0
 | 
|---|
| 210 |  S BPHONE=$P($G(^BPST(BP59,10,+$G(^BPST(BP59,9)),3)),U,2)
 | 
|---|
| 211 |  S BPDOS=+$P($G(^BPST(BP59,12)),U,2)\1
 | 
|---|
| 212 |  I BPDOS=0 S BPDOS=+$P($G(^BPST(BP59,0)),U,8)\1
 | 
|---|
| 213 |  S BPDFN=+$P($G(^BPST(BP59,0)),U,6)
 | 
|---|
| 214 |  ; call INSUR^IBBAPI to get information about:
 | 
|---|
| 215 |  ;1 = Insurance Company Name
 | 
|---|
| 216 |  ;7 = Coordination of Benefits (primary, secondary, tertiary)
 | 
|---|
| 217 |  ;15 = Pharmacy Coverage?
 | 
|---|
| 218 |  ;18 = Group Number
 | 
|---|
| 219 |  S BPX=$$INSUR^IBBAPI(BPDFN,BPDOS,,.BPZZ,"1,7,15,18")
 | 
|---|
| 220 |  S BP1="" F  S BP1=$O(BPZZ("IBBAPI","INSUR",BP1)) Q:+BP1=0  D
 | 
|---|
| 221 |  . ;get pharmacy coverage
 | 
|---|
| 222 |  . S BPPHARM=+$G(BPZZ("IBBAPI","INSUR",BP1,15))
 | 
|---|
| 223 |  I BPX<1 Q 0
 | 
|---|
| 224 |  D PROCINS(.BPZZ)
 | 
|---|
| 225 |  ;check pharmacy coverage
 | 
|---|
| 226 |  S BPFOUND=0 ;if found will be set to insurance node in the INSUR^IBBAPI array
 | 
|---|
| 227 |  S BPPHARM=1 ;look only at those with pharmacy coverage
 | 
|---|
| 228 |  S BPCOORD=0
 | 
|---|
| 229 |  F  S BPCOORD=+$O(BPZZ("RES",BPPHARM,BPCOORD)) Q:BPCOORD=0!(BPFOUND'=0)  D
 | 
|---|
| 230 |  . S BPINS=+$O(BPZZ("RES",BPPHARM,BPCOORD,0))
 | 
|---|
| 231 |  . I BPINS>0 I $P($G(BPZZ("IBBAPI","INSUR",BPINS,1)),U,2)'=BPINSNAM S BPFOUND=BPINS
 | 
|---|
| 232 |  I BPFOUND=0 Q 0
 | 
|---|
| 233 |  Q 1_U_$P($G(BPZZ("IBBAPI","INSUR",BPFOUND,1)),U,2)_U_$P($G(BPZZ("IBBAPI","INSUR",BPFOUND,18)),U)_U_BPDOS
 | 
|---|
| 234 |  ;
 | 
|---|
| 235 |  ;process insurances
 | 
|---|
| 236 |  ;input: local array returned by INSUR^IBBAPI
 | 
|---|
| 237 |  ;output: BPZZ("RES",pharmacy coverage,coordination,insurance element # in BPZZ array)
 | 
|---|
| 238 | PROCINS(BPZZ) ;
 | 
|---|
| 239 |  N BP1,BP2,BP0,BPPHONE,BPPHARM,BPCOORD
 | 
|---|
| 240 |  S BP1="" F  S BP1=$O(BPZZ("IBBAPI","INSUR",BP1)) Q:+BP1=0  D
 | 
|---|
| 241 |  . ;get pharmacy coverage
 | 
|---|
| 242 |  . S BPPHARM=+$G(BPZZ("IBBAPI","INSUR",BP1,15))
 | 
|---|
| 243 |  . ;get coordination of benefits
 | 
|---|
| 244 |  . S BPCOORD=+$G(BPZZ("IBBAPI","INSUR",BP1,7))
 | 
|---|
| 245 |  . ;create ^TMP to sort results by pharmacy coverage and coordination of benefits
 | 
|---|
| 246 |  . S BPZZ("RES",BPPHARM,BPCOORD,BP1)=""
 | 
|---|
| 247 |  Q
 | 
|---|
| 248 |  ;
 | 
|---|
| 249 |  ;------------
 | 
|---|
| 250 | MKNEWARR(BPARR,BPNEWARR,BPINSARR) ;
 | 
|---|
| 251 |  N BP59,BPREJ,BPREJCNT,BPRELCNT,BPREL,BPINS
 | 
|---|
| 252 |  S BPREJCNT=0,BPRELCNT=0
 | 
|---|
| 253 |  S BPINS=0
 | 
|---|
| 254 |  S BP59="" F  S BP59=$O(BPARR(BP59)) Q:BP59=""  D
 | 
|---|
| 255 |  . S BPREJ=0
 | 
|---|
| 256 |  . S BPDFN=+$P($G(^BPST(BP59,0)),U,6)
 | 
|---|
| 257 |  . S BPREJ=$S($P($$CLAIMST^BPSSCRU3(BP59),U)="E REJECTED":1,1:0)
 | 
|---|
| 258 |  . S:BPREJ BPREJCNT=BPREJCNT+1
 | 
|---|
| 259 |  . S BPREL=$S($$RXAPI1^BPSUTIL1(+$P($$RXREF^BPSSCRU2(BP59),U),106,"I"):1,1:0)
 | 
|---|
| 260 |  . S:BPREL BPRELCNT=BPRELCNT+1
 | 
|---|
| 261 |  . S BPNEWARR(BPDFN,BP59)=BPARR(BP59)_U_BPREJ_U_BPREL
 | 
|---|
| 262 |  . S BPINS=$P($$GETINSUR^BPSSCRU2(BP59),U,2)
 | 
|---|
| 263 |  . I BPREJ=1,$L(BPINS)>0 S BPINSARR(BPDFN,BPINS,BP59)=BPARR(BP59)
 | 
|---|
| 264 |  Q BPREJCNT_U_BPRELCNT
 | 
|---|
| 265 |  ;
 | 
|---|