RCDPEFA1 ;AITC/FA - FIRST PARTY AUTO-DECREASE REPORT ; 6/12/19 7:36am
 ;;4.5;Accounts Receivable;**345,349**;Mar 20, 1995;Build 44
 ;Per VA Directive 6402, this routine should not be modified.
 ; Read ^DG(40.8) - IA 417
 ; DIVISION^VAUTOMA - IA 664
 ;
EN ; entry point for Auto-Decrease Adjustment report [RCDPE FIRST PARTY AUTO-DECREASE]
 N INPUT,RCVAUTD,DISP
 S INPUT=$$STADIV^RCDPEFA2(.RCVAUTD)                 ; Division filter
 Q:'INPUT                                            ; '^' or timeout
 S DISP=$$DETSUM^RCDPEFA2                            ; PRCA*4.5*349 - Display detailed or summary report
 Q:DISP=0
 S $P(INPUT,U,8)=DISP
 S $P(INPUT,U,7)="A"                                 ; '^' or timeout
 I DISP="D" D  ;
 . S $P(INPUT,U,7)=$$ASKPAT^RCDPEFA2                 ; PRCA*4.5*349 - Filter by Patient or 'ALL'
 Q:$P(INPUT,U,7)=0                                   ; '^' or timeout
 S $P(INPUT,U,2)="C"
 I DISP="D" S $P(INPUT,U,2)=$$ASKSORT^RCDPEFA2       ; Select Sort Criteria
 Q:$P(INPUT,U,2)=0                                   ; '^' or timeout
 S $P(INPUT,U,3)="F"
 I DISP="D" D  ;
 . S $P(INPUT,U,3)=$$SORTORD^RCDPEFA2($P(INPUT,U,2)) ; Select Sort Order
 Q:$P(INPUT,U,3)=0                                   ; '^' or timeout
 S $P(INPUT,U,4)=$$DTRNG^RCDPEFA2                    ; Select Date Range for Report
 Q:'$P(INPUT,U,4)                                    ; '^' or timeout
 S $P(INPUT,U,4)=$P($P(INPUT,U,4),"|",2,3)
 S $P(INPUT,U,6)=$$ASKLM^RCDPEARL                    ; Ask to Display in Listman Template
 Q:$P(INPUT,U,6)<0                                   ; '^' or timeout
 I $P(INPUT,U,6)=1 D  Q                              ; Compile data and call listman to display
 . D LMOUT(INPUT,.RCVAUTD,.IO)
 I DISP="D" S $P(INPUT,U,5)=$$DISPTY^RCDPEFA2        ; Select Display Type
 Q:$P(INPUT,U,5)=-1                                  ; '^' or timeout
 I $P(INPUT,U,5)=1 D INFO^RCDPEM6                    ; Display capture information for Excel
 Q:'$$DEVICE^RCDPEFA2(.IO)                           ; Ask output device
 ;
 ; Compile and Display Report data (queued) - not allowed for EXCEL
 I $P(INPUT,U,5)'=1,$D(IO("Q")) D  Q
 . N ZTDESC,ZTQUEUED,ZTRTN,ZTSAVE,ZTSK
 . S ZTRTN="REPORT^RCDPEFAD(INPUT,.RCVAUTD,.IO)"
 . S ZTDESC="EDI LOCKBOX FIRST PARTY AUTO-DECREASE REPORT"
 . S ZTSAVE("RC*")="",ZTSAVE("INPUT")="",ZTSAVE("IO*")=""
 . D ^%ZTLOAD
 . W !!,$S($G(ZTSK):"Task number "_ZTSK_" has been queued.",1:"Unable to queue this job.")
 . K IO("Q") D HOME^%ZIS
 D REPORT(INPUT,.RCVAUTD,.IO)                       ; Create report 
 Q
 ;
REPORT(INPUTS,RCVAUTD,IO) ;EP Compile and print report
 ; Input:   INPUTS   - A1^A2^A3^...^An Where:
 ;                      A1 - 1 - All divisions selected, 2 - Selected divisions
 ;                      A2 - C - Sort by Claim, N  - Sort by Patient Name
 ;                      A3 - F - sort First to Last, L  - sort Last to First
 ;                      A4 - B1|B2
 ;                           B1 - Auto-Post Start Date
 ;                           B2 - Auto-Post End Date
 ;                      A5 - 1 - Output to Excel, else 0
 ;                      A6 - 1 - Output to List Manager, else 0
 ;                      A7 - C1|C2 
 ;                           C1 - P - Filter list by Patient
 ;                                A - Show all 1st Party Auto-Decreases"
 ;                           C2 - IEN into file #2 (if C1=P, null otherwise)
 ;          RCVAUTD - Array of selected Divisions, Only passed if A1=2
 ;          IO      - Output Device
 N DTOTAL,GTOTAL,XX,ZTREQ
 U IO
 K ^TMP("RCDPEFADP",$J),^TMP("RCDPE_ADP",$J)
 D COMPILE(INPUTS,.RCVAUTD,.DTOTAL,.GTOTAL) ; Scan AR TRANSACTION file for entries in date range
 D DISP(INPUTS,.DTOTAL,.GTOTAL)             ; Display Report
 K ^TMP("RCDPEFADP",$J),^TMP("RCSELPAY",$J) ; Clear ^TMP global
 D ^%ZISC                                   ; Close device
 Q
 ;
COMPILE(INPUTS,RCVAUTD,DTOTAL,GTOTAL) ;EP Generate the Auto-Decrease report ^TMP array
 ; Input:   INPUTS              - See REPORT for details
 ;          RCVAUTD             - Array of Divisions
 ;                                Only passed if A1=2
 ; Output:  DTOTAL              - Array of totals by Auto-Post Date
 ;          GTOTAL              - Grand totals
 ;          ^TMP("RCDPEFADP",$J)- Array of report data, See SAVE for a full description
 N AMT,BEG,DAIEN,END,EXCEL,PIEN,RCBILL,RCBILL3,RCCMT,RCCOPAY,RCDT,RCDTI,RCDEBTOR,RCDIEN
 N RCSITE,RCTR,RCTRAND,RCTYPE,RCSORT,RCUSER,RC430IEN,STA,STNAM,STNUM,TRANDA,XX
 ;
 S XX=$P(INPUTS,U,4)                        ; Auto-Post Date range
 S PIEN=$P($P(INPUTS,U,7),"|",2)            ; Patient IEN filter (if any)
 S BEG=$$FMADD^XLFDT($P(XX,"|",1),-1)
 S END=$P(XX,"|",2)                         ; Auto-Post End Date
 S RCTR=0                                   ; Record counter
 S EXCEL=$P(INPUTS,U,5)                     ; 1 output to Excel, 0 otherwise
 S RCSORT=$P(INPUTS,U,2)                    ; Sort Type
 ;
 ; Scan index for auto-posted claim lines within the ERA
 ; and Save claim line detail to ^TMP global
 S ^TMP("RCDPE_FAD",$J,"TCNT")=0,^TMP("RCDPE_FAD",$J,"TAMT")=0
 ;
 ; Get IEN of 'DECREASE ADJUSTMENT' fron #430.3
 S DAIEN=$O(^PRCA(430.3,"B","DECREASE ADJUSTMENT",""))
 ;
 ; Scan AR Transaction date index for days
 S RCTRAND=BEG
 F  S RCTRAND=$O(^PRCA(433,"AT",DAIEN,RCTRAND)) Q:'RCTRAND!(RCTRAND>END)  D
 . ;
 . ; Scan AR transactions
 . S TRANDA=""
 . F  S TRANDA=$O(^PRCA(433,"AT",DAIEN,RCTRAND,TRANDA)) Q:'TRANDA  D
 . . S RC430IEN=$$GET1^DIQ(433,TRANDA_",",.03,"I")  ; Get AR ACCOUNT
 . . Q:'RC430IEN
 . . S RCSITE=$$GET1^DIQ(430,RC430IEN_",",12,"I")   ; Get SITE ien
 . . Q:'RCSITE
 . . ;
 . . ; Ignore transaction if not a selected Division
 . . I $P(INPUTS,U,1)=2,'$D(RCVAUTD(RCSITE)) Q
 . . S RCUSER=$$GET1^DIQ(433,TRANDA_",",42,"E")     ; Get user
 . . Q:RCUSER'="POSTMASTER"                         ; Is this auto-decrease?
 . . S RCBILL=$$GET1^DIQ(433,TRANDA_",",.03,"E")    ; Copay Claim #
 . . S RCBILL3=$$GET1^DIQ(433,TRANDA_",",94,"E")    ; 3rd Party #
 . . I RCBILL3="" Q                                 ; Not a 3rd party offset
 . . S XX=$O(^IB("ABIL",RCBILL,0))                  ; IEN in file #350
 . . S RCCOPAY=$$GET1^DIQ(350,XX_",",.07,"E")       ; Copay Amount
 . . ;
 . . ; Make sure this is first party - DEBTOR is a patient
 . . Q:$$GET1^DIQ(340,$$GET1^DIQ(430,RC430IEN_",",9,"I")_",",.01,"I")'["DPT"
 . . S RCDEBTOR=$$GET1^DIQ(430,RC430IEN_",",9,"E")
 . . S RCDIEN=$$GET1^DIQ(430,RC430IEN_",",9,"I")            ; IEN of file #340
 . . S RCDIEN=$P($$GET1^DIQ(340,RCDIEN_",",.01,"I"),";",1)  ; IEN of the PATIENT DEBTOR
 . . I PIEN'="",RCDIEN'=PIEN Q                              ; Not the selected patient
 . . S RCDEBTOR=$E($$GET1^DIQ(2,RCDIEN_",",.01,"E"),1,23)
 . . S RCDEBTOR=RCDEBTOR_"/"_$E($$GET1^DIQ(2,RCDIEN_",",.09,"E"),6,9)
 . . S RCDTI=$$GET1^DIQ(433,TRANDA_",",11,"I")              ; Transaction date
 . . S RCDT=$$FMTE^XLFDT(RCDTI,"2SZ")                       ; Transaction date Externam
 . . S RCAMT=$$GET1^DIQ(433,TRANDA_",",15,"E")              ; Transaction amount
 . . D DIV(RC430IEN,.STNUM,.STNAM)                          ; Station name/number
 . . S RCCMT=$$GET1^DIQ(433,TRANDA_",",41,,"RCCMT")         ; PRCA*4.5*349 - Comments
 . . D SAVE(RCDEBTOR,RCAMT,RCBILL,RCBILL3,RCCOPAY,RCDTI,RCDT,EXCEL,RCSORT,.RCTR,STNAM,STNUM,.RCCMT)
 Q
 ;
