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

BARDMRE.m

Go to the documentation of this file.
BARDMRE ;IHS/OIT/FCJ - DEBT MANAGEMENT-ERROR REPORT ; 11 Jul 2012  1:34 PM
 ;;1.8;IHS ACCOUNTS RECEIVABLE;**22,23,24,27**;OCT 26, 2005;Build 12
 ;New routine 5-12-2011 for Debt Letter Management
 ;
 ;This report will provide letters ready to be printed by cycle, Insurer and detail
 ;IHS/SD/POT SEP 2012 IGNORE DUPLICATE BILL / NONEX CLAIM # (SAME LOGIC AS IN BARDMLP)
 ;IHS/SD/POT MAY 2013 FIXED COUNT OF 'L'ETTERS (LINE 64)- BAR*1.8*.23
 ;         FIXED <READ> ERRORS: MAKE CALL OF ^DIR CONDITIONAL- BAR*1.8*.23
 ;IHS/SD/POT MAY 2013 CHK / SET STATUS 'PAID'- BAR*1.8*.23
 ;IHS/SD/POT JULY 2013 P.OTT HEAT118656 BELCOURT: SKIP UNDEF ENTRY IN ^BARBL- BAR*1.8*.24
 ;IHS/SD/POT HEAT152452 2/10/2014 CHK IF PAR/SAT FILE CORECTLY SET UP - BAR*1.8*.24
 ;IHS/DIT/CPC New Medicare Card Initiative CR09275 11/3/2017 - BAR*1.8*27
 ;
ST ;
 S BMCQ=0,BARRPT="C",BARSEQ=0
 W !!,"Report for Errors in Letters to be printed"
 D PAR^BARDMU
 Q:$G(BARQ)  ;P.OTT HEAT152452 2/10/2014- BAR*1.8*.24
 D RRDT^BARDMU
 D ZIS
 Q
 ;
ZIS ;
 D ZIS^BARDMU
 G:$G(BARQUIT) XIT
 S XBRC="CALC^BARDMRE(1)",XBRX="XIT^BARDMRE",XBNS="BAR"
 I $G(BAROPT)="B" S XBRP="VIEWR^XBLM(""PRINT^BARDMRE"")",XBIOP=0
 E  S XBRP="PRINT^BARDMRE"
 D ^XBDBQUE
 D XIT
 Q
XIT ;
 K ^TMP("BARDME",$J)
 I $D(IO("S")) S IOP="`"_IOS D ^%ZIS Q
 D ^%ZISC
 K DIR,BARL,BARL1,BARL2,BARC,BARCT,BARCYCLE,BARTST  ;
 Q
 ;
CALC(BARCALL) ;
 ;BARCALL=1 INCLUDE ALL ERR LETTERS
 ;BARCALL=2 COUNT O NLY DUE LETTERS
 S BARERRCT=0  ;
 K ^TMP("BARDME",$J) ;p.ott
 D ^BARDMBS     ;CHECK FOR OUTSTANDING BILLS
 S BARCT=0,BARCTQ=0
 F BARCYCLE="CYCLE 1","CYCLE 2","CYCLE 3","CYCLE 4" D A1 D  Q:BARCTQ  ;
 Q
 ;
