Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: IBCE835

IBCE835.m

Go to the documentation of this file.
  1. IBCE835 ;ALB/TMP/PJH - 835 EDI EXPLANATION OF BENEFITS MSG PROCESSING ; 7/15/10 4:40pm
  1. ;;2.0;INTEGRATED BILLING;**137,135,155,377,431,718**;21-MAR-94;Build 73
  1. ;;Per VHA Directive 2004-038, this routine should not be modified.
  1. ;
  1. Q
  1. ;
  1. ; MESSAGE HEADER DATA STRING =
  1. ; type of message^msg queue^msg #^bill #^^date/time
  1. ;
  1. HDR(IBCLNO,IBD) ;Process header data
  1. ; INPUT:
  1. ; IBCLNO = claim #
  1. ;
  1. ; ^TMP("IBMSGH",$J,0) = header message text
  1. ;
  1. ; OUTPUT:
  1. ; IBD array returned with processed data
  1. ; "LINE" = The last line # populated in the message
  1. ; "DATE" = Date/Time of EOB (Fileman format)
  1. ; "MRA" = 1 if MRA, 0 if not
  1. ; "X12" = 1 if X12, 0 if not
  1. ;
  1. ; ^TMP("IBMSG",$J,"CLAIM",claim #,0)=MESSAGE HEADER DATA STRING
  1. ; ,"D",0,1)=header record raw data
  1. ; ,"D1",1,0)=header record raw data
  1. ; ,line #)=EOB message lines
  1. ;
  1. N CT,IB399,IBD0,IBBILL,LINE,L,X,Y,Z,%DT
  1. S IBD0=$G(^TMP("IBMSGH",$J,0)),IBD("LINE")=0
  1. Q:IBD0=""
  1. S X=$P(IBD0,U,3),X=$E(X,5,8)_$E(X,1,4)_"@"_$P(IBD0,U,4)
  1. I X S %DT="XTS" D ^%DT
  1. S IBD("DATE")=$S(Y>0:Y,1:"")
  1. S IBD("MRA")=$P(IBD0,U,5)
  1. S IBD("X12")=($P(IBD0,U,2)="X")
  1. S CT=0
  1. ;
  1. I $P(IBD0,U,6)'="" S CT=CT+1 S LINE(CT)=$G(LINE(CT))_"Payer Name: "_$P(IBD0,U,6)
  1. ;
  1. I CT D
  1. . S (L,Z)=0
  1. . F S Z=$O(LINE(Z)) Q:'Z S L=L+1,^TMP("IBMSG",$J,"CLAIM",IBCLNO,L)=LINE(Z)
  1. . S IBD("LINE")=IBD("LINE")+CT
  1. ;;IB*2.0*718;JWS;EBILL-924;handle split MRAs in the same file - changed IBCLNO to $P(IBCLNO,"#")
  1. S IB399=+$O(^DGCR(399,"B",$$GETCLM^IBCE277($P(IBCLNO,"#")),""),-1)
  1. ;
  1. S IBBILL=$$LAST364^IBCEF4(IB399)
  1. ;
  1. S ^TMP("IBMSG",$J,"CLAIM",IBCLNO,0)="835EOB"_U_$G(IBD("MSG#"))_U_$G(IBD("SUBJ"))_U_IBBILL_U_U_IBD("DATE")
  1. ;
  1. S ^TMP("IBMSG",$J,"CLAIM",IBCLNO,"D",0,1)="##RAW DATA: "_IBD0
  1. S ^TMP("IBMSG",$J,"CLAIM",IBCLNO,"D1",1,0)="##RAW DATA: "_IBD0
  1. Q
  1. ;
  1. 5(IBD) ; Process claim patient ID data
  1. ; INPUT:
  1. ; IBD must be passed by reference = entire message line
  1. ;
  1. ; OUTPUT:
  1. ; IBD array
  1. ; "LINE" = the last line # populated in the message
  1. ;
  1. ; ^TMP("IBMSG",$J,"CLAIM",claim #,line#)=claim pt id message lines
  1. ; ,"D",5,msg seq #)=
  1. ; ,"D1",msg seq #,5)=
  1. ; claim pt id message raw data
  1. ;
  1. ;;IB*2.0*718;JWS;EBILL-924;handle split MRAs in the same file received from FSC
  1. N IBBILL,IBHCT
  1. S IBBILL=$$GETCLM^IBCE277($P(IBD,U,2))
  1. ;;IB*2.0*718;JWS;EBILL-924;handle split MRAs in the same file received from FSC
  1. S IBHCT=$$CHCT(IBBILL),IBBILL=IBBILL_"#"_IBHCT
  1. ;
  1. I '$D(^TMP("IBMSG",$J,"CLAIM",IBBILL)) D HDR(IBBILL,.IBD) ;Process header data if not already done for claim
  1. ;
  1. I $P(IBD,U,9) D ;Statement dates
  1. . S IBD("LINE")=$G(IBD("LINE"))+1
  1. . S ^TMP("IBMSG",$J,"CLAIM",IBBILL,IBD("LINE"))="Statement Dates: "_$$DATE^IBCE277($P(IBD,U,9))_" - "_$$DATE^IBCE277($P(IBD,U,10))
  1. ;
  1. S ^TMP("IBMSG",$J,"CLAIM",IBBILL,"D",5,1)="##RAW DATA: "_IBD
  1. S ^TMP("IBMSG",$J,"CLAIM",IBBILL,"D1",1,5)="##RAW DATA: "_IBD
  1. Q
  1. ;
  1. 6(IBD) ; Process 06 record type for corrected name and/or ID# - IB*2*377 - 1/14/08
  1. NEW IBCLM,Z,IBHCT
  1. S IBCLM=$$GETCLM^IBCE277($P(IBD,U,2))
  1. Q:IBCLM=""
  1. ;;IB*2.0*718;JWS;EBILL-924;handle split MRAs in the same file received from FSC
  1. S IBHCT=$$GETHCT(IBCLM) I IBHCT=0 S IBHCT=$$CHCT(IBCLM)
  1. S IBCLM=IBCLM_"#"_IBHCT
  1. ;
  1. I '$D(^TMP("IBMSG",$J,"CLAIM",IBCLM)) D HDR(IBCLM,.IBD) ;Process header data if not already done for claim
  1. ;
  1. S Z=$G(IBD("LINE"))
  1. I $P(IBD,U,3)'="" S Z=Z+1,^TMP("IBMSG",$J,"CLAIM",IBCLM,Z)="Corrected Patient Last Name: "_$P(IBD,U,3)
  1. I $P(IBD,U,4)'="" S Z=Z+1,^TMP("IBMSG",$J,"CLAIM",IBCLM,Z)="Corrected Patient First Name: "_$P(IBD,U,4)
  1. I $P(IBD,U,5)'="" S Z=Z+1,^TMP("IBMSG",$J,"CLAIM",IBCLM,Z)="Corrected Patient Middle Name: "_$P(IBD,U,5)
  1. I $P(IBD,U,6)'="" S Z=Z+1,^TMP("IBMSG",$J,"CLAIM",IBCLM,Z)="Corrected Patient ID#: "_$P(IBD,U,6)
  1. S IBD("LINE")=Z
  1. ;
  1. S ^TMP("IBMSG",$J,"CLAIM",IBCLM,"D",6,1)="##RAW DATA: "_IBD
  1. S ^TMP("IBMSG",$J,"CLAIM",IBCLM,"D1",1,6)="##RAW DATA: "_IBD
  1. Q
  1. ;
  1. 10(IBD) ; Process claim status data
  1. ; INPUT:
  1. ; IBD must be passed by reference = entire message line
  1. ;
  1. ; OUTPUT:
  1. ; IBD array returned with processed data
  1. ; "CLAIM" = The claim #
  1. ; "LINE" = The last line # populated in the message
  1. ;
  1. ; ^TMP("IBMSG",$J,"CLAIM",claim #,line#)=claim status message lines
  1. ; ,"D",10,msg seq #)=
  1. ; ,"D1",msg seq #,10)=
  1. ; claim status raw data
  1. ;
  1. N IBCLM,CT,LINE,L,Z,Z0,IBDATA,IBSTAT,IBHCT
  1. S IBCLM=$$GETCLM^IBCE277($P(IBD,U,2))
  1. Q:IBCLM=""
  1. ;
  1. ;;IB*2.0*718;JWS;EBILL-924;handle split MRAs in the same file received from FSC
  1. S IBHCT=$$GETHCT(IBCLM) I IBHCT=0 S IBHCT=$$CHCT(IBCLM)
  1. S IBCLM=IBCLM_"#"_IBHCT
  1. ;
  1. I '$D(^TMP("IBMSG",$J,"CLAIM",IBCLM)) D HDR(IBCLM,.IBD) ;Process header data if not already done for claim
  1. ;
  1. S CT=0
  1. F Z=3:1:6 I $P(IBD,U,Z)="Y" D Q ;Claim status
  1. . S IBSTAT=(Z-2)
  1. . S CT=CT+1,LINE(CT)="CLAIM STATUS: "_$P("PROCESSED^DENIED^PENDED^REVERSAL",U,IBSTAT)
  1. I '$G(IBSTAT) D
  1. . S CT=CT+1,LINE(CT)="CLAIM STATUS: "_$P(IBD,U,7)_" (OTHER)"
  1. ;
  1. I $P(IBD,U,8)'="" D ;Crossed over info
  1. . S CT=CT+1,LINE(CT)="Crossed over to: "_$P(IBD,U,9)_" "_$P(IBD,U,8)
  1. ;
  1. I CT D
  1. . S L=$G(IBD("LINE")),Z=0
  1. . F S Z=$O(LINE(Z)) Q:'Z S L=L+1,^TMP("IBMSG",$J,"CLAIM",IBCLM,L)=LINE(Z)
  1. . S ^TMP("IBMSG",$J,"CLAIM",IBCLM,"D",10,1)="##RAW DATA: "_IBD
  1. . S ^TMP("IBMSG",$J,"CLAIM",IBCLM,"D1",1,10)="##RAW DATA: "_IBD
  1. . S IBD("LINE")=$G(IBD("LINE"))+CT
  1. Q
  1. ;
  1. 15(IBD) ; Process claim status data
  1. ; INPUT:
  1. ; IBD must be passed by reference = entire message line
  1. ;
  1. ; OUTPUT:
  1. ; IBD array
  1. ; "LINE" = The last line # populated in the message
  1. ;
  1. ; ^TMP("IBMSG",$J,"CLAIM",claim #,"D",15,msg seq #)=
  1. ; ^TMP("IBMSG",$J,"CLAIM",claim #,"D1",msg seq #,15)=
  1. ; claim status raw data
  1. ;
  1. N IBCLM,Z,Z0,IBDATA,IBHCT
  1. S IBCLM=$$GETCLM^IBCE277($P(IBD,U,2))
  1. Q:IBCLM=""
  1. ;
  1. ;;IB*2.0*718;JWS;EBILL-924;handle split MRAs in the same file received from FSC
  1. S IBHCT=$$GETHCT(IBCLM) I IBHCT=0 S IBHCT=$$CHCT(IBCLM)
  1. S IBCLM=IBCLM_"#"_IBHCT
  1. ;
  1. I '$D(^TMP("IBMSG",$J,"CLAIM",IBCLM)) D HDR(IBCLM,.IBD) ;Process header data if not already done for claim
  1. ;
  1. S ^TMP("IBMSG",$J,"CLAIM",IBCLM,"D",15,1)="##RAW DATA: "_IBD
  1. S ^TMP("IBMSG",$J,"CLAIM",IBCLM,"D1",1,15)="##RAW DATA: "_IBD
  1. Q
  1. ;
  1. 20(IBD) ; Process claim level adjustment data
  1. ; Claim must have been referenced by a previous '05' level
  1. ;
  1. ; INPUT:
  1. ; IBD must be passed by reference = entire message line
  1. ;
  1. ; OUTPUT:
  1. ; IBD("LINE") = The last line # populated in the message
  1. ; ^TMP("IBMSG",$J,"CLAIM",claim #,line #)=claim level adjustment
  1. ; ,"D",20,seq#)=
  1. ; ,"D1",seq#,20)=
  1. ; claim level adjust. raw data
  1. ;
  1. N IBCLM,IBHCT
  1. S IBCLM=$$GETCLM^IBCE277($P(IBD,U,2))
  1. ;
  1. ;;IB*2.0*718;JWS;EBILL-924;handle split MRAs in the same file received from FSC
  1. S IBHCT=$$GETHCT(IBCLM) I IBHCT=0 S IBHCT=$$CHCT(IBCLM)
  1. S IBCLM=IBCLM_"#"_IBHCT
  1. ;
  1. Q:'$D(^TMP("IBMSG",$J,"CLAIM",IBCLM))
  1. S IBD("LINE")=$G(IBD("LINE"))+1
  1. S ^TMP("IBMSG",$J,"CLAIM",IBCLM,IBD("LINE"))="ADJUSTMENT GROUP: "_$P(IBD,U,3)_" QTY: "_+$P(IBD,U,6)_", AMT: "_($P(IBD,U,5)/100)
  1. S IBD("LINE")=IBD("LINE")+1
  1. S ^TMP("IBMSG",$J,"CLAIM",IBCLM,IBD("LINE"))=" REASON: ("_$P(IBD,U,4)_") "_$P(IBD,U,7)
  1. S ^TMP("IBMSG",$J,"CLAIM",IBCLM,"D",20,IBD("LINE"))="##RAW DATA: "_IBD
  1. S ^TMP("IBMSG",$J,"CLAIM",IBCLM,"D1",IBD("LINE"),20)="##RAW DATA: "_IBD
  1. Q
  1. ;
  1. 37(IBD) ; Process claim level adjustment data for Inpatient MEDICARE
  1. D 37^IBCE835A(.IBD)
  1. Q
  1. ;
  1. 40(IBD) ; Process service line data
  1. D 40^IBCE835A(.IBD)
  1. Q
  1. ;
  1. 45(IBD) ; Process service line adjustment data
  1. D 45^IBCE835A(.IBD)
  1. Q
  1. ;
  1. 11(IBD) ; Process claim status rendering provider data segment
  1. D XX(.IBD,11)
  1. Q
  1. ;
  1. 12(IBD) ; Process claim status corrected priority payer data segment
  1. D XX(.IBD,12)
  1. Q
  1. ;
  1. 13(IBD) ; Process claim status other subscriber data segment
  1. D XX(.IBD,13)
  1. Q
  1. ;
  1. 17(IBD) ; Process claim contact data segment
  1. D XX(.IBD,17)
  1. Q
  1. ;
  1. 30(IBD) ; Process MEDICARE inpatient adjudication data (part 1)
  1. D XX(.IBD,30)
  1. Q
  1. ;
  1. 35(IBD) ; Process MEDICARE inpatient adjudication data (part 2)
  1. D XX(.IBD,35)
  1. Q
  1. ;
  1. 41(IBD) ; Process service line data (part 2)
  1. D XX(.IBD,41)
  1. Q
  1. ;
  1. 42(IBD) ; Process service line data (part 3)
  1. D XX(.IBD,42)
  1. Q
  1. ;
  1. 46(IBD) ; Process Adjustment Policy Reference segment
  1. D 46^IBCE835A(.IBD)
  1. Q
  1. ;
  1. 99(IBD) ; Process trailer record for non-MRA EOB
  1. D XX(.IBD,99)
  1. Q
  1. ;
  1. XX(IBD,IBID) ; Store non-displayed data nodes in TMP array
  1. ;
  1. ; INPUT:
  1. ; IBD must be passed by reference = entire message line
  1. ; IBID = record id for generic store
  1. ;
  1. ; OUTPUT:
  1. ; ^TMP("IBMSG",$J,"CLAIM",claim #,"D",IBID,msg seq #)=
  1. ; ^TMP("IBMSG",$J,"CLAIM",claim #,"D1",msg seq #,IBID)=
  1. ; claim status raw data
  1. ; IBD("LINE") = The last line # populated in the message
  1. ;
  1. N IBCLM
  1. S IBCLM=$$GETCLM^IBCE277($P(IBD,U,2))
  1. ;
  1. ;;IB*2.0*718;JWS;EBILL-924;handle split MRAs in the same file received from FSC
  1. S IBHCT=$$GETHCT(IBCLM)
  1. S IBCLM=IBCLM_"#"_IBHCT
  1. ;
  1. S IBD("LINE")=$G(IBD("LINE"))+1
  1. S ^TMP("IBMSG",$J,"CLAIM",IBCLM,"D",IBID,IBD("LINE"))="##RAW DATA: "_IBD
  1. S ^TMP("IBMSG",$J,"CLAIM",IBCLM,"D1",IBD("LINE"),IBID)="##RAW DATA: "_IBD
  1. ;
  1. Q
  1. ;
  1. ;;IB*2.0*718;JWS;EBILL-924;handle split MRAs in the same file received from FSC
  1. GETHCT(IBCLNO) ;
  1. Q +$G(^TMP("IBMSG",$J,"CLAIM",IBCLNO))
  1. ;
  1. ;;IB*2.0*718;JWS;EBILL-924;handle split MRAs in the same file received from FSC
  1. CHCT(IBCLNO) ;
  1. N IBHCT
  1. S IBHCT=$G(^TMP("IBMSG",$J,"CLAIM",IBCLNO))+1,^(IBCLNO)=IBHCT
  1. Q IBHCT
  1. ;