SAVE(RCDEBTOR,RCAMT,RCBILL,RCBILL3,RCOPAY,RCDTI,RCDT,EXCEL,RCSORT,RCTR,STNAM,STNUM,RCCMT) ; Put data into ^TMP
 ; Input:   RCDEBTOR            - Patient Name
 ;          RCAMT               - Auto-Decrease amount
 ;          RCBILL              - Copay Claim #
 ;          RCBILL3             - 3rd Party Claim #
 ;          RCCOPAY             - Copay Amount
 ;          RCDTI               - Auto-decrease date (internal)
 ;          RCDT                - Auto-decrease date (external)
 ;          EXCEL               - 1 output to Excel, 0 otherwise
 ;          RCSORT              - C - Sort by Claim, N - Sort by Patient Name
 ;          DTOTAL()            - Current array of totals by Auto-Decrease Date
 ;          GTOTAL              - Current Grand total
 ;          RCTR                - Record Counter
 ;          STNAM               - Station name
 ;          STNUM               - Station number
 ;          RCCMT               - PRCA*4.5*349 - Comments
 ;          ^TMP("RCDPEFADP",$J)- Current report data
 ;                                See below for a full description
 ; Output:  DTOTAL()            - Updated array of totals by Auto-Post Date
 ;          GTOTAL              - Updated Grand totals
 ;          RCTR                - Record Counter
 ;          ^TMP("RCDPEFADP",$J,A1,A2,A3) = B1^B2^B3^...^Bn  Where: 
 ;                        A1 - "EXCEL" if report to excel, fileman date if not
 ;                        A2 - Excel Line Counter if to excel, Claim # if sort by claim,
 ;                             Patient Name if sort by Name
 ;                        A3 - Record Counter
 ;                        B1 - External Station Name
 ;                        B2 - External Station Number
 ;                        B3 - External Patient Name/SSN
 ;                        B4 - Copay Amount
 ;                        B5 - Auto-Decrease Amount
 ;                        B6 - Copay Bill Number
 ;                        B7 - 3rd Party Bill Number
 ;                        B8 - Auto-Decrease Date
 ;          ^TMP("RCDPEFADP",$J,A1,A2,A3,"CMT") = Multi-line comment added for PRCA*4.5*349
 N A1,A2,XX,CNT
 S RCTR=RCTR+1
 ;
 ; If EXCEL sorting is done in EXCEL
 I EXCEL=1 D
 . S A1="EXCEL",A2=$G(^TMP("RCDPEFADP",$J,A1))+1
 . S ^TMP("RCDPEFADP",$J,A1)=A2
 ;
 ; Otherwise sort by DATE and selected criteria
 I 'EXCEL D
 . S A1=RCDTI
 . S A2=$S($E(RCSORT)="C":RCBILL,1:RCDEBTOR)
 ; 
 ; Update ^TMP gif claim level adjustments found for this claim
 S XX=STNAM_U_STNUM_U_RCDEBTOR_U_RCOPAY_U_RCAMT_U_RCBILL_U_RCBILL3_U_RCDT
 S ^TMP("RCDPEFADP",$J,A1,A2,RCTR)=XX                    ; Claim Information
 ; PRCA*4.5*349 Begin modified block - Add comments to ^TMP
 Q:$D(RCCMT)<9
 S XX="",CNT=0 F  S XX=$O(RCCMT(XX)) Q:'XX  D
 . S CNT=CNT+1
 . S ^TMP("RCDPEFADP",$J,A1,A2,RCTR,"CMT",CNT)=RCCMT(XX)
 ; PRCA*4.5*349 End modified block
 ;
 ; Update totals for date
 S $P(DTOTAL(RCDTI),U,1)=$P($G(DTOTAL(RCDTI)),U,1)+1
 S $P(DTOTAL(RCDTI),U,2)=$P($G(DTOTAL(RCDTI)),U,2)+RCAMT
 S $P(DTOTAL(RCDTI),U,3)=$P($G(DTOTAL(RCDTI)),U,3)+RCOPAY ; PRCA*4.5*349
 ;
 ; Update totals for date range
 S $P(GTOTAL,U,1)=$P($G(GTOTAL),U,1)+1
 S $P(GTOTAL,U,2)=$P($G(GTOTAL),U,2)+RCAMT
 S $P(GTOTAL,U,3)=$P($G(GTOTAL),U,3)+RCOPAY ; PRCA*4.5*349
 Q
 ;
