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

RCDPEAPP.m

Go to the documentation of this file.
  1. RCDPEAPP ;OIFO-BAYPINES/PJH - AUTO POST REPORT ;Dec 20, 2014@18:42
  1. ;;4.5;Accounts Receivable;**298,304,326,345,424,432**;Mar 20, 1995;Build 16
  1. ;Per VA Directive 6402, this routine should not be modified.
  1. ;Read ^DGCR(399) via Private IA 3820
  1. ;Read ^DG(40.8) via Controlled IA 417
  1. ;Read ^IBM(361.1) via Private IA 4051
  1. ;Use DIVISION^VAUTOMA via Controlled IA 664
  1. RPT ; entry point for Auto-Post Report [RCDPE AUTO-POST REPORT]
  1. N POP,RCDISP,RCDIV,RCDIVS,RCDTRNG,RCJOB,RCLAIM,RCPAGE,RCPAR,RCPARRAY
  1. N RCPAY,RCPAYMNT,RCPROG,RCRANGE ; PRCA*4.5*424 added RCPAYMNT
  1. N RCSORT,RCTYPE,RCWHICH,STANAM,STANUM,X,Y
  1. S (RCDTRNG,RCPAGE)=0,RCPROG="RCDPEAPP",RCJOB=$J ; Initialize page and start point
  1. S RCDIV=$$STADIV(.RCDIVS) Q:'RCDIV ; Select Filter/Sort by Division
  1. S RCTYPE=$$DETORSUM() Q:RCTYPE=-1 ; Detail or Summary mode
  1. S RCPAYMNT=$$PAYMNT^RCDPEAPQ() Q:RCPAYMNT=-1 ; PRCA*4.5*424 - ERAs with or without payments or both
  1. ;
  1. S RCLAIM=$$RTYPE^RCDPEU1() Q:RCLAIM=-1
  1. S RCWHICH=$$NMORTIN() Q:RCWHICH=-1
  1. ;
  1. S RCPAR("SELC")=$$PAYRNG^RCDPEU1(0,1,RCWHICH)
  1. Q:RCPAR("SELC")=-1
  1. S RCPAY=RCPAR("SELC")
  1. ;
  1. I RCPAR("SELC")'="A" D Q:XX=-1
  1. . S RCPAR("TYPE")=RCLAIM
  1. . S RCPAR("SRCH")=$S(RCWHICH=2:"T",1:"N") ; prompt for payers we do want
  1. . S RCPAR("FILE")=344.4
  1. . S RCPAR("DICA")="Select Insurance Company"_$S(RCWHICH=1:" NAME: ",1:" TIN: ")
  1. . S XX=$$SELPAY^RCDPEU1(.RCPAR)
  1. ;
  1. S RCSORT=$$SORTT() Q:RCSORT=-1 ; Select Sort
  1. S RCRANGE=$$DTRNG() Q:RCRANGE=0 ; Select Date Range for Report
  1. I RCTYPE="S" S RCDISP=0 ; Excel not implemented for summary report - PRCA*4.5*345
  1. E S RCDISP=$$DISPTY() Q:RCDISP=-1 ; Output to Excel?
  1. I RCDISP D INFO^RCDPEM6 ; Display capture information for Excel
  1. ;
  1. I 'RCDISP W !,"This report requires 132 column display."
  1. S %ZIS="QM" D ^%ZIS Q:POP ; Select output device
  1. ;
  1. ; Option to queue
  1. I 'RCDISP,$D(IO("Q")) D Q
  1. . N ZTDESC,ZTQUEUED,ZTRTN,ZTSAVE,ZTSK
  1. . S ZTRTN="REPORT^RCDPEAPP"
  1. . S ZTDESC="EDI LOCKBOX AUTO POST REPORT"
  1. . S ZTSAVE("RC*")="" ;**FA** ,ZTSAVE("VAUTD")=""
  1. . S ZTSAVE("^TMP(""RCDPEU1"",$J,")=""
  1. . D ^%ZTLOAD
  1. . I $D(ZTSK) W !!,"Task number "_ZTSK_" was queued."
  1. . E W !!,"Unable to queue this job."
  1. . K IO("Q")
  1. . D HOME^%ZIS
  1. ;
  1. D REPORT ; Compile and print report
  1. Q
  1. ;
  1. STADIV(DIVS) ; Division/Station Filter/Sort
  1. ; Input: None
  1. ; Output: DIVS(A1)=A1^A3 Selected Divisions (if not 'ALL') Where:
  1. ; A1 - Division IEN
  1. ; A2 - Division Name
  1. ; A3 - Station Number
  1. ; Returns: -1 - User ^ or timed out
  1. ; 1 - All divisions selected
  1. ; 2 - Selected Divisions
  1. N DIR,DIRUT,DIROUT,DIV,DTOUT,DUOUT,STNUM,VAUTD,Y
  1. D DIVISION^VAUTOMA Q:Y<0 -1 ; IA 664
  1. I VAUTD=1 S RCDIV=1 Q 1 ; All Divisions selected
  1. K DIVS
  1. S DIV=""
  1. F D Q:DIV=""
  1. . S DIV=$O(VAUTD(DIV))
  1. . Q:DIV=""
  1. . S STNUM=$$GET1^DIQ(40.8,DIV,1,"E")
  1. . S:STNUM="" STNUM="UNKNOWN"
  1. . S DIVS(DIV)=VAUTD(DIV)_"^"_STNUM
  1. Q 2 ; Some Divisions selected
  1. ;
  1. DETORSUM() ; Ask the user wants to see the detail or summary report
  1. ; Input: None
  1. ; Returns: -1 - User ^ or timed out
  1. ; D - Detail Mode
  1. ; S - Summary Mode
  1. N DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,XX,Y
  1. S DIR(0)="SA^S:SUMMARY;D:DETAIL;",DIR("A")="Display (S)UMMARY or (D)ETAIL Format?: "
  1. S DIR("B")="DETAIL"
  1. S XX="Select 'SUMMARY' to see the summary report or "
  1. S DIR("?")=XX_"'DETAIL' to see the detail report"
  1. D ^DIR
  1. Q:$D(DTOUT)!$D(DUOUT) -1
  1. Q Y
  1. ;
  1. NMORTIN() ; EP - Ask the user if they want to filter by Payer Name or TIN
  1. ; Input: None
  1. ; Returns: -1 - User ^ or timed out
  1. ; 1 - Filter by Payer Name
  1. ; 2 - Filter by Payer TIN
  1. N DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
  1. S DIR(0)="SA^N:NAME;T:TIN;"
  1. S DIR("A")="Select Insurance Companies by NAME or TIN: "
  1. S DIR("B")="TIN"
  1. S DIR("?")="Select 'NAME' to select Payers by name or 'TIN' to select Payers by TIN"
  1. D ^DIR
  1. Q:$D(DTOUT)!$D(DUOUT) -1
  1. Q:Y="N" 1
  1. Q 2
  1. ;
  1. SELPAY(RCJOB,RCPARRAY) ; Move ^TMP("RCSELPAY",RCJOB) into RCPARRAY for lookup
  1. ; note that payer names for 344.4 are UPPER CASE
  1. ; Input: RCJOB - $J
  1. ; ^TMP("RCSELPAY",RCJOB,) - Temp array of selected Payers
  1. ; Output: RCPARRAY(A1,A2)=A3 - Array of selected Payers Where:
  1. ; A1 - Payer Name or TIN based on the way ^TMP("RCSELPAY" was built
  1. ; A2 - Counter
  1. ; A3 - Payer Name/TIN or TIN/Payer Name based on the way ^TMP("RCSELPAY" was built
  1. N PAYER,PSUB
  1. S PSUB=0
  1. F S PSUB=$O(^TMP("RCSELPAY",RCJOB,PSUB)) Q:'PSUB D
  1. . S PAYER=$G(^TMP("RCSELPAY",RCJOB,PSUB))
  1. . S:PAYER'="" RCPARRAY($P(PAYER,"/",1),PSUB)=PAYER
  1. Q
  1. ;
  1. SORTT() ; Ask the user if they want to sort by Payer Name or Payer TIN
  1. ; Input: None
  1. ; Returns: -1 - User ^ or timed out
  1. ; 0 - Sort by Payer Name
  1. ; 1 - Sort by Payer TIN
  1. N DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
  1. S DIR(0)="SA^N:NAME;T:TIN;"
  1. S DIR("A")="Sort by Insurance Company NAME or TIN: "
  1. S DIR("B")="TIN"
  1. S DIR("?",1)="Select 'NAME' to sort by Division/Payer Name or"
  1. S DIR("?")="select 'TIN' to sort by Division/Payer TIN"
  1. D ^DIR
  1. Q:$D(DTOUT)!$D(DUOUT) -1
  1. Q:Y="N" 0
  1. Q 1
  1. ;
  1. DTRNG() ; Get the date range for the report
  1. ; Input: None
  1. ; Returns: 0 - User ^ or timed out
  1. ; 1^Start Date^End Date
  1. N DIR,DIROUT,DIRUT,DTOUT,DUOUT,RCEND,RNGFLG,RCSTART,X,Y
  1. D DATES(.RCSTART,.RCEND)
  1. Q:RCSTART=-1 0
  1. Q:RCSTART "1^"_RCSTART_"^"_RCEND
  1. Q:'RCSTART "0^^"
  1. Q 0
  1. ;
  1. DISPTY() ; Get display/output type
  1. ; Input: None
  1. ; Return:: -1 - User ^ or timed out
  1. ; 0 - Not to Excel
  1. ; 1 - Output to Excel
  1. N DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
  1. S DIR(0)="Y"
  1. S DIR("A")="Export the report to Microsoft Excel"
  1. S DIR("B")="NO"
  1. D ^DIR
  1. Q:$D(DTOUT)!$D(DUOUT) -1
  1. Q Y
  1. ;
  1. DATES(BDATE,EDATE) ; Get a date range.
  1. ; Input: None
  1. ; Output: BDATE - Internal Begin date
  1. ; EDATE - Internal End date
  1. N DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
  1. S (BDATE,EDATE)=0
  1. S DIR("?")="Enter the earliest Auto-Posting date to include on the report"
  1. S DIR(0)="DAO^:"_DT_":APE",DIR("A")="Start Date: "
  1. D ^DIR K DIR
  1. I $D(DTOUT)!$D(DUOUT)!(Y="") S BDATE=-1 Q
  1. S BDATE=Y
  1. S DIR("?")="Enter the latest Auto-Posting date to include on the report"
  1. S DIR("B")=Y(0)
  1. S DIR(0)="DAO^"_BDATE_":"_DT_":APE",DIR("A")="End Date: "
  1. D ^DIR K DIR
  1. I $D(DTOUT)!$D(DUOUT)!(Y="") S BDATE=-1 Q
  1. S EDATE=Y
  1. Q
  1. ;
  1. REPORT ; Compile and print report
  1. ; Input: RCDISP - 0 - Output to paper or screen, 1 - Output to Excel
  1. ; RCDIV - 1 - All divisions, 2 - Selected divisions
  1. ; RCDIVS()- Array of selected divisions if RCDIV=2
  1. ; RCRANGE - 1^Start Date^End Date
  1. ; RCJOB - $J
  1. ; RCLAIM - "M" - Medical Claims, "P" - Pharmacy Claims, "B" - Both
  1. ; RCPAGE - Initialized to 0
  1. ; RCPARRAY- Array of selected payers
  1. ; RCPROG - "RCDPEAPP"
  1. ; RCSORT - 0 - Sort by Payer Name, 1 - Sort by Payer TIN
  1. ; RCTYPE - 'D' for detail report, 'S' for summary
  1. ; RCWHICH - 1 - Filter by Payer Name, 2 - Filter by Payer TIN
  1. ; ^TMP("RCDPEU1",$J) - Selected payerers (see SELPAY^RCDPEU1 for details)
  1. ;
  1. N GLOB,GTOTAL,ZTREQ
  1. K ^TMP(RCPROG,$J),^TMP("RCDPEAPP2",$J)
  1. S GLOB=$NA(^TMP(RCPROG,$J))
  1. D COMPILE^RCDPEAPQ ; Scan ERA file for entries in date range
  1. D DISP ; Display the Report
  1. ;
  1. ; Clear ^TMP global
  1. K ^TMP(RCPROG,$J),^TMP("RCSELPAY",RCJOB),^TMP("RCDPEAPP2",$J),^TMP("RCDPEU1",$J)
  1. Q
  1. ;
  1. DISP ; Format the display for screen/printer or MS Excel
  1. ; Input: GLOB - "^TMP("RCDPEAPP",$J)
  1. ; RCDISP - 1 - Output to Excel, 0 otherwise
  1. ; RCDIV - 1 - All Divisions selected
  1. ; RCDIVS - Array of selected Divisions (if all not selected)
  1. ; RCPARRAY- Array of selected Payers
  1. ; RCPAY - 1 - All Payers selected
  1. N DIVS,LINE1,LINE2,PAYERS,RCDATA,RCHDRDT,RCSTOP,SUB,SUB1,SUB2,SUB3
  1. S RCHDRDT=$$FMTE^XLFDT($$NOW^XLFDT,"2SZ") ; Date/time for header
  1. S LINE1=$TR($J("",131)," ","-"),LINE2=$TR(LINE1,"-","=")
  1. U IO
  1. ;
  1. ; Report by division or 'ALL'
  1. D LINED(RCDIV,.RCDIVS,.DIVS) ; Format Division filter
  1. D LINEP(RCPAY,.RCPARRAY,RCWHICH,.PAYERS) ; Format Payer filter
  1. S SUB="",RCSTOP=0
  1. I RCDISP D HDR(.DIVS,.PAYERS) ; Single header for Excel
  1. I RCTYPE="D" F S SUB=$O(@GLOB@(SUB)) Q:SUB="" D Q:RCSTOP ; PRCA*4.5*345 Loop for Detail report
  1. . I 'RCDISP D
  1. . . D HDR(.DIVS,.PAYERS) ; Display Header
  1. . . W !,"DIVISION: ",SUB
  1. . S SUB1="" ; Division
  1. . F S SUB1=$O(@GLOB@(SUB,SUB1)) Q:SUB1="" D Q:RCSTOP
  1. . . S SUB2=""
  1. . . F S SUB2=$O(@GLOB@(SUB,SUB1,SUB2)) Q:SUB2="" D Q:RCSTOP
  1. . . . ;
  1. . . . ; Display payer sub-header for detail report only
  1. . . . I 'RCDISP,RCTYPE="D" D HDRP(SUB1_"/"_SUB2)
  1. . . . S SUB3=""
  1. . . . F S SUB3=$O(@GLOB@(SUB,SUB1,SUB2,SUB3)) Q:SUB3="" D Q:RCSTOP
  1. . . . . S RCDATA=@GLOB@(SUB,SUB1,SUB2,SUB3)
  1. . . . . I 'RCDISP D Q:RCSTOP
  1. . . . . . I $Y>(IOSL-6) D HDR(.DIVS,.PAYERS) Q:RCSTOP
  1. . . . . . W !,$P(RCDATA,U,4) ; Patient Name
  1. . . . . . W ?31,$P(RCDATA,U,5) ; ERA#
  1. . . . . . W ?38,$P(RCDATA,U,6) ; Date Received
  1. . . . . . W ?49,$P(RCDATA,U,7) ; Date Autposted
  1. . . . . . W ?58,$P(RCDATA,U,8) ; EFT#
  1. . . . . . W ?67,$P(RCDATA,U,9) ; "TR" Receipt
  1. . . . . . W ?79,$E($P(RCDATA,U,10),1,12) ; Bill #
  1. . . . . . ; PRCA*4.5*345 - Begin modified code block
  1. . . . . . W ?90,$J($P(RCDATA,U,11),10,2) ; Original Billed Amount
  1. . . . . . W $J($P(RCDATA,U,12),10,2) ; Paid Amount
  1. . . . . . W $J($P(RCDATA,U,13),10,2) ; Balance
  1. . . . . . W $J($P(RCDATA,U,14),10,2) ; % COLLECTED
  1. . . . . . W !,?8,"DEP#:",$P(RCDATA,U,16) ; Deposit #
  1. . . . . . W ?25,"TRACE#:",$P(RCDATA,U,15) ; Trace #
  1. . . . . . ; PRCA*4.5*345 - End modified code block
  1. . . . . . ;
  1. . . . . . ; Subtotals for Payer on detail report
  1. . . . . . I 'RCDISP,$O(@GLOB@(SUB,SUB1,SUB2,SUB3))="" D TOTALDP(SUB,SUB1,SUB2)
  1. . . . . I RCDISP D
  1. . . . . . I $L(RCDATA)>255 D ;
  1. . . . . . . N RCPAY,RCTIN
  1. . . . . . . S RCPAY=$P(RCDATA,"^",3)
  1. . . . . . . S RCTIN=$P(RCPAY,"/",$S(RCSORT=0:2,1:1))
  1. . . . . . . S RCPAY=$P(RCPAY,"/",$S(RCSORT=0:1,1:2))
  1. . . . . . . S RCPAY=$E(RCPAY,1,$L(RCPAY)-($L(RCDATA)-255))
  1. . . . . . . S RCPAY=$S(RCSORT=0:RCPAY_"/"_RCTIN,1:RCTIN_"/"_RCPAY)
  1. . . . . . . S $P(RCDATA,"^",3)=RCPAY
  1. . . . . . W !,RCDATA
  1. . . . ;
  1. . . . ; Subtotals for Division on detail report
  1. . . . I 'RCDISP,RCTYPE="D",$O(@GLOB@(SUB,SUB1))="" D TOTALD(SUB)
  1. ;
  1. ; Grand totals
  1. I $D(GTOTAL),'RCSTOP D
  1. . I 'RCDISP,RCTYPE="D" D TOTALG ; Print grand only total if detail report
  1. . I 'RCDISP,RCTYPE="S" D TOTALS ; Print all totals if summary report
  1. . W !,$$ENDORPRT^RCDPEARL D:'$G(ZTSK) ASK(.RCSTOP)
  1. ;
  1. I '$D(GTOTAL) D ; Null Report
  1. . D HDR(.DIVS,.PAYERS)
  1. . W !!,?26,"*** NO RECORDS TO PRINT ***",!
  1. . W !,$$ENDORPRT^RCDPEARL D:'$G(ZTSK) ASK(.RCSTOP)
  1. ;
  1. ; Close device
  1. I '$D(ZTQUEUED) D ^%ZISC
  1. I $D(ZTQUEUED) S ZTREQ="@"
  1. Q
  1. ;
  1. ASK(STOP) ; Ask to continue
  1. ; Output: STOP - 1 if display is aborted
  1. I $E(IOST,1,2)'["C-" Q ; Not displaying to screen, quit
  1. N DIR,DIROUT,DIRUT,DTOUT,DUOUT
  1. S DIR("A")="Press ENTER to continue: "
  1. S DIR(0)="EA"
  1. D ^DIR
  1. I ($D(DIRUT))!($D(DUOUT)) S STOP=1
  1. Q
  1. ;
  1. HDR(DIVS,PAYERS) ; Print the report header
  1. ; Input: DIVS() - Array of selected Division lines for Header
  1. ; PAYERS() - Array of selected Payer lines for Header
  1. ; RCDISP - 1 - Output to Excel, 0 otherwise
  1. ; RCHDRDT - External Print Date/Tim
  1. ; RCPAGE - Current Page number
  1. ; RCRANGE - Selected Date Range
  1. ; RCSORT - 0 - Sort by Payer Name, 1 - Sort by Payer TIN
  1. ; RCSTOP - 1 if display aborted
  1. ; Output: RCPAGE - Updated Page Number
  1. ; RCSTOP - 1 if display aborted
  1. N END,LN,MSG,START,XX,Y
  1. Q:RCSTOP
  1. I RCDISP D Q ; Output to Excel
  1. . S XX="STATION^STATION NUMBER^PAYER^PATIENT NAME/SSN^ERA#^DT REC'D"
  1. . S XX=XX_"^DT POST^EFT#^RECEIPT#^BILL#^AMT BILLED^AMT PAID^BALANCE^%COLL^TRACE#^DEPOSIT#"
  1. . W !,XX
  1. S START=$$FMTE^XLFDT($P(RCRANGE,U,2),"2DZ")
  1. S END=$$FMTE^XLFDT($P(RCRANGE,U,3),"2DZ")
  1. I RCPAGE D ASK(.RCSTOP) Q:RCSTOP
  1. S RCPAGE=RCPAGE+1
  1. W @IOF
  1. S MSG(1)="EDI LOCKBOX AUTO-POST REPORT - "_$S(RCTYPE="D":"DETAIL ",1:"SUMMARY")
  1. ; PRCA*4.5 Add payment type filter to header
  1. S MSG(1)=MSG(1)_" "_$S(RCPAYMNT="Z":"ZERO",RCPAYMNT="P":"NON-ZERO",1:"ALL")_" PAYMENT TYPES"
  1. S MSG(1)=MSG(1)_$J("",80-$L(MSG(1)))_"Print Date: "_RCHDRDT_" Page: "_RCPAGE
  1. ;
  1. S LN=2,XX=""
  1. F D Q:XX="" ; Display Division filters
  1. . S XX=$O(DIVS(XX))
  1. . Q:XX=""
  1. . S MSG(LN)=DIVS(XX),LN=LN+1
  1. ;
  1. S MSG(LN)="CLAIM TYPE: "
  1. S MSG(LN)=MSG(LN)_$S(RCLAIM="C":"CHAMPVA",RCLAIM="P":"PHARMACY",RCLAIM="M":"MEDICAL",RCLAIM="T":"TRICARE",1:"ALL") ;PRCA*4.5*432 Add CHAMPVA
  1. S MSG(LN)=MSG(LN)_$J("",55-$L(MSG(LN)))_"SORTED BY: "_$S(RCSORT=0:"PAYER NAME",1:"PAYER TIN")
  1. S LN=LN+1
  1. S MSG(LN)=$S(RCWHICH=2:"TINS",1:"PAYERS")_" : "_$S(RCPAY="S":"SELECTED",RCPAY="R":"RANGE",1:"ALL")
  1. S LN=LN+1
  1. S MSG(LN)="AUTOPOST POSTING RESULTS FOR DATE RANGE: "_START_" - "_END
  1. S LN=LN+1,MSG(LN)=LINE2
  1. S LN=LN+1
  1. I RCTYPE="D" D ;
  1. . S MSG(LN)="PATIENT NAME/SSN ERA# DT REC'D DT POST EFT# RECEIPT# BILL#"
  1. E S MSG(LN)=" "
  1. S MSG(LN)=MSG(LN)_" AMT BILLED AMT PAID BALANCE %COLL"
  1. S LN=LN+1,MSG(LN)=LINE2
  1. D EN^DDIOL(.MSG)
  1. Q
  1. ;
  1. HDRP(PAYNAM) ; Print Payer Sub-header
  1. ; Input: LINE1 - 131 '-'s
  1. ; PAYNAM - TIN/Payer Name or Payer NAME/TIN depending on sort
  1. W !,LINE1,!,"PAYER: ",PAYNAM,!,LINE1
  1. Q
  1. ;
  1. LINED(RCDIV,RCDIVS,DIVS) ; List selected Divisions
  1. ; Input: RCDIV - 1 - All Divisions Selected,
  1. ; RCDIVS()- Array of selected Divisions
  1. ; Output DIVS() - Array of lines to print the Divisions
  1. ; Returns: Comma Delimitted list of Divisions
  1. N LN,SUB,XX
  1. K DIVS
  1. S SUB="",LN=1,DIVS(1)="DIVISIONS: "
  1. I RCDIV=1 S DIVS(1)=DIVS(1)_"ALL" Q
  1. F D Q:'SUB
  1. . S SUB=$O(RCDIVS(SUB))
  1. . Q:'SUB
  1. . S XX=$P(RCDIVS(SUB),"^",2)
  1. . I $L(XX)+$L(DIVS(LN))+2>132 D
  1. . . S LN=LN+1,DIVS(LN)=" "_XX
  1. . E S DIVS(LN)=$S($L(DIVS(LN))=12:DIVS(LN)_XX,1:DIVS(LN)_", "_XX)
  1. Q
  1. ;
  1. LINEP(RCPAY,RCPARRAY,RCWHICH,PAYERS) ; List selected Payers
  1. ; Input: RCPAY - 2 - All Payers selected
  1. ; RCPARRAY - Array of selected Payers
  1. ; RCWHICH - 1 - Filter by Payer Name, 2 - Filter by Payer TIN
  1. ; Output: PAYERS() - Array of lines to Print the Payers
  1. ; Returns: Comma delimited list of Payer Names
  1. N CTR,DPAYS,LN,PAYR,PCE,XX
  1. K PAYERS
  1. S PAYR="",LN=1,PAYERS(1)="PAYERS: "
  1. S PCE=$S(RCWHICH=1:2,1:1)
  1. I $P(RCPAY,U,1)=2 S PAYERS(1)=PAYERS(1)_"ALL" Q
  1. F D Q:PAYR=""
  1. . S PAYR=$O(RCPARRAY(PAYR))
  1. . Q:PAYR=""
  1. . S CTR=""
  1. . F D Q:CTR=""
  1. . . S CTR=$O(RCPARRAY(PAYR,CTR))
  1. . . Q:CTR=""
  1. . . S XX=$P(RCPARRAY(PAYR,CTR),"/",PCE) ; Payer TIN
  1. . . Q:$D(DPAYS(XX)) ; Already displayed
  1. . . S DPAYS(XX)=""
  1. . . I $L(XX)+$L(PAYERS(LN))+2>132 D
  1. . . . S LN=LN+1,PAYERS(LN)=" "_XX
  1. . . E S PAYERS(LN)=$S($L(PAYERS(LN))=12:PAYERS(LN)_XX,1:PAYERS(LN)_", "_XX)
  1. Q
  1. ;
  1. TOTALS ; Print totals for summary report
  1. ; Input: GLOB - "^TMP("RCPDEAPP",$J)
  1. N DBAL,DBAMT,DCNT,DIV,DPAMT,PAYIX1,PAYIX2
  1. S DIV=""
  1. F D Q:DIV="" Q:RCSTOP
  1. . S DIV=$O(@GLOB@(DIV))
  1. . Q:DIV=""
  1. . D HDR(.DIVS,.PAYERS) ; PRCA*4.5*345 Display header
  1. . W !,"DIVISION: ",DIV,!,LINE1 ; PRCA*4.5*345 Display division
  1. . S PAYIX1=""
  1. . F D Q:PAYIX1="" Q:RCSTOP
  1. . . S PAYIX1=$O(@GLOB@(DIV,PAYIX1))
  1. . . Q:PAYIX1=""
  1. . . S PAYIX2=""
  1. . . F D Q:PAYIX2="" Q:RCSTOP
  1. . . . S PAYIX2=$O(@GLOB@(DIV,PAYIX1,PAYIX2))
  1. . . . Q:PAYIX2=""
  1. . . . D TOTALDP(DIV,PAYIX1,PAYIX2) ; Payer Totals
  1. . D TOTALD(DIV) ; Division Totals
  1. D TOTALG ; Grand Totals
  1. Q
  1. ;
  1. TOTALD(DIV) ; Display totals for a division
  1. ; Input: DIV - Division Name
  1. ; DIVS() - Array of selected Division lines for Header
  1. ; PAYERS()- Array of selected Payer lines for Header
  1. ; GLOB - "^TMP("RCPDEAPP",$J)
  1. ; LINE1 - 131 '-'s
  1. ; RCDISP - 1 - Output to Excel, 0 otherwise
  1. ; Output: RCSTOP - 1 if display aborted, 0 otherwise
  1. N DBAL,DBAMT,DCNT,DPAMTL
  1. S DCNT=$P(@GLOB@(DIV),U),DBAMT=$P(@GLOB@(DIV),U,2)
  1. S DPAMT=$P(@GLOB@(DIV),U,3),DBAL=$P(@GLOB@(DIV),U,4)
  1. I 'RCDISP,$Y>(IOSL-6) D HDR(.DIVS,.PAYERS) Q:RCSTOP
  1. W !,"DIVISION TOTALS FOR ",DIV,?90,$J(DBAMT,10,2)
  1. W $J(DPAMT,10,2),$J(DBAL,10,2)
  1. W:DBAMT'=0 $J(DPAMT/DBAMT*100,10,2),"%"
  1. W !,?8,"COUNT",?90,$J(DCNT,10,0),$J(DCNT,10,0),$J(DCNT,10,0)
  1. W !,?8,"MEAN",?90,$J(DBAMT/DCNT,10,2),$J(DPAMT/DCNT,10,2),$J(DBAL/DCNT,10,2)
  1. W !,LINE1
  1. Q
  1. ;
  1. TOTALDP(DIV,PAYIX1,PAYIX2) ; Display totals for a payer within a division
  1. ; Input: DIV - Division Name
  1. ; PAYIX1 - Payer Name OR TIN
  1. ; PAYIX2 - TIN OR Payer Name
  1. ; DIVS() - Array of selected Division lines for Header
  1. ; GLOB - "^TMP("RCPDEAPP",$J)
  1. ; LINE1 - 131 '-'s
  1. ; PAYERS()- Array of selected Payer lines for Header
  1. ; RCDISP - 1 - Output to Excel, 0 otherwise
  1. ; Output: RCSTOP - 1 if display aborted, 0 otherwise
  1. N DATA,DBAL,DBAMT,DCNT,DPAMT
  1. I 'RCDISP,$Y>(IOSL-6) D HDR(.DIVS,.PAYERS) Q:RCSTOP
  1. S DATA=@GLOB@(DIV,PAYIX1,PAYIX2) ; PRCA*4.5*345 Correct totals by payer
  1. S DCNT=$P(DATA,U),DBAMT=$P(DATA,U,2) ; PRCA*4.5*345
  1. S DPAMT=$P(DATA,U,3),DBAL=$P(DATA,U,4) ; PRCA*4.5*345
  1. W:RCTYPE="D" !,?90,"-----------------------------------------"
  1. W !,"SUBTOTALS FOR PAYER: ",PAYIX1,"/",PAYIX2,?90,$J(DBAMT,10,2),$J(DPAMT,10,2)
  1. W $J(DBAL,10,2)
  1. W:DBAMT'=0 $J(DPAMT/DBAMT*100,10,2),"%"
  1. W !,?8,"COUNT",?90,$J(DCNT,10,0),$J(DCNT,10,0),$J(DCNT,10,0)
  1. W !,?8,"MEAN",?90,$J(DBAMT/DCNT,10,2),$J(DPAMT/DCNT,10,2),$J(DBAL/DCNT,10,2)
  1. W !,LINE1
  1. Q
  1. ;
  1. TOTALG ;Display overall report total
  1. ; Input: DIVS() - Array of selected Division lines for Header
  1. ; PAYERS()- Array of selected Payer lines for Header
  1. ; GTOTAL - Grand Totals
  1. ; LINE1 - 131 '-'s
  1. ; RCDISP - 1 - Output to Excel, 0 otherwise
  1. ; Output: RCSTOP - 1 if display aborted, 0 otherwise
  1. I 'RCDISP,$Y>(IOSL-6) D HDR(.DIVS,.PAYERS) Q:RCSTOP
  1. W !,"GRAND TOTALS FOR ALL DIVISIONS",?90,$J(+$P(GTOTAL,U,2),10,2)
  1. W $J(+$P(GTOTAL,U,3),10,2),$J(+$P(GTOTAL,U,4),10,2)
  1. W $J($P(GTOTAL,U,3)/$P(GTOTAL,U,2)*100,9,2),"%"
  1. W !,?8,"COUNT",?90,$J(+$P(GTOTAL,U),10,0),$J(+$P(GTOTAL,U),10,0),$J(+$P(GTOTAL,U),10,0)
  1. W !,?8,"MEAN",?90,$J($P(GTOTAL,U,2)/$P(GTOTAL,U),10,2)
  1. W $J($P(GTOTAL,U,3)/$P(GTOTAL,U),10,2),$J($P(GTOTAL,U,4)/$P(GTOTAL,U),10,2)
  1. W !,LINE1
  1. Q