BAR50EP ; IHS/SD/TPF - AR ERA PAYMENT CHECKER ; 01/30/2009
;;1.8;IHS ACCOUNTS RECEIVABLE;**5,6,10,20,21,23,24**;OCT 26,2005;Build 69
;BAR*1.8*6 IHS/SD/TPF MOVE REVERSAL CHECK TO A FULL CLMDA LOOP
;IHS/SD/POT HEAT82698 NOV 2012 ACCEPT LEADING ZEROES IN CHKECK # (POS)- BAR 1.8*23
;IHS/SD/POT HEAT148388 1/10/2014 ACCEPT REVERSALS FOR TYPE= 1 IF NEG PAYMENT- BAR 1.8*24
;IHS/SD/POT HEAT147572 ALLOW TRIBAL SITES ERA POSTING OF NEG BAL & CANCELLED BILLS- BAR 1.8*24
REVLOOP(IMPDA) ;EP - REVERSAL LOOP
N CLMDA,MATCHES,ERRORS
S CLMDA=0
I $G(BARDBG) W !!,"BEGIN REVERSAL/PAYMENT MATCHING PROCESS"
F S CLMDA=$O(^BAREDI("I",DUZ(2),IMPDA,30,CLMDA)) Q:'CLMDA D
. Q:$P($G(^BAREDI("I",DUZ(2),IMPDA,30,CLMDA,0)),U,2)="P" ;DON'T CHECK REVERSALS ALREADY POSTED
. ;Q:$D(^BAREDI("I",DUZ(2),IMPDA,30,CLMDA,4,"B",44)) ;DON'T PROCESS USER STATUS OVERRIDE BAR*1.8*6 SCR120
. Q:$$OVERIDE^BAR50EP1(CLMDA) ;MRS:BAR*1.8*10 D159-1 AND 2
. ;;;S REVERSAL=+$$GET1^DIQ(90056.0205,CLMDA_","_IMPDA_",",.11)=22 old code HEAT148388
. S REVERSAL=$$ISREV(CLMDA,IMPDA) ; 1/10/2014 P.OTT HEAT148388 BAR 1.8*24
. ;ONLY REVERSALS WITH A NEGATIVE AMOUNT WILL BE PROCESSED FOR A MATCHING PAYMENT - PER ADRIAN
. I REVERSAL D
.. I $G(BARDBG) W !,"SHOULD WE CHECK FOR A MATCHING PAYMENT? ",$$GET1^DIQ(90056.0205,CLMDA_","_IMPDA_",",.01)
.. I $G(BARDBG) W !,"ONLY IF E-PAYMENT IS < 0 ",$P($G(^BAREDI("I",DUZ(2),IMPDA,30,CLMDA,0)),U,4)
. ;old code I REVERSAL,$$IHS^BARUFUT(DUZ(2)),(+$P($G(^BAREDI("I",DUZ(2),IMPDA,30,CLMDA,0)),U,4)<0) D REVCHECK(IMPDA,CLMDA) ;CHECK FOR PAYMENT AND REVERSALS W/IN ERA FILE
. I REVERSAL,$$IHSNEGB^BARUFUT(DUZ(2)),(+$P($G(^BAREDI("I",DUZ(2),IMPDA,30,CLMDA,0)),U,4)<0) D REVCHECK(IMPDA,CLMDA) ;HEAT147572 - BAR 1.8*24
Q
REVCHECK(IMPDA,REVDA) ;EP - REVERSAL AND PAYMENT CHECKS
I $G(BARDBG) W !!,"LOOKING FOR MATCHING PAYMENT FOR REVERSAL ",$P($G(^BAREDI("I",DUZ(2),IMPDA,30,REVDA,0)),U)
I $P($G(^BAREDI("I",DUZ(2),IMPDA,30,REVDA,0)),U,2)="P" W:$G(BARDBG) !,"CLAIM ",$P($G(^BAREDI("I",DUZ(2),IMPDA,30,REVDA,0)),U)," ALREADY POSTED"
I $P($G(^BAREDI("I",DUZ(2),IMPDA,30,REVDA,5)),U)=139 W:$G(BARDBG) !,"CLAIM ",$P($G(^BAREDI("I",DUZ(2),IMPDA,30,REVDA,0)),U)," ALREADY CREDIT FROM"
I $P($G(^BAREDI("I",DUZ(2),IMPDA,30,REVDA,5)),U)=138 W:$G(BARDBG) !,"CLAIM ",$P($G(^BAREDI("I",DUZ(2),IMPDA,30,REVDA,0)),U)," ALREADY CREDIT TO"
I $P($G(^BAREDI("I",DUZ(2),IMPDA,30,REVDA,1)),U)="" W:$G(BARDBG) !,"CLAIM ",$P($G(^BAREDI("I",DUZ(2),IMPDA,30,REVDA,0)),U)," NO A-CLAIM"
;N MATCHES,ERRORS BAR*1.8*6 MOVE UP TO REVLOOP
S (MATCHES,NOMATCH)=0
D INBILL(IMPDA,REVDA,.MATCHES,.NOMATCH)
Q:$G(MATCHES)=1
S (MATCHES,NOMATCH)=0
D INERA(IMPDA,REVDA,.MATCHES,.NOMATCH) ;NOW CHECK INSIDE ERA FILE FOR MATHES
Q:$G(MATCHES)=1 ; IF MATCH FOUND IN ERA FILE THEN YOU'RE DONE
S (MATCHES,NOMATCH)=0
D INRPMS(IMPDA,REVDA,.MATCHES,.NOMATCH)
I $G(MATCHES)=0 D
.I $G(BARDBG) W !!,"MATCHING PAYMENT NOT FOUND FOR REVERSAL!"
.S ERRORS("PT NF E")=""
.D ADDREAS^BAR50P04(IMPDA,REVDA,.ERRORS)
.K ERRORS
Q
INBILL(IMPDA,REVDA,MATCHES,NOMATCH) ;EP - SEARCH FOR MATCHES WITHIN BILL
N CLIENS,CLBILL,CLPAYMNT,CLSTATUS,CLCHECK,PAYMENTS,REVICN,CLMICN,CNT
N CLMDA ;BAR*1.8*6
S REVCHECK=$$GET1^DIQ(90056.0205,REVDA_","_IMPDA_",",201,"E") ;CHECK/EFT TRACE
S REVBILL=$$GET1^DIQ(90056.0205,REVDA_","_IMPDA_",",.01,"E") ;E-CLAIM (AR BILL
S REVAMT=-$$GET1^DIQ(90056.0205,REVDA_","_IMPDA_",",.04,"E") ;E-PAYMENT
;S REVAMT=-$$GET1^DIQ(90056.0205,REVDA_","_IMPDA_",",.05,"E") ;E-BILLED
S REVICN=$$GET1^DIQ(90056.0205,REVDA_","_IMPDA_",",302,"E") ;PAYER CLAIM CONTROL # (ICN)
;IF REVICN CONTAINS AN 'R' THIS IS A MEDICARE REVERSAL
I $G(BARDBG) W !!,"LOOKING FOR MATCHING PAYMENT FOR ",-REVAMT," WITHIN BILL ",REVBILL
S PAYMENTS=0
S CLMDA=""
F CNT=1:1 S CLMDA=$O(^BAREDI("I",DUZ(2),IMPDA,30,"B",REVBILL,CLMDA)) Q:CLMDA="" D
.W:'(CNT#1000) "."
.Q:$P($G(^BAREDI("I",DUZ(2),IMPDA,30,CLMDA,0)),U,2)="P" ;DON'T CHECK POSTED CLAIMS
.Q:REVDA=CLMDA ;DO NOT PROCESS REVERSAL CLAIM WE FOUND IN BAR50P04
.S CLIENS=CLMDA_","_IMPDA_","
.;Q:$P($G(^BAREDI("I",DUZ(2),IMPDA,30,CLMDA,1)),U)="" ;IF NOT MATCHED DON'T COMPARE ;bar*1.8*20 REQ4
.S CLSTATUS=$P($$GET1^DIQ(90056.0205,CLIENS,.11,"E")," ") ;E-CLAIM STATUS CODE (CLP02)
.I CLSTATUS="" S CLSTATUS=$P($G(^BAREDI("I",DUZ(2),IMPDA,30,CLMDA,2)),U,4) ;MRS:BAR*1.8*10 H2555
. ;;;OLD CODE I CLSTATUS=22 Q ;DON'T LOOK AT OTHER REVERSALS
. I $$ISREV(CLMDA,IMPDA) Q ;new code
.Q:(U_"1"_U_"2"_U_"3"_U_"19"_U_"20"_U_"21"_U)'[(U_CLSTATUS_U) ;PRIMARY,SECONDARY,TERTIARY AS WELL AS THOSE 19,20,21 FORWARDED TO ADDITIONAL PAYER
. ;????
.S POSTAS=$$GET1^DIQ(90056.0205,CLIENS,501,"I") ;POST THIS CLAIM AS TYPE
.Q:POSTAS=138!(POSTAS=139) ;DON'T TRY TO MATCH A REVERSAL TO A PAYMENT ALREADY MATCHED
.S CLMICN=$$GET1^DIQ(90056.0205,CLIENS,302,"E") ;PAYER CLAIM CONTROL # (ICN)
.S PAYMENTS=PAYMENTS+1
.S CLPAYMNT=$$GET1^DIQ(90056.0205,CLIENS,.04,"E") ;E-PAYMENT
.I REVICN["R" D Q
..I (CLPAYMNT=REVAMT) D
...S MATCHES=MATCHES+1
...S MATCHES(IMPDA,CLMDA,REVDA)=""
..E S NOMATCH=NOMATCH+1 S NOMATCH(IMPDA,CLMDA,REVDA)=""
.I REVAMT=CLPAYMNT D
..S MATCHES=MATCHES+1
..S MATCHES(IMPDA,CLMDA,REVDA)=""
.E S NOMATCH=NOMATCH+1 S NOMATCH(IMPDA,CLMDA,REVDA)=""
Q:'PAYMENTS!'MATCHES
I REVICN["R" D MCRERRS(.MATCHES,.NOMATCH,PAYMENTS,"INBILL") I 1
E D REGERRS(.MATCHES,.NOMATCH,PAYMENTS,"INBILL")
K ERRORS
Q
INERA(IMPDA,REVDA,MATCHES,NOMATCH) ;EP - FIND PAYMENTS AND REVERSAL W/IN ERA FILE
N CLIENS,CLBILL,CLPAYMNT,CLSTATUS,CLCHECK,PAYMENTS,REVICN,CLMICN,CNT
N CLMDA ;BAR*1.8*6
S REVCHECK=$$GET1^DIQ(90056.0205,REVDA_","_IMPDA_",",201,"E") ;CHECK/EFT TRACE
S REVBILL=$$GET1^DIQ(90056.0205,REVDA_","_IMPDA_",",.01,"E") ;E-CLAIM (AR BILL
S REVAMT=-$$GET1^DIQ(90056.0205,REVDA_","_IMPDA_",",.04,"E") ;E-PAYMENT
S REVICN=$$GET1^DIQ(90056.0205,REVDA_","_IMPDA_",",302,"E") ;PAYER CLAIM CONTROL # (ICN)
S ERAFILE=$$GET1^DIQ(90056.02,IMPDA_",",.01,"E") ;CHECK/EFT TRACE
;IF REVICN CONTAINS AN 'R' THIS IS A MEDICARE REVERSAL
I $G(BARDBG) W !!,"LOOKING FOR MATCHING PAYMENT FOR ",-REVAMT," IN ERA FILE ",ERAFILE
S PAYMENTS=0
S NOMATCH=0
S CLMDA=0
F CNT=1:1 S CLMDA=$O(^BAREDI("I",DUZ(2),IMPDA,30,CLMDA)) Q:'CLMDA!(MATCHES) D
.W:'(CNT#1000) "."
.Q:$P($G(^BAREDI("I",DUZ(2),IMPDA,30,CLMDA,0)),U,2)="P" ;DON'T CHECK POSTED CLAIMS
.S CLCHECK=$$GET1^DIQ(90056.0205,CLMDA_","_IMPDA_",",201,"E") ;CHECK/EFT TRACE
.Q:CLCHECK'=REVCHECK
.Q:REVDA=CLMDA ;DO NOT PROCESS REVERSAL CLAIM WE FOUND
.S CLIENS=CLMDA_","_IMPDA_","
.Q:$P($G(^BAREDI("I",DUZ(2),IMPDA,30,CLMDA,1)),U)="" ;IF NOT MATCHED DON'T COMPARE
.S CLSTATUS=$P($$GET1^DIQ(90056.0205,CLIENS,.11,"E")," ") ;E-CLAIM STATUS CODE (CLP02)
.I CLSTATUS="" S CLSTATUS=$P($G(^BAREDI("I",DUZ(2),IMPDA,30,CLMDA,2)),U,4) ;MRS:BAR*1.8*10 H2555
.I CLSTATUS=22 Q ;DON'T LOOK AT OTHER REVERSALS,SHOULD WE SKIP ANY OTHERS?
.Q:(U_"1"_U_"2"_U_"3"_U_"19"_U_"20"_U_"21"_U)'[(U_CLSTATUS_U) ;PRIMARY,SECONDARY,TERTIARY AS WELL AS THOSE 19,20,21 FORWARDED TO ADDITIONAL PAYER
.S POSTAS=$$GET1^DIQ(90056.0205,CLIENS,501,"I") ;POST THIS CLAIM AS TYPE
.Q:POSTAS=138!(POSTAS=139) ;DON'T TRY TO MATCH A REVERSAL TO A PAYMENT ALREADY MATCHED
.S PAYMENTS=PAYMENTS+1
.I $G(BARDBG) W !?15,"SEARCHING FOR PAYMENT TO MATCH REV OF ",REVAMT
.S CLBILL=$$GET1^DIQ(90056.0205,CLIENS,.01,"E") ;E-CLAIM (AR BILL
.Q:CLBILL=REVBILL ;ALREADY CHECKED WITHIN THE BILL FOR MATCHES, NOW CHECK OTHER BILLS IN ERA FILE
.I $G(BARDBG) W !?20,"REV BILL ",REVBILL,!?20,"CL BILL ",CLBILL
.S CLMICN=$$GET1^DIQ(90056.0205,CLIENS,302,"E") ;PAYER CLAIM CONMTROL # (ICN)
.S CLPAYMNT=$$GET1^DIQ(90056.0205,CLIENS,.04,"E") ;E-PAYMENT
.;S CLPAYMNT=$$GET1^DIQ(90056.0205,CLIENS,.05,"E") ;E-BILL
.;MEDICARE MATCH?
.I REVICN["R" D Q
..I CLMICN=$TR(REVICN,"R") D
...S MATCHES=MATCHES+1
...S MATCHES(IMPDA,CLMDA,REVDA)=""
..E S NOMATCH=NOMATCH+1 S NOMATCH(IMPDA,CLMDA,REVDA)=""
.;REGULAR MATCH?
.I CLPAYMNT=REVAMT D Q
..S MATCHES=MATCHES+1
..S MATCHES(IMPDA,CLMDA,REVDA)=""
.E S NOMATCH=NOMATCH+1 S NOMATCH(IMPDA,CLMDA,REVDA)=""
Q:'MATCHES!'PAYMENTS
I REVICN["R" D MCRERRS(.MCRMATCH,.MCRNOMAT,PAYMENTS,"INERA") I 1
E D REGERRS(.MATCHES,.NOMATCH,PAYMENTS,"INERA")
K ERRORS
Q
INRPMS(IMPDA,REVDA,MATCHES,NOMATCH) ;EP - LOOK FOR MATCHING PAYMENT IN A/R BILL
N REVAMT,REVBILL,ERACHECK,BARBLIEN,FOUND,REVDATE,COLDA,ITEMDA,REVSCHED,REVERSAL,TAMOUNT
N TRANS,BARFROM,BARTO,BARTYPE
N CLMDA ;BAR*1.8*6
I $G(BARDBG) W !!,"LOOKING FOR MATCHING PAYMENT IN RPMS"
S REVAMT=$$GET1^DIQ(90056.0205,REVDA_","_IMPDA_",",.04,"E") ;E-CLAIM PAYMENT
S REVBILL=$$GET1^DIQ(90056.0205,REVDA_","_IMPDA_",",.01,"E") ;E-CLAIM
S REVCHECK=$$GET1^DIQ(90056.0205,REVDA_","_IMPDA_",",201,"E") ;CHECK/EFT TRACE
S POSTAS=$$GET1^DIQ(90056.0205,REVDA_","_IMPDA_",",501,"I") ;POST THIS CLAIM AS TYPE
Q:POSTAS=138!(POSTAS=139)
S CLMDA=0,BILLCHOS=""
F S CLMDA=$O(^BAREDI("I",DUZ(2),IMPDA,30,"B",BARBILL,CLMDA)) Q:'CLMDA!(BILLCHOS'="") D
.S BILLCHOS=$P($G(^BAREDI("I",DUZ(2),IMPDA,30,CLMDA,1)),U) ;A-CLAIM ; IF THIS IS POPULATED THEN THE CORRECT BILL WAS FOUND OR CHOSEN ALREADY
I BILLCHOS S BARBLIEN=BILLCHOS
E S BARBLIEN=$$GETIEN^BAR50EB("B",BARBILL)
I BARBLIEN="BILL NOT FOUND" D Q
.S CLMDA=$O(^BAREDI("I",DUZ(2),IMPDA,30,"B",BARBILL,""))
.I '$D(^BAREDI("I",DUZ(2),IMPDA,30,CLMDA,4,"B",11)) D
..S ERRORS("BL NF")="" ;BILL NOT FOUND IN RPMS. SET ONLY IF OLD ERROR 11 NOT SET
.D ADDREAS^BAR50P04(IMPDA,REVDA,.ERRORS)
.K ERRORS
I BARBLIEN="DUPLICATE BILLS FOUND" D Q
.S ERRORS("DUPB")="" ;DUPLICATE BILLS FOUND IN RPMS
.D ADDREAS^BAR50P04(IMPDA,REVDA,.ERRORS)
.K ERRORS
Q:'BARBLIEN 0
S FOUND=0
S REVERSAL=0 ;NUMBER OF REVERSALS ALREADY SET UP FOR THIS AMOUNT.
S TRANS=""
F S TRANS=$O(^BARTR(DUZ(2),"AC",BARBLIEN,TRANS),-1) Q:'TRANS!(FOUND) D ;REVERSAL CAN NOT APPLY TO A FUTURE PAYMENT
.S TRANTYPE=$$GET1^DIQ(90050.03,TRANS_",",101,"E")
.Q:TRANTYPE'="PAYMENT"&(TRANTYPE'="PAYMENT CREDIT") ;OLD WILL BILL 'PAYMENT', NEW STUFF WILL BE 'PAYMENT CREDIT'
.S TAMOUNT=$$GET1^DIQ(90050.03,TRANS_",",3.5,"E")
.I TAMOUNT=REVAMT,$$GET1^DIQ(90050.03,TRANS_",",110,"I") S REVERSAL=REVERSAL+1 Q ;#110 = DATE OF TRANSACTION REVERSED
.I TAMOUNT=-REVAMT D
..S COLDA=$$GET1^DIQ(90050.03,TRANS_",",14,"I")
..S ITEMDA=$$GET1^DIQ(90050.03,TRANS_",",15,"I")
..;;;Q:'$D(^BARCOL(DUZ(2),"D",REVCHECK,COLDA,ITEMDA)) ;IF COLLECTION BATCH AND ITEM DON'T MATCH UP WE CAN'T POST - BAR 1.8*23 OLD CODE
.. I '$D(^BARCOL(DUZ(2),"D",REVCHECK,COLDA,ITEMDA)),'$D(^BARCOL(DUZ(2),"D",+REVCHECK,COLDA,ITEMDA)) Q ;- BAR 1.8*23
..I REVERSAL S REVERSAL=REVERSAL-1 Q ;MATCHING REVERSAL SO THIS PAYMENT MATCHES
..S FOUND=FOUND+1
..S REVDATE=$$GET1^DIQ(90050.03,TRANS_",",.01,"I")
..S REVSCHED=$$GET1^DIQ(90051.01,COLDA_",",28,"I")
..I REVSCHED="" S REVSCHED=$$GET1^DIQ(90051.1101,ITEMDA_","_COLDA_",",20,"I")
..S:REVSCHED="" REVSCHED="PRE-UFMS_COLLECTIONS"
I 'FOUND D Q
.S ERRORS("PR NM R")="" ;MATCHING PAYMENT NOT FOUND IN A/R TRANSACTION FILE
.D ADDREAS^BAR50P04(IMPDA,REVDA,.ERRORS)
.K ERRORS
;NOW WE SHOULD HAVE A NON-MATCHED PAYMENT EQUALING OUR ERA REVERSAL
K DIE,DIC,DR,DA,DIR
S BARFROM=$$GET1^DIQ(90056.0205,REVDA_","_IMPDA_",",1.01,"I")
S BARTO=$G(BARBLIEN)
Q:BARFROM="" ;DON'T MATCH TO A NON-MATCHED CLAIM
S DIE=$$DIC^XBDIQ1(90056.0205)
S BARTYPE=139
;S DR=DR=DR_"501///^S X=BARTYPE" ;CREDIT TO OTHER BILL
S DR="501///^S X=BARTYPE" ;CREDIT TO OTHER BILL BAR*1.8*6 IM29724
S DR=DR_";.12///^S X=REVDATE"
S DR=DR_";301///^S X=REVSCHED"
S DR=DR_";602///^S X=BARFROM"
S DR=DR_";601///^S X=BARTO"
S DA(1)=IMPDA
S DA=REVDA
D ^DIE
;HAD TROUBLE GETTING THE DIE CALL TO WORK FOR .12 AND 301
S $P(^BAREDI("I",DUZ(2),DA(1),30,DA,0),U,12)=REVDATE
S $P(^BAREDI("I",DUZ(2),DA(1),30,DA,3),U)=REVSCHED
K DR,DIE,DIC,DIR
K ERRORS
Q
MCRERRS(MATCHES,NOMATCH,PAYMENTS,WHERE) ;EP - MCR ERRORS
N ERRORS,CLMDA
I MATCHES=1 D SETMATCH(.MATCHES) Q
I PAYMENTS=0 D
.I WHERE="INBILL" S ERRORS("PT NF B")=""
.E S ERRORS("PT NF E")=""
.D ADDREAS^BAR50P04(IMPDA,REVDA,.ERRORS)
I MATCHES>0 D
.I WHERE="INBILL" S ERRORS("MP MCR B")=""
.E S ERRORS("MP MCR E")=""
.D ADDREAS^BAR50P04(IMPDA,REVDA,.ERRORS)
.S CLMDA=""
.F S CLMDA=$O(MATCHES(IMPDA,CLMDA)) Q:'CLMDA D
..D ADDREAS^BAR50P04(IMPDA,CLMDA,.ERRORS)
I NOMATCH>0 D
.I WHERE="INBILL" S ERRORS("NM MCR B")=""
.E S ERRORS("NM MCR E")=""
.D ADDREAS^BAR50P04(IMPDA,REVDA,.ERRORS)
.S CLMDA=""
.F S CLMDA=$O(NOMATCH(IMPDA,CLMDA)) Q:'CLMDA D
..D ADDREAS^BAR50P04(IMPDA,CLMDA,.ERRORS)
K ERRORS
Q
REGERRS(MATCHES,NOMATCH,PAYMENTS,WHERE) ; EP
N ERRORS,CLMDA
I MATCHES=1 D SETMATCH(.MATCHES) Q
I PAYMENTS=0 D
.I WHERE="INBILL" S ERRORS("PT NF B")=""
.E S ERRORS("PT NF E")=""
.D ADDREAS^BAR50P04(IMPDA,REVDA,.ERRORS)
I MATCHES>1 D
.I WHERE="INBILL" S ERRORS("MPB")=""
.E S ERRORS("MPE")=""
.D ADDREAS^BAR50P04(IMPDA,REVDA,.ERRORS)
.S CLMDA=""
.F S CLMDA=$O(MATCHES(IMPDA,CLMDA)) Q:'CLMDA D
..D ADDREAS^BAR50P04(IMPDA,CLMDA,.ERRORS)
I NOMATCH>0 D
.I WHERE="INBILL" S ERRORS("PR NM B")=""
.E S ERRORS("PR NM E")=""
.D ADDREAS^BAR50P04(IMPDA,REVDA,.ERRORS)
.S CLMDA=""
.F S CLMDA=$O(NOMATCH(IMPDA,CLMDA)) Q:'CLMDA D
..D ADDREAS^BAR50P04(IMPDA,CLMDA,.ERRORS)
K ERRORS
Q
SETMATCH(MATCH) ;EP - SET TO MATCHING AND SET TRANSACTION TYPE
N IMPDA,CLMDA,REVDA,CLIENS,REVIENS,BARFROM,BARTO,CNT
S IMPDA=$O(MATCH(""))
Q:IMPDA=""
S CLMDA=$O(MATCH(IMPDA,""))
Q:CLMDA=""
S REVDA=$O(MATCH(IMPDA,CLMDA,""))
Q:REVDA=""
S CLIENS=CLMDA_","_IMPDA_","
S REVIENS=REVDA_","_IMPDA_","
I $O(^BAREDI("I",DUZ(2),IMPDA,30,CLMDA,4,0)) Q
I $O(^BAREDI("I",DUZ(2),IMPDA,30,REVDA,4,0)) Q
I $G(BARDBG) W !!,"PAYMENT REVERSAL: ",$$GET1^DIQ(90056.0205,CLIENS,.01,"E")
I $G(BARDBG) W !,"MATCHED TO REVERSAL: ",$$GET1^DIQ(90056.0205,REVIENS,.01,"E")
S BARFROM=$$GET1^DIQ(90056.0205,REVIENS,1.01,"I")
S BARTO=$$GET1^DIQ(90056.0205,CLIENS,1.01,"I")
Q:BARFROM=""!(BARTO="") ;DO NOT MATCH TO A NON-MATCHED CLAIM
I $G(BARDBG) W !,"PAYMENT CREDIT APPLIED FROM: ",BARFROM
I $G(BARDBG) W !,"PAYMENT CREDIT APPLIED TO: ",BARTO
K DA S CNT=0
F DA=CLMDA,REVDA D
.S CNT=CNT+1
.K DR,DIE,DIC,DIR
.S DIE=$$DIC^XBDIQ1(90056.0205)
.I CNT=1 S TYPE=139 ;CREDIT FROM OTHER BILL
.E S TYPE=138 ;CREDIT TO OTHER BILL
.S STAT="M"
.S DR=".02///^S X=STAT"
.S DR=DR_";501///^S X=TYPE"
.I CNT=1 S DR=DR_";602///^S X=BARFROM"
.E S DR=DR_";601///^S X=BARTO"
.S DA(1)=IMPDA
.D ^DIE
.K DR,DIE,DIC,DIR
Q
ISREV(CLMDA,IMPDA) ;P.OTT 1/10/2014 HEAT148388 BAR 1.8*24
I +$$GET1^DIQ(90056.0205,CLMDA_","_IMPDA_",",.11)=22 Q 1
Q 0
;----------------
BAR50EP ; IHS/SD/TPF - AR ERA PAYMENT CHECKER ; 01/30/2009
+1 ;;1.8;IHS ACCOUNTS RECEIVABLE;**5,6,10,20,21,23,24**;OCT 26,2005;Build 69
+2 ;BAR*1.8*6 IHS/SD/TPF MOVE REVERSAL CHECK TO A FULL CLMDA LOOP
+3 ;IHS/SD/POT HEAT82698 NOV 2012 ACCEPT LEADING ZEROES IN CHKECK # (POS)- BAR 1.8*23
+4 ;IHS/SD/POT HEAT148388 1/10/2014 ACCEPT REVERSALS FOR TYPE= 1 IF NEG PAYMENT- BAR 1.8*24
+5 ;IHS/SD/POT HEAT147572 ALLOW TRIBAL SITES ERA POSTING OF NEG BAL & CANCELLED BILLS- BAR 1.8*24
REVLOOP(IMPDA) ;EP - REVERSAL LOOP
+1 NEW CLMDA,MATCHES,ERRORS
+2 SET CLMDA=0
+3 IF $GET(BARDBG)
WRITE !!,"BEGIN REVERSAL/PAYMENT MATCHING PROCESS"
+4 FOR
SET CLMDA=$ORDER(^BAREDI("I",DUZ(2),IMPDA,30,CLMDA))
IF 'CLMDA
QUIT
Begin DoDot:1
+5 ;DON'T CHECK REVERSALS ALREADY POSTED
IF $PIECE($GET(^BAREDI("I",DUZ(2),IMPDA,30,CLMDA,0)),U,2)="P"
QUIT
+6 ;Q:$D(^BAREDI("I",DUZ(2),IMPDA,30,CLMDA,4,"B",44)) ;DON'T PROCESS USER STATUS OVERRIDE BAR*1.8*6 SCR120
+7 ;MRS:BAR*1.8*10 D159-1 AND 2
IF $$OVERIDE^BAR50EP1(CLMDA)
QUIT
+8 ;;;S REVERSAL=+$$GET1^DIQ(90056.0205,CLMDA_","_IMPDA_",",.11)=22 old code HEAT148388
+9 ; 1/10/2014 P.OTT HEAT148388 BAR 1.8*24
SET REVERSAL=$$ISREV(CLMDA,IMPDA)
+10 ;ONLY REVERSALS WITH A NEGATIVE AMOUNT WILL BE PROCESSED FOR A MATCHING PAYMENT - PER ADRIAN
+11 IF REVERSAL
Begin DoDot:2
+12 IF $GET(BARDBG)
WRITE !,"SHOULD WE CHECK FOR A MATCHING PAYMENT? ",$$GET1^DIQ(90056.0205,CLMDA_","_IMPDA_",",.01)
+13 IF $GET(BARDBG)
WRITE !,"ONLY IF E-PAYMENT IS < 0 ",$PIECE($GET(^BAREDI("I",DUZ(2),IMPDA,30,CLMDA,0)),U,4)
End DoDot:2
+14 ;old code I REVERSAL,$$IHS^BARUFUT(DUZ(2)),(+$P($G(^BAREDI("I",DUZ(2),IMPDA,30,CLMDA,0)),U,4)<0) D REVCHECK(IMPDA,CLMDA) ;CHECK FOR PAYMENT AND REVERSALS W/IN ERA FILE
+15 ;HEAT147572 - BAR 1.8*24
IF REVERSAL
IF $$IHSNEGB^BARUFUT(DUZ(2))
IF (+$PIECE($GET(^BAREDI("I",DUZ(2),IMPDA,30,CLMDA,0)),U,4)<0)
DO REVCHECK(IMPDA,CLMDA)
End DoDot:1
+16 QUIT
REVCHECK(IMPDA,REVDA) ;EP - REVERSAL AND PAYMENT CHECKS
+1 IF $GET(BARDBG)
WRITE !!,"LOOKING FOR MATCHING PAYMENT FOR REVERSAL ",$PIECE($GET(^BAREDI("I",DUZ(2),IMPDA,30,REVDA,0)),U)
+2 IF $PIECE($GET(^BAREDI("I",DUZ(2),IMPDA,30,REVDA,0)),U,2)="P"
IF $GET(BARDBG)
WRITE !,"CLAIM ",$PIECE($GET(^BAREDI("I",DUZ(2),IMPDA,30,REVDA,0)),U)," ALREADY POSTED"
+3 IF $PIECE($GET(^BAREDI("I",DUZ(2),IMPDA,30,REVDA,5)),U)=139
IF $GET(BARDBG)
WRITE !,"CLAIM ",$PIECE($GET(^BAREDI("I",DUZ(2),IMPDA,30,REVDA,0)),U)," ALREADY CREDIT FROM"
+4 IF $PIECE($GET(^BAREDI("I",DUZ(2),IMPDA,30,REVDA,5)),U)=138
IF $GET(BARDBG)
WRITE !,"CLAIM ",$PIECE($GET(^BAREDI("I",DUZ(2),IMPDA,30,REVDA,0)),U)," ALREADY CREDIT TO"
+5 IF $PIECE($GET(^BAREDI("I",DUZ(2),IMPDA,30,REVDA,1)),U)=""
IF $GET(BARDBG)
WRITE !,"CLAIM ",$PIECE($GET(^BAREDI("I",DUZ(2),IMPDA,30,REVDA,0)),U)," NO A-CLAIM"
+6 ;N MATCHES,ERRORS BAR*1.8*6 MOVE UP TO REVLOOP
+7 SET (MATCHES,NOMATCH)=0
+8 DO INBILL(IMPDA,REVDA,.MATCHES,.NOMATCH)
+9 IF $GET(MATCHES)=1
QUIT
+10 SET (MATCHES,NOMATCH)=0
+11 ;NOW CHECK INSIDE ERA FILE FOR MATHES
DO INERA(IMPDA,REVDA,.MATCHES,.NOMATCH)
+12 ; IF MATCH FOUND IN ERA FILE THEN YOU'RE DONE
IF $GET(MATCHES)=1
QUIT
+13 SET (MATCHES,NOMATCH)=0
+14 DO INRPMS(IMPDA,REVDA,.MATCHES,.NOMATCH)
+15 IF $GET(MATCHES)=0
Begin DoDot:1
+16 IF $GET(BARDBG)
WRITE !!,"MATCHING PAYMENT NOT FOUND FOR REVERSAL!"
+17 SET ERRORS("PT NF E")=""
+18 DO ADDREAS^BAR50P04(IMPDA,REVDA,.ERRORS)
+19 KILL ERRORS
End DoDot:1
+20 QUIT
INBILL(IMPDA,REVDA,MATCHES,NOMATCH) ;EP - SEARCH FOR MATCHES WITHIN BILL
+1 NEW CLIENS,CLBILL,CLPAYMNT,CLSTATUS,CLCHECK,PAYMENTS,REVICN,CLMICN,CNT
+2 ;BAR*1.8*6
NEW CLMDA
+3 ;CHECK/EFT TRACE
SET REVCHECK=$$GET1^DIQ(90056.0205,REVDA_","_IMPDA_",",201,"E")
+4 ;E-CLAIM (AR BILL
SET REVBILL=$$GET1^DIQ(90056.0205,REVDA_","_IMPDA_",",.01,"E")
+5 ;E-PAYMENT
SET REVAMT=-$$GET1^DIQ(90056.0205,REVDA_","_IMPDA_",",.04,"E")
+6 ;S REVAMT=-$$GET1^DIQ(90056.0205,REVDA_","_IMPDA_",",.05,"E") ;E-BILLED
+7 ;PAYER CLAIM CONTROL # (ICN)
SET REVICN=$$GET1^DIQ(90056.0205,REVDA_","_IMPDA_",",302,"E")
+8 ;IF REVICN CONTAINS AN 'R' THIS IS A MEDICARE REVERSAL
+9 IF $GET(BARDBG)
WRITE !!,"LOOKING FOR MATCHING PAYMENT FOR ",-REVAMT," WITHIN BILL ",REVBILL
+10 SET PAYMENTS=0
+11 SET CLMDA=""
+12 FOR CNT=1:1
SET CLMDA=$ORDER(^BAREDI("I",DUZ(2),IMPDA,30,"B",REVBILL,CLMDA))
IF CLMDA=""
QUIT
Begin DoDot:1
+13 IF '(CNT#1000)
WRITE "."
+14 ;DON'T CHECK POSTED CLAIMS
IF $PIECE($GET(^BAREDI("I",DUZ(2),IMPDA,30,CLMDA,0)),U,2)="P"
QUIT
+15 ;DO NOT PROCESS REVERSAL CLAIM WE FOUND IN BAR50P04
IF REVDA=CLMDA
QUIT
+16 SET CLIENS=CLMDA_","_IMPDA_","
+17 ;Q:$P($G(^BAREDI("I",DUZ(2),IMPDA,30,CLMDA,1)),U)="" ;IF NOT MATCHED DON'T COMPARE ;bar*1.8*20 REQ4
+18 ;E-CLAIM STATUS CODE (CLP02)
SET CLSTATUS=$PIECE($$GET1^DIQ(90056.0205,CLIENS,.11,"E")," ")
+19 ;MRS:BAR*1.8*10 H2555
IF CLSTATUS=""
SET CLSTATUS=$PIECE($GET(^BAREDI("I",DUZ(2),IMPDA,30,CLMDA,2)),U,4)
+20 ;;;OLD CODE I CLSTATUS=22 Q ;DON'T LOOK AT OTHER REVERSALS
+21 ;new code
IF $$ISREV(CLMDA,IMPDA)
QUIT
+22 ;PRIMARY,SECONDARY,TERTIARY AS WELL AS THOSE 19,20,21 FORWARDED TO ADDITIONAL PAYER
IF (U_"1"_U_"2"_U_"3"_U_"19"_U_"20"_U_"21"_U)'[(U_CLSTATUS_U)
QUIT
+23 ;????
+24 ;POST THIS CLAIM AS TYPE
SET POSTAS=$$GET1^DIQ(90056.0205,CLIENS,501,"I")
+25 ;DON'T TRY TO MATCH A REVERSAL TO A PAYMENT ALREADY MATCHED
IF POSTAS=138!(POSTAS=139)
QUIT
+26 ;PAYER CLAIM CONTROL # (ICN)
SET CLMICN=$$GET1^DIQ(90056.0205,CLIENS,302,"E")
+27 SET PAYMENTS=PAYMENTS+1
+28 ;E-PAYMENT
SET CLPAYMNT=$$GET1^DIQ(90056.0205,CLIENS,.04,"E")
+29 IF REVICN["R"
Begin DoDot:2
+30 IF (CLPAYMNT=REVAMT)
Begin DoDot:3
+31 SET MATCHES=MATCHES+1
+32 SET MATCHES(IMPDA,CLMDA,REVDA)=""
End DoDot:3
+33 IF '$TEST
SET NOMATCH=NOMATCH+1
SET NOMATCH(IMPDA,CLMDA,REVDA)=""
End DoDot:2
QUIT
+34 IF REVAMT=CLPAYMNT
Begin DoDot:2
+35 SET MATCHES=MATCHES+1
+36 SET MATCHES(IMPDA,CLMDA,REVDA)=""
End DoDot:2
+37 IF '$TEST
SET NOMATCH=NOMATCH+1
SET NOMATCH(IMPDA,CLMDA,REVDA)=""
End DoDot:1
+38 IF 'PAYMENTS!'MATCHES
QUIT
+39 IF REVICN["R"
DO MCRERRS(.MATCHES,.NOMATCH,PAYMENTS,"INBILL")
IF 1
+40 IF '$TEST
DO REGERRS(.MATCHES,.NOMATCH,PAYMENTS,"INBILL")
+41 KILL ERRORS
+42 QUIT
INERA(IMPDA,REVDA,MATCHES,NOMATCH) ;EP - FIND PAYMENTS AND REVERSAL W/IN ERA FILE
+1 NEW CLIENS,CLBILL,CLPAYMNT,CLSTATUS,CLCHECK,PAYMENTS,REVICN,CLMICN,CNT
+2 ;BAR*1.8*6
NEW CLMDA
+3 ;CHECK/EFT TRACE
SET REVCHECK=$$GET1^DIQ(90056.0205,REVDA_","_IMPDA_",",201,"E")
+4 ;E-CLAIM (AR BILL
SET REVBILL=$$GET1^DIQ(90056.0205,REVDA_","_IMPDA_",",.01,"E")
+5 ;E-PAYMENT
SET REVAMT=-$$GET1^DIQ(90056.0205,REVDA_","_IMPDA_",",.04,"E")
+6 ;PAYER CLAIM CONTROL # (ICN)
SET REVICN=$$GET1^DIQ(90056.0205,REVDA_","_IMPDA_",",302,"E")
+7 ;CHECK/EFT TRACE
SET ERAFILE=$$GET1^DIQ(90056.02,IMPDA_",",.01,"E")
+8 ;IF REVICN CONTAINS AN 'R' THIS IS A MEDICARE REVERSAL
+9 IF $GET(BARDBG)
WRITE !!,"LOOKING FOR MATCHING PAYMENT FOR ",-REVAMT," IN ERA FILE ",ERAFILE
+10 SET PAYMENTS=0
+11 SET NOMATCH=0
+12 SET CLMDA=0
+13 FOR CNT=1:1
SET CLMDA=$ORDER(^BAREDI("I",DUZ(2),IMPDA,30,CLMDA))
IF 'CLMDA!(MATCHES)
QUIT
Begin DoDot:1
+14 IF '(CNT#1000)
WRITE "."
+15 ;DON'T CHECK POSTED CLAIMS
IF $PIECE($GET(^BAREDI("I",DUZ(2),IMPDA,30,CLMDA,0)),U,2)="P"
QUIT
+16 ;CHECK/EFT TRACE
SET CLCHECK=$$GET1^DIQ(90056.0205,CLMDA_","_IMPDA_",",201,"E")
+17 IF CLCHECK'=REVCHECK
QUIT
+18 ;DO NOT PROCESS REVERSAL CLAIM WE FOUND
IF REVDA=CLMDA
QUIT
+19 SET CLIENS=CLMDA_","_IMPDA_","
+20 ;IF NOT MATCHED DON'T COMPARE
IF $PIECE($GET(^BAREDI("I",DUZ(2),IMPDA,30,CLMDA,1)),U)=""
QUIT
+21 ;E-CLAIM STATUS CODE (CLP02)
SET CLSTATUS=$PIECE($$GET1^DIQ(90056.0205,CLIENS,.11,"E")," ")
+22 ;MRS:BAR*1.8*10 H2555
IF CLSTATUS=""
SET CLSTATUS=$PIECE($GET(^BAREDI("I",DUZ(2),IMPDA,30,CLMDA,2)),U,4)
+23 ;DON'T LOOK AT OTHER REVERSALS,SHOULD WE SKIP ANY OTHERS?
IF CLSTATUS=22
QUIT
+24 ;PRIMARY,SECONDARY,TERTIARY AS WELL AS THOSE 19,20,21 FORWARDED TO ADDITIONAL PAYER
IF (U_"1"_U_"2"_U_"3"_U_"19"_U_"20"_U_"21"_U)'[(U_CLSTATUS_U)
QUIT
+25 ;POST THIS CLAIM AS TYPE
SET POSTAS=$$GET1^DIQ(90056.0205,CLIENS,501,"I")
+26 ;DON'T TRY TO MATCH A REVERSAL TO A PAYMENT ALREADY MATCHED
IF POSTAS=138!(POSTAS=139)
QUIT
+27 SET PAYMENTS=PAYMENTS+1
+28 IF $GET(BARDBG)
WRITE !?15,"SEARCHING FOR PAYMENT TO MATCH REV OF ",REVAMT
+29 ;E-CLAIM (AR BILL
SET CLBILL=$$GET1^DIQ(90056.0205,CLIENS,.01,"E")
+30 ;ALREADY CHECKED WITHIN THE BILL FOR MATCHES, NOW CHECK OTHER BILLS IN ERA FILE
IF CLBILL=REVBILL
QUIT
+31 IF $GET(BARDBG)
WRITE !?20,"REV BILL ",REVBILL,!?20,"CL BILL ",CLBILL
+32 ;PAYER CLAIM CONMTROL # (ICN)
SET CLMICN=$$GET1^DIQ(90056.0205,CLIENS,302,"E")
+33 ;E-PAYMENT
SET CLPAYMNT=$$GET1^DIQ(90056.0205,CLIENS,.04,"E")
+34 ;S CLPAYMNT=$$GET1^DIQ(90056.0205,CLIENS,.05,"E") ;E-BILL
+35 ;MEDICARE MATCH?
+36 IF REVICN["R"
Begin DoDot:2
+37 IF CLMICN=$TRANSLATE(REVICN,"R")
Begin DoDot:3
+38 SET MATCHES=MATCHES+1
+39 SET MATCHES(IMPDA,CLMDA,REVDA)=""
End DoDot:3
+40 IF '$TEST
SET NOMATCH=NOMATCH+1
SET NOMATCH(IMPDA,CLMDA,REVDA)=""
End DoDot:2
QUIT
+41 ;REGULAR MATCH?
+42 IF CLPAYMNT=REVAMT
Begin DoDot:2
+43 SET MATCHES=MATCHES+1
+44 SET MATCHES(IMPDA,CLMDA,REVDA)=""
End DoDot:2
QUIT
+45 IF '$TEST
SET NOMATCH=NOMATCH+1
SET NOMATCH(IMPDA,CLMDA,REVDA)=""
End DoDot:1
+46 IF 'MATCHES!'PAYMENTS
QUIT
+47 IF REVICN["R"
DO MCRERRS(.MCRMATCH,.MCRNOMAT,PAYMENTS,"INERA")
IF 1
+48 IF '$TEST
DO REGERRS(.MATCHES,.NOMATCH,PAYMENTS,"INERA")
+49 KILL ERRORS
+50 QUIT
INRPMS(IMPDA,REVDA,MATCHES,NOMATCH) ;EP - LOOK FOR MATCHING PAYMENT IN A/R BILL
+1 NEW REVAMT,REVBILL,ERACHECK,BARBLIEN,FOUND,REVDATE,COLDA,ITEMDA,REVSCHED,REVERSAL,TAMOUNT
+2 NEW TRANS,BARFROM,BARTO,BARTYPE
+3 ;BAR*1.8*6
NEW CLMDA
+4 IF $GET(BARDBG)
WRITE !!,"LOOKING FOR MATCHING PAYMENT IN RPMS"
+5 ;E-CLAIM PAYMENT
SET REVAMT=$$GET1^DIQ(90056.0205,REVDA_","_IMPDA_",",.04,"E")
+6 ;E-CLAIM
SET REVBILL=$$GET1^DIQ(90056.0205,REVDA_","_IMPDA_",",.01,"E")
+7 ;CHECK/EFT TRACE
SET REVCHECK=$$GET1^DIQ(90056.0205,REVDA_","_IMPDA_",",201,"E")
+8 ;POST THIS CLAIM AS TYPE
SET POSTAS=$$GET1^DIQ(90056.0205,REVDA_","_IMPDA_",",501,"I")
+9 IF POSTAS=138!(POSTAS=139)
QUIT
+10 SET CLMDA=0
SET BILLCHOS=""
+11 FOR
SET CLMDA=$ORDER(^BAREDI("I",DUZ(2),IMPDA,30,"B",BARBILL,CLMDA))
IF 'CLMDA!(BILLCHOS'="")
QUIT
Begin DoDot:1
+12 ;A-CLAIM ; IF THIS IS POPULATED THEN THE CORRECT BILL WAS FOUND OR CHOSEN ALREADY
SET BILLCHOS=$PIECE($GET(^BAREDI("I",DUZ(2),IMPDA,30,CLMDA,1)),U)
End DoDot:1
+13 IF BILLCHOS
SET BARBLIEN=BILLCHOS
+14 IF '$TEST
SET BARBLIEN=$$GETIEN^BAR50EB("B",BARBILL)
+15 IF BARBLIEN="BILL NOT FOUND"
Begin DoDot:1
+16 SET CLMDA=$ORDER(^BAREDI("I",DUZ(2),IMPDA,30,"B",BARBILL,""))
+17 IF '$DATA(^BAREDI("I",DUZ(2),IMPDA,30,CLMDA,4,"B",11))
Begin DoDot:2
+18 ;BILL NOT FOUND IN RPMS. SET ONLY IF OLD ERROR 11 NOT SET
SET ERRORS("BL NF")=""
End DoDot:2
+19 DO ADDREAS^BAR50P04(IMPDA,REVDA,.ERRORS)
+20 KILL ERRORS
End DoDot:1
QUIT
+21 IF BARBLIEN="DUPLICATE BILLS FOUND"
Begin DoDot:1
+22 ;DUPLICATE BILLS FOUND IN RPMS
SET ERRORS("DUPB")=""
+23 DO ADDREAS^BAR50P04(IMPDA,REVDA,.ERRORS)
+24 KILL ERRORS
End DoDot:1
QUIT
+25 IF 'BARBLIEN
QUIT 0
+26 SET FOUND=0
+27 ;NUMBER OF REVERSALS ALREADY SET UP FOR THIS AMOUNT.
SET REVERSAL=0
+28 SET TRANS=""
+29 ;REVERSAL CAN NOT APPLY TO A FUTURE PAYMENT
FOR
SET TRANS=$ORDER(^BARTR(DUZ(2),"AC",BARBLIEN,TRANS),-1)
IF 'TRANS!(FOUND)
QUIT
Begin DoDot:1
+30 SET TRANTYPE=$$GET1^DIQ(90050.03,TRANS_",",101,"E")
+31 ;OLD WILL BILL 'PAYMENT', NEW STUFF WILL BE 'PAYMENT CREDIT'
IF TRANTYPE'="PAYMENT"&(TRANTYPE'="PAYMENT CREDIT")
QUIT
+32 SET TAMOUNT=$$GET1^DIQ(90050.03,TRANS_",",3.5,"E")
+33 ;#110 = DATE OF TRANSACTION REVERSED
IF TAMOUNT=REVAMT
IF $$GET1^DIQ(90050.03,TRANS_",",110,"I")
SET REVERSAL=REVERSAL+1
QUIT
+34 IF TAMOUNT=-REVAMT
Begin DoDot:2
+35 SET COLDA=$$GET1^DIQ(90050.03,TRANS_",",14,"I")
+36 SET ITEMDA=$$GET1^DIQ(90050.03,TRANS_",",15,"I")
+37 ;;;Q:'$D(^BARCOL(DUZ(2),"D",REVCHECK,COLDA,ITEMDA)) ;IF COLLECTION BATCH AND ITEM DON'T MATCH UP WE CAN'T POST - BAR 1.8*23 OLD CODE
+38 ;- BAR 1.8*23
IF '$DATA(^BARCOL(DUZ(2),"D",REVCHECK,COLDA,ITEMDA))
IF '$DATA(^BARCOL(DUZ(2),"D",+REVCHECK,COLDA,ITEMDA))
QUIT
+39 ;MATCHING REVERSAL SO THIS PAYMENT MATCHES
IF REVERSAL
SET REVERSAL=REVERSAL-1
QUIT
+40 SET FOUND=FOUND+1
+41 SET REVDATE=$$GET1^DIQ(90050.03,TRANS_",",.01,"I")
+42 SET REVSCHED=$$GET1^DIQ(90051.01,COLDA_",",28,"I")
+43 IF REVSCHED=""
SET REVSCHED=$$GET1^DIQ(90051.1101,ITEMDA_","_COLDA_",",20,"I")
+44 IF REVSCHED=""
SET REVSCHED="PRE-UFMS_COLLECTIONS"
End DoDot:2
End DoDot:1
+45 IF 'FOUND
Begin DoDot:1
+46 ;MATCHING PAYMENT NOT FOUND IN A/R TRANSACTION FILE
SET ERRORS("PR NM R")=""
+47 DO ADDREAS^BAR50P04(IMPDA,REVDA,.ERRORS)
+48 KILL ERRORS
End DoDot:1
QUIT
+49 ;NOW WE SHOULD HAVE A NON-MATCHED PAYMENT EQUALING OUR ERA REVERSAL
+50 KILL DIE,DIC,DR,DA,DIR
+51 SET BARFROM=$$GET1^DIQ(90056.0205,REVDA_","_IMPDA_",",1.01,"I")
+52 SET BARTO=$GET(BARBLIEN)
+53 ;DON'T MATCH TO A NON-MATCHED CLAIM
IF BARFROM=""
QUIT
+54 SET DIE=$$DIC^XBDIQ1(90056.0205)
+55 SET BARTYPE=139
+56 ;S DR=DR=DR_"501///^S X=BARTYPE" ;CREDIT TO OTHER BILL
+57 ;CREDIT TO OTHER BILL BAR*1.8*6 IM29724
SET DR="501///^S X=BARTYPE"
+58 SET DR=DR_";.12///^S X=REVDATE"
+59 SET DR=DR_";301///^S X=REVSCHED"
+60 SET DR=DR_";602///^S X=BARFROM"
+61 SET DR=DR_";601///^S X=BARTO"
+62 SET DA(1)=IMPDA
+63 SET DA=REVDA
+64 DO ^DIE
+65 ;HAD TROUBLE GETTING THE DIE CALL TO WORK FOR .12 AND 301
+66 SET $PIECE(^BAREDI("I",DUZ(2),DA(1),30,DA,0),U,12)=REVDATE
+67 SET $PIECE(^BAREDI("I",DUZ(2),DA(1),30,DA,3),U)=REVSCHED
+68 KILL DR,DIE,DIC,DIR
+69 KILL ERRORS
+70 QUIT
MCRERRS(MATCHES,NOMATCH,PAYMENTS,WHERE) ;EP - MCR ERRORS
+1 NEW ERRORS,CLMDA
+2 IF MATCHES=1
DO SETMATCH(.MATCHES)
QUIT
+3 IF PAYMENTS=0
Begin DoDot:1
+4 IF WHERE="INBILL"
SET ERRORS("PT NF B")=""
+5 IF '$TEST
SET ERRORS("PT NF E")=""
+6 DO ADDREAS^BAR50P04(IMPDA,REVDA,.ERRORS)
End DoDot:1
+7 IF MATCHES>0
Begin DoDot:1
+8 IF WHERE="INBILL"
SET ERRORS("MP MCR B")=""
+9 IF '$TEST
SET ERRORS("MP MCR E")=""
+10 DO ADDREAS^BAR50P04(IMPDA,REVDA,.ERRORS)
+11 SET CLMDA=""
+12 FOR
SET CLMDA=$ORDER(MATCHES(IMPDA,CLMDA))
IF 'CLMDA
QUIT
Begin DoDot:2
+13 DO ADDREAS^BAR50P04(IMPDA,CLMDA,.ERRORS)
End DoDot:2
End DoDot:1
+14 IF NOMATCH>0
Begin DoDot:1
+15 IF WHERE="INBILL"
SET ERRORS("NM MCR B")=""
+16 IF '$TEST
SET ERRORS("NM MCR E")=""
+17 DO ADDREAS^BAR50P04(IMPDA,REVDA,.ERRORS)
+18 SET CLMDA=""
+19 FOR
SET CLMDA=$ORDER(NOMATCH(IMPDA,CLMDA))
IF 'CLMDA
QUIT
Begin DoDot:2
+20 DO ADDREAS^BAR50P04(IMPDA,CLMDA,.ERRORS)
End DoDot:2
End DoDot:1
+21 KILL ERRORS
+22 QUIT
REGERRS(MATCHES,NOMATCH,PAYMENTS,WHERE) ; EP
+1 NEW ERRORS,CLMDA
+2 IF MATCHES=1
DO SETMATCH(.MATCHES)
QUIT
+3 IF PAYMENTS=0
Begin DoDot:1
+4 IF WHERE="INBILL"
SET ERRORS("PT NF B")=""
+5 IF '$TEST
SET ERRORS("PT NF E")=""
+6 DO ADDREAS^BAR50P04(IMPDA,REVDA,.ERRORS)
End DoDot:1
+7 IF MATCHES>1
Begin DoDot:1
+8 IF WHERE="INBILL"
SET ERRORS("MPB")=""
+9 IF '$TEST
SET ERRORS("MPE")=""
+10 DO ADDREAS^BAR50P04(IMPDA,REVDA,.ERRORS)
+11 SET CLMDA=""
+12 FOR
SET CLMDA=$ORDER(MATCHES(IMPDA,CLMDA))
IF 'CLMDA
QUIT
Begin DoDot:2
+13 DO ADDREAS^BAR50P04(IMPDA,CLMDA,.ERRORS)
End DoDot:2
End DoDot:1
+14 IF NOMATCH>0
Begin DoDot:1
+15 IF WHERE="INBILL"
SET ERRORS("PR NM B")=""
+16 IF '$TEST
SET ERRORS("PR NM E")=""
+17 DO ADDREAS^BAR50P04(IMPDA,REVDA,.ERRORS)
+18 SET CLMDA=""
+19 FOR
SET CLMDA=$ORDER(NOMATCH(IMPDA,CLMDA))
IF 'CLMDA
QUIT
Begin DoDot:2
+20 DO ADDREAS^BAR50P04(IMPDA,CLMDA,.ERRORS)
End DoDot:2
End DoDot:1
+21 KILL ERRORS
+22 QUIT
SETMATCH(MATCH) ;EP - SET TO MATCHING AND SET TRANSACTION TYPE
+1 NEW IMPDA,CLMDA,REVDA,CLIENS,REVIENS,BARFROM,BARTO,CNT
+2 SET IMPDA=$ORDER(MATCH(""))
+3 IF IMPDA=""
QUIT
+4 SET CLMDA=$ORDER(MATCH(IMPDA,""))
+5 IF CLMDA=""
QUIT
+6 SET REVDA=$ORDER(MATCH(IMPDA,CLMDA,""))
+7 IF REVDA=""
QUIT
+8 SET CLIENS=CLMDA_","_IMPDA_","
+9 SET REVIENS=REVDA_","_IMPDA_","
+10 IF $ORDER(^BAREDI("I",DUZ(2),IMPDA,30,CLMDA,4,0))
QUIT
+11 IF $ORDER(^BAREDI("I",DUZ(2),IMPDA,30,REVDA,4,0))
QUIT
+12 IF $GET(BARDBG)
WRITE !!,"PAYMENT REVERSAL: ",$$GET1^DIQ(90056.0205,CLIENS,.01,"E")
+13 IF $GET(BARDBG)
WRITE !,"MATCHED TO REVERSAL: ",$$GET1^DIQ(90056.0205,REVIENS,.01,"E")
+14 SET BARFROM=$$GET1^DIQ(90056.0205,REVIENS,1.01,"I")
+15 SET BARTO=$$GET1^DIQ(90056.0205,CLIENS,1.01,"I")
+16 ;DO NOT MATCH TO A NON-MATCHED CLAIM
IF BARFROM=""!(BARTO="")
QUIT
+17 IF $GET(BARDBG)
WRITE !,"PAYMENT CREDIT APPLIED FROM: ",BARFROM
+18 IF $GET(BARDBG)
WRITE !,"PAYMENT CREDIT APPLIED TO: ",BARTO
+19 KILL DA
SET CNT=0
+20 FOR DA=CLMDA,REVDA
Begin DoDot:1
+21 SET CNT=CNT+1
+22 KILL DR,DIE,DIC,DIR
+23 SET DIE=$$DIC^XBDIQ1(90056.0205)
+24 ;CREDIT FROM OTHER BILL
IF CNT=1
SET TYPE=139
+25 ;CREDIT TO OTHER BILL
IF '$TEST
SET TYPE=138
+26 SET STAT="M"
+27 SET DR=".02///^S X=STAT"
+28 SET DR=DR_";501///^S X=TYPE"
+29 IF CNT=1
SET DR=DR_";602///^S X=BARFROM"
+30 IF '$TEST
SET DR=DR_";601///^S X=BARTO"
+31 SET DA(1)=IMPDA
+32 DO ^DIE
+33 KILL DR,DIE,DIC,DIR
End DoDot:1
+34 QUIT
ISREV(CLMDA,IMPDA) ;P.OTT 1/10/2014 HEAT148388 BAR 1.8*24
+1 IF +$$GET1^DIQ(90056.0205,CLMDA_","_IMPDA_",",.11)=22
QUIT 1
+2 QUIT 0
+3 ;----------------