DISP(INPUTS,DTOTAL,GTOTAL) ; Format the display for screen/printer or MS Excel
 ; Input:   INPUTS  - See REPORT for details
 ;          DTOTAL()- Array of totals by Internal Auto-Post date
 ;          GTOTAL  - Grand Totals for the selected date period
 ;          ^TMP("RCDPEFADP",$J) - See SAVE for description
 N A1,A2,A3,DATA,EXCEL,HDRINFO,LMAN,LCNT,MODE,PAGE,RCRDNUM,STOP,X,Y,DISP
 U IO
 S EXCEL=$P(INPUTS,U,5)
 S LMAN=$P(INPUTS,U,6)
 S DISP=$P(INPUTS,U,8) ; PRCA*4.5*349
 ;
 ; Header information
 S XX=$P(INPUTS,U,4)                                    ; Auto-Post Date range
 S HDRINFO("START")=$$FMTE^XLFDT($P(XX,"|",1),"2SZ")
 S HDRINFO("END")=$$FMTE^XLFDT($P(XX,"|",2),"2SZ")
 S HDRINFO("RUNDATE")=$$FMTE^XLFDT($$NOW^XLFDT,"2SZ")
 S XX=$P(INPUTS,U,2)                                    ; Sort Type
 S HDRINFO("SORT")="Sorted By: "_$S(XX="C":"Claim",XX="P":"Payer",1:"Patient Name")
 S XX=$S($P(INPUTS,U,3)="L":"Last to First",1:"First to Last")
 S HDRINFO("SORT")=HDRINFO("SORT")_" - "_XX
 S HDRINFO("DISP")="Display: "_$S(DISP="S":"SUMMARY",1:"DETAIL") ; PRCA*4.5*349
 ;
 ; Format Division filter
 S XX=$P(INPUTS,U,1)                                    ; XX=1 - All Divisions, 2- selected
 S HDRINFO("DIVISIONS")=$S(XX=2:$$LINE(.RCVAUTD),1:"ALL")
 ;
 S A1="",PAGE=0,STOP=0,LCNT=1
 I 'LMAN,DISP="S" D HDR(EXCEL,.HDRINFO,.PAGE)
 S MODE=$S($P(INPUTS,U,3)="L":-1,1:1)                   ; Mode for $ORDER
 F  D  Q:(A1="")!STOP
 . S A1=$O(^TMP("RCDPEFADP",$J,A1))
 . Q:A1=""
 . I 'LMAN,DISP="D" D  Q:STOP
 . . I PAGE D ASK(.STOP,0) Q:STOP                         ; Output to screen, quit if user wants to
 . . D HDR(EXCEL,.HDRINFO,.PAGE)                    ; Display Header
 . S A2=""
 . F  D  Q:(A2="")!STOP
 . . S A2=$O(^TMP("RCDPEFADP",$J,A1,A2),MODE)
 . . I 'EXCEL,A2="" D TOTALD^RCDPEFA2(LMAN,.HDRINFO,.PAGE,.STOP,A1,.DTOTAL,.LCNT)
 . . Q:A2=""
 . . Q:DISP="S"  ; PRCA*4.5*349 - Skip printing details if summary report
 . . S A3=0
 . . F  D  Q:'A3!STOP
 . . . S A3=$O(^TMP("RCDPEFADP",$J,A1,A2,A3))
 . . . Q:'A3
 . . . S DATA=^TMP("RCDPEFADP",$J,A1,A2,A3)     ; Auto-Decreased Claim
 . . . I EXCEL W !,DATA Q                       ; Output to Excel
 . . . I LMAN D  Q
 . . . . N RCCMT
 . . . . M RCCMT=^TMP("RCDPEFADP",$J,A1,A2,A3,"CMT")
 . . . . D LMAN^RCDPEFA2(DATA,INPUT,.RCCMT,.LCNT)
 . . . I $Y>(IOSL-4) D  Q:STOP                  ; End of page
 . . . . D ASK(.STOP,0)
 . . . . Q:STOP
 . . . . D HDR(EXCEL,.HDRINFO,.PAGE)
 . . . S Y=$P(DATA,U,3)                         ; Patient Name/SSN last 4
 . . . S $E(Y,31)=$J($P(DATA,U,4),6,2)          ; COPAY Amount
 . . . S $E(Y,39)=$J($P(DATA,U,5),6,2)          ; Auto-Decrease Amount
 . . . S $E(Y,47)=$E($P(DATA,U,6),1,11)         ; Copay Claim #
 . . . S $E(Y,60)=$E($P(DATA,U,7),1,11)         ; Third Party Claim #
 . . . S $E(Y,73)=$P(DATA,U,8)                  ; Auto-Decrease Date
 . . . W !,Y
 . . . ; PRCA*4.5*349 Begin Modified Block
 . . . I $P($P(INPUTS,U,7),"|",3)=1 D         ; Show comment detail?
 . . . . W !,?6,"Comment:  "
 . . . . N CNT
 . . . . S CNT="" F  S CNT=$O(^TMP("RCDPEFADP",$J,A1,A2,A3,"CMT",CNT)) Q:CNT=""  D
 . . . . . W ^TMP("RCDPEFADP",$J,A1,A2,A3,"CMT",CNT),!,?11
 . . . ; PRCA*4.5*349 End Modified Block
 ;
 ; Grand totals
 I $D(GTOTAL) D
 . I 'STOP,'EXCEL D                             ; Print grand total if not Excel
 . . D TOTALG^RCDPEFA2(LMAN,.HDRINFO,.PAGE,GTOTAL,.STOP,.LCNT)
 . I 'EXCEL,'LMAN D                                   ; Report finished
 . . W !,$$ENDORPRT^RCDPEARL,!
 . . D ASK(.STOP,1)
 ;
 ; Null Report
 I '$D(GTOTAL),'LMAN D
 . I PAGE=0 D HDR(EXCEL,.HDRINFO,.PAGE)
 . W !!,?26,"*** No Records to Print ***",!
 . W !,$$ENDORPRT^RCDPEARL
 . S:'$D(ZTQUEUED) X=$$ASKSTOP^RCDPELAR
 ;
 ; List manager
 I LMAN D
 . S:LCNT=1 ^TMP("RCDPE_ADP",$J,LCNT)=$J("",26)_"*** No Records to Print ***",LCNT=LCNT+1
 . S ^TMP("RCDPE_ADP",$J,LCNT)=" ",LCNT=LCNT+1
 . S ^TMP("RCDPE_ADP",$J,LCNT)=$$ENDORPRT^RCDPEARL
 ; Close device
 I '$D(ZTQUEUED) D ^%ZISC
 I $D(ZTQUEUED) S ZTREQ="@"
 Q
 ;
ASK(STOP,TYP) ; Ask to continue, if TYP=1 then prompt to finish
 ; Input:   TYP     - 1 - Prompt to finish, 0 Otherwise
 ; Output:  STOP    - 1 abort print, 0 otherwise
 N DIR,DIROUT,DIRUT,DTOUT,DUOUT
 Q:$E(IOST,1,2)'["C-"                       ; Not a terminal
 S:$G(TYP)=1 DIR("A")="Enter RETURN to finish"
 S DIR(0)="E"
 W !
 D ^DIR
 I ($D(DIRUT))!($D(DUOUT))!($D(DUOUT)) S STOP=1
 Q
 ;
DIV(STAIEN,STNUM,STNAM) ; Get the station for this ERA
 ; Input:   DAIEN   - AR ACCOUNT IEN
 ; Output:  STNUM   - Station Number
 ;          STNAM   - Station Name
 S (STNUM,STNAM)="UNKNOWN"
 Q:'STAIEN
 S STNAM=$$GET1^DIQ(430,STAIEN_",",12,"E")
 S STNUM=$$GET1^DIQ(430,STAIEN_",",12,"I")
 Q
 ;
HDR(EXCEL,HDRINFO,PAGE,NOLINE) ; Print the report header
 ; Input:   EXCEL       - 1 if output to Excel, 0 otherwise
 ;          HDRINFO()   - Array of Header information
 ;          PAGE        - Current Page Number
 ;          NOLINE      - 1 to not display Claim line header
 ;                        Optional, defaults to 0
 ; Output:  PAGE        - Updated Page Number (if EXCEL=0)
 N DIV,MSG,SUB,XX,Y,Z0,Z1
 S:'$D(NOLINE) NOLINE=0
 I EXCEL D  Q
 . W !,"STATION^STATION NUMBER^PATIENT^COPAY AMOUNT^DECREASE AMOUNT^"
 . W "COPAY BILL #^3RD PARTY BILL #^AUTO DECREASE DATE"
 ;
 S PAGE=PAGE+1
 W @IOF
 S MSG(1)="             First Party COPAY Auto-Decrease Report "
 S MSG(1)=MSG(1)_"  Page: "_PAGE
 S MSG(2)="                        Run Date: "_HDRINFO("RUNDATE")
 S Z0="Divisions: "_HDRINFO("DIVISIONS")
 S MSG(3)=$S($L(Z0)<75:$J("",75-$L(Z0)\2),1:"")_Z0
 S XX=" (Date Decrease Applied)"
 S MSG(4)="               Date Range: "_HDRINFO("START")_" - "_HDRINFO("END")_XX
 S MSG(5)="               "_HDRINFO("SORT")_"  "_HDRINFO("DISP") ; PRCA*4.5*349
 S MSG(6)="                               Copay  Decrease   Copay     3rd Party"
 I 'NOLINE D
 . S MSG(7)="Patient Name/SSN                Amt     Amt      Bill#       Bill#        Date"
 . S MSG(8)=$TR($J("",80)," ","-")
 D EN^DDIOL(.MSG)
 Q
 ;
