[613] | 1 | BPSSCRU3 ;BHAM ISC/SS - ECME SCREEN UTILITIES ;05-APR-05
|
---|
| 2 | ;;1.0;E CLAIMS MGMT ENGINE;**1,5**;JUN 2004;Build 45
|
---|
| 3 | ;;Per VHA Directive 2004-038, this routine should not be modified.
|
---|
| 4 | ;USER SCREEN
|
---|
| 5 | Q
|
---|
| 6 | ;get comment from BPS TRANSACTION file
|
---|
| 7 | ;BP59 - ien in that file
|
---|
| 8 | COMMENT(BP59) ;
|
---|
| 9 | N BPCMNT,BPX
|
---|
| 10 | S BPCMNT=$O(^BPST(BP59,11,999999),-1)
|
---|
| 11 | I BPCMNT="" Q ""
|
---|
| 12 | S BPX=$G(^BPST(BP59,11,BPCMNT,0))
|
---|
| 13 | Q $$DATTIM($P(BPX,U,1)\1)_" - "_$P(BPX,U,3)_U_$$USERNAM^BPSCMT01($P(BPX,U,2))
|
---|
| 14 | ;
|
---|
| 15 | DATTIM(X) ;Convert FM date to displayable (mm/dd/yy HH:MM) format.
|
---|
| 16 | I +X=0 W ""
|
---|
| 17 | N DATE,YR,BPT,BPM,BPH,BPAP
|
---|
| 18 | I $G(X) S YR=$E(X,2,3)
|
---|
| 19 | I $G(X) S DATE=$S(X:$E(X,4,5)_"/"_$E(X,6,7)_"/"_YR,1:"")
|
---|
| 20 | S BPT=$P(X,".",2) S:$L(BPT)<4 BPT=BPT_$E("0000",1,4-$L(BPT))
|
---|
| 21 | S BPH=$E(BPT,1,2),BPM=$E(BPT,3,4)
|
---|
| 22 | S BPAP="a" I BPH>12 S BPH=BPH-12,BPAP="p" S:$L(BPH)<2 BPH="0"_BPH
|
---|
| 23 | I BPT S:'BPH BPH=12 S DATE=DATE_" "_BPH_":"_BPM_BPAP
|
---|
| 24 | Q $G(DATE)
|
---|
| 25 | ;/**
|
---|
| 26 | ;BP59 - ptr to 9002313.59
|
---|
| 27 | ;returns the string with none, one or more than one of the following:
|
---|
| 28 | ; PB - payable
|
---|
| 29 | ; RJ - rejected
|
---|
| 30 | ; RA - reversal accepted
|
---|
| 31 | ; RR
|
---|
| 32 | ; AR - autoreversal
|
---|
| 33 | ; SR - stranded
|
---|
| 34 | ; example: "^RV^AR"
|
---|
| 35 | CLAIMST(BP59,BPDESRC) ;*/
|
---|
| 36 | N BPX,BPRET,BPSTATUS
|
---|
| 37 | S BPRET="^"
|
---|
| 38 | S BPX=$$RXREF^BPSSCRU2(BP59)
|
---|
| 39 | S BPSTATUS=$$STATUS^BPSOSRX(+BPX,$P(BPX,U,2))
|
---|
| 40 | Q $P(BPSTATUS,U,1,3)
|
---|
| 41 | ;Q $P(BPSTATUS,U,1)_U_$P(BPSTATUS,U,2)_U_$P(BPSTATUS,U,3)
|
---|
| 42 | ;/**
|
---|
| 43 | ;BP59 - ptr to 9002313.59
|
---|
| 44 | ;returns the string with none, one or more tha one of the following:
|
---|
| 45 | ; PB - payable
|
---|
| 46 | ; RJ - rejected
|
---|
| 47 | ; RV - reversal
|
---|
| 48 | ; AR - autoreversal
|
---|
| 49 | ; SR - stranded
|
---|
| 50 | ; example: "^RV^AR"
|
---|
| 51 | CLAIMST2(BP59) ;*/
|
---|
| 52 | N BPX,BPRET,BPSTATUS
|
---|
| 53 | S BPRET="^"
|
---|
| 54 | S BPX=$$RXREF^BPSSCRU2(BP59)
|
---|
| 55 | S BPSTATUS=$$STATUS^BPSOSRX(+BPX,$P(BPX,U,2))
|
---|
| 56 | I BPSTATUS["E REVERSAL" S BPRET=BPRET_"RV^"
|
---|
| 57 | I BPSTATUS["E PAYABLE" S BPRET=BPRET_"PB^"
|
---|
| 58 | I BPSTATUS["E REJECTED" S BPRET=BPRET_"RJ^"
|
---|
| 59 | I BPSTATUS["E STRANDED" S BPRET=BPRET_"SR^"
|
---|
| 60 | I BPSTATUS["E REVERSAL STRANDED" S BPRET=BPRET_"SR^"
|
---|
| 61 | Q BPRET
|
---|
| 62 | ;/**
|
---|
| 63 | ;pointers for RESPONSE file (#9002313.03) by pointer in TRANSACTION file #9002313.59
|
---|
| 64 | ;B59 - ptr to #9002313.59
|
---|
| 65 | ;BPRESP - ptr to #9002313.03
|
---|
| 66 | ;BPPOS - position inside #9002313.03 (i.e. the number
|
---|
| 67 | ;of the claim in the transmission - currently we always have only 1
|
---|
| 68 | GRESPPOS(BP59,BPRESP,BPPOS) ;*/
|
---|
| 69 | I $G(^BPST(BP59,4)) D ; reversal kind of message
|
---|
| 70 | . S BPRESP=+$P(^BPST(BP59,4),U,2)
|
---|
| 71 | . S BPPOS=1
|
---|
| 72 | E D
|
---|
| 73 | . S BPRESP=+$P($G(^BPST(BP59,0)),U,5)
|
---|
| 74 | . S BPPOS=+$P($G(^BPST(BP59,0)),U,9)
|
---|
| 75 | Q:+BPRESP=0 0
|
---|
| 76 | Q:+BPPOS=0 0
|
---|
| 77 | Q 1
|
---|
| 78 | ;
|
---|
| 79 | ;/**
|
---|
| 80 | ;reject message from RESPONSE file
|
---|
| 81 | ;BP59 - ptr to 9002313.59
|
---|
| 82 | ;BPTOP - top level index (for exmpl "504" for ^BPSR(D0,504)= (#504) Message [1F]
|
---|
| 83 | ;BPDEEP - lower level (for exmpl BPTOP=1000 and BPDEEP=525 for
|
---|
| 84 | ; ^BPSR(D0,1000,D1,525)= (#525) DUR Response Data [1F]
|
---|
| 85 | ;
|
---|
| 86 | GETMESS(BPTOP,BPDEEP,BP59) ;
|
---|
| 87 | N BP59DAT,BPRESP,BPPOS
|
---|
| 88 | N BP1
|
---|
| 89 | ;S (BPRESP,BPPOS)=0
|
---|
| 90 | ;get response and position in the BPS RESPONSE file
|
---|
| 91 | I $$GRESPPOS(BP59,.BPRESP,.BPPOS)=0 Q ""
|
---|
| 92 | ; -------- transmission specific message ----------
|
---|
| 93 | I BPTOP=504 Q $P($G(^BPSR(BPRESP,504)),U)
|
---|
| 94 | ;
|
---|
| 95 | ; -------claim specific message-----------
|
---|
| 96 | ;assuming there is only one claim/response per transmission
|
---|
| 97 | S BP1=$O(^BPSR(BPRESP,BPTOP,0))
|
---|
| 98 | I BP1=0 Q ""
|
---|
| 99 | ;---525: DUR
|
---|
| 100 | ;---526: Additional Message Information
|
---|
| 101 | ;---504: Message for the claim
|
---|
| 102 | I (BPDEEP=525)!(BPDEEP=526)!(BPDEEP=504) Q $P($G(^BPSR(BPRESP,1000,BPPOS,BPDEEP)),U)
|
---|
| 103 | Q ""
|
---|
| 104 | ;
|
---|
| 105 | ;reject message from RESPONSE file
|
---|
| 106 | ;BP59 - ptr to 9002313.59
|
---|
| 107 | ;BPARR1 - array to return messages (by ref)
|
---|
| 108 | ;BPN1 - index for the array (by ref - will
|
---|
| 109 | ; be incremented if more than one node added)
|
---|
| 110 | ;BPMLEN - max length for each string
|
---|
| 111 | ;PBPREF - for prefix string
|
---|
| 112 | ;. D GETMESS^BPSSCRU3(1000,504,BP59,.BPARR,.BPN,50)
|
---|
| 113 | ;compare GETRJCOD from BPSSCRu2
|
---|
| 114 | GETRJCOD(BP59,BPARR1,BPN1,BPMLEN,PBPREF) ;
|
---|
| 115 | N BP59DAT S BP59DAT=$G(^BPST(BP59,0))
|
---|
| 116 | N BPRESP,BPPOS
|
---|
| 117 | N BPRJCOD
|
---|
| 118 | N BPRJTXT
|
---|
| 119 | N BPSTR
|
---|
| 120 | N BPRJ
|
---|
| 121 | ;pointers for RESPONSE file (#9002313.03) by pointer in TRANSACTION file #9002313.59
|
---|
| 122 | ;get response and position
|
---|
| 123 | I $$GRESPPOS(BP59,.BPRESP,.BPPOS)=0 Q
|
---|
| 124 | S BPRJ=0
|
---|
| 125 | S BPSTR=""
|
---|
| 126 | F S BPRJ=$O(^BPSR(BPRESP,1000,BPPOS,511,BPRJ)) Q:+BPRJ=0 D
|
---|
| 127 | . S BPRJCOD=$P($G(^BPSR(BPRESP,1000,BPPOS,511,BPRJ,0)),U)
|
---|
| 128 | . Q:$L(BPRJCOD)=0
|
---|
| 129 | . S BPRJTXT=$$GETRJNAM(BPRJCOD)
|
---|
| 130 | . S BPN1=BPN1+1,BPARR1(BPN1)=PBPREF_BPRJTXT
|
---|
| 131 | Q BPN1
|
---|
| 132 | ;/**
|
---|
| 133 | ;Input:
|
---|
| 134 | ; BP59 - pointer to file #9002313.59
|
---|
| 135 | ;Output:
|
---|
| 136 | ; BPRCODES - array for reject codes by reference
|
---|
| 137 | REJCODES(BP59,BPRCODES) ;get reject codes
|
---|
| 138 | N BPRESP,BPPOS,BPA,BPR
|
---|
| 139 | ;pointers for RESPONSE file (#9002313.03) by pointer in TRANSACTION file #9002313.59
|
---|
| 140 | ;get response and position
|
---|
| 141 | I $$GRESPPOS(BP59,.BPRESP,.BPPOS)=0 Q
|
---|
| 142 | ;
|
---|
| 143 | S BPA=0
|
---|
| 144 | F S BPA=$O(^BPSR(BPRESP,1000,BPPOS,511,BPA)) Q:'BPA D
|
---|
| 145 | . S BPR=$P(^BPSR(BPRESP,1000,BPPOS,511,BPA,0),U)
|
---|
| 146 | . I BPR'="" S BPRCODES(BPR)=""
|
---|
| 147 | Q
|
---|
| 148 | ;/**
|
---|
| 149 | ;BPRJCODE - code
|
---|
| 150 | GETRJNAM(BPRJCODE) ;*/
|
---|
| 151 | N BPRJIEN
|
---|
| 152 | S BPRJIEN=$O(^BPSF(9002313.93,"B",BPRJCODE,0))
|
---|
| 153 | Q:+BPRJIEN=0 ""
|
---|
| 154 | Q BPRJCODE_":"_$P($G(^BPSF(9002313.93,BPRJIEN,0)),U,2)
|
---|
| 155 | ;/**
|
---|
| 156 | ;BP59 - ptr to 9002313.59
|
---|
| 157 | ;was the claim ever autoreversed ?
|
---|
| 158 | AUTOREV(BP59) ;*/
|
---|
| 159 | N BP02
|
---|
| 160 | S BP02=+$P($G(^BPST(BP59,0)),U,4)
|
---|
| 161 | Q +$P($G(^BPSC(BP02,0)),U,7)
|
---|
| 162 | ;
|
---|
| 163 | ;/**
|
---|
| 164 | ;BP59 - ptr to 9002313.59
|
---|
| 165 | ;returns :
|
---|
| 166 | ;0 Waiting to start
|
---|
| 167 | ;10 Gathering claim info
|
---|
| 168 | ;19 Special Grouping
|
---|
| 169 | ;30 Waiting for packet build
|
---|
| 170 | ;31 Wait for retry (insurer asleep)
|
---|
| 171 | ;40 Packet being built
|
---|
| 172 | ;50 Waiting for transmit
|
---|
| 173 | ;51 Wait for retry (comms error)
|
---|
| 174 | ;60 Transmitting
|
---|
| 175 | ;70 Receiving Response
|
---|
| 176 | ;80 Waiting to process response
|
---|
| 177 | ;90 Processing response
|
---|
| 178 | ;99 Done
|
---|
| 179 | ;
|
---|
| 180 | PRCNTG(BP59) ;*/
|
---|
| 181 | Q +$P($G(^BPST(BP59,0)),U,2)
|
---|
| 182 | ;
|
---|
| 183 | ;
|
---|
| 184 | LINE(BPN,BPCH) ;
|
---|
| 185 | N BP1
|
---|
| 186 | S $P(BP1,BPCH,BPN+1)=""
|
---|
| 187 | Q BP1
|
---|
| 188 | ;
|
---|
| 189 | DTTIME(X) ;Convert FM date to displayable (mm/dd/yy HH:MM) format.
|
---|
| 190 | I +X=0 W ""
|
---|
| 191 | N DATE,YR,BPT,BPM,BPH,BPAP,BPS
|
---|
| 192 | I $G(X) S YR=$E(X,1,3)+1700
|
---|
| 193 | I $G(X) S DATE=$S(X:$E(X,4,5)_"/"_$E(X,6,7)_"/"_YR,1:"")
|
---|
| 194 | S BPT=$P(X,".",2)
|
---|
| 195 | I BPT S:$L(BPT)<6 BPT=BPT_$E("000000",1,6-$L(BPT))
|
---|
| 196 | S BPH=$E(BPT,1,2),BPM=$E(BPT,3,4),BPS=$E(BPT,5,6)
|
---|
| 197 | I BPT S DATE=DATE_"@"_BPH_":"_BPM_":"_BPS
|
---|
| 198 | Q $G(DATE)
|
---|
| 199 | ;
|
---|
| 200 | ;call IB API to get insurance data, then select proper insurance by its name
|
---|
| 201 | ;get its phone number
|
---|
| 202 | ;input:
|
---|
| 203 | ; DFN - patient IEN in #2
|
---|
| 204 | ; BPDOS - date of service
|
---|
| 205 | ; BPINSNM - insurance name
|
---|
| 206 | ;output: insurance ien^insurance name^phone
|
---|
| 207 | GETPHONE(BPDFN,BPDOS,BPINSNM) ;
|
---|
| 208 | N BPX,BPZZ,BP1,BPPHONE
|
---|
| 209 | S BPPHONE=""
|
---|
| 210 | I $$INSUR^IBBAPI(BPDFN,BPDOS,,.BPZZ,"1,6")'=1 Q ""
|
---|
| 211 | S BP1="" F S BP1=$O(BPZZ("IBBAPI","INSUR",BP1)) Q:+BP1=0 D
|
---|
| 212 | . I BPINSNM=$P($G(BPZZ("IBBAPI","INSUR",BP1,1)),U,2) S BPPHONE=$G(BPZZ("IBBAPI","INSUR",BP1,6)) Q
|
---|
| 213 | Q BPPHONE
|
---|
| 214 | ;
|
---|
| 215 | ;try to get insurance name and phone from #9002313.59, #9002313.57 and from INSUR^IBBAPI
|
---|
| 216 | ;input: BP59 - ien in #9002313.59
|
---|
| 217 | ;return insurance_name^phone#
|
---|
| 218 | NAMEPHON(BP59) ;
|
---|
| 219 | N BPHONE,BPINSNM,BPINSID,BP57,BPINSN
|
---|
| 220 | S BPHONE=$P($G(^BPST(BP59,10,+$G(^BPST(BP59,9)),3)),U,2)
|
---|
| 221 | S BPINSNM=$P($G(^BPST(BP59,10,+$G(^BPST(BP59,9)),0)),U,7)
|
---|
| 222 | S BP57=0
|
---|
| 223 | F Q:(BPHONE'="")&(BPINSNM'="") S BP57=$O(^BPSTL("B",BP59,BP57)) Q:+BP57=0 D
|
---|
| 224 | . S BPINSN=+$G(^BPSTL(BP57,9))
|
---|
| 225 | . S:BPHONE="" BPHONE=$P($G(^BPSTL(BP57,10,BPINSN,3)),U,2)
|
---|
| 226 | . S:BPINSNM="" BPINSNM=$P($G(^BPSTL(BP57,10,BPINSN,0)),U,7)
|
---|
| 227 | ;
|
---|
| 228 | I (BPINSNM'="")&(BPHONE="") D
|
---|
| 229 | . S BPDOS=+$P($G(^BPST(BP59,12)),U,2)\1
|
---|
| 230 | . I BPDOS=0 S BPDOS=+$P($G(^BPST(BP59,0)),U,8)\1
|
---|
| 231 | . S BPDFN=+$P($G(^BPST(BP59,0)),U,6)
|
---|
| 232 | . S BPHONE=$$GETPHONE(BPDFN,BPDOS,BPINSNM)
|
---|
| 233 | Q BPINSNM_U_BPHONE
|
---|
| 234 | ;
|
---|