BPSSCRU3 ;BHAM ISC/SS - ECME SCREEN UTILITIES ;05-APR-05 ;;1.0;E CLAIMS MGMT ENGINE;**1,5**;JUN 2004;Build 45 ;;Per VHA Directive 2004-038, this routine should not be modified. ;USER SCREEN Q ;get comment from BPS TRANSACTION file ;BP59 - ien in that file COMMENT(BP59) ; N BPCMNT,BPX S BPCMNT=$O(^BPST(BP59,11,999999),-1) I BPCMNT="" Q "" S BPX=$G(^BPST(BP59,11,BPCMNT,0)) Q $$DATTIM($P(BPX,U,1)\1)_" - "_$P(BPX,U,3)_U_$$USERNAM^BPSCMT01($P(BPX,U,2)) ; DATTIM(X) ;Convert FM date to displayable (mm/dd/yy HH:MM) format. I +X=0 W "" N DATE,YR,BPT,BPM,BPH,BPAP I $G(X) S YR=$E(X,2,3) I $G(X) S DATE=$S(X:$E(X,4,5)_"/"_$E(X,6,7)_"/"_YR,1:"") S BPT=$P(X,".",2) S:$L(BPT)<4 BPT=BPT_$E("0000",1,4-$L(BPT)) S BPH=$E(BPT,1,2),BPM=$E(BPT,3,4) S BPAP="a" I BPH>12 S BPH=BPH-12,BPAP="p" S:$L(BPH)<2 BPH="0"_BPH I BPT S:'BPH BPH=12 S DATE=DATE_" "_BPH_":"_BPM_BPAP Q $G(DATE) ;/** ;BP59 - ptr to 9002313.59 ;returns the string with none, one or more than one of the following: ; PB - payable ; RJ - rejected ; RA - reversal accepted ; RR ; AR - autoreversal ; SR - stranded ; example: "^RV^AR" CLAIMST(BP59,BPDESRC) ;*/ N BPX,BPRET,BPSTATUS S BPRET="^" S BPX=$$RXREF^BPSSCRU2(BP59) S BPSTATUS=$$STATUS^BPSOSRX(+BPX,$P(BPX,U,2)) Q $P(BPSTATUS,U,1,3) ;Q $P(BPSTATUS,U,1)_U_$P(BPSTATUS,U,2)_U_$P(BPSTATUS,U,3) ;/** ;BP59 - ptr to 9002313.59 ;returns the string with none, one or more tha one of the following: ; PB - payable ; RJ - rejected ; RV - reversal ; AR - autoreversal ; SR - stranded ; example: "^RV^AR" CLAIMST2(BP59) ;*/ N BPX,BPRET,BPSTATUS S BPRET="^" S BPX=$$RXREF^BPSSCRU2(BP59) S BPSTATUS=$$STATUS^BPSOSRX(+BPX,$P(BPX,U,2)) I BPSTATUS["E REVERSAL" S BPRET=BPRET_"RV^" I BPSTATUS["E PAYABLE" S BPRET=BPRET_"PB^" I BPSTATUS["E REJECTED" S BPRET=BPRET_"RJ^" I BPSTATUS["E STRANDED" S BPRET=BPRET_"SR^" I BPSTATUS["E REVERSAL STRANDED" S BPRET=BPRET_"SR^" Q BPRET ;/** ;pointers for RESPONSE file (#9002313.03) by pointer in TRANSACTION file #9002313.59 ;B59 - ptr to #9002313.59 ;BPRESP - ptr to #9002313.03 ;BPPOS - position inside #9002313.03 (i.e. the number ;of the claim in the transmission - currently we always have only 1 GRESPPOS(BP59,BPRESP,BPPOS) ;*/ I $G(^BPST(BP59,4)) D ; reversal kind of message . S BPRESP=+$P(^BPST(BP59,4),U,2) . S BPPOS=1 E D . S BPRESP=+$P($G(^BPST(BP59,0)),U,5) . S BPPOS=+$P($G(^BPST(BP59,0)),U,9) Q:+BPRESP=0 0 Q:+BPPOS=0 0 Q 1 ; ;/** ;reject message from RESPONSE file ;BP59 - ptr to 9002313.59 ;BPTOP - top level index (for exmpl "504" for ^BPSR(D0,504)= (#504) Message [1F] ;BPDEEP - lower level (for exmpl BPTOP=1000 and BPDEEP=525 for ; ^BPSR(D0,1000,D1,525)= (#525) DUR Response Data [1F] ; GETMESS(BPTOP,BPDEEP,BP59) ; N BP59DAT,BPRESP,BPPOS N BP1 ;S (BPRESP,BPPOS)=0 ;get response and position in the BPS RESPONSE file I $$GRESPPOS(BP59,.BPRESP,.BPPOS)=0 Q "" ; -------- transmission specific message ---------- I BPTOP=504 Q $P($G(^BPSR(BPRESP,504)),U) ; ; -------claim specific message----------- ;assuming there is only one claim/response per transmission S BP1=$O(^BPSR(BPRESP,BPTOP,0)) I BP1=0 Q "" ;---525: DUR ;---526: Additional Message Information ;---504: Message for the claim I (BPDEEP=525)!(BPDEEP=526)!(BPDEEP=504) Q $P($G(^BPSR(BPRESP,1000,BPPOS,BPDEEP)),U) Q "" ; ;reject message from RESPONSE file ;BP59 - ptr to 9002313.59 ;BPARR1 - array to return messages (by ref) ;BPN1 - index for the array (by ref - will ; be incremented if more than one node added) ;BPMLEN - max length for each string ;PBPREF - for prefix string ;. D GETMESS^BPSSCRU3(1000,504,BP59,.BPARR,.BPN,50) ;compare GETRJCOD from BPSSCRu2 GETRJCOD(BP59,BPARR1,BPN1,BPMLEN,PBPREF) ; N BP59DAT S BP59DAT=$G(^BPST(BP59,0)) N BPRESP,BPPOS N BPRJCOD N BPRJTXT N BPSTR N BPRJ ;pointers for RESPONSE file (#9002313.03) by pointer in TRANSACTION file #9002313.59 ;get response and position I $$GRESPPOS(BP59,.BPRESP,.BPPOS)=0 Q S BPRJ=0 S BPSTR="" F S BPRJ=$O(^BPSR(BPRESP,1000,BPPOS,511,BPRJ)) Q:+BPRJ=0 D . S BPRJCOD=$P($G(^BPSR(BPRESP,1000,BPPOS,511,BPRJ,0)),U) . Q:$L(BPRJCOD)=0 . S BPRJTXT=$$GETRJNAM(BPRJCOD) . S BPN1=BPN1+1,BPARR1(BPN1)=PBPREF_BPRJTXT Q BPN1 ;/** ;Input: ; BP59 - pointer to file #9002313.59 ;Output: ; BPRCODES - array for reject codes by reference REJCODES(BP59,BPRCODES) ;get reject codes N BPRESP,BPPOS,BPA,BPR ;pointers for RESPONSE file (#9002313.03) by pointer in TRANSACTION file #9002313.59 ;get response and position I $$GRESPPOS(BP59,.BPRESP,.BPPOS)=0 Q ; S BPA=0 F S BPA=$O(^BPSR(BPRESP,1000,BPPOS,511,BPA)) Q:'BPA D . S BPR=$P(^BPSR(BPRESP,1000,BPPOS,511,BPA,0),U) . I BPR'="" S BPRCODES(BPR)="" Q ;/** ;BPRJCODE - code GETRJNAM(BPRJCODE) ;*/ N BPRJIEN S BPRJIEN=$O(^BPSF(9002313.93,"B",BPRJCODE,0)) Q:+BPRJIEN=0 "" Q BPRJCODE_":"_$P($G(^BPSF(9002313.93,BPRJIEN,0)),U,2) ;/** ;BP59 - ptr to 9002313.59 ;was the claim ever autoreversed ? AUTOREV(BP59) ;*/ N BP02 S BP02=+$P($G(^BPST(BP59,0)),U,4) Q +$P($G(^BPSC(BP02,0)),U,7) ; ;/** ;BP59 - ptr to 9002313.59 ;returns : ;0 Waiting to start ;10 Gathering claim info ;19 Special Grouping ;30 Waiting for packet build ;31 Wait for retry (insurer asleep) ;40 Packet being built ;50 Waiting for transmit ;51 Wait for retry (comms error) ;60 Transmitting ;70 Receiving Response ;80 Waiting to process response ;90 Processing response ;99 Done ; PRCNTG(BP59) ;*/ Q +$P($G(^BPST(BP59,0)),U,2) ; ; LINE(BPN,BPCH) ; N BP1 S $P(BP1,BPCH,BPN+1)="" Q BP1 ; DTTIME(X) ;Convert FM date to displayable (mm/dd/yy HH:MM) format. I +X=0 W "" N DATE,YR,BPT,BPM,BPH,BPAP,BPS I $G(X) S YR=$E(X,1,3)+1700 I $G(X) S DATE=$S(X:$E(X,4,5)_"/"_$E(X,6,7)_"/"_YR,1:"") S BPT=$P(X,".",2) I BPT S:$L(BPT)<6 BPT=BPT_$E("000000",1,6-$L(BPT)) S BPH=$E(BPT,1,2),BPM=$E(BPT,3,4),BPS=$E(BPT,5,6) I BPT S DATE=DATE_"@"_BPH_":"_BPM_":"_BPS Q $G(DATE) ; ;call IB API to get insurance data, then select proper insurance by its name ;get its phone number ;input: ; DFN - patient IEN in #2 ; BPDOS - date of service ; BPINSNM - insurance name ;output: insurance ien^insurance name^phone GETPHONE(BPDFN,BPDOS,BPINSNM) ; N BPX,BPZZ,BP1,BPPHONE S BPPHONE="" I $$INSUR^IBBAPI(BPDFN,BPDOS,,.BPZZ,"1,6")'=1 Q "" S BP1="" F S BP1=$O(BPZZ("IBBAPI","INSUR",BP1)) Q:+BP1=0 D . I BPINSNM=$P($G(BPZZ("IBBAPI","INSUR",BP1,1)),U,2) S BPPHONE=$G(BPZZ("IBBAPI","INSUR",BP1,6)) Q Q BPPHONE ; ;try to get insurance name and phone from #9002313.59, #9002313.57 and from INSUR^IBBAPI ;input: BP59 - ien in #9002313.59 ;return insurance_name^phone# NAMEPHON(BP59) ; N BPHONE,BPINSNM,BPINSID,BP57,BPINSN S BPHONE=$P($G(^BPST(BP59,10,+$G(^BPST(BP59,9)),3)),U,2) S BPINSNM=$P($G(^BPST(BP59,10,+$G(^BPST(BP59,9)),0)),U,7) S BP57=0 F Q:(BPHONE'="")&(BPINSNM'="") S BP57=$O(^BPSTL("B",BP59,BP57)) Q:+BP57=0 D . S BPINSN=+$G(^BPSTL(BP57,9)) . S:BPHONE="" BPHONE=$P($G(^BPSTL(BP57,10,BPINSN,3)),U,2) . S:BPINSNM="" BPINSNM=$P($G(^BPSTL(BP57,10,BPINSN,0)),U,7) ; I (BPINSNM'="")&(BPHONE="") D . S BPDOS=+$P($G(^BPST(BP59,12)),U,2)\1 . I BPDOS=0 S BPDOS=+$P($G(^BPST(BP59,0)),U,8)\1 . S BPDFN=+$P($G(^BPST(BP59,0)),U,6) . S BPHONE=$$GETPHONE(BPDFN,BPDOS,BPINSNM) Q BPINSNM_U_BPHONE ;