HINFO(INPUTS,HDRINFO) ; Get header information
 ; Input:   INPUTS  - See REPORT for description
 ;          HDRINFO - Header array for ListMan, passed by ref.
 N XX
 S XX=$P(INPUTS,U,4)                        ; Auto-Post Date range
 S HDRINFO("START")=$$FMTE^XLFDT($P(XX,"|",1),"2SZ")
 S HDRINFO("END")=$$FMTE^XLFDT($P(XX,"|",2),"2SZ")
 S HDRINFO("RUNDATE")=$$FMTE^XLFDT($$NOW^XLFDT,"2SZ")
 S XX=$P(INPUTS,U,2)                        ; Sort Type
 S HDRINFO("SORT")="SORTED BY: "_$S(XX="C":"CLAIM",1:"PATIENT NAME")
 S XX=$S($P(INPUTS,U,3)="L":"LAST TO FIRST",1:"FIRST TO LAST")
 S HDRINFO("SORT")=HDRINFO("SORT")_" - "_XX
 S HDRINFO("SORT")=HDRINFO("SORT")_"  DISPLAY: "_$S($P(INPUTS,U,8)="S":"SUMMARY",1:"DETAIL")
 ;
 ; Format Division filter
 S XX=$P(INPUTS,U,1)                        ; 1 - All Divisions, 2- selected
 S HDRINFO("DIVISIONS")=$S(XX=2:$$LINE(.RCVAUTD),1:"ALL")
 Q
 ;
LINE(DIV) ; List selected stations
 ; Input:   DIV()       - Array of selected divisions
 ; Returns: Comma delimited list of selected divisions
 N LINE,P,SUB
 S LINE="",SUB="",P=0
 F  S SUB=$O(DIV(SUB)) Q:'SUB  S P=P+1,$P(LINE,", ",P)=$G(DIV(SUB))
 Q LINE
 ;
LMOUT(INPUT,RCVAUTD,IO) ; Output report to Listman
 ; Input:   INPUT   - see REPORT for description
 ;          RCVAUTD - Array of selected Divisions
 ;          IO      - Device array
 ; Output:  ^TMP("RCDPE_LAR",$J,nn) - Array of display lines (no headers)
 N HDR,HDRINFO,Z0
 D REPORT(INPUT,.RCVAUTD,.IO)           ; Get lines to be displayed
 D HINFO(INPUT,.HDRINFO)
 S HDR("TITLE")="FIRST PARTY AUTO-DECREASE"
 S HDR(1)=$J("RUN DATE: ",34)_HDRINFO("RUNDATE")
 S Z0="DIVISIONS: "_HDRINFO("DIVISIONS")
 S HDR(2)=$S($L(Z0)<75:$J("",75-$L(Z0)\2),1:"")_Z0
 S HDR(3)="               DATE RANGE: "_HDRINFO("START")_" - "_HDRINFO("END")_" (DATE DECREASE APPLIED)"
 S HDR(4)=$J("",(80-$L(HDRINFO("SORT")))\2)_HDRINFO("SORT")
 S HDR(5)=" "
 S HDR(6)="                               Copay  Decrease   Copay     3rd Party"
 S HDR(7)="Patient Name/SSN                Amt     Amt      Bill#       Bill#        Date"
 D LMRPT^RCDPEARL(.HDR,$NA(^TMP("RCDPE_ADP",$J))) ; Generate ListMan display
 K ^TMP("RCDPEFADP",$J),^TMP($J,"RCDPEFADP"),^TMP("RCDPE_ADP",$J)
 Q
 ;
 ; PRCA*4.5*349 - Subroutine added
PCENT(AMNT,COPAY) ; Return percentage of dollars auto-decreased
 Q:COPAY=0 "###"
 Q $FN(AMNT/COPAY*100,"",0)
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HRCDPEFA1   19279     printed  Sep 23, 2025@19:20:37                                                                                                                                                                                                   Page 2
RCDPEFA1  ;AITC/FA - FIRST PARTY AUTO-DECREASE REPORT ; 6/12/19 7:36am
 +1       ;;4.5;Accounts Receivable;**345,349**;Mar 20, 1995;Build 44
 +2       ;Per VA Directive 6402, this routine should not be modified.
 +3       ; Read ^DG(40.8) - IA 417
 +4       ; DIVISION^VAUTOMA - IA 664
 +5       ;
EN        ; entry point for Auto-Decrease Adjustment report [RCDPE FIRST PARTY AUTO-DECREASE]
 +1        NEW INPUT,RCVAUTD,DISP
 +2       ; Division filter
           SET INPUT=$$STADIV^RCDPEFA2(.RCVAUTD)
 +3       ; '^' or timeout
           if 'INPUT
               QUIT 
 +4       ; PRCA*4.5*349 - Display detailed or summary report
           SET DISP=$$DETSUM^RCDPEFA2
 +5        if DISP=0
               QUIT 
 +6        SET $PIECE(INPUT,U,8)=DISP
 +7       ; '^' or timeout
           SET $PIECE(INPUT,U,7)="A"
 +8       ;
           IF DISP="D"
               Begin DoDot:1
 +9       ; PRCA*4.5*349 - Filter by Patient or 'ALL'
                   SET $PIECE(INPUT,U,7)=$$ASKPAT^RCDPEFA2
               End DoDot:1
 +10      ; '^' or timeout
           if $PIECE(INPUT,U,7)=0
               QUIT 
 +11       SET $PIECE(INPUT,U,2)="C"
 +12      ; Select Sort Criteria
           IF DISP="D"
               SET $PIECE(INPUT,U,2)=$$ASKSORT^RCDPEFA2
 +13      ; '^' or timeout
           if $PIECE(INPUT,U,2)=0
               QUIT 
 +14       SET $PIECE(INPUT,U,3)="F"
 +15      ;
           IF DISP="D"
               Begin DoDot:1
 +16      ; Select Sort Order
                   SET $PIECE(INPUT,U,3)=$$SORTORD^RCDPEFA2($PIECE(INPUT,U,2))
               End DoDot:1
 +17      ; '^' or timeout
           if $PIECE(INPUT,U,3)=0
               QUIT 
 +18      ; Select Date Range for Report
           SET $PIECE(INPUT,U,4)=$$DTRNG^RCDPEFA2
 +19      ; '^' or timeout
           if '$PIECE(INPUT,U,4)
               QUIT 
 +20       SET $PIECE(INPUT,U,4)=$PIECE($PIECE(INPUT,U,4),"|",2,3)
 +21      ; Ask to Display in Listman Template
           SET $PIECE(INPUT,U,6)=$$ASKLM^RCDPEARL
 +22      ; '^' or timeout
           if $PIECE(INPUT,U,6)<0
               QUIT 
 +23      ; Compile data and call listman to display
           IF $PIECE(INPUT,U,6)=1
               Begin DoDot:1
 +24               DO LMOUT(INPUT,.RCVAUTD,.IO)
               End DoDot:1
               QUIT 
 +25      ; Select Display Type
           IF DISP="D"
               SET $PIECE(INPUT,U,5)=$$DISPTY^RCDPEFA2
 +26      ; '^' or timeout
           if $PIECE(INPUT,U,5)=-1
               QUIT 
 +27      ; Display capture information for Excel
           IF $PIECE(INPUT,U,5)=1
               DO INFO^RCDPEM6
 +28      ; Ask output device
           if '$$DEVICE^RCDPEFA2(.IO)
               QUIT 
 +29      ;
 +30      ; Compile and Display Report data (queued) - not allowed for EXCEL
 +31       IF $PIECE(INPUT,U,5)'=1
               IF $DATA(IO("Q"))
                   Begin DoDot:1
 +32                   NEW ZTDESC,ZTQUEUED,ZTRTN,ZTSAVE,ZTSK
 +33                   SET ZTRTN="REPORT^RCDPEFAD(INPUT,.RCVAUTD,.IO)"
 +34                   SET ZTDESC="EDI LOCKBOX FIRST PARTY AUTO-DECREASE REPORT"
 +35                   SET ZTSAVE("RC*")=""
                       SET ZTSAVE("INPUT")=""
                       SET ZTSAVE("IO*")=""
 +36                   DO ^%ZTLOAD
 +37                   WRITE !!,$SELECT($GET(ZTSK):"Task number "_ZTSK_" has been queued.",1:"Unable to queue this job.")
 +38                   KILL IO("Q")
                       DO HOME^%ZIS
                   End DoDot:1
                   QUIT 
 +39      ; Create report 
           DO REPORT(INPUT,.RCVAUTD,.IO)
 +40       QUIT 
 +41      ;