A1 ;
 S BARDM=0 F  S BARDM=$O(^BARDM(DUZ(2),"S","Q",BARCYCLE,BARDM)) Q:BARDM'?1N.N  D  Q:BARCTQ
 . Q:$P(^BARDM(DUZ(2),BARDM,0),U,2)'="A"
 . S BARDMC=0
 . F  S BARDMC=$O(^BARDM(DUZ(2),"S","Q",BARCYCLE,BARDM,BARDMC)) Q:BARDMC'?1N.N  D  Q:BARCTQ
 .. ;test for letter already printed
 .. S BARTC="",BARPPF=0
 .. F  S BARTC=$O(^BARDM(DUZ(2),"S","P",BARTC)) Q:$G(BARTC)=""  D
 ... I $D(^BARDM(DUZ(2),"S","P",BARTC,BARDM)) S BARPPF=1
 .. S BARBIEN=$P(^BARDM(DUZ(2),BARDM,0),U)
 ..	I '$D(^BARBL(DUZ(2),BARBIEN,0)) D  Q  ;HEAT118656 BELCOURT P.OTT- BAR*1.8*.24
 ... I $P($G(^VA(200,DUZ,0)),U,4)'="@" Q
 ... W !,"MISSING DATA IN ^BARBL(",DUZ(2),",",BARBIEN
 .. S BARBILN=$$VAL^XBDIQ1(90053.05,BARDM,.01)
 .. I BARPPF=1 S BARBILN=BARBILN_"*"
 .. S BARDAC=$P(^BARBL(DUZ(2),BARBIEN,0),U,3),BARD3P=$P(^(0),U,17)
 .. S BARD3PD=$P(^BARBL(DUZ(2),BARBIEN,0),U,22)
 .. ;
 .. I '$D(^ABMDBILL(BARD3PD,BARD3P)) QUIT  ;DUPLICATE BILL / NONEX CLAIM # P.OTT ADDED FROM BARDMLP
 .. ;
 .. I $P(^BARBL(DUZ(2),BARBIEN,0),U,15)'>0 D  Q  ;P.OTT MAY 2013: ELEVATED THIS LINE (SWAPPED LINES 62 vs 60)
 ... W !,"Bill status of ",$P(^BARBL(DUZ(2),BARBIEN,0),U,1)," changed. Flagging DL as PAID."
 ... D PAID(BARDM,BARDMC) Q
 .. I BARCALL=2 I BARCYCLE'="CYCLE 1" S CY=+$P(BARCYCLE," ",2) D CYDAY^BARDMRU I BARLQ=0 QUIT   ;P.OTT
 .. S BARDI=$$VAL^XBDIQ1(90050.02,BARDAC,.01)
 .. D INSTYP^BARDMU
 .. I '$D(BARDINS(BARDI))&'$D(BARDINS(BARDITY)) Q  ;not insurer type or insurer we are looking for ;P.OTT MAY 2013
 .. D POLCHK
 .. I '$P($G(^BARBL(DUZ(2),BARBIEN,1)),U,2) S ^TMP("BARDME",$J,BARDM,5)=BARHRN_U_BARBILN_U_BARDI_U_"Date of Service",BARERRCT=BARERRCT+1 D ADD2ERR(1)
 .. ;I BARRPT="L" S BARCT=BARCT+1 S:BARCT=BARPMX BARCTQ=1 ;P.OTT REPLACED WITH ADD2ERR
 Q
 S DIE="^BARDM("_DUZ(2)_","_BARDM_",100,",DA(1)=BARDM,DA=BARDMC
 S DR=".03///N"
 D ^DIE
 K DIE,DA,DR
 S DIE="^BARDM("_DUZ(2)_",",DA=BARDM,DR=".02///P"
 D ^DIE
 K DIE,DA,DR
 Q
 ;
POLCHK ;TEST FOR POLICY NO, POLICY HOLDER AND POLICY HOLDER DOB
 S BARMIN=0,BARDM("PAT_IEN")="",BARHRN="",BARPAT=""
 I BARDACG'="VA(" D
 .S BARDM("PAT_IEN")=$P(^BARBL(DUZ(2),BARBIEN,1),U)
 .S BARHRN=$P($G(^AUPNPAT(BARDM("PAT_IEN"),41,DUZ(2),0)),U,2)  ; for <UNDEF>POLCHK+4^BARDMRE
 .S BARPAT=$P(^DPT(BARDM("PAT_IEN"),0),U)
 S (BARDM("INS"),BARDM("MEMBER"),BARDM("POL_HOLDER"),BARDM("POL_NUM"),BARDM("POL_DOB"),BARDM("INS_TX"))=""
 I BARDACG="AUTNINS(" D INSCHK
 Q
