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

RCDPENR2.m

Go to the documentation of this file.
  1. RCDPENR2 ;ALB/SAB - EPay National Reports - ERA/EFT Trending Report ; 7/1/19 2:02pm
  1. ;;4.5;Accounts Receivable;**304,321,326,349,432**;Mar 20, 1995;Build 16
  1. ;;Per VA Directive 6402, this routine should not be modified.
  1. ;
  1. ;Read ^DGCR(399) via Private IA 3820
  1. ;Read ^DG(40.8) via Controlled IA 417
  1. ;Read ^IBM(361.1) via Private IA 4051
  1. ;Use DIV^IBJDF2 via Private IA 3130
  1. ;Use DIVISION^VAUTOMA via Controlled IA 664
  1. ;
  1. Q
  1. ;
  1. EFTERA() ; EFT/ERA TRENDING REPORT
  1. ;
  1. N DIRUT,DIROUT,DTOUT,DUOUT,X,Y,POP
  1. N RCBGDT,RCDATA,RCDATE,RCDISP,RCENDDT,RCPYRLST,RCSDT,RCEDT,RCRQDIV,RCRPT
  1. N RCCLM,RCDIV,RCEXCEL,RCEX,RCPAR,RCPAY,RCPAYR,RCTIN,RCTINR,RCTYPE,RCWHICH
  1. ;
  1. ; Alert software to display to screen
  1. S RCDISP=1
  1. ;
  1. ; Ask for Division
  1. S RCRQDIV=$$GETDIV^RCDPENR4(.RCDIV)
  1. Q:RCRQDIV=-1
  1. ;
  1. S RCAUTO=$$ASKAUTO^RCDPEU1() Q:RCAUTO=-1 ; PRCA*4.5*349
  1. ;
  1. S RCTYPE=$$RTYPE^RCDPEU1() Q:RCTYPE=-1
  1. S RCWHICH=$$NMORTIN^RCDPEAPP() Q:RCWHICH=-1
  1. ;
  1. S RCPAR("SELC")=$$PAYRNG^RCDPEU1(0,1,RCWHICH)
  1. Q:RCPAR("SELC")=-1
  1. S RCPAY=RCPAR("SELC")
  1. ;
  1. I RCPAR("SELC")'="A" D Q:XX=-1
  1. . S RCPAR("TYPE")=RCTYPE
  1. . S RCPAR("SRCH")=$S(RCWHICH=2:"T",1:"N")
  1. . S RCPAR("FILE")=344.4
  1. . S RCPAR("DICA")="Select Insurance Company"_$S(RCWHICH=1:" NAME: ",1:" TIN: ")
  1. . S XX=$$SELPAY^RCDPEU1(.RCPAR)
  1. ;
  1. ; Ask the user for rate type
  1. S RCRATE=$$GETRATE()
  1. Q:RCRATE=-1
  1. ;
  1. ; PRCA*4.5*349 - Add Closed Claims filter
  1. S RCCLM=$$CLOSEDC^RCDPEU1()
  1. Q:RCCLM=-1
  1. ;
  1. ; Ask the user for report type, with a prompt for the main report.
  1. S RCRPT=$$GETRPT(1)
  1. Q:RCRPT=-1
  1. ;
  1. ; Retrieve start date
  1. S RCBGDT=$$GETSDATE()
  1. Q:RCBGDT=-1
  1. ;
  1. ; Retrieve end date. Send user start date as the lower bound.
  1. S RCENDDT=$$GETEDATE(RCBGDT)
  1. Q:RCENDDT=-1
  1. ;
  1. ;If the user is running the main report, ask if they wish to export to Excel
  1. S RCEXCEL=0
  1. S:RCRPT="M" RCEXCEL=$$DISPTY^RCDPRU()
  1. D:RCEXCEL INFO^RCDPRU
  1. I 'RCEXCEL,(RCRPT="M") W !!,"This report requires 132 columns.",!!
  1. D AUTO(1,RCBGDT,RCENDDT,.RCPYRLST,RCRQDIV,RCRPT,RCEXCEL,RCRATE,.RCDIV,RCAUTO)
  1. Q
  1. ;
  1. AUTO(RCDISP,RCBGDT,RCENDDT,RCPYRLST,RCRQDIV,RCRPT,RCEXCEL,RCRATE,RCDIV,RCAUTO) ;
  1. ; Inputs: RCAUTO (Optional) - A - Auto-Post, N-Non-Auto-Post, B-Both (Defaults to B)
  1. ; RCDISP - Display results to screen or archive file flag
  1. ; RCBGDT - begin date of the report
  1. ; RCENDDT - End date of the report
  1. ; RCPYRLST - Payers to report on (All, range, or single payer)
  1. ; RCRQDIV - Division to report on - (A)ll or a single division
  1. ; RCRPT - (M)ain, (S)ummary or (G)rand Total Report
  1. ; RCEXCEL - Flag to indicate output in "^" delimited format
  1. ; RCRATE - Billing Rate Type flag
  1. ; RCDIV - Divisions to report on.
  1. ; RCPAY - Payers to report on (All, range, or single payer)
  1. ; RCTYPE - Types of payers to include (M - Medical, P - Pharmacy, T - Tricare C - CHAMPVA)
  1. ; RCWHICH - select payers by name or TIN (1 - Name, 2 - TIN)
  1. ;
  1. ;Select output device
  1. W !
  1. I $G(RCAUTO)="" S RCAUTO="B" ; PRCA*4.5*349
  1. I $G(RCCLM)="" S RCCLM="A" ; PRCA*4.5*349
  1. I $G(RCPAY)="" S RCPAY="A" ; PRCA*4.5*349
  1. I $G(RCTYPE)="" S RCTYPE="A" ; PRCA*4.5*349
  1. I $G(RCWHICH)="" S RCWHICH=2 ; PRCA*4.5*349
  1. I RCDISP S %ZIS="QM" D ^%ZIS Q:POP
  1. ;Option to queue
  1. I 'RCDISP,$D(IO("Q")) D Q
  1. .N ZTDESC,ZTQUEUED,ZTRTN,ZTSAVE,ZTSK
  1. .S ZTRTN="REPORT^RCDPENR2"
  1. .S ZTDESC="EFT/ERA Trending Report"
  1. .S ZTSAVE("RC*")=""
  1. .S ZTSAVE("^TMP(""RCDPEU1"",$J,")=""
  1. .D ^%ZTLOAD
  1. .I $D(ZTSK) W !!,"Task number "_ZTSK_" has been queued."
  1. .E W !!,"Unable to queue this job."
  1. .K ZTSK,IO("Q") D HOME^%ZIS
  1. ;
  1. ;Compile and Print Report
  1. D REPORT
  1. Q
  1. ;
  1. REPORT ; Trace the ERA file for the given date range
  1. ;
  1. N RCPYRS,RCINS,RCDATA,RCDTLDT,RCDTLIEN,RCIEN,RCEOB,RCBILLNO,RCBATCH,RCPHARM,RCPYALL,RCTINALL
  1. ;
  1. ;Note: RCPYALL an RCTINALL are used in tag HEADER to determine header output.
  1. ;
  1. ; Clear temp arrays
  1. K ^TMP("RCDPEADP",$J),^TMP("RCDPENR2",$J)
  1. ;
  1. ; Compile list of divisions
  1. D DIV^RCDPENR4(.RCDIV)
  1. ;
  1. ; Gather raw data
  1. ; PRCA*4.5*349 - Add Closed Claims filter
  1. D GETEFT^RCDPENR3(RCBGDT,RCENDDT,RCRATE,RCCLM)
  1. D GETERA^RCDPENR4(RCBGDT,RCENDDT,RCRATE,RCCLM)
  1. ;
  1. ;Check for data captures
  1. I '$D(^TMP("RCDPENR2",$J,"MAIN")) D Q
  1. . W !!,"There was no data available for the requested report. Please try again."
  1. ;
  1. ;Generate the statistics if any data captured
  1. D COMPILE^RCDPENR3
  1. ;
  1. ; Print out the results
  1. D PRINT(RCRPT)
  1. ;
  1. ;Clean up temp array afterwards
  1. K ^TMP("RCDPENR2",$J)
  1. K ^TMP("RCDPEU1",$J)
  1. Q
  1. ;
  1. ;Print the results.
  1. PRINT(RCSUMFLG) ;Print the results
  1. ;
  1. ; Temp Array format
  1. ; ^TMP("RCDPENR1",$J,"TOT")=# Medical 835's ^ # Pharmacy 835's ^
  1. N RCSTOP,RCPAGE,RCLINE,RCRUNDT,RCRPIEN,RCSUBJ,RCXMZ,SECTION
  1. ;
  1. ;set separator print line.
  1. S RCLINE="",$P(RCLINE,"-",IOM)=""
  1. S SECTION=RCSUMFLG
  1. ;
  1. ; Init the stop flag, page count
  1. S RCSTOP=0,RCPAGE=0
  1. ;
  1. ; Set the Run date for the report
  1. S RCRUNDT=$$FMTE^XLFDT($$NOW^XLFDT,2)
  1. ;
  1. ; Open the device
  1. I RCDISP U IO
  1. ;
  1. I 'RCDISP D Q:'RCRPIEN
  1. . S RCRPIEN=$$INITARCH^RCDPENR1("EFT/ERA TRENDING")
  1. ;
  1. ; Display Header
  1. D HEADER
  1. ;
  1. ; Display the Main Level report
  1. I RCSUMFLG="M" D
  1. . S RCSTOP=$$MAIN()
  1. Q:RCSTOP
  1. ;
  1. S SECTION="S"
  1. I +$G(RCEXCEL)=0,RCSUMFLG="M" D
  1. . D ASK^RCDPEADP(.RCSTOP,0)
  1. . Q:RCSTOP
  1. . D HEADER
  1. I RCSTOP Q
  1. ;
  1. ; Display the Payer/TIN summary information
  1. I RCSUMFLG="S" S RCSTOP=$$SUMMARY()
  1. Q:RCSTOP
  1. ;
  1. ; Display the grand total at the end
  1. S SECTION="G"
  1. S RCSTOP=$$GRAND()
  1. Q:RCSTOP
  1. ;
  1. ; If not displaying to screen, send
  1. I 'RCDISP D
  1. . S RCSUBJ="ERA/EFT TRENDING REPORT"
  1. . S RCXMZ=$$XM^RCDPENRU(RCRPIEN,RCBGDT,RCENDDT,RCSUBJ)
  1. ;
  1. ;Report finished
  1. I $Y>(IOSL-4),RCDISP D ASK^RCDPEADP(.RCSTOP,0) Q:RCSTOP D HEADER
  1. I RCDISP,'$G(RCEXCEL) W !,$$ENDORPRT^RCDPEARL
  1. W !
  1. ;
  1. ;Close device
  1. I '$D(ZTQUEUED) D ^%ZISC
  1. I $D(ZTQUEUED) S ZTREQ="@"
  1. Q
  1. ;
  1. ;
  1. ; Undeclared Parameters - RCDISP and RCRPIEN
  1. ;
  1. N RCAUTOT,RCDIVTXT,RCPYRTXT,RCSTR,RCTYPTXT,RCCLMTXT
  1. ;
  1. S RCDIVTXT=$$DIVTXT^RCDPENR1()
  1. S RCPYRTXT=$S(RCPAY="S":"SELECTED",RCPAY="R":"RANGE",1:"ALL")_" "
  1. S RCPYRTXT=RCPYRTXT_$S(RCWHICH=2:"TINS",1:"PAYERS")
  1. S RCTYPTXT=$S('+$G(RCEXCEL):"MEDICAL/PHARMACY/TRICARE/CHAMPVA: ",1:"")
  1. S RCTYPTXT=RCTYPTXT_$S(RCTYPE="M":"MEDICAL",RCTYPE="P":"PHARMACY",RCTYPE="T":"TRICARE",RCTYPE="C":"CHAMPVA",1:"ALL") ;PRCA*4.5*432 Add CHAMPVA
  1. S RCAUTOT="MANUAL/AUTOPOST: "_$S(RCAUTO="N":"MANUAL",RCAUTO="A":"AUTOPOST",1:"BOTH")
  1. S RCCLMTXT="Claims: "_$S(RCCLM="C":"CLOSED",1:"ALL") ; PRCA*4.5*349
  1. ;
  1. S RCPAGE=RCPAGE+1
  1. I '+RCDISP D Q
  1. . S RCSTR="EFT/ERA TRENDING REPORT^PAGE "_$J(RCPAGE,5)
  1. . D SAVEDATA^RCDPENR1(RCSTR,RCRPIEN)
  1. . S RCSTR="^"_RCDIVTXT_"^"_RCPYRTXT_"^"_RCTYPTXT
  1. . D SAVEDATA^RCDPENR1(RCSTR,RCRPIEN)
  1. . S RCSTR="^"_"DATE RANGE: "_$$FMTE^XLFDT(RCBGDT,2)_" - "_$$FMTE^XLFDT(RCENDDT,2)_"^"_"RUN DATE: "_RCRUNDT
  1. . D SAVEDATA^RCDPENR1(RCSTR,RCRPIEN)
  1. . D SAVEDATA^RCDPENR1(RCLINE,RCRPIEN)
  1. W @IOF,"EFT/ERA TRENDING REPORT"
  1. I '$G(RCEXCEL) D ;
  1. . W ?122,"PAGE ",$J(RCPAGE,5),!
  1. . W " "_$E(RCDIVTXT,1,23),?25,$E(RCPYRTXT,1,20),?46,$E(RCTYPTXT,1,43) ;PRCA*4.5*432 35 -> 43
  1. . W ?90,RCAUTOT,?118,RCCLMTXT,! ;PRCA*4.5*432 80 -> 90, 108 -> 118
  1. . W ?5,"DATE RANGE: ",$$FMTE^XLFDT(RCBGDT,2)," - ",$$FMTE^XLFDT(RCENDDT,2)
  1. . W ?51,"RUN DATE: ",RCRUNDT,!
  1. . W RCLINE,!
  1. I +$G(RCEXCEL) D
  1. . W "^PAGE ",$J(RCPAGE,5)
  1. . W "^",RCDIVTXT,"^",RCPYRTXT,"^",RCTYPTXT
  1. . W "^","DATE RANGE: ",$$FMTE^XLFDT(RCBGDT,2)," - ",$$FMTE^XLFDT(RCENDDT,2)
  1. . W "^","RUN DATE: ",RCRUNDT
  1. . W "^",RCAUTOT,"^",RCCLMTXT,!
  1. ;
  1. ; Re-display the column headers
  1. I '$G(RCEXCEL),(SECTION="M") D COLHEAD
  1. I $G(RCEXCEL),(RCPAGE=1) D COLHEAD
  1. Q
  1. ;
  1. ;Print the Detailed portion of the report
  1. MAIN() ;
  1. ;
  1. N RCERATYP,RCDATA,RCERATXT,RCSTRING,RCEFTTXT,RCEFT,RCERA,RCINSTIN,RCCLAIM,RCBILL
  1. N RCAMTBL,RCPAID,RCBILLDT,RCERADT,RCEFTDT,RCPOSTDT,RCTRACE,RCATPST,RCIDX,RCAMTPD
  1. N RCETRAN,RCERA,RCEOB,RCEFTNO,RCBEDY,RCEEDY,RCEPDY,RCBPDY,RCMETHOD,RCTOTDY,RCTMP,RCSTOP,RCIDX
  1. ;
  1. ; Print ERA/EFT combinations for each Insurance Company/Tin combination
  1. S RCINSTIN="",RCSTOP=0
  1. F S RCINSTIN=$O(^TMP("RCDPENR2",$J,"MAIN",RCINSTIN)) Q:RCINSTIN="" D Q:RCSTOP
  1. . S RCMETHOD=""
  1. . F S RCMETHOD=$O(^TMP("RCDPENR2",$J,"MAIN",RCINSTIN,RCMETHOD)) Q:RCMETHOD="" D Q:RCSTOP
  1. . . I (RCAUTO="A"&(RCMETHOD="MANUAL"))!(RCAUTO="N"&(RCMETHOD="AUTOPOST")) Q ; PRCA*4.5*349
  1. . . S RCSTOP=$$PRINTINS(RCINSTIN) ; PRCA*4.5*349 add "." to this and every subsequent line
  1. . . Q:RCSTOP
  1. . . F I=1:1:3 D Q:RCSTOP
  1. . . . I RCMETHOD="AUTOPOST",I>1 Q ; Only EFT/ERA can be auto-posted - PRCA*4.5*349
  1. . . . S RCERATYP=$S(I=1:"EFT/ERA",I=2:"PAPER CHECK/ERA",1:"EFT/PAPER EOB")
  1. . . . S RCEFTTXT=$P(RCERATYP,"/")
  1. . . . S RCERATXT=$P(RCERATYP,"/",2)
  1. . . . S RCEFT=$S(RCEFTTXT="EFT":"AN EFT",1:"A PAPER CHECK")
  1. . . . S RCSTRING=RCERATXT_" MATCHED TO "_RCEFT_" - "_RCMETHOD ; PRCA*4.5*349
  1. . . . S RCSTOP=$$PRINTHDR(RCSTRING)
  1. . . . Q:RCSTOP
  1. . . . I '$G(RCEXCEL),$O(^TMP("RCDPENR2",$J,"MAIN",RCINSTIN,RCMETHOD,I,""))="" D ; PRCA*4.5*349
  1. . . . . W "No data captured for this section during the specified time period.",! ; PRCA*4.5*349
  1. . . . S RCCLAIM=""
  1. . . . F S RCCLAIM=$O(^TMP("RCDPENR2",$J,"MAIN",RCINSTIN,RCMETHOD,I,RCCLAIM)) Q:RCCLAIM="" D Q:RCSTOP
  1. . . . . I $Y>(IOSL-5) D ASK^RCDPEADP(.RCSTOP,0) Q:RCSTOP D HEADER
  1. . . . . S RCDATA=$G(^TMP("RCDPENR2",$J,"MAIN",RCINSTIN,RCMETHOD,I,RCCLAIM))
  1. . . . . I RCDATA="" D Q
  1. . . . . . W !,"No data captured for this section during the specified time period.",!
  1. . . . . ;
  1. . . . . ;Init display values for the days
  1. . . . . S (RCBEDY,RCEEDY,RCEPDY,RCBPDY)=""
  1. . . . . S RCBILL=$$GET1^DIQ(399,+RCCLAIM_",",".01","E")
  1. . . . . I $P(RCDATA,U,9),$P(RCDATA,U,8) S RCBEDY=$$FMTH^XLFDT($P(RCDATA,U,9),1)-$$FMTH^XLFDT($P(RCDATA,U,8),1)
  1. . . . . I $P(RCDATA,U,10),$P(RCDATA,U,9) S RCEEDY=$$FMTH^XLFDT($P(RCDATA,U,10),1)-$$FMTH^XLFDT($P(RCDATA,U,9),1)
  1. . . . . S RCIDX=$S($$FMTH^XLFDT($P(RCDATA,U,10),1)>$$FMTH^XLFDT($P(RCDATA,U,10),1):10,1:9) ; Find the latest date between ERA and EFT
  1. . . . . I $P(RCDATA,U,11),$P(RCDATA,U,RCIDX) S RCEPDY=$$FMTH^XLFDT($P(RCDATA,U,11),1)-$$FMTH^XLFDT($P(RCDATA,U,RCIDX),1) ; Use latest date to determ days btw ERA/EFT and Posting
  1. . . . . I $P(RCDATA,U,11),$P(RCDATA,U,8) S RCBPDY=$$FMTH^XLFDT($P(RCDATA,U,11),1)-$$FMTH^XLFDT($P(RCDATA,U,8),1)
  1. . . . . I RCEXCEL D
  1. . . . . . S RCTMP=RCBILL_"^"_$$FMTE^XLFDT($P(RCDATA,U,5),2)_"^"_$P(RCDATA,U,6)_"^"_$P(RCDATA,U,7)_"^"_$$FMTE^XLFDT($P(RCDATA,U,8),2)
  1. . . . . . S RCTMP=RCTMP_"^"_$$FMTE^XLFDT($P(RCDATA,U,9),2)_"^"_$$FMTE^XLFDT($P(RCDATA,U,10),2)_"^"_$$FMTE^XLFDT($P(RCDATA,U,11),2)_"^"_$P(RCDATA,U,12)_"^"_$P(RCDATA,U,13)
  1. . . . . . S RCTMP=RCTMP_"^"_$P(RCDATA,U,14)_"^"_$P(RCDATA,U,2)_"^"_$P(RCDATA,U,15)_"^"_$P(RCDATA,U,3)_"^"
  1. . . . . . S RCTMP=RCTMP_RCBEDY_"^"_RCEEDY_"^"_RCEPDY_"^"_RCBPDY
  1. . . . . . W RCTMP,!
  1. . . . . I 'RCEXCEL D
  1. . . . . . W RCBILL,?21,$$FMTE^XLFDT($P(RCDATA,U,5),2),?30,$J($P(RCDATA,U,6),10,2),?41,$J($P(RCDATA,U,7),10,2),?52,$$FMTE^XLFDT($P(RCDATA,U,8),2)
  1. . . . . . W ?61,$$FMTE^XLFDT($P(RCDATA,U,9),2),?75,$$FMTE^XLFDT($P(RCDATA,U,10),2),?89,$$FMTE^XLFDT($P(RCDATA,U,11),2),?98,$P(RCDATA,U,12),?109,$P(RCDATA,U,13),!
  1. . . . . . W ?5,$P(RCDATA,U,14),?17,$P(RCDATA,U,2),?28,$J($P(RCDATA,U,15),6),?39,$P(RCDATA,U,3),?50,$J(RCBEDY,8)
  1. . . . . . W ?67,$J(RCEEDY,8),?83,$J(RCEPDY,8),?106,$J(RCBPDY,8),!
  1. . . . I '$G(RCEXCEL) W RCLINE,!
  1. ;
  1. I RCSTOP Q RCSTOP
  1. ; Section break - ask user if they wish to continue...
  1. ;
  1. Q RCSTOP
  1. ;
  1. SUMMARY() ;Print the Payer Summary portion of the report
  1. ;
  1. I $G(RCEXCEL) Q 0
  1. N RCSTOP ; PRCA*4.5*349
  1. ;
  1. ; Print ERA/EFT combinations for each Insurance Company/Tin combination
  1. S RCINSTIN="",RCSTOP=0
  1. F S RCINSTIN=$O(^TMP("RCDPENR2",$J,"PAYER",RCINSTIN)) Q:RCINSTIN="" D Q:RCSTOP
  1. . D PAYSUM^RCDPENR4(RCINSTIN)
  1. Q RCSTOP
  1. ;
  1. ;Total for all payers in report
  1. GRAND() ;
  1. I $G(RCEXCEL) Q 0
  1. ;
  1. N I,J,RCDATA,RCEFT,RCERA,RCERAFLG,RCEFTTXT,RCERATXT,RCERATYP,RCSTRING,RCSTOP ; PRCA*4.5*349
  1. ;
  1. S RCSTOP=0
  1. ; Print the Grand Total Banner
  1. I $Y>(IOSL-7),RCDISP D ASK^RCDPEADP(.RCSTOP,0) Q:RCSTOP D HEADER
  1. I RCSUMFLG'="G",RCDISP D
  1. . W !,"GRAND TOTALS ALL PAYERS",!!
  1. . W RCLINE,!
  1. ;
  1. ; Print all 3 EOB/Payment combinations
  1. F J="AUTOPOST","MANUAL","TOTAL" Q:RCSTOP F I=1:1:3 D Q:RCSTOP ; PRCA*4.5*349
  1. . I J="AUTOPOST",I>1 Q ; Only EFT/ERA can be auto-posted - PRCA*4.5*349
  1. . I (RCAUTO="A"&(J="MANUAL"))!(RCAUTO="N"&(J="AUTOPOST"))!(RCAUTO'="B"&(J="TOTAL")) Q ; PRCA*4.5*349
  1. . S RCDATA=$G(^TMP("RCDPENR2",$J,"GTOT",J,I)) ; PRCA*4.5*349
  1. . S RCERATYP=$S(I=1:"EFT/ERA",I=2:"PAPER CHECK/ERA",1:"EFT/PAPER EOB")
  1. . S RCERAFLG=0
  1. . S RCEFTTXT=$P(RCERATYP,"/")
  1. . S RCERATXT=$P(RCERATYP,"/",2)
  1. . S RCEFT=$S(RCEFTTXT="EFT":"AN EFT",1:"A PAPER CHECK")
  1. . S RCSTRING=RCERATXT_" MATCHED TO "_RCEFT_" - "_J ; PRCA*4.5*349
  1. . I (RCEFTTXT="EFT"),(RCERATXT["ERA") S RCERAFLG=1
  1. . D PRINTGT^RCDPENR3(RCSTRING,RCDATA,RCDISP,RCERAFLG,RCEXCEL)
  1. ;
  1. Q RCSTOP
  1. ;
  1. PRINTINS(RCINS) ; Print the insurance header line
  1. ; Input: RCINS - Payer Name/TIN to be displayed
  1. ; RCLINE - line of dashes used for separation
  1. ; Returns 1 - User quit out of report, 0 otherwise
  1. I $G(RCEXCEL) Q 0
  1. N RCSTOP,XX,YY,ZZ
  1. ;
  1. S RCSTOP=0
  1. I $Y>(IOSL-7) D
  1. . D ASK^RCDPEADP(.RCSTOP,0)
  1. . Q:RCSTOP
  1. . D HEADER
  1. I RCSTOP Q RCSTOP
  1. W "PAYER NAME/TIN",!
  1. W " ",$$PAYTIN^RCDPRU2(RCINS,78),!
  1. W RCLINE,!
  1. Q RCSTOP
  1. ;
  1. ;Print the Payment Method header lines
  1. PRINTHDR(RCTITLE) ;
  1. ; Undeclared parameters
  1. ; RCLINE - line of "-" for report formating
  1. ; RCSUMFLG - Type of report (M=Main,S=Summary,G=Grand Total)
  1. ; RCDISP - Is the report being email (0) or Printed (1)
  1. ; RCRPIEN - IEN to store the report if emailing
  1. ;
  1. I $G(RCEXCEL) Q 0
  1. N RCBORDER,RCSTOP,RCSTR
  1. ;
  1. S RCBORDER="",$P(RCBORDER,"*",20)="",RCSTOP=0
  1. I $Y>(IOSL-7),RCDISP D
  1. . D ASK^RCDPEADP(.RCSTOP,0)
  1. . Q:RCSTOP
  1. . D HEADER
  1. I RCSTOP Q RCSTOP
  1. ;
  1. ; Display report type being displayed
  1. I 'RCDISP D Q
  1. . S RCSTR=RCBORDER_" "_RCTITLE_" "_RCBORDER
  1. . D SAVEDATA^RCDPENR1(RCSTR,RCRPIEN)
  1. . D SAVEDATA^RCDPENR1(RCLINE,RCRPIEN)
  1. I RCDISP D
  1. . W RCBORDER," ",RCTITLE," ",RCBORDER,!
  1. . W RCLINE,!
  1. ;
  1. Q RCSTOP
  1. ;
  1. GETDIV(RCDIV) ; Retrieve the Division
  1. ; PRCA*4.5*349 - Moved to RCDPENR4 for size
  1. Q $$GETDIV^RCDPENR4(.RCDIV)
  1. ;
  1. ;Retrieve the Report Type
  1. GETRATE() ;
  1. ;
  1. ;RCMNFLG - Ask to print the Main report (Detailed) report. 0=No, 1=Yes
  1. N X,Y,DIC,DTOUT,DUOUT
  1. ;
  1. S DIC="^DGCR(399.3,",DIC(0)="AEQMN"
  1. S DIC("S")="I $P(^(0),U,7)=""i"""
  1. D ^DIC K DIC
  1. Q +Y
  1. ;
  1. ;Retrieve the Report Type
  1. GETRPT(RCMNFLG) ;
  1. ;
  1. ;RCMNFLG - Ask to print the Main report (Detailed) report. 0=No, 1=Yes
  1. N X,Y,DTOUT,DUOUT,DIR,DIROUT,DIRUT
  1. ;
  1. ; Prompt with Main (EFT/ERA Trending report (from RCDPENR2))
  1. I $G(RCMNFLG) D
  1. . S DIR("A")="Print (M)AIN Report, (S)UMMARY by Payer or (G)RAND TOTALS ONLY: "
  1. . S DIR(0)="SA^M:MAIN;S:SUMMARY;G:GRAND TOTAL"
  1. ;
  1. ; Prompt w/o main (Volume Statistics report (from RCDPENR1))
  1. I '$G(RCMNFLG) D
  1. . S DIR("A")="(S)UMMARY by Payer or (G)RAND TOTALS ONLY: "
  1. . S DIR(0)="SA^S:SUMMARY;G:GRAND TOTAL"
  1. ;
  1. S DIR("?")="Select the type of report to Generate."
  1. S DIR("B")="G"
  1. D ^DIR K DIR
  1. I $D(DTOUT)!$D(DUOUT)!(Y="") Q -1
  1. Q Y
  1. ;
  1. ;
  1. GETSDATE() ;
  1. N X,Y,DTOUT,DUOUT,DIR,DIROUT,DIRUT,RCTODAY
  1. ;
  1. ;Assume the start date is 45 days prior to the end date
  1. ;
  1. ;Get the start date.
  1. S RCTODAY=$P($$NOW^XLFDT,".")
  1. S DIR("?")="ENTER THE EARLIEST DATE TO INCLUDE ON THE REPORT"
  1. S DIR(0)="DA^:"_RCTODAY_":APE",DIR("A")="Start with DATE: "
  1. D ^DIR K DIR
  1. I $D(DTOUT)!$D(DUOUT)!(Y="") Q -1
  1. Q Y
  1. ;
  1. ; Retrieve the end date of the report from the user.
  1. GETEDATE(RCBDATE) ;
  1. ; RCBDATE - Begin date of the report. Used as a lower bound
  1. ;
  1. N X,Y,DTOUT,DUOUT,DIR,DIROUT,DIRUT,RCTODAY
  1. ;
  1. ; Get the End date first. Assume the end date is today.
  1. S RCTODAY=$P($$NOW^XLFDT,".")
  1. S DIR("?")="ENTER THE LATEST DATE TO INCLUDE ON THE REPORT"
  1. S DIR("B")=$$FMTE^XLFDT(RCTODAY,2)
  1. S DIR(0)="DAO^"_$G(RCBDATE)_":"_RCTODAY_":APE",DIR("A")="Go to DATE: " D ^DIR K DIR
  1. I $D(DTOUT)!$D(DUOUT)!(Y="") Q -1
  1. Q Y
  1. ;
  1. GETARPYR(RCTIN,RCPAY) ; Retrieve the Payer IEN from the RCDPE AUTO-PAY EXCLUSION file (#344.6)
  1. ; Input: RCTIN - Payer ID
  1. ; RCPAY - Payer Name (optional)
  1. ; Return: Payer IEN (#344.6)
  1. ;
  1. N RCIEN,QUIT,ZZ
  1. S RCPAY=$G(RCPAY)
  1. ;
  1. ; Send the IEN entry in the file if the Payer is in it. Otherwise, send 0.
  1. S RCIEN=0
  1. ;
  1. ; PRCA*4.5*321 - Add optional payer name to search to narrow down payer
  1. I RCPAY'="" D ;
  1. . S ZZ="",QUIT=0
  1. . F S ZZ=$O(^RCY(344.6,"C",RCTIN_" ",ZZ)) Q:ZZ="" D I RCIEN Q ;
  1. . . I $$GET1^DIQ(344.6,ZZ_",",.01,"E")=RCPAY S RCIEN=ZZ
  1. ;
  1. I 'RCIEN D ;
  1. . S RCIEN=$O(^RCY(344.6,"C",RCTIN_" ",""))
  1. ;
  1. Q +RCIEN
  1. ;
  1. ; Determine if the payer in the ERA or EFT should be included in the report.
  1. INSCHK(RCINS) ;
  1. ;
  1. ;Send yes if all payers are being reported on.
  1. Q:$D(^TMP("RCDPENR2",$J,"INS","A")) 1
  1. ;
  1. ; Send yes if Payer is in the list to report on
  1. Q:$D(^TMP("RCDPENR2",$J,"INS",RCINS)) 1
  1. ;
  1. ; Otherwise, send no
  1. Q 0
  1. ;
  1. DIV(RCDIV) ; build the list of divisions to report on.
  1. ; PRCA*4.5*349 - Moved to RCDPENR4 for size
  1. D DIV^RCDPENR4(.RCDIV)
  1. Q
  1. ;Determine the text to display for the Payer TINs
  1. TINTXT() ;
  1. ;
  1. N RCTIN,RCTXT,RCTNTXT
  1. ;
  1. Q:$D(^TMP("RCDPEADP",$J,"TIN","A")) "ALL PAYER TINS"
  1. ;
  1. ;Build list of Payer Tins
  1. ;
  1. S RCTIN="",RCTXT=""
  1. F S RCTIN=$O(^TMP("RCDPEADP",$J,"TIN",RCTIN)) Q:RCTIN="" D
  1. . S RCTNTXT=$$GET1^DIQ(344.6,+RCTIN_",",".02","I")
  1. . S RCTXT=RCTXT_RCTNTXT_","
  1. ;
  1. ; Remove comma at the end.
  1. S RCTXT=$E(RCTXT,1,$L(RCTXT)-1)
  1. ;
  1. ; Display the first 35 characters of the division text list,
  1. Q $E(RCTXT,1,35)
  1. ;
  1. COLHEAD ;
  1. ;
  1. N RCTMP
  1. ;
  1. ;Display the column headers
  1. I RCEXCEL D
  1. . S RCTMP="CLAIM#^DOS^AMT BILLED^AMT PAID^BILLED^ERA/EOB REC'D^EFT/PMT REC'D^POSTED^TRACE #^AUTOPOST/MANUAL"
  1. . S RCTMP=RCTMP_"^ETRANS TYPE^ERA#^#EEOBS^EFT#^#DAYS:(BILL/ERA)^#DAYS:(ERA/EFT)^#DAYS:(ERA+EFT/POSTED)^"
  1. . S RCTMP=RCTMP_"TOTAL #DAYS(BILL/POSTED)"
  1. . W RCTMP,!
  1. I 'RCEXCEL D
  1. . W "CLAIM#",?21,"DOS",?30,"AMT BILLED",?41,"AMT PAID",?52,"BILLED",?61,"ERA/EOB REC'D",?75,"EFT/PMT REC'D",?89,"POSTED",?98,"TRACE #",?109,"AUTOPOST/MANUAL",!
  1. . W ?5,"ETRANS TYPE",?17,"ERA#",?28,"#EEOBS",?39,"EFT#",?50,"#DAYS:(BILL/ERA)",?67,"#DAYS:(ERA/EFT)",?83,"#DAYS:(ERA+EFT/POSTED)",?106,"TOTAL #DAYS(BILL/POSTED)",!
  1. . W RCLINE,!
  1. Q
  1. ;
  1. ;Entry point for reprinting the header.
  1. REPRINT(RCIEN) ;
  1. ;
  1. N I,RCDATA,J,RCSTOP,PAGE
  1. ;
  1. ;
  1. S PAGE=1
  1. D RPTHDR(RCIEN,PAGE)
  1. ;
  1. S I=4,RCSTOP=0 ;loop through the main body
  1. F S I=$O(^RCDM(344.91,RCIEN,1,I)) Q:'I D Q:RCSTOP
  1. . S RCDATA=$G(^RCDM(344.91,RCIEN,1,I,0))
  1. . ;
  1. . I $Y>(IOSL-4) D Q:RCSTOP
  1. . . D ASK^RCDPEADP(.RCSTOP,0)
  1. . . Q:RCSTOP
  1. . . S PAGE=PAGE+1
  1. . . D RPTHDR(RCIEN,PAGE)
  1. . ; main body of report
  1. . W $P(RCDATA,U)
  1. . I RCDATA["^" W ?65,$P(RCDATA,U,2)
  1. . W ! ;Add <CRLF>
  1. Q
  1. ;
  1. RPTHDR(RCIEN,PAGE) ; Reprint the header
  1. ;
  1. N I,RCDATA
  1. ;
  1. W @IOF ; Create new page
  1. ;
  1. F I=1:1:4 D
  1. . S RCDATA=$G(^RCDM(344.91,RCIEN,1,I,0))
  1. . ; header lines formatting
  1. . I I=1 W ?15,$P(RCDATA,U),?70,PAGE,! Q
  1. . I I=2 W ?5,$P(RCDATA,U,2),! Q
  1. . I I=3!(I=4) W ?5,$P(RCDATA,U,2),?45,$P(RCDATA,U,3),! Q
  1. Q