REPORT(INPUTS,RCVAUTD,IO) ;EP Compile and print report
 +1       ; Input:   INPUTS   - A1^A2^A3^...^An Where:
 +2       ;                      A1 - 1 - All divisions selected, 2 - Selected divisions
 +3       ;                      A2 - C - Sort by Claim, N  - Sort by Patient Name
 +4       ;                      A3 - F - sort First to Last, L  - sort Last to First
 +5       ;                      A4 - B1|B2
 +6       ;                           B1 - Auto-Post Start Date
 +7       ;                           B2 - Auto-Post End Date
 +8       ;                      A5 - 1 - Output to Excel, else 0
 +9       ;                      A6 - 1 - Output to List Manager, else 0
 +10      ;                      A7 - C1|C2 
 +11      ;                           C1 - P - Filter list by Patient
 +12      ;                                A - Show all 1st Party Auto-Decreases"
 +13      ;                           C2 - IEN into file #2 (if C1=P, null otherwise)
 +14      ;          RCVAUTD - Array of selected Divisions, Only passed if A1=2
 +15      ;          IO      - Output Device
 +16       NEW DTOTAL,GTOTAL,XX,ZTREQ
 +17       USE IO
 +18       KILL ^TMP("RCDPEFADP",$JOB),^TMP("RCDPE_ADP",$JOB)
 +19      ; Scan AR TRANSACTION file for entries in date range
           DO COMPILE(INPUTS,.RCVAUTD,.DTOTAL,.GTOTAL)
 +20      ; Display Report
           DO DISP(INPUTS,.DTOTAL,.GTOTAL)
 +21      ; Clear ^TMP global
           KILL ^TMP("RCDPEFADP",$JOB),^TMP("RCSELPAY",$JOB)
 +22      ; Close device
           DO ^%ZISC
 +23       QUIT 
 +24      ;
COMPILE(INPUTS,RCVAUTD,DTOTAL,GTOTAL) ;EP Generate the Auto-Decrease report ^TMP array
 +1       ; Input:   INPUTS              - See REPORT for details
 +2       ;          RCVAUTD             - Array of Divisions
 +3       ;                                Only passed if A1=2
 +4       ; Output:  DTOTAL              - Array of totals by Auto-Post Date
 +5       ;          GTOTAL              - Grand totals
 +6       ;          ^TMP("RCDPEFADP",$J)- Array of report data, See SAVE for a full description
 +7        NEW AMT,BEG,DAIEN,END,EXCEL,PIEN,RCBILL,RCBILL3,RCCMT,RCCOPAY,RCDT,RCDTI,RCDEBTOR,RCDIEN
 +8        NEW RCSITE,RCTR,RCTRAND,RCTYPE,RCSORT,RCUSER,RC430IEN,STA,STNAM,STNUM,TRANDA,XX
 +9       ;
 +10      ; Auto-Post Date range
           SET XX=$PIECE(INPUTS,U,4)
 +11      ; Patient IEN filter (if any)
           SET PIEN=$PIECE($PIECE(INPUTS,U,7),"|",2)
 +12       SET BEG=$$FMADD^XLFDT($PIECE(XX,"|",1),-1)
 +13      ; Auto-Post End Date
           SET END=$PIECE(XX,"|",2)
 +14      ; Record counter
           SET RCTR=0
 +15      ; 1 output to Excel, 0 otherwise
           SET EXCEL=$PIECE(INPUTS,U,5)
 +16      ; Sort Type
           SET RCSORT=$PIECE(INPUTS,U,2)
 +17      ;
 +18      ; Scan index for auto-posted claim lines within the ERA
 +19      ; and Save claim line detail to ^TMP global
 +20       SET ^TMP("RCDPE_FAD",$JOB,"TCNT")=0
           SET ^TMP("RCDPE_FAD",$JOB,"TAMT")=0
 +21      ;
 +22      ; Get IEN of 'DECREASE ADJUSTMENT' fron #430.3
 +23       SET DAIEN=$ORDER(^PRCA(430.3,"B","DECREASE ADJUSTMENT",""))
 +24      ;
 +25      ; Scan AR Transaction date index for days
 +26       SET RCTRAND=BEG
 +27       FOR 
               SET RCTRAND=$ORDER(^PRCA(433,"AT",DAIEN,RCTRAND))
               if 'RCTRAND!(RCTRAND>END)
                   QUIT 
               Begin DoDot:1
 +28      ;
 +29      ; Scan AR transactions
 +30               SET TRANDA=""
 +31               FOR 
                       SET TRANDA=$ORDER(^PRCA(433,"AT",DAIEN,RCTRAND,TRANDA))
                       if 'TRANDA
                           QUIT 
                       Begin DoDot:2
 +32      ; Get AR ACCOUNT
                           SET RC430IEN=$$GET1^DIQ(433,TRANDA_",",.03,"I")
 +33                       if 'RC430IEN
                               QUIT 
 +34      ; Get SITE ien
                           SET RCSITE=$$GET1^DIQ(430,RC430IEN_",",12,"I")
 +35                       if 'RCSITE
                               QUIT 
 +36      ;
 +37      ; Ignore transaction if not a selected Division
 +38                       IF $PIECE(INPUTS,U,1)=2
                               IF '$DATA(RCVAUTD(RCSITE))
                                   QUIT 
 +39      ; Get user
                           SET RCUSER=$$GET1^DIQ(433,TRANDA_",",42,"E")
 +40      ; Is this auto-decrease?
                           if RCUSER'="POSTMASTER"
                               QUIT 
 +41      ; Copay Claim #
                           SET RCBILL=$$GET1^DIQ(433,TRANDA_",",.03,"E")
 +42      ; 3rd Party #
                           SET RCBILL3=$$GET1^DIQ(433,TRANDA_",",94,"E")
 +43      ; Not a 3rd party offset
                           IF RCBILL3=""
                               QUIT 
 +44      ; IEN in file #350
                           SET XX=$ORDER(^IB("ABIL",RCBILL,0))
 +45      ; Copay Amount
                           SET RCCOPAY=$$GET1^DIQ(350,XX_",",.07,"E")
 +46      ;
 +47      ; Make sure this is first party - DEBTOR is a patient
 +48                       if $$GET1^DIQ(340,$$GET1^DIQ(430,RC430IEN_",",9,"I")_",",.01,"I")'["DPT"
                               QUIT 
 +49                       SET RCDEBTOR=$$GET1^DIQ(430,RC430IEN_",",9,"E")
 +50      ; IEN of file #340
                           SET RCDIEN=$$GET1^DIQ(430,RC430IEN_",",9,"I")
 +51      ; IEN of the PATIENT DEBTOR
                           SET RCDIEN=$PIECE($$GET1^DIQ(340,RCDIEN_",",.01,"I"),";",1)
 +52      ; Not the selected patient
                           IF PIEN'=""
                               IF RCDIEN'=PIEN
                                   QUIT 
 +53                       SET RCDEBTOR=$EXTRACT($$GET1^DIQ(2,RCDIEN_",",.01,"E"),1,23)
 +54                       SET RCDEBTOR=RCDEBTOR_"/"_$EXTRACT($$GET1^DIQ(2,RCDIEN_",",.09,"E"),6,9)
 +55      ; Transaction date
                           SET RCDTI=$$GET1^DIQ(433,TRANDA_",",11,"I")
 +56      ; Transaction date Externam
                           SET RCDT=$$FMTE^XLFDT(RCDTI,"2SZ")
 +57      ; Transaction amount
                           SET RCAMT=$$GET1^DIQ(433,TRANDA_",",15,"E")
 +58      ; Station name/number
                           DO DIV(RC430IEN,.STNUM,.STNAM)
 +59      ; PRCA*4.5*349 - Comments
                           SET RCCMT=$$GET1^DIQ(433,TRANDA_",",41,,"RCCMT")
 +60                       DO SAVE(RCDEBTOR,RCAMT,RCBILL,RCBILL3,RCCOPAY,RCDTI,RCDT,EXCEL,RCSORT,.RCTR,STNAM,STNUM,.RCCMT)
                       End DoDot:2
               End DoDot:1
 +61       QUIT 
 +62      ;
