- 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 Feb 18, 2025@23:10:59 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)