INSCHK ;CHECK INSURANCE 
 I $P(^AUTNINS(BARDACI,0),U,11)="" S ^TMP("BARDME",$J,BARDM,6)=BARHRN_U_BARBILN_U_BARDI_U_"Tax ID",BARERRCT=BARERRCT+1 D ADD2ERR(2.1) Q  ;5/17/2013
 I (+$G(^ABMDBILL(BARD3PD,BARD3P,0))=0) S ^TMP("BARDME",$J,BARDM,9)=BARHRN_U_BARBILN_U_BARDI_U_"3P Bill",BARERRCT=BARERRCT+1 D ADD2ERR(2.2) Q  ;
 I $P(^ABMDBILL(BARD3PD,BARD3P,0),U)'=$E(BARBILN,1,$L($P(^ABMDBILL(BARD3PD,BARD3P,0),U))) S ^TMP("BARDME",$J,BARDM,6)=BARHRN_U_BARBILN_U_BARDI_U_"3P Pointer",BARERRCT=BARERRCT+1 D ADD2ERR(2.3) Q  ;
 S BARTST=0  ;
 I $D(^ABMDBILL(BARD3PD,BARD3P,13,"B",BARDACI)) D  ;
 .S BARL="",BARL=$O(^ABMDBILL(BARD3PD,BARD3P,13,"B",BARDACI,BARL))  ;
 .D INSCHK1
 Q:BARTST=1  ;
 S BARL=0 F  S BARL=$O(^ABMDBILL(BARD3PD,BARD3P,13,BARL)) Q:BARL'?1N.N  D  Q:BARTST=1
 .I $P(^ABMDBILL(BARD3PD,BARD3P,13,BARL,0),U,11)=BARDACI D INSCHK1
 I BARTST=0  S ^TMP("BARDME",$J,BARDM,8)=BARHRN_U_BARBILN_U_BARDI_U_"Account/Ins Mismatch",BARERRCT=BARERRCT+1 D ADD2ERR(4)
 Q