SAVE(RCDEBTOR,RCAMT,RCBILL,RCBILL3,RCOPAY,RCDTI,RCDT,EXCEL,RCSORT,RCTR,STNAM,STNUM,RCCMT) ; Put data into ^TMP
 +1       ; Input:   RCDEBTOR            - Patient Name
 +2       ;          RCAMT               - Auto-Decrease amount
 +3       ;          RCBILL              - Copay Claim #
 +4       ;          RCBILL3             - 3rd Party Claim #
 +5       ;          RCCOPAY             - Copay Amount
 +6       ;          RCDTI               - Auto-decrease date (internal)
 +7       ;          RCDT                - Auto-decrease date (external)
 +8       ;          EXCEL               - 1 output to Excel, 0 otherwise
 +9       ;          RCSORT              - C - Sort by Claim, N - Sort by Patient Name
 +10      ;          DTOTAL()            - Current array of totals by Auto-Decrease Date
 +11      ;          GTOTAL              - Current Grand total
 +12      ;          RCTR                - Record Counter
 +13      ;          STNAM               - Station name
 +14      ;          STNUM               - Station number
 +15      ;          RCCMT               - PRCA*4.5*349 - Comments
 +16      ;          ^TMP("RCDPEFADP",$J)- Current report data
 +17      ;                                See below for a full description
 +18      ; Output:  DTOTAL()            - Updated array of totals by Auto-Post Date
 +19      ;          GTOTAL              - Updated Grand totals
 +20      ;          RCTR                - Record Counter
 +21      ;          ^TMP("RCDPEFADP",$J,A1,A2,A3) = B1^B2^B3^...^Bn  Where: 
 +22      ;                        A1 - "EXCEL" if report to excel, fileman date if not
 +23      ;                        A2 - Excel Line Counter if to excel, Claim # if sort by claim,
 +24      ;                             Patient Name if sort by Name
 +25      ;                        A3 - Record Counter
 +26      ;                        B1 - External Station Name
 +27      ;                        B2 - External Station Number
 +28      ;                        B3 - External Patient Name/SSN
 +29      ;                        B4 - Copay Amount
 +30      ;                        B5 - Auto-Decrease Amount
 +31      ;                        B6 - Copay Bill Number
 +32      ;                        B7 - 3rd Party Bill Number
 +33      ;                        B8 - Auto-Decrease Date
 +34      ;          ^TMP("RCDPEFADP",$J,A1,A2,A3,"CMT") = Multi-line comment added for PRCA*4.5*349
 +35       NEW A1,A2,XX,CNT
 +36       SET RCTR=RCTR+1
 +37      ;
 +38      ; If EXCEL sorting is done in EXCEL
 +39       IF EXCEL=1
               Begin DoDot:1
 +40               SET A1="EXCEL"
                   SET A2=$GET(^TMP("RCDPEFADP",$JOB,A1))+1
 +41               SET ^TMP("RCDPEFADP",$JOB,A1)=A2
               End DoDot:1
 +42      ;
 +43      ; Otherwise sort by DATE and selected criteria
 +44       IF 'EXCEL
               Begin DoDot:1
 +45               SET A1=RCDTI
 +46               SET A2=$SELECT($EXTRACT(RCSORT)="C":RCBILL,1:RCDEBTOR)
               End DoDot:1
 +47      ; 
 +48      ; Update ^TMP gif claim level adjustments found for this claim
 +49       SET XX=STNAM_U_STNUM_U_RCDEBTOR_U_RCOPAY_U_RCAMT_U_RCBILL_U_RCBILL3_U_RCDT
 +50      ; Claim Information
           SET ^TMP("RCDPEFADP",$JOB,A1,A2,RCTR)=XX
 +51      ; PRCA*4.5*349 Begin modified block - Add comments to ^TMP
 +52       if $DATA(RCCMT)<9
               QUIT 
 +53       SET XX=""
           SET CNT=0
           FOR 
               SET XX=$ORDER(RCCMT(XX))
               if 'XX
                   QUIT 
               Begin DoDot:1
 +54               SET CNT=CNT+1
 +55               SET ^TMP("RCDPEFADP",$JOB,A1,A2,RCTR,"CMT",CNT)=RCCMT(XX)
               End DoDot:1
 +56      ; PRCA*4.5*349 End modified block
 +57      ;
 +58      ; Update totals for date
 +59       SET $PIECE(DTOTAL(RCDTI),U,1)=$PIECE($GET(DTOTAL(RCDTI)),U,1)+1
 +60       SET $PIECE(DTOTAL(RCDTI),U,2)=$PIECE($GET(DTOTAL(RCDTI)),U,2)+RCAMT
 +61      ; PRCA*4.5*349
           SET $PIECE(DTOTAL(RCDTI),U,3)=$PIECE($GET(DTOTAL(RCDTI)),U,3)+RCOPAY
 +62      ;
 +63      ; Update totals for date range
 +64       SET $PIECE(GTOTAL,U,1)=$PIECE($GET(GTOTAL),U,1)+1
 +65       SET $PIECE(GTOTAL,U,2)=$PIECE($GET(GTOTAL),U,2)+RCAMT
 +66      ; PRCA*4.5*349
           SET $PIECE(GTOTAL,U,3)=$PIECE($GET(GTOTAL),U,3)+RCOPAY
 +67       QUIT 
 +68      ;
