- IBNCPDP5 ;ALB/BDB - PROCESSING FOR ECME RESP FOR SECONDARY ;11/15/07 09:43
- ;;2.0;INTEGRATED BILLING;**411,452,526,516,649,665**;21-MAR-94;Build 28
- ;;Per VA Directive 6402, this routine should not be modified.
- ;
- BILLSEC(DFN,IBD) ; Create secondary bill
- ;
- N IBBCB,IBBCF,IBBCT,IBCAN,IBCCR,IBCDFN,IBCNFN,IBCOB,IBCTCOPY,IBDBC
- N IBIFN,IBINS,IBINSN,IBOFFSET,IBPLAN,IBY,IBAMT,IBRES,IBDUP
- ;
- ;if the primary claim was rejected and we don't have any primary bill for the RX/refill (see IBSEND^BPSECMP2 for additional information)
- I $G(IBD("PRIMREJ"))=1 D
- . N IBRX,IBRFL,IBREJ,IBDPR,IBRESUL,IBZARR,IBAR433,IBREJINF,DA,DR,DIE,IBRJ,IBRJCODE
- . S IBRX=+$G(IBD("PRESCRIPTION"))
- . S IBRFL=+$G(IBD("FILL NUMBER"))
- . ;check the case when we are resubmitting the secondary claims that was submitted for rejected primary claim -
- . ;then we have already created a "dummy" primary bill and don't want to do this again
- . I +$$RXBILL^IBNCPUT3(IBRX,IBRFL,"P",,.IBZARR)>0 S IBD("PRIOR PAYMENT")=0,IBD("PRIMARY BILL")=+$O(IBZARR(0)) Q ;quit if any primary bills exist, set IBD("PRIMARY BILL") to the first existing bill ien
- . ; create a "dummy" primary bill for the primary claim as it would be a payable primary claim with 0$ amount:
- . S IBDPR("PAID")=IBD("PAID")
- . S IBDPR("PLAN")=IBD("PLAN")
- . S IBDPR("RTYPE")=IBD("RTYPE")
- . S IBD("PAID")=0
- . S IBD("PLAN")=IBD("PRIMPLAN")
- . S IBD("RTYPE")=""
- . S IBD("RXCOB")=1
- . S IBRESUL=$$BILL^IBNCPDP2(DFN,.IBD)
- . ; the previous step should do contractual adjustment, if not - then we need to do something else here to adjust this amount and close the primary bill
- . S IBD("PAID")=IBDPR("PAID")
- . S IBD("PLAN")=IBDPR("PLAN")
- . S IBD("RTYPE")=IBDPR("RTYPE")
- . S IBD("RXCOB")=2
- . S IBD("PRIMARY BILL")=$S(+IBRESUL>1:+IBRESUL,1:"")
- . S IBD("PRIOR PAYMENT")=0
- . Q:+IBD("PRIMARY BILL")=0
- . ; get a reject information from IBD("REJ CODES") (see IBSEND^BPSECMP2) REJS(1,"REJ CODES",1,"08")
- . S IBREJINF="Auto Dec.: ECME Primary claim rejected - "_$E($$REJINF(.IBD),1,30)
- . ; put a note with the reject code/reason to AR file #433
- . S IBAR433=$O(^PRCA(433,"C",+IBD("PRIMARY BILL"),0)) ; ICR# 3336
- . S DA=IBAR433,DIE="^PRCA(433,",DR="41///"_IBREJINF D ^DIE ; ICR# 3336
- . ; now quit to continue to create a secondary bill - i.e. allow the rest of the code to do its job
- . Q
- ;
- ; IB*2*452 - esg - check for duplicate response first thing
- S IBDUP=$$DUP^IBNCPDP2(.IBD) I IBDUP S IBY="0^Sec. Bill# "_$P(IBDUP,U,2)_" exists (Dup)" G BILLQ
- ;
- ; bill TRICARE copay if applicable
- I $G(IBD("COPAY")) D BILL^IBNCPDP6($G(IBD("PRESCRIPTION"))_";"_$G(IBD("FILL NUMBER")),IBD("COPAY"),$G(IBD("RTYPE")))
- ;
- S IBCAN=2,IBDBC=DT,IBBCB=DUZ,IBCTCOPY=1,IBY=1
- S IBIFN=$G(IBD("PRIMARY BILL")) I IBIFN="" S IBY="0^Missing the primary bill." G BILLQ
- S IBPLAN=$G(IBD("PLAN")) I IBPLAN="" S IBY="0^The Secondary Payer is not a valid Insurance Co." G BILLQ
- S IBCDFN=$$PLANN^IBNCPDPU(DFN,IBD("PLAN"),IBD("DOS"))
- I 'IBCDFN S IBY="-1^Plan not found in Patient's Profile." G BILLQ
- S IBCNFN=$P(IBCDFN,"^",2)
- S IBINSN=+^IBA(355.3,IBPLAN,0) ;insurance company
- S IBINS=$G(^DIC(36,+IBINSN,0)) I IBINS="" S IBY="0^The Secondary Payer is not a valid Insurance Co." G BILLQ
- S DIE="^DGCR(399,",DA=IBIFN,DR="102////"_IBINSN_";113////"_IBCNFN D ^DIE K DA,DR,DIE
- S IBCOB("0",15)="" ;.15 BILL COPIED FROM
- S IBCOB("0",21)=$S($G(IBD("RXCOB"))=1:"P",$G(IBD("RXCOB"))=2:"S",1:"P") ;.21 CURRENT BILL PAYER SEQUENCE
- S IBCOB("M1",5)=IBD("PRIMARY BILL") ;125 PRIMARY BILL # [5P:399]
- S IBCOB("U2",4)=IBD("PRIOR PAYMENT") ;218 PRIMARY PRIOR PAYMENT [4N]
- ;
- S IBBCF=IBIFN ;this is the claim we are copying FROM
- S IBIDS(.15)=IBIFN K IBIFN
- STEP2 ;
- S IBND0=^DGCR(399,IBIDS(.15),0) I $D(^("U")) S IBNDU=^("U")
- ;
- ; *** Note - all these fields should also be included in WHERE^IBCCC1
- ; ECME claims should NOT define the 399,.27 - BILL CHARGE TYPE - leave it blank for RX COST Charge Set
- ;
- F I=2:1:12 S:$P(IBND0,"^",I)]"" IBIDS(I/100)=$P(IBND0,"^",I)
- F I=16:1:19,21:1:26 S:$P(IBND0,"^",I)]"" IBIDS(I/100)=$P(IBND0,"^",I)
- F I=151,152,155 S IBIDS(I)=$P(IBNDU,"^",(I-150))
- S IBIDS(159.5)=$P(IBNDU,U,20)
- S DFN=IBIDS(.02) D DEM^VADPT
- ;set rate type
- I $G(IBD("RXCOB"))=2,$G(IBD("RTYPE")) S IBIDS(.07)=IBD("RTYPE")
- S PRCASV("SER")=$P($G(^IBE(350.9,1,1)),"^",14)
- S PRCASV("SITE")=$P($$SITE^VASITE,"^",3),IBNWBL=""
- D SETUP^PRCASVC3
- I $S($P(PRCASV("ARREC"),"^")=-1:1,$P(PRCASV("ARBIL"),"^")=-1:1,1:0) S IBY="0^No Billing Record Set up for: "_$P(PRCASV("ARREC"),"^",2)_" "_$P(PRCASV("ARBIL"),"^",2) G BILLQ
- S IBIDS(.01)=$P(PRCASV("ARBIL"),"-",2)
- S IBIDS(.17)=$S($D(IBIDS(.17)):IBIDS(.17),1:PRCASV("ARREC"))
- S IBIDS(.02)=DFN,IBHV("IBIFN")=$S($G(IBIFN):IBIFN,1:$G(IBIDS(.15)))
- S X=$P($T(WHERE),";;",2) F I=0:0 S I=$O(IBIDS(I)) Q:'I S X1=$P($E(X,$F(X,I)+1,999),";",1),$P(IBDR($P(X1,"^",1)),"^",$P(X1,"^",2))=IBIDS(I)
- S IBIFN=PRCASV("ARREC") F I=0,"C","M","M1","S","U","U1" I $D(IBDR(I)) S ^DGCR(399,IBIFN,I)=IBDR(I)
- D ; Protect variables;index entry;replace FT if copy/clone and it changes
- . N IBHOLD,DIE,DR,DA,X,Y
- . S IBHOLD("FT")=$P($G(^DGCR(399,IBIFN,0)),U,19)
- . S $P(^DGCR(399,0),"^",3)=IBIFN,$P(^(0),"^",4)=$P(^(0),"^",4)+1 D INDEX^IBCCC2
- . I IBHOLD("FT"),IBHOLD("FT")'=$P($G(^DGCR(399,IBIFN,0)),U,19) S DA=IBIFN,DIE="^DGCR(399,",DR=".19////"_IBHOLD("FT") D ^DIE
- S IBYN=1
- S IBBCT=IBIFN ; bill that the old claim was cloned TO.
- K %,%DT,I,IB,IBA,IBBT,IBIDS,IBNWBL,J,VADM,X,X1,X2,X3,X4,Y
- ;
- S IBIFN1=$P(^DGCR(399,IBIFN,0),"^",15) G END:$S(IBIFN1="":1,'$D(^DGCR(399,IBIFN1,0)):1,1:0)
- ;
- ;move pure data nodes
- ; MRD;IB*2.0*516 - Added "In7" nodes.
- F I="I1","I17","I2","I27","I3","I37","M1" I $D(^DGCR(399,IBIFN1,I)) S ^DGCR(399,IBIFN,I)=^DGCR(399,IBIFN1,I)
- ;
- ;move top level data node. ;Do not move 'TX' node
- F I="U","U1","U2","U3","UF2","UF3","UF31","C","M" I $D(^DGCR(399,IBIFN1,I)) S IBND(I)=^(I) D @(I_"^IBCCC2")
- ;
- ;move multiple level data
- F I="CC","OC","OP","OT","RC","CP","CV","PRV" I $D(^DGCR(399,IBIFN1,I,0)) D @(I_"^IBCCC2")
- ;
- D FTPRV^IBCEU5(IBIFN) ; Ask change prov type if form type not the same
- D COBCHG^IBCCC2(IBIFN,,.IBCOB)
- ;
- D ^IBCCC3 ; copy table files (362.3)
- ;
- S I=$G(^DGCR(399,IBIFN1,0)) I $P(I,U,13)=7,$P(I,U,20)=1 D COPYB^IBCDC(IBIFN1,IBIFN) ; update auto bill files
- D PRIOR^IBCCC2(IBIFN) ; add new bill to previous bills in series, primary/secondary
- I +$G(IBCTCOPY) N IBAUTO S IBAUTO=1 D PROC^IBCU7A(IBIFN),BILL^IBCRBC(IBIFN),CPTMOD26^IBCU73(IBIFN) D RECALL^DILFD(399,IBIFN_",",DUZ)
- ;
- END ;
- K %,%DT,D,DDH,DIC,DGACTDT,DGAMNT,DGBR,DGBRN,DGBSI,DGBSLOS,DGFUNC,DGIFN
- K DGPCM,DGREV,DGREV00,DGREVHDR,DGRVRCAL,DGXRF1,DFN
- K I,IB,IBA,IBA1,IBA2,IBAC,IBAD,IBADD1,IBARST,IBBNO,IBBS,IBBT,IBCAN
- K IBCBCOPY,IBCCC,IBCH,IBCHK,IBCNCOPY,IBCOB,IBDA,IBDD,IBDD1,IBDPT,IBDR
- K IBDT,IBI,IBI1,IBIDS,IBIFN,IBIFN1,IBIN,IBINS,IBIP,IBLS,IBN,IBND,IBND0
- K IBNDS,IBNDU,IBO,IBOA,IBOD,IBPROC,IBPTF,IBQUIT,IBREV,IBST,IBU,IBUC
- K IBUN,IBV,IBV1,IBW,IBWW,IBX,IBYN,IBZZ,J,K
- K PRCASV,PRCAERCD,PRCAERR,PRCASVC,PRCAT,VA,VADM,VAEL,VAERR,X,X1,X2,X3,X4,Y
- ;
- N DA,IBADT,IBDIV,IBDUZ,IBPAID,IBTRIC,X
- S IBIFN=IBBCT,IBADT=IBD("DOS"),IBDIV=+$G(IBD("DIVISION")),IBDUZ=$S($G(IBD("USER")):IBD("USER"),1:DUZ)
- ;
- S DIE="^DGCR(399,",DA=IBIFN
- ; update the primary bill,ECME fields (make sure .27 field is blank)
- S DR=".17////"_$G(IBD("PRIMARY BILL"))_";.27////@;460////^S X=IBD(""BCID"")" S:$L($G(IBD("AUTH #"))) DR=DR_";461////^S X=IBD(""AUTH #"")"
- D ^DIE K DA,DR,DIE
- ;
- ; if the primary ECME claim was rejected, then do some Claims Tracking updates
- ; since this secondary claim is payable - esg 7/8/10
- I $G(IBD("PRIMREJ"))=1 D
- . N IBRXN,IBFIL,IBTRKRN,X,Y,D0,DA,DI,DIC,DICR,DIE,DIG,DIH,DIU,DIV,DIW,DQ,DR
- . S IBRXN=+$G(IBD("PRESCRIPTION"))
- . S IBFIL=+$G(IBD("FILL NUMBER"))
- . D SETCT^IBNCPDP2 ; CT updates saying bill has been billed
- . I '$G(IBTRKRN) Q
- . S DIE="^IBT(356,",DA=IBTRKRN
- . S DR=".19///@" ; reason not billable - delete it
- . S DR=DR_";1.03///"_$$NOW^XLFDT ; CT date last edited
- . S DR=DR_";1.04///"_IBDUZ ; CT last edited by
- . S DR=DR_";1.11///0" ; ECME Reject flag is 0 - NO
- . D ^DIE
- . Q
- ;
- ; need to make sure we have computed charges
- S IBTRIC=$$TRICARE^IBNCPDP6($G(IBD("PRESCRIPTION"))_";"_$G(IBD("FILL NUMBER")))
- D CHARGES^IBNCPDP2(IBIFN)
- I $P($G(^DGCR(399,IBIFN,"U1")),U,1)'>0 S IBY="-1^Total Charges for Sec. Bill must be greater than $0." G BILLQ
- ;
- ; update the authorize/print fields
- S DIE="^DGCR(399,",DA=IBIFN
- S DR="9////1;12////"_DT D ^DIE
- ;
- ; *526 set approving official
- S:'$D(^VA(200,IBDUZ,0)) IBDUZ=.5
- ; pass the claim to AR
- D GVAR^IBCBB,ARRAY^IBCBB1 S PRCASV("APR")=IBDUZ D ^PRCASVC6 ; perform AR checks
- I 'PRCASV("OKAY") S IBY="-1^"_$$ARERR^IBNCPDP2($G(PRCAERR),2) G BILLQ
- D REL^PRCASVC ; accept bill into AR
- ;
- ; update the AR status to Active
- S PRCASV("STATUS")=16
- D STATUS^PRCASVC1
- ;
- ; decrease adjust bill
- ; Auto decrease from service Bill#,Tran amt,person,reason,Tran date
- S IBAMT=$G(^DGCR(399,IBIFN,"U1")),IBOFFSET=$P($G(^DGCR(399,IBIFN,"U1")),U,2)
- S IBPAID=$G(IBD("PAID"))
- I IBAMT-IBPAID>.01 D
- . N IBREAS
- . S IBREAS="Adjust based on secondary ECME amount paid."
- . I IBTRIC S IBREAS="Due to TRICARE Patient Responsibility (sec)."
- . D DEC^PRCASER1(PRCASV("ARREC"),IBAMT-IBOFFSET-IBPAID,IBDUZ,IBREAS,IBADT)
- . I 'IBPAID S PRCASV("STATUS")=22 D STATUS^PRCASVC1 ; collected/closed
- ;
- D ; set the user in 399
- . N IBI,IBT F IBI=2,5,11,13,15 S IBT(399,IBIFN_",",IBI)=IBDUZ
- . D FILE^DIE("","IBT")
- ;
- ;
- BILLQ ;
- S IBRES=$S(IBY<0:"0^"_$S($L($P(IBY,"^",2)):$P(IBY,"^",2),1:$P(IBY,"^",3)),$G(IBBCT):+IBBCT,1:IBY)
- I $G(IBBCT) S IBD("BILL")=IBBCT
- D LOG^IBNCPDP2("BILL",IBRES)
- I IBY<0 D BULL^IBNCPEB($G(DFN),.IBD,IBRES,$G(IBBCT))
- Q IBRES
- ;
- REJINF(IBREJARR) ;
- N IBREJINF,IBRJ,IBRJCODE,IBCNT
- S IBREJINF="",IBCNT=0
- S IBRJ=0 F S IBRJ=$O(IBREJARR("REJ CODES",IBRJ)) Q:+IBRJ=0 D
- . S IBRJCODE="" F S IBRJCODE=$O(IBREJARR("REJ CODES",IBRJ,IBRJCODE)) Q:IBRJCODE="" D
- . . I IBCNT>0 S IBREJINF=IBREJINF_", "
- . . S IBREJINF=IBREJINF_IBRJCODE_":"_$G(IBREJARR("REJ CODES",IBRJ,IBRJCODE))
- . . S IBCNT=IBCNT+1
- Q IBREJINF
- ;
- WHERE ;;.01^0^1;.02^0^2;.03^0^3;.04^0^4;.05^0^5;.06^0^6;.07^0^7;.08^0^8;.09^0^9;.11^0^11;.12^0^12;.17^0^17;.18^0^18;.19^0^19;.15^0^15;.16^0^16;.21^0^21;.22^0^22;.23^0^23;.24^0^24;.25^0^25;.26^0^26;151^U^1;152^U^2;155^U^5;159.5^U^20;
- ;
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HIBNCPDP5 10511 printed Apr 23, 2025@18:39:16 Page 2
- IBNCPDP5 ;ALB/BDB - PROCESSING FOR ECME RESP FOR SECONDARY ;11/15/07 09:43
- +1 ;;2.0;INTEGRATED BILLING;**411,452,526,516,649,665**;21-MAR-94;Build 28
- +2 ;;Per VA Directive 6402, this routine should not be modified.
- +3 ;
- BILLSEC(DFN,IBD) ; Create secondary bill
- +1 ;
- +2 NEW IBBCB,IBBCF,IBBCT,IBCAN,IBCCR,IBCDFN,IBCNFN,IBCOB,IBCTCOPY,IBDBC
- +3 NEW IBIFN,IBINS,IBINSN,IBOFFSET,IBPLAN,IBY,IBAMT,IBRES,IBDUP
- +4 ;
- +5 ;if the primary claim was rejected and we don't have any primary bill for the RX/refill (see IBSEND^BPSECMP2 for additional information)
- +6 IF $GET(IBD("PRIMREJ"))=1
- Begin DoDot:1
- +7 NEW IBRX,IBRFL,IBREJ,IBDPR,IBRESUL,IBZARR,IBAR433,IBREJINF,DA,DR,DIE,IBRJ,IBRJCODE
- +8 SET IBRX=+$GET(IBD("PRESCRIPTION"))
- +9 SET IBRFL=+$GET(IBD("FILL NUMBER"))
- +10 ;check the case when we are resubmitting the secondary claims that was submitted for rejected primary claim -
- +11 ;then we have already created a "dummy" primary bill and don't want to do this again
- +12 ;quit if any primary bills exist, set IBD("PRIMARY BILL") to the first existing bill ien
- IF +$$RXBILL^IBNCPUT3(IBRX,IBRFL,"P",,.IBZARR)>0
- SET IBD("PRIOR PAYMENT")=0
- SET IBD("PRIMARY BILL")=+$ORDER(IBZARR(0))
- QUIT
- +13 ; create a "dummy" primary bill for the primary claim as it would be a payable primary claim with 0$ amount:
- +14 SET IBDPR("PAID")=IBD("PAID")
- +15 SET IBDPR("PLAN")=IBD("PLAN")
- +16 SET IBDPR("RTYPE")=IBD("RTYPE")
- +17 SET IBD("PAID")=0
- +18 SET IBD("PLAN")=IBD("PRIMPLAN")
- +19 SET IBD("RTYPE")=""
- +20 SET IBD("RXCOB")=1
- +21 SET IBRESUL=$$BILL^IBNCPDP2(DFN,.IBD)
- +22 ; the previous step should do contractual adjustment, if not - then we need to do something else here to adjust this amount and close the primary bill
- +23 SET IBD("PAID")=IBDPR("PAID")
- +24 SET IBD("PLAN")=IBDPR("PLAN")
- +25 SET IBD("RTYPE")=IBDPR("RTYPE")
- +26 SET IBD("RXCOB")=2
- +27 SET IBD("PRIMARY BILL")=$SELECT(+IBRESUL>1:+IBRESUL,1:"")
- +28 SET IBD("PRIOR PAYMENT")=0
- +29 if +IBD("PRIMARY BILL")=0
- QUIT
- +30 ; get a reject information from IBD("REJ CODES") (see IBSEND^BPSECMP2) REJS(1,"REJ CODES",1,"08")
- +31 SET IBREJINF="Auto Dec.: ECME Primary claim rejected - "_$EXTRACT($$REJINF(.IBD),1,30)
- +32 ; put a note with the reject code/reason to AR file #433
- +33 ; ICR# 3336
- SET IBAR433=$ORDER(^PRCA(433,"C",+IBD("PRIMARY BILL"),0))
- +34 ; ICR# 3336
- SET DA=IBAR433
- SET DIE="^PRCA(433,"
- SET DR="41///"_IBREJINF
- DO ^DIE
- +35 ; now quit to continue to create a secondary bill - i.e. allow the rest of the code to do its job
- +36 QUIT
- End DoDot:1
- +37 ;
- +38 ; IB*2*452 - esg - check for duplicate response first thing
- +39 SET IBDUP=$$DUP^IBNCPDP2(.IBD)
- IF IBDUP
- SET IBY="0^Sec. Bill# "_$PIECE(IBDUP,U,2)_" exists (Dup)"
- GOTO BILLQ
- +40 ;
- +41 ; bill TRICARE copay if applicable
- +42 IF $GET(IBD("COPAY"))
- DO BILL^IBNCPDP6($GET(IBD("PRESCRIPTION"))_";"_$GET(IBD("FILL NUMBER")),IBD("COPAY"),$GET(IBD("RTYPE")))
- +43 ;
- +44 SET IBCAN=2
- SET IBDBC=DT
- SET IBBCB=DUZ
- SET IBCTCOPY=1
- SET IBY=1
- +45 SET IBIFN=$GET(IBD("PRIMARY BILL"))
- IF IBIFN=""
- SET IBY="0^Missing the primary bill."
- GOTO BILLQ
- +46 SET IBPLAN=$GET(IBD("PLAN"))
- IF IBPLAN=""
- SET IBY="0^The Secondary Payer is not a valid Insurance Co."
- GOTO BILLQ
- +47 SET IBCDFN=$$PLANN^IBNCPDPU(DFN,IBD("PLAN"),IBD("DOS"))
- +48 IF 'IBCDFN
- SET IBY="-1^Plan not found in Patient's Profile."
- GOTO BILLQ
- +49 SET IBCNFN=$PIECE(IBCDFN,"^",2)
- +50 ;insurance company
- SET IBINSN=+^IBA(355.3,IBPLAN,0)
- +51 SET IBINS=$GET(^DIC(36,+IBINSN,0))
- IF IBINS=""
- SET IBY="0^The Secondary Payer is not a valid Insurance Co."
- GOTO BILLQ
- +52 SET DIE="^DGCR(399,"
- SET DA=IBIFN
- SET DR="102////"_IBINSN_";113////"_IBCNFN
- DO ^DIE
- KILL DA,DR,DIE
- +53 ;.15 BILL COPIED FROM
- SET IBCOB("0",15)=""
- +54 ;.21 CURRENT BILL PAYER SEQUENCE
- SET IBCOB("0",21)=$SELECT($GET(IBD("RXCOB"))=1:"P",$GET(IBD("RXCOB"))=2:"S",1:"P")
- +55 ;125 PRIMARY BILL # [5P:399]
- SET IBCOB("M1",5)=IBD("PRIMARY BILL")
- +56 ;218 PRIMARY PRIOR PAYMENT [4N]
- SET IBCOB("U2",4)=IBD("PRIOR PAYMENT")
- +57 ;
- +58 ;this is the claim we are copying FROM
- SET IBBCF=IBIFN
- +59 SET IBIDS(.15)=IBIFN
- KILL IBIFN
- STEP2 ;
- +1 SET IBND0=^DGCR(399,IBIDS(.15),0)
- IF $DATA(^("U"))
- SET IBNDU=^("U")
- +2 ;
- +3 ; *** Note - all these fields should also be included in WHERE^IBCCC1
- +4 ; ECME claims should NOT define the 399,.27 - BILL CHARGE TYPE - leave it blank for RX COST Charge Set
- +5 ;
- +6 FOR I=2:1:12
- if $PIECE(IBND0,"^",I)]""
- SET IBIDS(I/100)=$PIECE(IBND0,"^",I)
- +7 FOR I=16:1:19,21:1:26
- if $PIECE(IBND0,"^",I)]""
- SET IBIDS(I/100)=$PIECE(IBND0,"^",I)
- +8 FOR I=151,152,155
- SET IBIDS(I)=$PIECE(IBNDU,"^",(I-150))
- +9 SET IBIDS(159.5)=$PIECE(IBNDU,U,20)
- +10 SET DFN=IBIDS(.02)
- DO DEM^VADPT
- +11 ;set rate type
- +12 IF $GET(IBD("RXCOB"))=2
- IF $GET(IBD("RTYPE"))
- SET IBIDS(.07)=IBD("RTYPE")
- +13 SET PRCASV("SER")=$PIECE($GET(^IBE(350.9,1,1)),"^",14)
- +14 SET PRCASV("SITE")=$PIECE($$SITE^VASITE,"^",3)
- SET IBNWBL=""
- +15 DO SETUP^PRCASVC3
- +16 IF $SELECT($PIECE(PRCASV("ARREC"),"^")=-1:1,$PIECE(PRCASV("ARBIL"),"^")=-1:1,1:0)
- SET IBY="0^No Billing Record Set up for: "_$PIECE(PRCASV("ARREC"),"^",2)_" "_$PIECE(PRCASV("ARBIL"),"^",2)
- GOTO BILLQ
- +17 SET IBIDS(.01)=$PIECE(PRCASV("ARBIL"),"-",2)
- +18 SET IBIDS(.17)=$SELECT($DATA(IBIDS(.17)):IBIDS(.17),1:PRCASV("ARREC"))
- +19 SET IBIDS(.02)=DFN
- SET IBHV("IBIFN")=$SELECT($GET(IBIFN):IBIFN,1:$GET(IBIDS(.15)))
- +20 SET X=$PIECE($TEXT(WHERE),";;",2)
- FOR I=0:0
- SET I=$ORDER(IBIDS(I))
- if 'I
- QUIT
- SET X1=$PIECE($EXTRACT(X,$FIND(X,I)+1,999),";",1)
- SET $PIECE(IBDR($PIECE(X1,"^",1)),"^",$PIECE(X1,"^",2))=IBIDS(I)
- +21 SET IBIFN=PRCASV("ARREC")
- FOR I=0,"C","M","M1","S","U","U1"
- IF $DATA(IBDR(I))
- SET ^DGCR(399,IBIFN,I)=IBDR(I)
- +22 ; Protect variables;index entry;replace FT if copy/clone and it changes
- Begin DoDot:1
- +23 NEW IBHOLD,DIE,DR,DA,X,Y
- +24 SET IBHOLD("FT")=$PIECE($GET(^DGCR(399,IBIFN,0)),U,19)
- +25 SET $PIECE(^DGCR(399,0),"^",3)=IBIFN
- SET $PIECE(^(0),"^",4)=$PIECE(^(0),"^",4)+1
- DO INDEX^IBCCC2
- +26 IF IBHOLD("FT")
- IF IBHOLD("FT")'=$PIECE($GET(^DGCR(399,IBIFN,0)),U,19)
- SET DA=IBIFN
- SET DIE="^DGCR(399,"
- SET DR=".19////"_IBHOLD("FT")
- DO ^DIE
- End DoDot:1
- +27 SET IBYN=1
- +28 ; bill that the old claim was cloned TO.
- SET IBBCT=IBIFN
- +29 KILL %,%DT,I,IB,IBA,IBBT,IBIDS,IBNWBL,J,VADM,X,X1,X2,X3,X4,Y
- +30 ;
- +31 SET IBIFN1=$PIECE(^DGCR(399,IBIFN,0),"^",15)
- if $SELECT(IBIFN1="":1,'$DATA(^DGCR(399,IBIFN1,0)):1,1:0)
- GOTO END
- +32 ;
- +33 ;move pure data nodes
- +34 ; MRD;IB*2.0*516 - Added "In7" nodes.
- +35 FOR I="I1","I17","I2","I27","I3","I37","M1"
- IF $DATA(^DGCR(399,IBIFN1,I))
- SET ^DGCR(399,IBIFN,I)=^DGCR(399,IBIFN1,I)
- +36 ;
- +37 ;move top level data node. ;Do not move 'TX' node
- +38 FOR I="U","U1","U2","U3","UF2","UF3","UF31","C","M"
- IF $DATA(^DGCR(399,IBIFN1,I))
- SET IBND(I)=^(I)
- DO @(I_"^IBCCC2")
- +39 ;
- +40 ;move multiple level data
- +41 FOR I="CC","OC","OP","OT","RC","CP","CV","PRV"
- IF $DATA(^DGCR(399,IBIFN1,I,0))
- DO @(I_"^IBCCC2")
- +42 ;
- +43 ; Ask change prov type if form type not the same
- DO FTPRV^IBCEU5(IBIFN)
- +44 DO COBCHG^IBCCC2(IBIFN,,.IBCOB)
- +45 ;
- +46 ; copy table files (362.3)
- DO ^IBCCC3
- +47 ;
- +48 ; update auto bill files
- SET I=$GET(^DGCR(399,IBIFN1,0))
- IF $PIECE(I,U,13)=7
- IF $PIECE(I,U,20)=1
- DO COPYB^IBCDC(IBIFN1,IBIFN)
- +49 ; add new bill to previous bills in series, primary/secondary
- DO PRIOR^IBCCC2(IBIFN)
- +50 IF +$GET(IBCTCOPY)
- NEW IBAUTO
- SET IBAUTO=1
- DO PROC^IBCU7A(IBIFN)
- DO BILL^IBCRBC(IBIFN)
- DO CPTMOD26^IBCU73(IBIFN)
- DO RECALL^DILFD(399,IBIFN_",",DUZ)
- +51 ;
- END ;
- +1 KILL %,%DT,D,DDH,DIC,DGACTDT,DGAMNT,DGBR,DGBRN,DGBSI,DGBSLOS,DGFUNC,DGIFN
- +2 KILL DGPCM,DGREV,DGREV00,DGREVHDR,DGRVRCAL,DGXRF1,DFN
- +3 KILL I,IB,IBA,IBA1,IBA2,IBAC,IBAD,IBADD1,IBARST,IBBNO,IBBS,IBBT,IBCAN
- +4 KILL IBCBCOPY,IBCCC,IBCH,IBCHK,IBCNCOPY,IBCOB,IBDA,IBDD,IBDD1,IBDPT,IBDR
- +5 KILL IBDT,IBI,IBI1,IBIDS,IBIFN,IBIFN1,IBIN,IBINS,IBIP,IBLS,IBN,IBND,IBND0
- +6 KILL IBNDS,IBNDU,IBO,IBOA,IBOD,IBPROC,IBPTF,IBQUIT,IBREV,IBST,IBU,IBUC
- +7 KILL IBUN,IBV,IBV1,IBW,IBWW,IBX,IBYN,IBZZ,J,K
- +8 KILL PRCASV,PRCAERCD,PRCAERR,PRCASVC,PRCAT,VA,VADM,VAEL,VAERR,X,X1,X2,X3,X4,Y
- +9 ;
- +10 NEW DA,IBADT,IBDIV,IBDUZ,IBPAID,IBTRIC,X
- +11 SET IBIFN=IBBCT
- SET IBADT=IBD("DOS")
- SET IBDIV=+$GET(IBD("DIVISION"))
- SET IBDUZ=$SELECT($GET(IBD("USER")):IBD("USER"),1:DUZ)
- +12 ;
- +13 SET DIE="^DGCR(399,"
- SET DA=IBIFN
- +14 ; update the primary bill,ECME fields (make sure .27 field is blank)
- +15 SET DR=".17////"_$GET(IBD("PRIMARY BILL"))_";.27////@;460////^S X=IBD(""BCID"")"
- if $LENGTH($GET(IBD("AUTH #")))
- SET DR=DR_";461////^S X=IBD(""AUTH #"")"
- +16 DO ^DIE
- KILL DA,DR,DIE
- +17 ;
- +18 ; if the primary ECME claim was rejected, then do some Claims Tracking updates
- +19 ; since this secondary claim is payable - esg 7/8/10
- +20 IF $GET(IBD("PRIMREJ"))=1
- Begin DoDot:1
- +21 NEW IBRXN,IBFIL,IBTRKRN,X,Y,D0,DA,DI,DIC,DICR,DIE,DIG,DIH,DIU,DIV,DIW,DQ,DR
- +22 SET IBRXN=+$GET(IBD("PRESCRIPTION"))
- +23 SET IBFIL=+$GET(IBD("FILL NUMBER"))
- +24 ; CT updates saying bill has been billed
- DO SETCT^IBNCPDP2
- +25 IF '$GET(IBTRKRN)
- QUIT
- +26 SET DIE="^IBT(356,"
- SET DA=IBTRKRN
- +27 ; reason not billable - delete it
- SET DR=".19///@"
- +28 ; CT date last edited
- SET DR=DR_";1.03///"_$$NOW^XLFDT
- +29 ; CT last edited by
- SET DR=DR_";1.04///"_IBDUZ
- +30 ; ECME Reject flag is 0 - NO
- SET DR=DR_";1.11///0"
- +31 DO ^DIE
- +32 QUIT
- End DoDot:1
- +33 ;
- +34 ; need to make sure we have computed charges
- +35 SET IBTRIC=$$TRICARE^IBNCPDP6($GET(IBD("PRESCRIPTION"))_";"_$GET(IBD("FILL NUMBER")))
- +36 DO CHARGES^IBNCPDP2(IBIFN)
- +37 IF $PIECE($GET(^DGCR(399,IBIFN,"U1")),U,1)'>0
- SET IBY="-1^Total Charges for Sec. Bill must be greater than $0."
- GOTO BILLQ
- +38 ;
- +39 ; update the authorize/print fields
- +40 SET DIE="^DGCR(399,"
- SET DA=IBIFN
- +41 SET DR="9////1;12////"_DT
- DO ^DIE
- +42 ;
- +43 ; *526 set approving official
- +44 if '$DATA(^VA(200,IBDUZ,0))
- SET IBDUZ=.5
- +45 ; pass the claim to AR
- +46 ; perform AR checks
- DO GVAR^IBCBB
- DO ARRAY^IBCBB1
- SET PRCASV("APR")=IBDUZ
- DO ^PRCASVC6
- +47 IF 'PRCASV("OKAY")
- SET IBY="-1^"_$$ARERR^IBNCPDP2($GET(PRCAERR),2)
- GOTO BILLQ
- +48 ; accept bill into AR
- DO REL^PRCASVC
- +49 ;
- +50 ; update the AR status to Active
- +51 SET PRCASV("STATUS")=16
- +52 DO STATUS^PRCASVC1
- +53 ;
- +54 ; decrease adjust bill
- +55 ; Auto decrease from service Bill#,Tran amt,person,reason,Tran date
- +56 SET IBAMT=$GET(^DGCR(399,IBIFN,"U1"))
- SET IBOFFSET=$PIECE($GET(^DGCR(399,IBIFN,"U1")),U,2)
- +57 SET IBPAID=$GET(IBD("PAID"))
- +58 IF IBAMT-IBPAID>.01
- Begin DoDot:1
- +59 NEW IBREAS
- +60 SET IBREAS="Adjust based on secondary ECME amount paid."
- +61 IF IBTRIC
- SET IBREAS="Due to TRICARE Patient Responsibility (sec)."
- +62 DO DEC^PRCASER1(PRCASV("ARREC"),IBAMT-IBOFFSET-IBPAID,IBDUZ,IBREAS,IBADT)
- +63 ; collected/closed
- IF 'IBPAID
- SET PRCASV("STATUS")=22
- DO STATUS^PRCASVC1
- End DoDot:1
- +64 ;
- +65 ; set the user in 399
- Begin DoDot:1
- +66 NEW IBI,IBT
- FOR IBI=2,5,11,13,15
- SET IBT(399,IBIFN_",",IBI)=IBDUZ
- +67 DO FILE^DIE("","IBT")
- End DoDot:1
- +68 ;
- +69 ;
- BILLQ ;
- +1 SET IBRES=$SELECT(IBY<0:"0^"_$SELECT($LENGTH($PIECE(IBY,"^",2)):$PIECE(IBY,"^",2),1:$PIECE(IBY,"^",3)),$GET(IBBCT):+IBBCT,1:IBY)
- +2 IF $GET(IBBCT)
- SET IBD("BILL")=IBBCT
- +3 DO LOG^IBNCPDP2("BILL",IBRES)
- +4 IF IBY<0
- DO BULL^IBNCPEB($GET(DFN),.IBD,IBRES,$GET(IBBCT))
- +5 QUIT IBRES
- +6 ;
- REJINF(IBREJARR) ;
- +1 NEW IBREJINF,IBRJ,IBRJCODE,IBCNT
- +2 SET IBREJINF=""
- SET IBCNT=0
- +3 SET IBRJ=0
- FOR
- SET IBRJ=$ORDER(IBREJARR("REJ CODES",IBRJ))
- if +IBRJ=0
- QUIT
- Begin DoDot:1
- +4 SET IBRJCODE=""
- FOR
- SET IBRJCODE=$ORDER(IBREJARR("REJ CODES",IBRJ,IBRJCODE))
- if IBRJCODE=""
- QUIT
- Begin DoDot:2
- +5 IF IBCNT>0
- SET IBREJINF=IBREJINF_", "
- +6 SET IBREJINF=IBREJINF_IBRJCODE_":"_$GET(IBREJARR("REJ CODES",IBRJ,IBRJCODE))
- +7 SET IBCNT=IBCNT+1
- End DoDot:2
- End DoDot:1
- +8 QUIT IBREJINF
- +9 ;
- WHERE ;;.01^0^1;.02^0^2;.03^0^3;.04^0^4;.05^0^5;.06^0^6;.07^0^7;.08^0^8;.09^0^9;.11^0^11;.12^0^12;.17^0^17;.18^0^18;.19^0^19;.15^0^15;.16^0^16;.21^0^21;.22^0^22;.23^0^23;.24^0^24;.25^0^25;.26^0^26;151^U^1;152^U^2;155^U^5;159.5^U^20;
- +1 ;