RCDPEAR1 ;ALB/TMK/PJH - ERA Unmatched Aging Report (file #344.4) ;Dec 20, 2014@18:41:35
 ;;4.5;Accounts Receivable;**173,269,276,284,293,298,321,326,371,409,432**;Mar 20, 1995;Build 16
 ;Per VA Directive 6402, this routine should not be modified.
 Q
 ;
 ; PRCA*4.5*298 routine completely refactored
EN1 ; entry point - ERA Unmatched Aging Report [RCDPE ERA AGING REPORT]
 ; data from ELECTRONIC REMITTANCE ADVICE file (#344.4)
 N POP,RCDADJ,RCDISPTY,RCDT,RCDTRNG,RCHDR,RCJOB,RCLNCNT,RCLSTMGR,RCOUT      ;PRCA*4.5*409 Added POP,RCADJ
 N RCPAR,RCPAY,RCPGNUM,RCPYRLST,RCSTOP,RCTMPND,RCTYPE,RCXCLUDE,RCZROBAL,VAUTD,XX,Y
 ;
 ; RCDADJ               - Display Adjustment/Code info flag     ;PRCA*4.5*409 Added line
 ; RCDISPTY             - Display type (Excel)
 ; RCDTRNG              - Selected date range
 ; RCDT("BEG")          - Start date, RCDT("END") - end date
 ; RCHDR                - Header array
 ; RCLSTMGR             - list manager flag
 ; RCDTRNG              - "1^start date^end date"
 ; RCXCLUDE("CHAMPVA")  - boolean, exclude CHAMPVA
 ; RCXCLUDE("TRICARE")  - boolean, exclude TriCare
 ; RCZROBAL             - Zero balance flag
 ; VAUTD                - Division information
 ; RCTYPE               - MEDICAL/PHARMACY/TRICARE/CHAMPVA/ALL = M/P/T/C/A
 ; RCPAY                - S=SELECTED, R=RANGE, A=ALL
 ;                        (Selected or range - payers stored in ^TMP(""RCDPEU1"",$J))
 ;
 K ^TMP($J,"RC TOTAL")                          ; Clear old totals
 W !,$$HDRNM
 D DIVISION^VAUTOMA                             ; Returns VAUTD
 I 'VAUTD&($D(VAUTD)'=11) D EN1Q Q
 S RCLSTMGR=""                                  ; Initial value, won't be asked if non-null
 S (RCXCLUDE("CHAMPVA"),RCXCLUDE("TRICARE"))=0  ; Default to false
 S RCDTRNG=$$DTRNG^RCDPEM4()
 I 'RCDTRNG D EN1Q Q
 S RCDT("BEG")=$P(RCDTRNG,U,2),RCDT("END")=$P(RCDTRNG,U,3)
 ;
 ; PRCA*4.5*326 - Ask to show Medical/Pharmacy Tricare CHAMPVA or All
 S RCTYPE=$$RTYPE^RCDPEU1("A")
 I RCTYPE=-1 D EN1Q Q
 ;
 S RCPAR("SELC")=$$PAYRNG^RCDPEU1()             ; PRCA*4.5*326 - Selected or Range of Payers
 I RCPAR("SELC")=-1 D EN1Q Q                    ; PRCA*4.5*326 '^' or timeout
 S RCPAY=RCPAR("SELC")
 ;
 I RCPAR("SELC")'="A" D  Q:XX=-1                ; PRCA*4.5*326 - Since we don't want all payers 
 . S RCPAR("TYPE")=RCTYPE                       ;                prompt for payers we do want
 . S RCPAR("DICA")="Select Insurance Company NAME: "
 . S XX=$$SELPAY^RCDPEU1(.RCPAR)
 ;
 S RCZROBAL=$$ZROBAL()                          ; Get Zero Balance Filter
 I RCZROBAL<0 D EN1Q Q
 ;
 S RCDADJ=$$DADJCDE()                           ; Get Adjustment/Code Filter ;PRCA*4.5*409 Added line
 I RCDADJ<0 D EN1Q Q
 ;
 ; Display type, ask for Excel format
 S RCDISPTY=$$DISPTY^RCDPEM3()
 I RCDISPTY=-1 D EN1Q Q
 ;
 ; Display device info about Excel format, set ListMan flag to prevent question
 I RCDISPTY S RCLSTMGR="^" D INFO^RCDPEM6
 I $D(DUOUT)!$D(DTOUT) D EN1Q Q
 S RCJOB=$J                                     ; Needed in RPTOUT
 ;
 ; If not output to Excel ask for ListMan display, exit if timeout or '^' - PRCA*4.5*298
 I RCLSTMGR="" S RCLSTMGR=$$ASKLM^RCDPEARL G:RCLSTMGR<0 EN1Q
 ;
 ; Display in ListMan format and exit on return
 I RCLSTMGR D  Q
 . S RCTMPND=$T(+0)_"^ERA UNMATCHED AGING"  K ^TMP($J,RCTMPND)  ; clean any residue
 . D RPTOUT
 . N H,L,HDR S L=0
 . S HDR("TITLE")=$$HDRNM
 . F H=1:1:7 I $D(RCHDR(H)) S L=H,HDR(H)=RCHDR(H)  ; take first 7 lines of report header
 . I $O(RCHDR(L)) D  ; any remaining header lines at top of report
 . . N N S N=0,H=L F  S H=$O(RCHDR(H)) Q:'H  S N=N+.001,^TMP($J,RCTMPND,N)=RCHDR(H)
 . ;
 . ; invoke ListMan
 . D LMRPT^RCDPEARL(.HDR,$NA(^TMP($J,RCTMPND))) ; generate ListMan display
 . D EN1Q
 ;
 ; Ask device
 N %ZIS S %ZIS="QM"
 D ^%ZIS
 I POP D EN1Q Q
 I $D(IO("Q")) D  Q
 . N ZTDESC,ZTQUEUED,ZTRTN,ZTSAVE,ZTSK,ZTSTOP
 . S ZTRTN="RPTOUT^RCDPEAR1",ZTDESC="AR - EDI LOCKBOX ERA AGING REPORT"
 . S ZTSAVE("RC*")="",ZTSAVE("VAUTD")=""
 . S ZTSAVE("^TMP(""RCDPEU1"",$J,")="" ; PRCA*4.5*326
 . D ^%ZTLOAD
 . W !!,$S($G(ZTSK):"Task number "_ZTSK_" has been queued.",1:"Unable to queue this task.")
 . K ZTSK,IO("Q")
 . D HOME^%ZIS
 . D EN1Q
 ;
 U IO
 S RCTMPND=""
 D RPTOUT
 ;
EN1Q ; exit and clean up
 K ^TMP("RCSELPAY",$J),^TMP("RCPAYER",$J),^TMP("RCDPEU1",$J) ; PRCA*4.5*326
 I '$G(RCLSTMGR) D ^%ZISC
 Q
 ;
RPTOUT ; Entry point for listing report
 ; Input:   RCTMPND - Name of the subscript for ^TMP to use to return all lines
 ;                    (for bulletin).  If undefined or null, output is printed
 ; Returns: Global if RCTMPND not null: ^TMP($J,RCTMPND,line#)=line text
 N ERADT,J,LNECNT,PYMNTFRM,RC0,RCEDT,RCEXCEP,RCFLIEN,RCITM,RCNT,RCSF0,RCZ
 N STA,STNAM,STNUM,X,XX,Y,Z,Z0
 ; ERADT    - Date of entry
 ; LNECNT   - # of Lines displayed on the current page
 ; RCDADJ   - Display Adjustment/Code Filter        ;PRCA*4.5*409 Added line        
 ; RCNT     - Count of items
 ; RCFLIEN  - Entry number in file #344.4
 ; RCITM    - Entry in ^RCY(344.4,0) = ELECTRONIC REMITTANCE ADVICE^344.4I
 ; RCSF0    - Zero node of sub-file entry
 ;
 S LNECNT=0
 S RCTMPND=$G(RCTMPND)
 I RCTMPND'="" K ^TMP($J,RCTMPND)               ; Clear residual data
 K ^TMP($J,"RCERA_AGED"),^TMP($J,"RCERA_ADJ")
 S RCFLIEN=0,RCNT=0
 F  S RCFLIEN=$O(^RCY(344.4,"AMATCH",0,RCFLIEN)) Q:'RCFLIEN  D
 . K RCITM
 . M RCITM=^RCY(344.4,RCFLIEN)                  ; Grab entire entry
 . Q:$P($G(RCITM(6)),U)                         ; Who removed the ERA - PRCA*4.5*293
 . S ERADT=+$P($G(RCITM(0)),U,7)                ; (#.07) FILE DATE/TIME [7D]
 . Q:'ERADT                                     ; No date, don't include
 . ;
 . ; Check date range
 . Q:(RCDT("BEG")>ERADT\1)!(ERADT\1>RCDT("END"))
 . ;
 . ; Check Station/Division
 . ;I '$$CHKDIV^RCDPEDAR(RCFLIEN,1,.VAUTD) Q
 . I 'VAUTD D ERASTA^RCDPEM4(RCFLIEN,.STA,.STNUM,.STNAM) I '$D(VAUTD(STA)) Q
 . ;
 . I RCPAY'="A" D  Q:'XX
 . . S XX=$$ISSEL^RCDPEU1(344.4,RCFLIEN)        ; PRCA*4.5*326 Check if payer was selected
 . E  I RCTYPE'="A" D  Q:'XX                    ; If all of a give type of payer selected
 . . S XX=$$ISTYPE^RCDPEU1(344.4,RCFLIEN,RCTYPE)    ;  Check that payer matches type
 . ;
 . ; Check for Zero Bal
 . I 'RCZROBAL,'$P($G(RCITM(0)),U,5) Q          ; (#.05) TOTAL AMOUNT PAID [5N]
 . S ^TMP($J,"RCERA_AGED",$$FMDIFF^XLFDT(ERADT,DT),RCFLIEN)=0,RCNT=RCNT+1
 ;
 S ^TMP($J,"RC TOTAL","COUNT")=RCNT             ; Save counter
 ;
 ; Build header, initialize stop flag
 D:'RCLSTMGR HDRBLD
 S RCSTOP=0
 D:RCLSTMGR HDRLM
 ;
 ; Excel format, print and exit
 I RCDISPTY D EXCEL,^%ZISC,EXIT Q
 ;
 D  ;  Calculate total amount for ERA
 . N T S T=0  ; total
 . S RCZ=""
 . F  D  Q:RCZ=""
 . . S RCZ=$O(^TMP($J,"RCERA_AGED",RCZ))
 . . Q:RCZ=""
 . . S RCFLIEN=0
 . . F  S RCFLIEN=$O(^TMP($J,"RCERA_AGED",RCZ,RCFLIEN)) Q:'RCFLIEN  D
 . . . S RC0=$G(^RCY(344.4,RCFLIEN,0)),T=T+$P(RC0,U,5)
 . ;
 . S ^TMP($J,"RC TOTAL","AMOUNT")=T
 ;
 S RCLNCNT=0                                    ; Line counter
 D:'RCLSTMGR HDRLST^RCDPEARL(.RCSTOP,.RCHDR)    ; First header in report
 ;
 ; List totals
 S Y=" Total NUMBER Aged Electronic ERA messages found: "_$FN(^TMP($J,"RC TOTAL","COUNT"),",")
 D SL^RCDPEARL(Y,.RCLNCNT,RCTMPND) S LNECNT=LNECNT+1
 S Y=" Total AMOUNT Aged Electronic ERA messages found: $"_$FN(^TMP($J,"RC TOTAL","AMOUNT"),",",2)
 D SL^RCDPEARL(Y,.RCLNCNT,RCTMPND) S LNECNT=LNECNT+1
 ;
 ; If filters selected show total excluded
 F J="CHAMPVA","TRICARE" I $G(RCXCLUDE(J)) D
 . S Y=" "_J_" exclusion count: "_(+$G(^TMP($J,"RC TOTAL",J)))
 . D SL^RCDPEARL(Y,.RCLNCNT,RCTMPND) S LNECNT=LNECNT+1
 D SL^RCDPEARL(" "_$TR($J("",78)," ","="),.RCLNCNT,RCTMPND) S LNECNT=LNECNT+1  ; Row of equal signs
 ;
 S RCZ="" F  S RCZ=$O(^TMP($J,"RCERA_AGED",RCZ)) Q:RCZ=""  S RCFLIEN=0 F  S RCFLIEN=$O(^TMP($J,"RCERA_AGED",RCZ,RCFLIEN)) Q:'RCFLIEN  D  G:RCSTOP EXIT
 .I $D(ZTQUEUED),$$S^%ZTLOAD S (RCSTOP,ZTSTOP)=1 K ZTREQ I +$G(RCPGNUM) W:RCTMPND="" !!,"***TASK STOPPED BY USER***" Q
 .I RCPGNUM D SL^RCDPEARL(" ",.RCLNCNT,.RCTMPND) S LNECNT=LNECNT+1 ; On detail list, skip line
 .I 'RCLSTMGR,'RCPGNUM!(($Y+5)>IOSL) D HDRLST^RCDPEARL(.RCSTOP,.RCHDR) Q:RCSTOP
 .S RC0=$G(^RCY(344.4,RCFLIEN,0))
 .S RCEXCEP=$$XCEPT^RCDPEWLP(RCFLIEN)  ; PRCA*4.5*298  assignment of ERA exception flag (will either be "" or "x")
 .S Z=$$SETSTR^VALM1($J(RCEXCEP_-RCZ,4),"",1,5)  ; PRCA*4.5*298 display ERA exception flag
 .S Z=$$SETSTR^VALM1("  "_$P(RC0,U,2),Z,5,50)
 .D SL^RCDPEARL(Z,.RCLNCNT,RCTMPND) S LNECNT=LNECNT+1
 .S Z=$$SETSTR^VALM1($$PAYTIN^RCDPRU2($P(RC0,U,6)_"/"_$P(RC0,U,3),78),"",3,78) ; PRCA*4.5*321
 .D SL^RCDPEARL(Z,.RCLNCNT,RCTMPND) S LNECNT=LNECNT+1
 .S Z=$$SETSTR^VALM1($J("",16)_$S($P(RC0,U,7):$$FMTE^XLFDT($P(RC0,U,7)\1,2),1:""),"",1,25)
 .S Z=$$SETSTR^VALM1("  "_$J($P(RC0,U,5),15,2),Z,26,17)
 .;
 .;PRCA*4.5*409 Added if statement
 .I RCDADJ D
 ..S Z=$$SETSTR^VALM1("  "_+$P(RC0,U,11),Z,43,11)
 .;
 .;PRCA*4.5*409 Replaced 43 with $S(RCDADJ:54,1:43)
 .S Z=$$SETSTR^VALM1("  "_$P(RC0,U),Z_$S('$$HACERA^RCDPEU(RCFLIEN):"",1:" (HAC ERA)"),$S(RCDADJ:54,1:43),16) ; PRCA*4.5*321
 .;PRCA*4.5*371 Moved ERA Date column over from 70 to 59 below
 .;
 .;PRCA*4.5*409 Replaced 59 with $S(RCDADJ:70,1:59)
 .S Z=$$SETSTR^VALM1("  "_$$FMTE^XLFDT($P(RC0,U,4),2),Z,$S(RCDADJ:70,1:59),10)                 ; PRCA*4.5*321
 .D SL^RCDPEARL(Z,.RCLNCNT,RCTMPND) S LNECNT=LNECNT+1
 .Q:'RCDADJ                                     ;PRCA*4.5*409 Added line
 .;
 .;PRCA*4.5*409 Added call to new routine due to routine size limitations
 .D RPTOUT2^RCDPEAR4
 ;
 ; PRCA*4.5*298, put end-of-report into SL^RCDPEARL
 I 'RCSTOP D SL^RCDPEARL(" ",.RCLNCNT,RCTMPND),SL^RCDPEARL($$ENDORPRT^RCDPEARL,.RCLNCNT,RCTMPND)
 D EXIT
 Q
 ;
EXIT ; Exit the report
 ; PRCA*4.5*298, added ListMan check
 I '$D(ZTQUEUED),'RCLSTMGR D
 . I 'RCSTOP,RCPGNUM,RCTMPND="" D ASK^RCDPEARL(.RCSTOP)
 . D ^%ZISC
 ;
 S:$D(ZTQUEUED) ZTREQ="@"
 K ^TMP($J,"RCERA_AGED"),^TMP("RCSELPAY",$J),^TMP($J,"RC TOTAL"),^TMP("RCDPEU1",$J) ; PRCA*4.5*326
 Q
 ;
HDRBLD ; Create the report header
 ; Input:   RCADJ           - 1 - Display Adjustment/Code information, 0 otherwise ;PRCA*4.5*409 Added RCADJ
 ;          RCDISPTY        - 1 - Output to excel, 0 otherwise
 ;          RCDTRNG         - Date range selected
 ;          RCXCLUDE        - TRICARE /CHAMPVA flags
 ;          VAUTD           - Divisions to include in report (if listed in VAUTD array)
 ; Output:  RCHDR(0)        - Header text line count
 ;          RCHDR(1)        - Excel column data (only set If DISPTY=1)
 ;          RCHDR("XECUTE") - M code for page number
 ;          RCHDR("RUNDATE")- Date/time report generated, external format
 ;          RCPGNUM         - Page counter
 ;          RCSTOP          - Flag to exit
 ;
 N CHATRI,DIV,HCNT,XX,Y
 K RCHDR
 S RCHDR("RUNDATE")=$$NOW^RCDPEARL,RCPGNUM=0,RCSTOP=0
 I RCDISPTY D  Q  ; Excel format, xecute code is QUIT, null page number
 . S RCHDR(0)=1,RCHDR("XECUTE")="Q",RCPGNUM=""
 . S XX="Aged Days^Trace #^Payment From/ID^ERA Date^File Date^Amount Paid"
 . ;
 . ;PRCA*4.5*409 Replaced S XX=XX_"^ERA #" with If/Else below
 . I RCDADJ D
 . . S XX=XX_"^EEOB Cnt^ERA #^EEOB Detail"
 . E  D
 . . S XX=XX_"^ERA #"
 . S RCHDR(1)=XX
 ;
 S XX="N Y S RCPGNUM=RCPGNUM+1,Y=$$HDRNM^"
 S XX=XX_$T(+0)_",RCHDR(1)=$J("" "",80-$L(Y)\2)_Y"_"_""          Page: ""_RCPGNUM,LNECNT=RCHDR(0)"
 S RCHDR("XECUTE")=XX
 S HCNT=1
 S Y="RUN DATE: "_RCHDR("RUNDATE"),HCNT=HCNT+1
 S RCHDR(HCNT)=$J("",80-$L(Y)\2)_Y
 ;
 ; Divisions
 S Y="DIVISIONS: "
 I $D(VAUTD)=1 S Y=Y_"ALL",Y=$J("",80-$L(Y)\2)_Y,HCNT=HCNT+1,RCHDR(HCNT)=Y
 I $D(VAUTD)>1 D
 . N S,X S S=0
 . F  S S=$O(VAUTD(S)) Q:'S  D
 . . S X=VAUTD(S)_$S($O(VAUTD(S)):", ",1:"")
 . . I $L(X)+$L(Y)>80 D
 . . . S HCNT=HCNT+1,RCHDR(HCNT)=$J("",80-$L(Y)\2)_Y,Y=$J(" ",12)
 . . S Y=Y_X
 . ;
 . S:$TR(Y," ")]"" HCNT=HCNT+1,RCHDR(HCNT)=Y  ; any residual data
 ;
 ; Payers - PRCA*4.5*326
 S Y="PAYERS: "
 S Y=Y_$S(RCPAY="S":"SELECTED",RCPAY="R":"RANGE",1:"ALL")
 S Y=Y_$J("",38-$L(Y))_"MEDICAL/PHARMACY/TRICARE/CHAMPVA: "  ;PRCA*4.5*432 Add CHAMPVA, 45->38
 S Y=Y_$S(RCTYPE="M":"MEDICAL",RCTYPE="P":"PHARMACY",RCTYPE="T":"TRICARE",RCTYPE="C":"CHAMPVA",1:"ALL")  ;PRCA*4.5*432 Add CHAMPVA
 S HCNT=HCNT+1,RCHDR(HCNT)=Y
 ;
 S Y("1ST")=$P(RCDTRNG,U,2),Y("LST")=$P(RCDTRNG,U,3)
 F Y="1ST","LST" S Y(Y)=$$FMTE^XLFDT(Y(Y),"2Z")
 S Y="DATE RANGE: "_Y("1ST")_" - "_Y("LST")_" (ERA FILE DATE)"
 S HCNT=HCNT+1,RCHDR(HCNT)=$J("",80-$L(Y)\2)_Y
 ;
 S HCNT=HCNT+1,RCHDR(HCNT)=""
 S Y="AGED"
 S HCNT=HCNT+1,RCHDR(HCNT)=Y
 S Y="DAYS  TRACE #"
 S HCNT=HCNT+1,RCHDR(HCNT)=Y
 S Y="  PAYMENT FROM/ID" ; PRCA*4.5*321 - Allow extra room for 60 character Payer Name
 S HCNT=HCNT+1,RCHDR(HCNT)=Y
 ;
 ;PRCA*4.5*371 Removed EEOB CNT below
 ;PRCA*4.5*409 Replaced S Y="                FILE DATE      AMOUNT PAID  ERA #           ERA DATE"
 ;             with I/E statment below
 I RCDADJ D
 . S Y="                FILE DATE      AMOUNT PAID  EEOB CNT   ERA #           ERA DATE"
 E  D
 . S Y="                FILE DATE      AMOUNT PAID  ERA #           ERA DATE"
 S HCNT=HCNT+1,RCHDR(HCNT)=Y
 S Y="",$P(Y,"=",80)="",HCNT=HCNT+1,RCHDR(HCNT)=Y
 S RCHDR(0)=HCNT                                ; Total lines in header
 Q
 ;
HDRLM ; Create the list manager version of the report header
 ; Input:   RCDADJ      - 1 - Display Adjustment/Code info 0 otherwise ;PRCA*4.5*409 Added RCDADJ
 ;          RCDTRNG     - Date range filter value to be printed as part of the
 ;                        header
 ;          RCPAY       - 1 - All Payers
 ;                        2 - Selected Payers
 ;          RCPAY()     - Array of selected Payers if RCPAY=2
 ;          RCLSTMGR    -
 ;          VAUTD       - 1 - All divisions
 ;                        2 - Selected divisions
 ;          VAUTD()     - Array of selected divisions (if VAUTD=2)
 ; Output:  RCHDR(0)    - Header text line count
 N DATE,DIV,HCNT,MSG,Y,Z0
 K RCHDR
 S Z0="",RCPGNUM=0,RCSTOP=0
 S RCHDR(1)="DATE RANGE: "_$$FMTE^XLFDT($P(RCDTRNG,U,2),"2Z")
 S RCHDR(1)=RCHDR(1)_" - "_$$FMTE^XLFDT($P(RCDTRNG,U,3),"2Z")_" (ERA FILE DATE)"
 S HCNT=1
 ;
 S Y="DIVISIONS: "
 I $D(VAUTD)=1 S Y=Y_"ALL",HCNT=HCNT+1,RCHDR(HCNT)=Y
 I $D(VAUTD)>1 D
 . N S,X
 . S S=0
 . F  S S=$O(VAUTD(S)) Q:'S  D
 . . S X=VAUTD(S)_$S($O(VAUTD(S)):", ",1:"")
 . . I $L(X)+$L(Y)>80 S HCNT=HCNT+1,RCHDR(HCNT)=Y,Y=$J(" ",12)
 . . S Y=Y_X
 . ;
 . S:$TR(Y," ")]"" HCNT=HCNT+1,RCHDR(HCNT)=Y  ; any residual data
 ;
 ; Payers - PRCA*4.5*326
 S Y="PAYERS: "
 S Y=Y_$S(RCPAY="S":"SELECTED",RCPAY="R":"RANGE",1:"ALL")
 S Y=Y_$J("",38-$L(Y))_"MEDICAL/PHARMACY/TRICARE/CHAMPVA: "  ;PRCA*4.5*432 Add CHAMPVA, 45->38
 S Y=Y_$S(RCTYPE="M":"MEDICAL",RCTYPE="P":"PHARMACY",RCTYPE="T":"TRICARE",RCTYPE="C":"CHAMPVA",1:"ALL")  ;PRCA*4.5*432 Add CHAMPVA
 S HCNT=HCNT+1,RCHDR(HCNT)=Y
 ;
 S Y="AGED"
 S HCNT=HCNT+1,RCHDR(HCNT)=Y
 S Y="DAYS  TRACE #"
 S HCNT=HCNT+1,RCHDR(HCNT)=Y
 S Y="  PAYMENT FROM/ID" ; PRCA*4.5*321 - Allow extra room for 60 character Payer Name
 S HCNT=HCNT+1,RCHDR(HCNT)=Y
 ; PRCA*4.5*371 Removed EEOB CNT below
 ;PRCA*4.5*409 Replaced S Y="                FILE DATE      AMOUNT PAID  ERA #           ERA DATE"
 ;             with I/E statment below
 I RCDADJ D
 . S Y="                FILE DATE      AMOUNT PAID  EEOB CNT   ERA #           ERA DATE"
 E  D
 . S Y="                FILE DATE      AMOUNT PAID  ERA #           ERA DATE"
 S HCNT=HCNT+1,RCHDR(HCNT)=Y
 S RCHDR(0)=HCNT                                ; Total lines in header
 Q
 ;
HDRNM() ; Extrinsic variable, name for header PRCA*4.5*298
 Q "ERA UNMATCHED AGING REPORT"
 ;
EXCEL ; Print report to screen, one record per line for export to MS Excel.
 N D,RCSF0,RC1ST,RCEXCEP,RCFLIEN,RCLN,RCSFIEN,RCZ,Z
 ; RCDADJ   - Adjustment/Code filter            ;PRCA*4.5*409 Added line
 ; RCSFIEN  - sub-file ien
 D HDRLST^RCDPEARL(.RCSTOP,.RCHDR)
 S RCZ=""
 F  S RCZ=$O(^TMP($J,"RCERA_AGED",RCZ)) Q:RCZ=""  D
 . S RCFLIEN=0
 . F  S RCFLIEN=$O(^TMP($J,"RCERA_AGED",RCZ,RCFLIEN)) Q:'RCFLIEN  D  G:RCSTOP PRTQ2
 . . I $D(ZTQUEUED),$$S^%ZTLOAD S (RCSTOP,ZTSTOP)=1 K ZTREQ I +$G(RCPGNUM) W:RCTMPND="" !!,"***TASK STOPPED BY USER***" Q
 . . S RC0=$G(^RCY(344.4,RCFLIEN,0))
 . . S RCEXCEP=$$XCEPT^RCDPEWLP(RCFLIEN)  ; PRCA*4.5*298  assignment of ERA exception flag (will either be "" or "x")
 . . S Z=$J(RCEXCEP_-RCZ,4)_U_$P(RC0,U,2)_U_$P(RC0,U,6)_"/"_$P(RC0,U,3)
 . . ;
 . . ;PRCA*4.5*371 Changed external date/times below to be just date (,2 to ,"2D")
 . . S Z=Z_U_$$FMTE^XLFDT($P(RC0,U,4),"2D")_U_$$FMTE^XLFDT($P(RC0,U,7),"2D")_U
 . . ;
 . . ;PRCA*4.5*409 Replaced S Z=Z_$P(RC0,U,5)_U_$P(RC0,U,1) with I/E below
 . . I RCDADJ D
 . . . S Z=Z_$P(RC0,U,5)_U_$P(RC0,U,11)_U_$P(RC0,U,1)
 . . E  D
 . . . S Z=Z_$P(RC0,U,5)_U_$P(RC0,U,1)
 . . W !,Z
 . . S RCLN=Z,RC1ST=0
 . . Q:'RCDADJ                                  ;PRCA*4.5*409 Added line
 . . ;
 . . ;PRCA*4.5*409 Begin - Lines restored ePayments Build 17 version of routine
 . . K Z
 . . I "23"[$$ADJ^RCDPEU(RCFLIEN) D LSTXCEL W "^** CLAIM LEVEL ADJUSTMENTS EXIST FOR THIS ERA ***"
 . . I $O(^RCY(344.4,RCFLIEN,2,0)) D  ; ERA level adjustments exist
 . . . N Q
 . . . D DISPADJ^RCDPESR8(RCFLIEN,"^TMP("_$J_",""RCERA_ADJ"")")
 . . . I $O(^TMP($J,"RCERA_ADJ",0)) D LSTXCEL W "^** GENERAL ADJUSTMENT DATA EXISTS FOR ERA **"
 . . . S Q=0 F  S Q=$O(^TMP($J,"RCERA_ADJ",Q)) Q:'Q  D LSTXCEL W "^"_$G(^TMP($J,"RCERA_ADJ",Q))
 . . ;
 . . S RCSFIEN=0 F  S RCSFIEN=$O(^RCY(344.4,RCFLIEN,1,RCSFIEN)) Q:'RCSFIEN  S RCSF0=$G(^(RCSFIEN,0)) D  Q:RCSTOP
 . . . N D
 . . . K RCOUT
 . . . S D=" EEOB Seq #: "_$P(RCSF0,U)_$S($D(^RCY(344.4,RCFLIEN,1,"ATB",1,RCSFIEN)):" (REVERSAL)",1:"")_"  EEOB "
 . . . S D=D_$S('$P(RCSF0,U,2):"not on file",1:"on file for "_$P($G(^DGCR(399,+$G(^IBM(361.1,+$P(RCSF0,U,2),0)),0)),U))_"  "_$J(+$P(RCSF0,U,3),"",2)
 . . . D LSTXCEL W "^",D
 . . . Q:$P(RCSF0,U,2)
 . . . D DISP^RCDPESR0("^RCY(344.4,"_RCFLIEN_",1,"_RCSFIEN_",1)","RCDATA",1,"RCOUT",68,1)
 . . . I '$O(RCOUT(0)) D LSTXCEL W "^NO DETAIL FOUND" Q
 . . . S Z=0 F  S Z=$O(RCOUT(Z)) Q:'Z  D  Q:RCSTOP
 . . . . D LSTXCEL W "^*"_RCOUT(Z)
 ;
 ;PRCA*4.5*409 End
 ;
 W !!,$$ENDORPRT^RCDPEARL
 Q
 ;
LSTXCEL ; Display repeat info line before each EEOB detail section.
 ; First detail line does not need it
 I RC1ST W !,RCLN Q
 S RC1ST=1 Q
 ;
PRTQ2 I '$D(ZTQUEUED),'RCSTOP,RCPGNUM,RCTMPND="" D ASK^RCDPEARL(.RCSTOP)
 I $D(ZTQUEUED) S ZTREQ="@"
 I '$D(ZTQUEUED) D ^%ZISC
 K ^TMP($J,"RCEFT_AGED")
 Q
 ;
ZROBAL() ; Get Zero Payment Filter
 ; Returns: 1 for yes, zero for no, -1 on '^' or timeout
 N DIR,DIRUT,DTOUT,DUOUT,X,Y
 S DIR(0)="YA",DIR("A")="Include Zero payment amounts? (Y/N): ",DIR("B")="YES"
 D ^DIR
 I $D(DUOUT)!$D(DIRUT)!$D(DTOUT) S Y=-1
 Q Y
 ;
DADJCDE() ; Get Adjustment/Code Filter ;PRCA*4.5*409 Added method
 ; Returns: 1 for yes, zero for no, -1 on '^' or timeout
 N DIR,DIRUT,DTOUT,DUOUT,X,Y
 S DIR(0)="YA",DIR("A")="Display Adjustment/Code Information? (Y/N): ",DIR("B")="NO"
 D ^DIR
 I $D(DUOUT)!$D(DIRUT)!$D(DTOUT) S Y=-1
 Q Y
 ;
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HRCDPEAR1   19245     printed  Sep 23, 2025@19:20:25                                                                                                                                                                                                   Page 2
RCDPEAR1  ;ALB/TMK/PJH - ERA Unmatched Aging Report (file #344.4) ;Dec 20, 2014@18:41:35
 +1       ;;4.5;Accounts Receivable;**173,269,276,284,293,298,321,326,371,409,432**;Mar 20, 1995;Build 16
 +2       ;Per VA Directive 6402, this routine should not be modified.
 +3        QUIT 
 +4       ;
 +5       ; PRCA*4.5*298 routine completely refactored
EN1       ; entry point - ERA Unmatched Aging Report [RCDPE ERA AGING REPORT]
 +1       ; data from ELECTRONIC REMITTANCE ADVICE file (#344.4)
 +2       ;PRCA*4.5*409 Added POP,RCADJ
           NEW POP,RCDADJ,RCDISPTY,RCDT,RCDTRNG,RCHDR,RCJOB,RCLNCNT,RCLSTMGR,RCOUT
 +3        NEW RCPAR,RCPAY,RCPGNUM,RCPYRLST,RCSTOP,RCTMPND,RCTYPE,RCXCLUDE,RCZROBAL,VAUTD,XX,Y
 +4       ;
 +5       ; RCDADJ               - Display Adjustment/Code info flag     ;PRCA*4.5*409 Added line
 +6       ; RCDISPTY             - Display type (Excel)
 +7       ; RCDTRNG              - Selected date range
 +8       ; RCDT("BEG")          - Start date, RCDT("END") - end date
 +9       ; RCHDR                - Header array
 +10      ; RCLSTMGR             - list manager flag
 +11      ; RCDTRNG              - "1^start date^end date"
 +12      ; RCXCLUDE("CHAMPVA")  - boolean, exclude CHAMPVA
 +13      ; RCXCLUDE("TRICARE")  - boolean, exclude TriCare
 +14      ; RCZROBAL             - Zero balance flag
 +15      ; VAUTD                - Division information
 +16      ; RCTYPE               - MEDICAL/PHARMACY/TRICARE/CHAMPVA/ALL = M/P/T/C/A
 +17      ; RCPAY                - S=SELECTED, R=RANGE, A=ALL
 +18      ;                        (Selected or range - payers stored in ^TMP(""RCDPEU1"",$J))
 +19      ;
 +20      ; Clear old totals
           KILL ^TMP($JOB,"RC TOTAL")
 +21       WRITE !,$$HDRNM
 +22      ; Returns VAUTD
           DO DIVISION^VAUTOMA
 +23       IF 'VAUTD&($DATA(VAUTD)'=11)
               DO EN1Q
               QUIT 
 +24      ; Initial value, won't be asked if non-null
           SET RCLSTMGR=""
 +25      ; Default to false
           SET (RCXCLUDE("CHAMPVA"),RCXCLUDE("TRICARE"))=0
 +26       SET RCDTRNG=$$DTRNG^RCDPEM4()
 +27       IF 'RCDTRNG
               DO EN1Q
               QUIT 
 +28       SET RCDT("BEG")=$PIECE(RCDTRNG,U,2)
           SET RCDT("END")=$PIECE(RCDTRNG,U,3)
 +29      ;
 +30      ; PRCA*4.5*326 - Ask to show Medical/Pharmacy Tricare CHAMPVA or All
 +31       SET RCTYPE=$$RTYPE^RCDPEU1("A")
 +32       IF RCTYPE=-1
               DO EN1Q
               QUIT 
 +33      ;
 +34      ; PRCA*4.5*326 - Selected or Range of Payers
           SET RCPAR("SELC")=$$PAYRNG^RCDPEU1()
 +35      ; PRCA*4.5*326 '^' or timeout
           IF RCPAR("SELC")=-1
               DO EN1Q
               QUIT 
 +36       SET RCPAY=RCPAR("SELC")
 +37      ;
 +38      ; PRCA*4.5*326 - Since we don't want all payers 
           IF RCPAR("SELC")'="A"
               Begin DoDot:1
 +39      ;                prompt for payers we do want
                   SET RCPAR("TYPE")=RCTYPE
 +40               SET RCPAR("DICA")="Select Insurance Company NAME: "
 +41               SET XX=$$SELPAY^RCDPEU1(.RCPAR)
               End DoDot:1
               if XX=-1
                   QUIT 
 +42      ;
 +43      ; Get Zero Balance Filter
           SET RCZROBAL=$$ZROBAL()
 +44       IF RCZROBAL<0
               DO EN1Q
               QUIT 
 +45      ;
 +46      ; Get Adjustment/Code Filter ;PRCA*4.5*409 Added line
           SET RCDADJ=$$DADJCDE()
 +47       IF RCDADJ<0
               DO EN1Q
               QUIT 
 +48      ;
 +49      ; Display type, ask for Excel format
 +50       SET RCDISPTY=$$DISPTY^RCDPEM3()
 +51       IF RCDISPTY=-1
               DO EN1Q
               QUIT 
 +52      ;
 +53      ; Display device info about Excel format, set ListMan flag to prevent question
 +54       IF RCDISPTY
               SET RCLSTMGR="^"
               DO INFO^RCDPEM6
 +55       IF $DATA(DUOUT)!$DATA(DTOUT)
               DO EN1Q
               QUIT 
 +56      ; Needed in RPTOUT
           SET RCJOB=$JOB
 +57      ;
 +58      ; If not output to Excel ask for ListMan display, exit if timeout or '^' - PRCA*4.5*298
 +59       IF RCLSTMGR=""
               SET RCLSTMGR=$$ASKLM^RCDPEARL
               if RCLSTMGR<0
                   GOTO EN1Q
 +60      ;
 +61      ; Display in ListMan format and exit on return
 +62       IF RCLSTMGR
               Begin DoDot:1
 +63      ; clean any residue
                   SET RCTMPND=$TEXT(+0)_"^ERA UNMATCHED AGING"
                   KILL ^TMP($JOB,RCTMPND)
 +64               DO RPTOUT
 +65               NEW H,L,HDR
                   SET L=0
 +66               SET HDR("TITLE")=$$HDRNM
 +67      ; take first 7 lines of report header
                   FOR H=1:1:7
                       IF $DATA(RCHDR(H))
                           SET L=H
                           SET HDR(H)=RCHDR(H)
 +68      ; any remaining header lines at top of report
                   IF $ORDER(RCHDR(L))
                       Begin DoDot:2
 +69                       NEW N
                           SET N=0
                           SET H=L
                           FOR 
                               SET H=$ORDER(RCHDR(H))
                               if 'H
                                   QUIT 
                               SET N=N+.001
                               SET ^TMP($JOB,RCTMPND,N)=RCHDR(H)
                       End DoDot:2
 +70      ;
 +71      ; invoke ListMan
 +72      ; generate ListMan display
                   DO LMRPT^RCDPEARL(.HDR,$NAME(^TMP($JOB,RCTMPND)))
 +73               DO EN1Q
               End DoDot:1
               QUIT 
 +74      ;
 +75      ; Ask device
 +76       NEW %ZIS
           SET %ZIS="QM"
 +77       DO ^%ZIS
 +78       IF POP
               DO EN1Q
               QUIT 
 +79       IF $DATA(IO("Q"))
               Begin DoDot:1
 +80               NEW ZTDESC,ZTQUEUED,ZTRTN,ZTSAVE,ZTSK,ZTSTOP
 +81               SET ZTRTN="RPTOUT^RCDPEAR1"
                   SET ZTDESC="AR - EDI LOCKBOX ERA AGING REPORT"
 +82               SET ZTSAVE("RC*")=""
                   SET ZTSAVE("VAUTD")=""
 +83      ; PRCA*4.5*326
                   SET ZTSAVE("^TMP(""RCDPEU1"",$J,")=""
 +84               DO ^%ZTLOAD
 +85               WRITE !!,$SELECT($GET(ZTSK):"Task number "_ZTSK_" has been queued.",1:"Unable to queue this task.")
 +86               KILL ZTSK,IO("Q")
 +87               DO HOME^%ZIS
 +88               DO EN1Q
               End DoDot:1
               QUIT 
 +89      ;
 +90       USE IO
 +91       SET RCTMPND=""
 +92       DO RPTOUT
 +93      ;
EN1Q      ; exit and clean up
 +1       ; PRCA*4.5*326
           KILL ^TMP("RCSELPAY",$JOB),^TMP("RCPAYER",$JOB),^TMP("RCDPEU1",$JOB)
 +2        IF '$GET(RCLSTMGR)
               DO ^%ZISC
 +3        QUIT 
 +4       ;
RPTOUT    ; Entry point for listing report
 +1       ; Input:   RCTMPND - Name of the subscript for ^TMP to use to return all lines
 +2       ;                    (for bulletin).  If undefined or null, output is printed
 +3       ; Returns: Global if RCTMPND not null: ^TMP($J,RCTMPND,line#)=line text
 +4        NEW ERADT,J,LNECNT,PYMNTFRM,RC0,RCEDT,RCEXCEP,RCFLIEN,RCITM,RCNT,RCSF0,RCZ
 +5        NEW STA,STNAM,STNUM,X,XX,Y,Z,Z0
 +6       ; ERADT    - Date of entry
 +7       ; LNECNT   - # of Lines displayed on the current page
 +8       ; RCDADJ   - Display Adjustment/Code Filter        ;PRCA*4.5*409 Added line        
 +9       ; RCNT     - Count of items
 +10      ; RCFLIEN  - Entry number in file #344.4
 +11      ; RCITM    - Entry in ^RCY(344.4,0) = ELECTRONIC REMITTANCE ADVICE^344.4I
 +12      ; RCSF0    - Zero node of sub-file entry
 +13      ;
 +14       SET LNECNT=0
 +15       SET RCTMPND=$GET(RCTMPND)
 +16      ; Clear residual data
           IF RCTMPND'=""
               KILL ^TMP($JOB,RCTMPND)
 +17       KILL ^TMP($JOB,"RCERA_AGED"),^TMP($JOB,"RCERA_ADJ")
 +18       SET RCFLIEN=0
           SET RCNT=0
 +19       FOR 
               SET RCFLIEN=$ORDER(^RCY(344.4,"AMATCH",0,RCFLIEN))
               if 'RCFLIEN
                   QUIT 
               Begin DoDot:1
 +20               KILL RCITM
 +21      ; Grab entire entry
                   MERGE RCITM=^RCY(344.4,RCFLIEN)
 +22      ; Who removed the ERA - PRCA*4.5*293
                   if $PIECE($GET(RCITM(6)),U)
                       QUIT 
 +23      ; (#.07) FILE DATE/TIME [7D]
                   SET ERADT=+$PIECE($GET(RCITM(0)),U,7)
 +24      ; No date, don't include
                   if 'ERADT
                       QUIT 
 +25      ;
 +26      ; Check date range
 +27               if (RCDT("BEG")>ERADT\1)!(ERADT\1>RCDT("END"))
                       QUIT 
 +28      ;
 +29      ; Check Station/Division
 +30      ;I '$$CHKDIV^RCDPEDAR(RCFLIEN,1,.VAUTD) Q
 +31               IF 'VAUTD
                       DO ERASTA^RCDPEM4(RCFLIEN,.STA,.STNUM,.STNAM)
                       IF '$DATA(VAUTD(STA))
                           QUIT 
 +32      ;
 +33               IF RCPAY'="A"
                       Begin DoDot:2
 +34      ; PRCA*4.5*326 Check if payer was selected
                           SET XX=$$ISSEL^RCDPEU1(344.4,RCFLIEN)
                       End DoDot:2
                       if 'XX
                           QUIT 
 +35      ; If all of a give type of payer selected
                  IF '$TEST
                       IF RCTYPE'="A"
                           Begin DoDot:2
 +36      ;  Check that payer matches type
                               SET XX=$$ISTYPE^RCDPEU1(344.4,RCFLIEN,RCTYPE)
                           End DoDot:2
                           if 'XX
                               QUIT 
 +37      ;
 +38      ; Check for Zero Bal
 +39      ; (#.05) TOTAL AMOUNT PAID [5N]
                   IF 'RCZROBAL
                       IF '$PIECE($GET(RCITM(0)),U,5)
                           QUIT 
 +40               SET ^TMP($JOB,"RCERA_AGED",$$FMDIFF^XLFDT(ERADT,DT),RCFLIEN)=0
                   SET RCNT=RCNT+1
               End DoDot:1
 +41      ;
 +42      ; Save counter
           SET ^TMP($JOB,"RC TOTAL","COUNT")=RCNT
 +43      ;
 +44      ; Build header, initialize stop flag
 +45       if 'RCLSTMGR
               DO HDRBLD
 +46       SET RCSTOP=0
 +47       if RCLSTMGR
               DO HDRLM
 +48      ;
 +49      ; Excel format, print and exit
 +50       IF RCDISPTY
               DO EXCEL
               DO ^%ZISC
               DO EXIT
               QUIT 
 +51      ;
 +52      ;  Calculate total amount for ERA
           Begin DoDot:1
 +53      ; total
               NEW T
               SET T=0
 +54           SET RCZ=""
 +55           FOR 
                   Begin DoDot:2
 +56                   SET RCZ=$ORDER(^TMP($JOB,"RCERA_AGED",RCZ))
 +57                   if RCZ=""
                           QUIT 
 +58                   SET RCFLIEN=0
 +59                   FOR 
                           SET RCFLIEN=$ORDER(^TMP($JOB,"RCERA_AGED",RCZ,RCFLIEN))
                           if 'RCFLIEN
                               QUIT 
                           Begin DoDot:3
 +60                           SET RC0=$GET(^RCY(344.4,RCFLIEN,0))
                               SET T=T+$PIECE(RC0,U,5)
                           End DoDot:3
                   End DoDot:2
                   if RCZ=""
                       QUIT 
 +61      ;
 +62           SET ^TMP($JOB,"RC TOTAL","AMOUNT")=T
           End DoDot:1
 +63      ;
 +64      ; Line counter
           SET RCLNCNT=0
 +65      ; First header in report
           if 'RCLSTMGR
               DO HDRLST^RCDPEARL(.RCSTOP,.RCHDR)
 +66      ;
 +67      ; List totals
 +68       SET Y=" Total NUMBER Aged Electronic ERA messages found: "_$FNUMBER(^TMP($JOB,"RC TOTAL","COUNT"),",")
 +69       DO SL^RCDPEARL(Y,.RCLNCNT,RCTMPND)
           SET LNECNT=LNECNT+1
 +70       SET Y=" Total AMOUNT Aged Electronic ERA messages found: $"_$FNUMBER(^TMP($JOB,"RC TOTAL","AMOUNT"),",",2)
 +71       DO SL^RCDPEARL(Y,.RCLNCNT,RCTMPND)
           SET LNECNT=LNECNT+1
 +72      ;
 +73      ; If filters selected show total excluded
 +74       FOR J="CHAMPVA","TRICARE"
               IF $GET(RCXCLUDE(J))
                   Begin DoDot:1
 +75                   SET Y=" "_J_" exclusion count: "_(+$GET(^TMP($JOB,"RC TOTAL",J)))
 +76                   DO SL^RCDPEARL(Y,.RCLNCNT,RCTMPND)
                       SET LNECNT=LNECNT+1
                   End DoDot:1
 +77      ; Row of equal signs
           DO SL^RCDPEARL(" "_$TRANSLATE($JUSTIFY("",78)," ","="),.RCLNCNT,RCTMPND)
           SET LNECNT=LNECNT+1
 +78      ;
 +79       SET RCZ=""
           FOR 
               SET RCZ=$ORDER(^TMP($JOB,"RCERA_AGED",RCZ))
               if RCZ=""
                   QUIT 
               SET RCFLIEN=0
               FOR 
                   SET RCFLIEN=$ORDER(^TMP($JOB,"RCERA_AGED",RCZ,RCFLIEN))
                   if 'RCFLIEN
                       QUIT 
                   Begin DoDot:1
 +80                   IF $DATA(ZTQUEUED)
                           IF $$S^%ZTLOAD
                               SET (RCSTOP,ZTSTOP)=1
                               KILL ZTREQ
                               IF +$GET(RCPGNUM)
                                   if RCTMPND=""
                                       WRITE !!,"***TASK STOPPED BY USER***"
                                   QUIT 
 +81      ; On detail list, skip line
                       IF RCPGNUM
                           DO SL^RCDPEARL(" ",.RCLNCNT,.RCTMPND)
                           SET LNECNT=LNECNT+1
 +82                   IF 'RCLSTMGR
                           IF 'RCPGNUM!(($Y+5)>IOSL)
                               DO HDRLST^RCDPEARL(.RCSTOP,.RCHDR)
                               if RCSTOP
                                   QUIT 
 +83                   SET RC0=$GET(^RCY(344.4,RCFLIEN,0))
 +84      ; PRCA*4.5*298  assignment of ERA exception flag (will either be "" or "x")
                       SET RCEXCEP=$$XCEPT^RCDPEWLP(RCFLIEN)
 +85      ; PRCA*4.5*298 display ERA exception flag
                       SET Z=$$SETSTR^VALM1($JUSTIFY(RCEXCEP_-RCZ,4),"",1,5)
 +86                   SET Z=$$SETSTR^VALM1("  "_$PIECE(RC0,U,2),Z,5,50)
 +87                   DO SL^RCDPEARL(Z,.RCLNCNT,RCTMPND)
                       SET LNECNT=LNECNT+1
 +88      ; PRCA*4.5*321
                       SET Z=$$SETSTR^VALM1($$PAYTIN^RCDPRU2($PIECE(RC0,U,6)_"/"_$PIECE(RC0,U,3),78),"",3,78)
 +89                   DO SL^RCDPEARL(Z,.RCLNCNT,RCTMPND)
                       SET LNECNT=LNECNT+1
 +90                   SET Z=$$SETSTR^VALM1($JUSTIFY("",16)_$SELECT($PIECE(RC0,U,7):$$FMTE^XLFDT($PIECE(RC0,U,7)\1,2),1:""),"",1,25)
 +91                   SET Z=$$SETSTR^VALM1("  "_$JUSTIFY($PIECE(RC0,U,5),15,2),Z,26,17)
 +92      ;
 +93      ;PRCA*4.5*409 Added if statement
 +94                   IF RCDADJ
                           Begin DoDot:2
 +95                           SET Z=$$SETSTR^VALM1("  "_+$PIECE(RC0,U,11),Z,43,11)
                           End DoDot:2
 +96      ;
 +97      ;PRCA*4.5*409 Replaced 43 with $S(RCDADJ:54,1:43)
 +98      ; PRCA*4.5*321
                       SET Z=$$SETSTR^VALM1("  "_$PIECE(RC0,U),Z_$SELECT('$$HACERA^RCDPEU(RCFLIEN):"",1:" (HAC ERA)"),$SELECT(RCDADJ:54,1:43),16)
 +99      ;PRCA*4.5*371 Moved ERA Date column over from 70 to 59 below
 +100     ;
 +101     ;PRCA*4.5*409 Replaced 59 with $S(RCDADJ:70,1:59)
 +102     ; PRCA*4.5*321
                       SET Z=$$SETSTR^VALM1("  "_$$FMTE^XLFDT($PIECE(RC0,U,4),2),Z,$SELECT(RCDADJ:70,1:59),10)
 +103                  DO SL^RCDPEARL(Z,.RCLNCNT,RCTMPND)
                       SET LNECNT=LNECNT+1
 +104     ;PRCA*4.5*409 Added line
                       if 'RCDADJ
                           QUIT 
 +105     ;
 +106     ;PRCA*4.5*409 Added call to new routine due to routine size limitations
 +107                  DO RPTOUT2^RCDPEAR4
                   End DoDot:1
                   if RCSTOP
                       GOTO EXIT
 +108     ;
 +109     ; PRCA*4.5*298, put end-of-report into SL^RCDPEARL
 +110      IF 'RCSTOP
               DO SL^RCDPEARL(" ",.RCLNCNT,RCTMPND)
               DO SL^RCDPEARL($$ENDORPRT^RCDPEARL,.RCLNCNT,RCTMPND)
 +111      DO EXIT
 +112      QUIT 
 +113     ;
EXIT      ; Exit the report
 +1       ; PRCA*4.5*298, added ListMan check
 +2        IF '$DATA(ZTQUEUED)
               IF 'RCLSTMGR
                   Begin DoDot:1
 +3                    IF 'RCSTOP
                           IF RCPGNUM
                               IF RCTMPND=""
                                   DO ASK^RCDPEARL(.RCSTOP)
 +4                    DO ^%ZISC
                   End DoDot:1
 +5       ;
 +6        if $DATA(ZTQUEUED)
               SET ZTREQ="@"
 +7       ; PRCA*4.5*326
           KILL ^TMP($JOB,"RCERA_AGED"),^TMP("RCSELPAY",$JOB),^TMP($JOB,"RC TOTAL"),^TMP("RCDPEU1",$JOB)
 +8        QUIT 
 +9       ;
HDRBLD    ; Create the report header
 +1       ; Input:   RCADJ           - 1 - Display Adjustment/Code information, 0 otherwise ;PRCA*4.5*409 Added RCADJ
 +2       ;          RCDISPTY        - 1 - Output to excel, 0 otherwise
 +3       ;          RCDTRNG         - Date range selected
 +4       ;          RCXCLUDE        - TRICARE /CHAMPVA flags
 +5       ;          VAUTD           - Divisions to include in report (if listed in VAUTD array)
 +6       ; Output:  RCHDR(0)        - Header text line count
 +7       ;          RCHDR(1)        - Excel column data (only set If DISPTY=1)
 +8       ;          RCHDR("XECUTE") - M code for page number
 +9       ;          RCHDR("RUNDATE")- Date/time report generated, external format
 +10      ;          RCPGNUM         - Page counter
 +11      ;          RCSTOP          - Flag to exit
 +12      ;
 +13       NEW CHATRI,DIV,HCNT,XX,Y
 +14       KILL RCHDR
 +15       SET RCHDR("RUNDATE")=$$NOW^RCDPEARL
           SET RCPGNUM=0
           SET RCSTOP=0
 +16      ; Excel format, xecute code is QUIT, null page number
           IF RCDISPTY
               Begin DoDot:1
 +17               SET RCHDR(0)=1
                   SET RCHDR("XECUTE")="Q"
                   SET RCPGNUM=""
 +18               SET XX="Aged Days^Trace #^Payment From/ID^ERA Date^File Date^Amount Paid"
 +19      ;
 +20      ;PRCA*4.5*409 Replaced S XX=XX_"^ERA #" with If/Else below
 +21               IF RCDADJ
                       Begin DoDot:2
 +22                       SET XX=XX_"^EEOB Cnt^ERA #^EEOB Detail"
                       End DoDot:2
 +23              IF '$TEST
                       Begin DoDot:2
 +24                       SET XX=XX_"^ERA #"
                       End DoDot:2
 +25               SET RCHDR(1)=XX
               End DoDot:1
               QUIT 
 +26      ;
 +27       SET XX="N Y S RCPGNUM=RCPGNUM+1,Y=$$HDRNM^"
 +28       SET XX=XX_$TEXT(+0)_",RCHDR(1)=$J("" "",80-$L(Y)\2)_Y"_"_""          Page: ""_RCPGNUM,LNECNT=RCHDR(0)"
 +29       SET RCHDR("XECUTE")=XX
 +30       SET HCNT=1
 +31       SET Y="RUN DATE: "_RCHDR("RUNDATE")
           SET HCNT=HCNT+1
 +32       SET RCHDR(HCNT)=$JUSTIFY("",80-$LENGTH(Y)\2)_Y
 +33      ;
 +34      ; Divisions
 +35       SET Y="DIVISIONS: "
 +36       IF $DATA(VAUTD)=1
               SET Y=Y_"ALL"
               SET Y=$JUSTIFY("",80-$LENGTH(Y)\2)_Y
               SET HCNT=HCNT+1
               SET RCHDR(HCNT)=Y
 +37       IF $DATA(VAUTD)>1
               Begin DoDot:1
 +38               NEW S,X
                   SET S=0
 +39               FOR 
                       SET S=$ORDER(VAUTD(S))
                       if 'S
                           QUIT 
                       Begin DoDot:2
 +40                       SET X=VAUTD(S)_$SELECT($ORDER(VAUTD(S)):", ",1:"")
 +41                       IF $LENGTH(X)+$LENGTH(Y)>80
                               Begin DoDot:3
 +42                               SET HCNT=HCNT+1
                                   SET RCHDR(HCNT)=$JUSTIFY("",80-$LENGTH(Y)\2)_Y
                                   SET Y=$JUSTIFY(" ",12)
                               End DoDot:3
 +43                       SET Y=Y_X
                       End DoDot:2
 +44      ;
 +45      ; any residual data
                   if $TRANSLATE(Y," ")]""
                       SET HCNT=HCNT+1
                       SET RCHDR(HCNT)=Y
               End DoDot:1
 +46      ;
 +47      ; Payers - PRCA*4.5*326
 +48       SET Y="PAYERS: "
 +49       SET Y=Y_$SELECT(RCPAY="S":"SELECTED",RCPAY="R":"RANGE",1:"ALL")
 +50      ;PRCA*4.5*432 Add CHAMPVA, 45->38
           SET Y=Y_$JUSTIFY("",38-$LENGTH(Y))_"MEDICAL/PHARMACY/TRICARE/CHAMPVA: "
 +51      ;PRCA*4.5*432 Add CHAMPVA
           SET Y=Y_$SELECT(RCTYPE="M":"MEDICAL",RCTYPE="P":"PHARMACY",RCTYPE="T":"TRICARE",RCTYPE="C":"CHAMPVA",1:"ALL")
 +52       SET HCNT=HCNT+1
           SET RCHDR(HCNT)=Y
 +53      ;
 +54       SET Y("1ST")=$PIECE(RCDTRNG,U,2)
           SET Y("LST")=$PIECE(RCDTRNG,U,3)
 +55       FOR Y="1ST","LST"
               SET Y(Y)=$$FMTE^XLFDT(Y(Y),"2Z")
 +56       SET Y="DATE RANGE: "_Y("1ST")_" - "_Y("LST")_" (ERA FILE DATE)"
 +57       SET HCNT=HCNT+1
           SET RCHDR(HCNT)=$JUSTIFY("",80-$LENGTH(Y)\2)_Y
 +58      ;
 +59       SET HCNT=HCNT+1
           SET RCHDR(HCNT)=""
 +60       SET Y="AGED"
 +61       SET HCNT=HCNT+1
           SET RCHDR(HCNT)=Y
 +62       SET Y="DAYS  TRACE #"
 +63       SET HCNT=HCNT+1
           SET RCHDR(HCNT)=Y
 +64      ; PRCA*4.5*321 - Allow extra room for 60 character Payer Name
           SET Y="  PAYMENT FROM/ID"
 +65       SET HCNT=HCNT+1
           SET RCHDR(HCNT)=Y
 +66      ;
 +67      ;PRCA*4.5*371 Removed EEOB CNT below
 +68      ;PRCA*4.5*409 Replaced S Y="                FILE DATE      AMOUNT PAID  ERA #           ERA DATE"
 +69      ;             with I/E statment below
 +70       IF RCDADJ
               Begin DoDot:1
 +71               SET Y="                FILE DATE      AMOUNT PAID  EEOB CNT   ERA #           ERA DATE"
               End DoDot:1
 +72      IF '$TEST
               Begin DoDot:1
 +73               SET Y="                FILE DATE      AMOUNT PAID  ERA #           ERA DATE"
               End DoDot:1
 +74       SET HCNT=HCNT+1
           SET RCHDR(HCNT)=Y
 +75       SET Y=""
           SET $PIECE(Y,"=",80)=""
           SET HCNT=HCNT+1
           SET RCHDR(HCNT)=Y
 +76      ; Total lines in header
           SET RCHDR(0)=HCNT
 +77       QUIT 
 +78      ;
HDRLM     ; Create the list manager version of the report header
 +1       ; Input:   RCDADJ      - 1 - Display Adjustment/Code info 0 otherwise ;PRCA*4.5*409 Added RCDADJ
 +2       ;          RCDTRNG     - Date range filter value to be printed as part of the
 +3       ;                        header
 +4       ;          RCPAY       - 1 - All Payers
 +5       ;                        2 - Selected Payers
 +6       ;          RCPAY()     - Array of selected Payers if RCPAY=2
 +7       ;          RCLSTMGR    -
 +8       ;          VAUTD       - 1 - All divisions
 +9       ;                        2 - Selected divisions
 +10      ;          VAUTD()     - Array of selected divisions (if VAUTD=2)
 +11      ; Output:  RCHDR(0)    - Header text line count
 +12       NEW DATE,DIV,HCNT,MSG,Y,Z0
 +13       KILL RCHDR
 +14       SET Z0=""
           SET RCPGNUM=0
           SET RCSTOP=0
 +15       SET RCHDR(1)="DATE RANGE: "_$$FMTE^XLFDT($PIECE(RCDTRNG,U,2),"2Z")
 +16       SET RCHDR(1)=RCHDR(1)_" - "_$$FMTE^XLFDT($PIECE(RCDTRNG,U,3),"2Z")_" (ERA FILE DATE)"
 +17       SET HCNT=1
 +18      ;
 +19       SET Y="DIVISIONS: "
 +20       IF $DATA(VAUTD)=1
               SET Y=Y_"ALL"
               SET HCNT=HCNT+1
               SET RCHDR(HCNT)=Y
 +21       IF $DATA(VAUTD)>1
               Begin DoDot:1
 +22               NEW S,X
 +23               SET S=0
 +24               FOR 
                       SET S=$ORDER(VAUTD(S))
                       if 'S
                           QUIT 
                       Begin DoDot:2
 +25                       SET X=VAUTD(S)_$SELECT($ORDER(VAUTD(S)):", ",1:"")
 +26                       IF $LENGTH(X)+$LENGTH(Y)>80
                               SET HCNT=HCNT+1
                               SET RCHDR(HCNT)=Y
                               SET Y=$JUSTIFY(" ",12)
 +27                       SET Y=Y_X
                       End DoDot:2
 +28      ;
 +29      ; any residual data
                   if $TRANSLATE(Y," ")]""
                       SET HCNT=HCNT+1
                       SET RCHDR(HCNT)=Y
               End DoDot:1
 +30      ;
 +31      ; Payers - PRCA*4.5*326
 +32       SET Y="PAYERS: "
 +33       SET Y=Y_$SELECT(RCPAY="S":"SELECTED",RCPAY="R":"RANGE",1:"ALL")
 +34      ;PRCA*4.5*432 Add CHAMPVA, 45->38
           SET Y=Y_$JUSTIFY("",38-$LENGTH(Y))_"MEDICAL/PHARMACY/TRICARE/CHAMPVA: "
 +35      ;PRCA*4.5*432 Add CHAMPVA
           SET Y=Y_$SELECT(RCTYPE="M":"MEDICAL",RCTYPE="P":"PHARMACY",RCTYPE="T":"TRICARE",RCTYPE="C":"CHAMPVA",1:"ALL")
 +36       SET HCNT=HCNT+1
           SET RCHDR(HCNT)=Y
 +37      ;
 +38       SET Y="AGED"
 +39       SET HCNT=HCNT+1
           SET RCHDR(HCNT)=Y
 +40       SET Y="DAYS  TRACE #"
 +41       SET HCNT=HCNT+1
           SET RCHDR(HCNT)=Y
 +42      ; PRCA*4.5*321 - Allow extra room for 60 character Payer Name
           SET Y="  PAYMENT FROM/ID"
 +43       SET HCNT=HCNT+1
           SET RCHDR(HCNT)=Y
 +44      ; PRCA*4.5*371 Removed EEOB CNT below
 +45      ;PRCA*4.5*409 Replaced S Y="                FILE DATE      AMOUNT PAID  ERA #           ERA DATE"
 +46      ;             with I/E statment below
 +47       IF RCDADJ
               Begin DoDot:1
 +48               SET Y="                FILE DATE      AMOUNT PAID  EEOB CNT   ERA #           ERA DATE"
               End DoDot:1
 +49      IF '$TEST
               Begin DoDot:1
 +50               SET Y="                FILE DATE      AMOUNT PAID  ERA #           ERA DATE"
               End DoDot:1
 +51       SET HCNT=HCNT+1
           SET RCHDR(HCNT)=Y
 +52      ; Total lines in header
           SET RCHDR(0)=HCNT
 +53       QUIT 
 +54      ;
HDRNM()   ; Extrinsic variable, name for header PRCA*4.5*298
 +1        QUIT "ERA UNMATCHED AGING REPORT"
 +2       ;
EXCEL     ; Print report to screen, one record per line for export to MS Excel.
 +1        NEW D,RCSF0,RC1ST,RCEXCEP,RCFLIEN,RCLN,RCSFIEN,RCZ,Z
 +2       ; RCDADJ   - Adjustment/Code filter            ;PRCA*4.5*409 Added line
 +3       ; RCSFIEN  - sub-file ien
 +4        DO HDRLST^RCDPEARL(.RCSTOP,.RCHDR)
 +5        SET RCZ=""
 +6        FOR 
               SET RCZ=$ORDER(^TMP($JOB,"RCERA_AGED",RCZ))
               if RCZ=""
                   QUIT 
               Begin DoDot:1
 +7                SET RCFLIEN=0
 +8                FOR 
                       SET RCFLIEN=$ORDER(^TMP($JOB,"RCERA_AGED",RCZ,RCFLIEN))
                       if 'RCFLIEN
                           QUIT 
                       Begin DoDot:2
 +9                        IF $DATA(ZTQUEUED)
                               IF $$S^%ZTLOAD
                                   SET (RCSTOP,ZTSTOP)=1
                                   KILL ZTREQ
                                   IF +$GET(RCPGNUM)
                                       if RCTMPND=""
                                           WRITE !!,"***TASK STOPPED BY USER***"
                                       QUIT 
 +10                       SET RC0=$GET(^RCY(344.4,RCFLIEN,0))
 +11      ; PRCA*4.5*298  assignment of ERA exception flag (will either be "" or "x")
                           SET RCEXCEP=$$XCEPT^RCDPEWLP(RCFLIEN)
 +12                       SET Z=$JUSTIFY(RCEXCEP_-RCZ,4)_U_$PIECE(RC0,U,2)_U_$PIECE(RC0,U,6)_"/"_$PIECE(RC0,U,3)
 +13      ;
 +14      ;PRCA*4.5*371 Changed external date/times below to be just date (,2 to ,"2D")
 +15                       SET Z=Z_U_$$FMTE^XLFDT($PIECE(RC0,U,4),"2D")_U_$$FMTE^XLFDT($PIECE(RC0,U,7),"2D")_U
 +16      ;
 +17      ;PRCA*4.5*409 Replaced S Z=Z_$P(RC0,U,5)_U_$P(RC0,U,1) with I/E below
 +18                       IF RCDADJ
                               Begin DoDot:3
 +19                               SET Z=Z_$PIECE(RC0,U,5)_U_$PIECE(RC0,U,11)_U_$PIECE(RC0,U,1)
                               End DoDot:3
 +20                      IF '$TEST
                               Begin DoDot:3
 +21                               SET Z=Z_$PIECE(RC0,U,5)_U_$PIECE(RC0,U,1)
                               End DoDot:3
 +22                       WRITE !,Z
 +23                       SET RCLN=Z
                           SET RC1ST=0
 +24      ;PRCA*4.5*409 Added line
                           if 'RCDADJ
                               QUIT 
 +25      ;
 +26      ;PRCA*4.5*409 Begin - Lines restored ePayments Build 17 version of routine
 +27                       KILL Z
 +28                       IF "23"[$$ADJ^RCDPEU(RCFLIEN)
                               DO LSTXCEL
                               WRITE "^** CLAIM LEVEL ADJUSTMENTS EXIST FOR THIS ERA ***"
 +29      ; ERA level adjustments exist
                           IF $ORDER(^RCY(344.4,RCFLIEN,2,0))
                               Begin DoDot:3
 +30                               NEW Q
 +31                               DO DISPADJ^RCDPESR8(RCFLIEN,"^TMP("_$JOB_",""RCERA_ADJ"")")
 +32                               IF $ORDER(^TMP($JOB,"RCERA_ADJ",0))
                                       DO LSTXCEL
                                       WRITE "^** GENERAL ADJUSTMENT DATA EXISTS FOR ERA **"
 +33                               SET Q=0
                                   FOR 
                                       SET Q=$ORDER(^TMP($JOB,"RCERA_ADJ",Q))
                                       if 'Q
                                           QUIT 
                                       DO LSTXCEL
                                       WRITE "^"_$GET(^TMP($JOB,"RCERA_ADJ",Q))
                               End DoDot:3
 +34      ;
 +35                       SET RCSFIEN=0
                           FOR 
                               SET RCSFIEN=$ORDER(^RCY(344.4,RCFLIEN,1,RCSFIEN))
                               if 'RCSFIEN
                                   QUIT 
                               SET RCSF0=$GET(^(RCSFIEN,0))
                               Begin DoDot:3
 +36                               NEW D
 +37                               KILL RCOUT
 +38                               SET D=" EEOB Seq #: "_$PIECE(RCSF0,U)_$SELECT($DATA(^RCY(344.4,RCFLIEN,1,"ATB",1,RCSFIEN)):" (REVERSAL)",1:"")_"  EEOB "
 +39                               SET D=D_$SELECT('$PIECE(RCSF0,U,2):"not on file",1:"on file for "_$PIECE($GET(^DGCR(399,+$GET(^IBM(361.1,+$PIECE(RCSF0,U,2),0)),0)),U))_"  "_$JUSTIFY(+$PIECE(RCSF0,U,3),"",2)
 +40                               DO LSTXCEL
                                   WRITE "^",D
 +41                               if $PIECE(RCSF0,U,2)
                                       QUIT 
 +42                               DO DISP^RCDPESR0("^RCY(344.4,"_RCFLIEN_",1,"_RCSFIEN_",1)","RCDATA",1,"RCOUT",68,1)
 +43                               IF '$ORDER(RCOUT(0))
                                       DO LSTXCEL
                                       WRITE "^NO DETAIL FOUND"
                                       QUIT 
 +44                               SET Z=0
                                   FOR 
                                       SET Z=$ORDER(RCOUT(Z))
                                       if 'Z
                                           QUIT 
                                       Begin DoDot:4
 +45                                       DO LSTXCEL
                                           WRITE "^*"_RCOUT(Z)
                                       End DoDot:4
                                       if RCSTOP
                                           QUIT 
                               End DoDot:3
                               if RCSTOP
                                   QUIT 
                       End DoDot:2
                       if RCSTOP
                           GOTO PRTQ2
               End DoDot:1
 +46      ;
 +47      ;PRCA*4.5*409 End
 +48      ;
 +49       WRITE !!,$$ENDORPRT^RCDPEARL
 +50       QUIT 
 +51      ;
LSTXCEL   ; Display repeat info line before each EEOB detail section.
 +1       ; First detail line does not need it
 +2        IF RC1ST
               WRITE !,RCLN
               QUIT 
 +3        SET RC1ST=1
           QUIT 
 +4       ;
PRTQ2      IF '$DATA(ZTQUEUED)
               IF 'RCSTOP
                   IF RCPGNUM
                       IF RCTMPND=""
                           DO ASK^RCDPEARL(.RCSTOP)
 +1        IF $DATA(ZTQUEUED)
               SET ZTREQ="@"
 +2        IF '$DATA(ZTQUEUED)
               DO ^%ZISC
 +3        KILL ^TMP($JOB,"RCEFT_AGED")
 +4        QUIT 
 +5       ;
ZROBAL()  ; Get Zero Payment Filter
 +1       ; Returns: 1 for yes, zero for no, -1 on '^' or timeout
 +2        NEW DIR,DIRUT,DTOUT,DUOUT,X,Y
 +3        SET DIR(0)="YA"
           SET DIR("A")="Include Zero payment amounts? (Y/N): "
           SET DIR("B")="YES"
 +4        DO ^DIR
 +5        IF $DATA(DUOUT)!$DATA(DIRUT)!$DATA(DTOUT)
               SET Y=-1
 +6        QUIT Y
 +7       ;
DADJCDE() ; Get Adjustment/Code Filter ;PRCA*4.5*409 Added method
 +1       ; Returns: 1 for yes, zero for no, -1 on '^' or timeout
 +2        NEW DIR,DIRUT,DTOUT,DUOUT,X,Y
 +3        SET DIR(0)="YA"
           SET DIR("A")="Display Adjustment/Code Information? (Y/N): "
           SET DIR("B")="NO"
 +4        DO ^DIR
 +5        IF $DATA(DUOUT)!$DATA(DIRUT)!$DATA(DTOUT)
               SET Y=-1
 +6        QUIT Y
 +7       ;