DISP(INPUTS,DTOTAL,GTOTAL) ; Format the display for screen/printer or MS Excel
 +1       ; Input:   INPUTS  - See REPORT for details
 +2       ;          DTOTAL()- Array of totals by Internal Auto-Post date
 +3       ;          GTOTAL  - Grand Totals for the selected date period
 +4       ;          ^TMP("RCDPEFADP",$J) - See SAVE for description
 +5        NEW A1,A2,A3,DATA,EXCEL,HDRINFO,LMAN,LCNT,MODE,PAGE,RCRDNUM,STOP,X,Y,DISP
 +6        USE IO
 +7        SET EXCEL=$PIECE(INPUTS,U,5)
 +8        SET LMAN=$PIECE(INPUTS,U,6)
 +9       ; PRCA*4.5*349
           SET DISP=$PIECE(INPUTS,U,8)
 +10      ;
 +11      ; Header information
 +12      ; Auto-Post Date range
           SET XX=$PIECE(INPUTS,U,4)
 +13       SET HDRINFO("START")=$$FMTE^XLFDT($PIECE(XX,"|",1),"2SZ")
 +14       SET HDRINFO("END")=$$FMTE^XLFDT($PIECE(XX,"|",2),"2SZ")
 +15       SET HDRINFO("RUNDATE")=$$FMTE^XLFDT($$NOW^XLFDT,"2SZ")
 +16      ; Sort Type
           SET XX=$PIECE(INPUTS,U,2)
 +17       SET HDRINFO("SORT")="Sorted By: "_$SELECT(XX="C":"Claim",XX="P":"Payer",1:"Patient Name")
 +18       SET XX=$SELECT($PIECE(INPUTS,U,3)="L":"Last to First",1:"First to Last")
 +19       SET HDRINFO("SORT")=HDRINFO("SORT")_" - "_XX
 +20      ; PRCA*4.5*349
           SET HDRINFO("DISP")="Display: "_$SELECT(DISP="S":"SUMMARY",1:"DETAIL")
 +21      ;
 +22      ; Format Division filter
 +23      ; XX=1 - All Divisions, 2- selected
           SET XX=$PIECE(INPUTS,U,1)
 +24       SET HDRINFO("DIVISIONS")=$SELECT(XX=2:$$LINE(.RCVAUTD),1:"ALL")
 +25      ;
 +26       SET A1=""
           SET PAGE=0
           SET STOP=0
           SET LCNT=1
 +27       IF 'LMAN
               IF DISP="S"
                   DO HDR(EXCEL,.HDRINFO,.PAGE)
 +28      ; Mode for $ORDER
           SET MODE=$SELECT($PIECE(INPUTS,U,3)="L":-1,1:1)
 +29       FOR 
               Begin DoDot:1
 +30               SET A1=$ORDER(^TMP("RCDPEFADP",$JOB,A1))
 +31               if A1=""
                       QUIT 
 +32               IF 'LMAN
                       IF DISP="D"
                           Begin DoDot:2
 +33      ; Output to screen, quit if user wants to
                               IF PAGE
                                   DO ASK(.STOP,0)
                                   if STOP
                                       QUIT 
 +34      ; Display Header
                               DO HDR(EXCEL,.HDRINFO,.PAGE)
                           End DoDot:2
                           if STOP
                               QUIT 
 +35               SET A2=""
 +36               FOR 
                       Begin DoDot:2
 +37                       SET A2=$ORDER(^TMP("RCDPEFADP",$JOB,A1,A2),MODE)
 +38                       IF 'EXCEL
                               IF A2=""
                                   DO TOTALD^RCDPEFA2(LMAN,.HDRINFO,.PAGE,.STOP,A1,.DTOTAL,.LCNT)
 +39                       if A2=""
                               QUIT 
 +40      ; PRCA*4.5*349 - Skip printing details if summary report
                           if DISP="S"
                               QUIT 
 +41                       SET A3=0
 +42                       FOR 
                               Begin DoDot:3
 +43                               SET A3=$ORDER(^TMP("RCDPEFADP",$JOB,A1,A2,A3))
 +44                               if 'A3
                                       QUIT 
 +45      ; Auto-Decreased Claim
                                   SET DATA=^TMP("RCDPEFADP",$JOB,A1,A2,A3)
 +46      ; Output to Excel
                                   IF EXCEL
                                       WRITE !,DATA
                                       QUIT 
 +47                               IF LMAN
                                       Begin DoDot:4
 +48                                       NEW RCCMT
 +49                                       MERGE RCCMT=^TMP("RCDPEFADP",$JOB,A1,A2,A3,"CMT")
 +50                                       DO LMAN^RCDPEFA2(DATA,INPUT,.RCCMT,.LCNT)
                                       End DoDot:4
                                       QUIT 
 +51      ; End of page
                                   IF $Y>(IOSL-4)
                                       Begin DoDot:4
 +52                                       DO ASK(.STOP,0)
 +53                                       if STOP
                                               QUIT 
 +54                                       DO HDR(EXCEL,.HDRINFO,.PAGE)
                                       End DoDot:4
                                       if STOP
                                           QUIT 
 +55      ; Patient Name/SSN last 4
                                   SET Y=$PIECE(DATA,U,3)
 +56      ; COPAY Amount
                                   SET $EXTRACT(Y,31)=$JUSTIFY($PIECE(DATA,U,4),6,2)
 +57      ; Auto-Decrease Amount
                                   SET $EXTRACT(Y,39)=$JUSTIFY($PIECE(DATA,U,5),6,2)
 +58      ; Copay Claim #
                                   SET $EXTRACT(Y,47)=$EXTRACT($PIECE(DATA,U,6),1,11)
 +59      ; Third Party Claim #
                                   SET $EXTRACT(Y,60)=$EXTRACT($PIECE(DATA,U,7),1,11)
 +60      ; Auto-Decrease Date
                                   SET $EXTRACT(Y,73)=$PIECE(DATA,U,8)
 +61                               WRITE !,Y
 +62      ; PRCA*4.5*349 Begin Modified Block
 +63      ; Show comment detail?
                                   IF $PIECE($PIECE(INPUTS,U,7),"|",3)=1
                                       Begin DoDot:4
 +64                                       WRITE !,?6,"Comment:  "
 +65                                       NEW CNT
 +66                                       SET CNT=""
                                           FOR 
                                               SET CNT=$ORDER(^TMP("RCDPEFADP",$JOB,A1,A2,A3,"CMT",CNT))
                                               if CNT=""
                                                   QUIT 
                                               Begin DoDot:5
 +67                                               WRITE ^TMP("RCDPEFADP",$JOB,A1,A2,A3,"CMT",CNT),!,?11
                                               End DoDot:5
                                       End DoDot:4
 +68      ; PRCA*4.5*349 End Modified Block
                               End DoDot:3
                               if 'A3!STOP
                                   QUIT 
                       End DoDot:2
                       if (A2="")!STOP
                           QUIT 
               End DoDot:1
               if (A1="")!STOP
                   QUIT 
 +69      ;
 +70      ; Grand totals
 +71       IF $DATA(GTOTAL)
               Begin DoDot:1
 +72      ; Print grand total if not Excel
                   IF 'STOP
                       IF 'EXCEL
                           Begin DoDot:2
 +73                           DO TOTALG^RCDPEFA2(LMAN,.HDRINFO,.PAGE,GTOTAL,.STOP,.LCNT)
                           End DoDot:2
 +74      ; Report finished
                   IF 'EXCEL
                       IF 'LMAN
                           Begin DoDot:2
 +75                           WRITE !,$$ENDORPRT^RCDPEARL,!
 +76                           DO ASK(.STOP,1)
                           End DoDot:2
               End DoDot:1
 +77      ;
 +78      ; Null Report
 +79       IF '$DATA(GTOTAL)
               IF 'LMAN
                   Begin DoDot:1
 +80                   IF PAGE=0
                           DO HDR(EXCEL,.HDRINFO,.PAGE)
 +81                   WRITE !!,?26,"*** No Records to Print ***",!
 +82                   WRITE !,$$ENDORPRT^RCDPEARL
 +83                   if '$DATA(ZTQUEUED)
                           SET X=$$ASKSTOP^RCDPELAR
                   End DoDot:1
 +84      ;
 +85      ; List manager
 +86       IF LMAN
               Begin DoDot:1
 +87               if LCNT=1
                       SET ^TMP("RCDPE_ADP",$JOB,LCNT)=$JUSTIFY("",26)_"*** No Records to Print ***"
                       SET LCNT=LCNT+1
 +88               SET ^TMP("RCDPE_ADP",$JOB,LCNT)=" "
                   SET LCNT=LCNT+1
 +89               SET ^TMP("RCDPE_ADP",$JOB,LCNT)=$$ENDORPRT^RCDPEARL
               End DoDot:1
 +90      ; Close device
 +91       IF '$DATA(ZTQUEUED)
               DO ^%ZISC
 +92       IF $DATA(ZTQUEUED)
               SET ZTREQ="@"
 +93       QUIT 
 +94      ;