INSCHK1 ;
 I $P(^ABMDBILL(BARD3PD,BARD3P,13,BARL,0),U,4)'="" D MCR,ERR Q
 I $P(^ABMDBILL(BARD3PD,BARD3P,13,BARL,0),U,5)'="" D RR,ERR Q
 I $P(^ABMDBILL(BARD3PD,BARD3P,13,BARL,0),U,7)'="" D MCD,ERR Q
 I $P(^ABMDBILL(BARD3PD,BARD3P,13,BARL,0),U,8)'="" D PRVT,ERR Q
 ;if it gets to here it means there isn't a pointer back to the specific entry in the appropriate eligible file
 ;lets try to figure it out by insurer type
 I "^R^MD^"[("^"_$$GET1^DIQ(9999999.181,$$GET1^DIQ(9999999.18,$P(^ABMDBILL(BARD3PD,BARD3P,13,BARL,0),U),".211","I"),1,"I")_"^")&$$GET1^DIQ(9999999.18,$P(^ABMDBILL(BARD3PD,BARD3P,13,BARL,0),U),".211","E")["MEDICARE" D MCR,ERR Q
 I "^R^MD^"[("^"_$$GET1^DIQ(9999999.181,$$GET1^DIQ(9999999.18,$P(^ABMDBILL(BARD3PD,BARD3P,13,BARL,0),U),".211","I"),1,"I")_"^")&$$GET1^DIQ(9999999.18,$P(^ABMDBILL(BARD3PD,BARD3P,13,BARL,0),U),".211","E")["RAILROAD" D RR,ERR Q
 I "^K^"[("^"_$$GET1^DIQ(9999999.181,$$GET1^DIQ(9999999.18,$P(^ABMDBILL(BARD3PD,BARD3P,13,BARL,0),U),".211","I"),1,"I")_"^")&($$GET1^DIQ(9999999.18,$P(^ABMDBILL(BARD3PD,BARD3P,13,BARL,0),U),".38","I")["P") D PRVT I BARTST=1 D ERR Q
 I "^D^K^"[("^"_$$GET1^DIQ(9999999.181,$$GET1^DIQ(9999999.18,$P(^ABMDBILL(BARD3PD,BARD3P,13,BARL,0),U),".211","I"),1,"I")_"^") D MCD I BARTST=1 D ERR Q
 I "^T^C^FPL^F^I^H^MMC^MC^MH^M^N^SEP^TSI^P^"[("^"_$$GET1^DIQ(9999999.181,$$GET1^DIQ(9999999.18,$P(^ABMDBILL(BARD3PD,BARD3P,13,BARL,0),U),".211","I"),1,"I")_"^") D PRVT I BARTST=1 D ERR Q
 ;
 I BARTST'=1 S BARTST=1,^TMP("BARDME",$J,BARDM,7)=BARHRN_U_BARBILN_U_BARDI_U_"Bill Insurer Detail",BARERRCT=BARERRCT+1 D ADD2ERR(5)
 Q
MCR ;EP
 S BARTST=1  ;
 S BARDM("POL_HOLDER")=$P($G(^AUPNMCR(BARDM("PAT_IEN"),21)),U)
 S BARDM("POL_NUM")="MCR"
 S BARDM("POL_DOB")=$P($G(^AUPNMCR(BARDM("PAT_IEN"),21)),U,2)
 ;BAR V1.8P27 - NMCI CHANGE - IHS/DIT/CPC - 20171027
 ;S BARDM("MEMBER")=$$GETMCR^AGUTL(BARDM("PAT_IEN"))  ;not functional at time of code change
 S BARDM("MEMBER")=$$GETMBI^AUPNMBI(BARDM("PAT_IEN"),DT,0)
 S:+BARDM("MEMBER")=0 BARDM("MEMBER")=$P($G(^AUPNMCR(BARDM("PAT_IEN"),0)),U,3)
 Q
MCD ;EP
 S BARTST=1  ;
 S BARDINS=$P(^ABMDBILL(BARD3PD,BARD3P,13,BARL,0),U,6)  ;
 S:$G(BARDINS)="" BARDINS=$P($G(^ABMDBILL(BARD3PD,BARD3P,0)),U,8)  ;
 I BARDINS="" S BARTST=0 Q  ;
 S BARDM("POL_HOLDER")=$P($G(^AUPNMCD(BARDINS,21)),U)
 S BARDM("POL_NUM")="MCD"
 S BARDM("POL_DOB")=$P($G(^AUPNMCD(BARDINS,21)),U,2)
 S BARDM("MEMBER")=$P($G(^AUPNMCD(BARDINS,0)),U,3)
 Q
RR ;EP
 S BARTST=1  ;
 S BARDM("POL_HOLDER")=$P($G(^AUPNRRE(BARDM("PAT_IEN"),21)),U)
 S BARDM("POL_NUM")="RR"
 S BARDM("POL_DOB")=$P($G(^AUPNRRE(BARDM("PAT_IEN"),21)),U,2)
  ;BAR V1.8P27 - NMCI CHANGE - IHS/DIT/CPC - 20171027
 ;S BARDM("MEMBER")=$$GETMCR^AGUTL(BARDM("PAT_IEN"))  ;not functional at time of code change
 S BARDM("MEMBER")=$$GETMBI^AUPNMBI(BARDM("PAT_IEN"),DT,0)
 S:+BARDM("MEMBER")=0 BARDM("MEMBER")=$P($G(^AUPNRRE(BARDM("PAT_IEN"),0)),U,4)
 Q
PRVT ;EP
 S BARTST=1  ;
 S BARINS=$P(^ABMDBILL(BARD3PD,BARD3P,13,BARL,0),U,8)  ;
 I $G(BARINS)="" S BARINS=$P($G(^ABMDBILL(BARD3PD,BARD3P,0)),U,8),BARINS=$O(^AUPNPRVT(BARDM("PAT_IEN"),11,"B",BARINS,0))  ;
 I BARINS="" S BARTST=0 Q  ;
 S BARDM("POL_HOLDER_IEN")=$P($G(^AUPNPRVT(BARDM("PAT_IEN"),11,BARINS,0)),U,8)
 S BARDM("MEMBER")=$P($G(^AUPNPRVT(BARDM("PAT_IEN"),11,BARINS,2)),U)
 I $G(BARDM("POL_HOLDER_IEN")) D
 .S BARDM("POL_HOLDER")=$P(^AUPN3PPH(BARDM("POL_HOLDER_IEN"),0),U)
 .S BARDM("POL_DOB")=$P(^AUPN3PPH(BARDM("POL_HOLDER_IEN"),0),U,19)
 .S BARDM("POL_NUM")=$P(^AUPN3PPH(BARDM("POL_HOLDER_IEN"),0),U,4)
 Q
 ;
ERR ;
 S:BARDM("POL_HOLDER")="" ^TMP("BARDME",$J,BARDM,1)=BARHRN_U_BARBILN_U_BARDI_U_"POLICY HOLDER NAME"
 S:BARDM("POL_NUM")="" ^TMP("BARDME",$J,BARDM,2)=BARHRN_U_BARBILN_U_BARDI_U_"POLICY NUMBER"
 S:BARDM("POL_DOB")="" ^TMP("BARDME",$J,BARDM,3)=BARHRN_U_BARBILN_U_BARDI_U_"POLICY HOLDER DOB"
 S:BARDM("MEMBER")="" ^TMP("BARDME",$J,BARDM,4)=BARHRN_U_BARBILN_U_BARDI_U_"MEMBER NUMBER"
 I $D(^TMP("BARDME",$J,BARDM)) S BARERRCT=BARERRCT+1  ;
 Q
 ;
PRINT ;
 D HDR
 I '$D(^TMP("BARDME",$J)) W !!," There are not any queued Letters with Errors",!! S BMCQ=1 D  Q  ;
 . K DIC,DA,DR,DIR
 . I IOST["C-",'$D(IO("S")) D  ;P.OTT: EXPECT I/O ONLY FROM TERMINAL (AVOID <READ> ERRORS)- BAR*1.8*.23
 . . S DIR(0)="E"
 . . S DIR("A")="Enter RETURN to Continue"
 . . D ^DIR
 S BARL=0,BARCT=0 F  S BARL=$O(^TMP("BARDME",$J,BARL)) Q:BARL'?1N.N  D  Q:$G(BARDLQ)  ;
 . S BARCT=BARCT+1 ;# OF ERR LETTERS
 . I $Y>(IOSL-6) W ! D RTRN^BARDMU Q:$G(BARDLQ)  D HDR
 . S BARL1=0 F  S BARL1=$O(^TMP("BARDME",$J,BARL,BARL1)) Q:BARL1'?1N.N  D  ;
 . . W !,$P(^TMP("BARDME",$J,BARL,BARL1),U),?8,$P(^(BARL1),U,2),?30,$E($P(^(BARL1),U,3),1,29),?60,$P(^(BARL1),U,4)  ;
 W !!
 K DIC,DA,DR,DIR
 I IOST["C-",'$D(IO("S")) D  ;P.OTT: EXPECT I/O ONLY FROM TERMINAL (AVOID <READ> ERRORS)
 . S DIR(0)="E"
 . S DIR("A")="Enter RETURN to Continue"
 . D ^DIR
 Q
 ;
HDR ;
 S BARPG=BARPG+1  ;
 W @IOF,!,BARRDT,?23,"DEBT MANAGEMENT LETTER ERROR REPORT"
 W:$G(BAROPT)'="B" ?70,"PAGE: ",BARPG  ;
 W !,"A/R PARENT LOCATION: ",BARPNM,!
 F I=1:1:80 W "="
 W !?2,"HRN",?8,"BILL NUMBER",?30,"A/R ACCOUNT",?61,"ERROR"  ;
 W ! F I=1:1:80 W "-"
 Q
ADD2ERR(X) ;
 I BARRPT="L" S BARCT=BARCT+1
 Q  ;EOR