ASK(STOP,TYP) ; Ask to continue, if TYP=1 then prompt to finish
 +1       ; Input:   TYP     - 1 - Prompt to finish, 0 Otherwise
 +2       ; Output:  STOP    - 1 abort print, 0 otherwise
 +3        NEW DIR,DIROUT,DIRUT,DTOUT,DUOUT
 +4       ; Not a terminal
           if $EXTRACT(IOST,1,2)'["C-"
               QUIT 
 +5        if $GET(TYP)=1
               SET DIR("A")="Enter RETURN to finish"
 +6        SET DIR(0)="E"
 +7        WRITE !
 +8        DO ^DIR
 +9        IF ($DATA(DIRUT))!($DATA(DUOUT))!($DATA(DUOUT))
               SET STOP=1
 +10       QUIT 
 +11      ;
DIV(STAIEN,STNUM,STNAM) ; Get the station for this ERA
 +1       ; Input:   DAIEN   - AR ACCOUNT IEN
 +2       ; Output:  STNUM   - Station Number
 +3       ;          STNAM   - Station Name
 +4        SET (STNUM,STNAM)="UNKNOWN"
 +5        if 'STAIEN
               QUIT 
 +6        SET STNAM=$$GET1^DIQ(430,STAIEN_",",12,"E")
 +7        SET STNUM=$$GET1^DIQ(430,STAIEN_",",12,"I")
 +8        QUIT 
 +9       ;
HDR(EXCEL,HDRINFO,PAGE,NOLINE) ; Print the report header
 +1       ; Input:   EXCEL       - 1 if output to Excel, 0 otherwise
 +2       ;          HDRINFO()   - Array of Header information
 +3       ;          PAGE        - Current Page Number
 +4       ;          NOLINE      - 1 to not display Claim line header
 +5       ;                        Optional, defaults to 0
 +6       ; Output:  PAGE        - Updated Page Number (if EXCEL=0)
 +7        NEW DIV,MSG,SUB,XX,Y,Z0,Z1
 +8        if '$DATA(NOLINE)
               SET NOLINE=0
 +9        IF EXCEL
               Begin DoDot:1
 +10               WRITE !,"STATION^STATION NUMBER^PATIENT^COPAY AMOUNT^DECREASE AMOUNT^"
 +11               WRITE "COPAY BILL #^3RD PARTY BILL #^AUTO DECREASE DATE"
               End DoDot:1
               QUIT 
 +12      ;
 +13       SET PAGE=PAGE+1
 +14       WRITE @IOF
 +15       SET MSG(1)="             First Party COPAY Auto-Decrease Report "
 +16       SET MSG(1)=MSG(1)_"  Page: "_PAGE
 +17       SET MSG(2)="                        Run Date: "_HDRINFO("RUNDATE")
 +18       SET Z0="Divisions: "_HDRINFO("DIVISIONS")
 +19       SET MSG(3)=$SELECT($LENGTH(Z0)<75:$JUSTIFY("",75-$LENGTH(Z0)\2),1:"")_Z0
 +20       SET XX=" (Date Decrease Applied)"
 +21       SET MSG(4)="               Date Range: "_HDRINFO("START")_" - "_HDRINFO("END")_XX
 +22      ; PRCA*4.5*349
           SET MSG(5)="               "_HDRINFO("SORT")_"  "_HDRINFO("DISP")
 +23       SET MSG(6)="                               Copay  Decrease   Copay     3rd Party"
 +24       IF 'NOLINE
               Begin DoDot:1
 +25               SET MSG(7)="Patient Name/SSN                Amt     Amt      Bill#       Bill#        Date"
 +26               SET MSG(8)=$TRANSLATE($JUSTIFY("",80)," ","-")
               End DoDot:1
 +27       DO EN^DDIOL(.MSG)
 +28       QUIT 
 +29      ;
HINFO(INPUTS,HDRINFO) ; Get header information
 +1       ; Input:   INPUTS  - See REPORT for description
 +2       ;          HDRINFO - Header array for ListMan, passed by ref.
 +3        NEW XX
 +4       ; Auto-Post Date range
           SET XX=$PIECE(INPUTS,U,4)
 +5        SET HDRINFO("START")=$$FMTE^XLFDT($PIECE(XX,"|",1),"2SZ")
 +6        SET HDRINFO("END")=$$FMTE^XLFDT($PIECE(XX,"|",2),"2SZ")
 +7        SET HDRINFO("RUNDATE")=$$FMTE^XLFDT($$NOW^XLFDT,"2SZ")
 +8       ; Sort Type
           SET XX=$PIECE(INPUTS,U,2)
 +9        SET HDRINFO("SORT")="SORTED BY: "_$SELECT(XX="C":"CLAIM",1:"PATIENT NAME")
 +10       SET XX=$SELECT($PIECE(INPUTS,U,3)="L":"LAST TO FIRST",1:"FIRST TO LAST")
 +11       SET HDRINFO("SORT")=HDRINFO("SORT")_" - "_XX
 +12       SET HDRINFO("SORT")=HDRINFO("SORT")_"  DISPLAY: "_$SELECT($PIECE(INPUTS,U,8)="S":"SUMMARY",1:"DETAIL")
 +13      ;
 +14      ; Format Division filter
 +15      ; 1 - All Divisions, 2- selected
           SET XX=$PIECE(INPUTS,U,1)
 +16       SET HDRINFO("DIVISIONS")=$SELECT(XX=2:$$LINE(.RCVAUTD),1:"ALL")
 +17       QUIT 
 +18      ;
LINE(DIV) ; List selected stations
 +1       ; Input:   DIV()       - Array of selected divisions
 +2       ; Returns: Comma delimited list of selected divisions
 +3        NEW LINE,P,SUB
 +4        SET LINE=""
           SET SUB=""
           SET P=0
 +5        FOR 
               SET SUB=$ORDER(DIV(SUB))
               if 'SUB
                   QUIT 
               SET P=P+1
               SET $PIECE(LINE,", ",P)=$GET(DIV(SUB))
 +6        QUIT LINE
 +7       ;
LMOUT(INPUT,RCVAUTD,IO) ; Output report to Listman
 +1       ; Input:   INPUT   - see REPORT for description
 +2       ;          RCVAUTD - Array of selected Divisions
 +3       ;          IO      - Device array
 +4       ; Output:  ^TMP("RCDPE_LAR",$J,nn) - Array of display lines (no headers)
 +5        NEW HDR,HDRINFO,Z0
 +6       ; Get lines to be displayed
           DO REPORT(INPUT,.RCVAUTD,.IO)
 +7        DO HINFO(INPUT,.HDRINFO)
 +8        SET HDR("TITLE")="FIRST PARTY AUTO-DECREASE"
 +9        SET HDR(1)=$JUSTIFY("RUN DATE: ",34)_HDRINFO("RUNDATE")
 +10       SET Z0="DIVISIONS: "_HDRINFO("DIVISIONS")
 +11       SET HDR(2)=$SELECT($LENGTH(Z0)<75:$JUSTIFY("",75-$LENGTH(Z0)\2),1:"")_Z0
 +12       SET HDR(3)="               DATE RANGE: "_HDRINFO("START")_" - "_HDRINFO("END")_" (DATE DECREASE APPLIED)"
 +13       SET HDR(4)=$JUSTIFY("",(80-$LENGTH(HDRINFO("SORT")))\2)_HDRINFO("SORT")
 +14       SET HDR(5)=" "
 +15       SET HDR(6)="                               Copay  Decrease   Copay     3rd Party"
 +16       SET HDR(7)="Patient Name/SSN                Amt     Amt      Bill#       Bill#        Date"
 +17      ; Generate ListMan display
           DO LMRPT^RCDPEARL(.HDR,$NAME(^TMP("RCDPE_ADP",$JOB)))
 +18       KILL ^TMP("RCDPEFADP",$JOB),^TMP($JOB,"RCDPEFADP"),^TMP("RCDPE_ADP",$JOB)
 +19       QUIT 
 +20      ;
 +21      ; PRCA*4.5*349 - Subroutine added
PCENT(AMNT,COPAY) ; Return percentage of dollars auto-decreased
 +1        if COPAY=0
               QUIT "###"
 +2        QUIT $FNUMBER(AMNT/COPAY*100,"",0)