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

RCDMCR4A.m

Go to the documentation of this file.
  1. RCDMCR4A ;ALB/YG - 0 - 40 Percent SC Change Reconciliation Report - Input/output; Apr 9, 2019@21:06
  1. ;;4.5;Accounts Receivable;**347**;Mar 20, 1995;Build 47
  1. ;;Per VA Directive 6402, this routine should not be modified.
  1. ;
  1. ;This routine is being implemented for the AR Cross-Referencing Project
  1. ;It will do the following:
  1. ; Report option in AR to assist users in focusing on reviewing the
  1. ; legitimacy of bills for veterans who are neither SC 50% to 100%
  1. ; nor in receipt of a VA Pension benefits (Veterans not included on
  1. ; the "DMC Debt Validity Report"). The report will contain
  1. ; information on veterans who have bills for episodes of care
  1. ; within the specified date range, who have a new Rated Disability
  1. ; during a user selected time period, and whose service update date is
  1. ; within user specified date range
  1. ;
  1. MAIN ; Initial Interactive Processing
  1. S:$G(U)="" U="^"
  1. N STOPIT,EXCEL,RCSCR,RDDATE,RCBEGDT,RCENDDT,EOCBEGDT,EOCENDDT,EOCDATE,VLSDATE,VLSBEGDT,VLSENDDT,RPTTYPE
  1. W !!,"*** Print the 0-40 Percent SC Change Reconciliation Report ***",!
  1. ;
  1. S STOPIT=0 ; quit flag
  1. ;Prompt user for Date Range for Rated Disability Eligibility Changes
  1. S RDDATE=$$DATE2^RCDMCUT2(" Enter the Date Range for Rated Disability Changes.")
  1. ;Quit is user up arrowed or timed out
  1. Q:RDDATE'>0
  1. S RCBEGDT=$P(RDDATE,U,2),RCENDDT=$P(RDDATE,U,3)
  1. ;
  1. ;Prompt user for Date range for VistA Last Status Date
  1. W !
  1. S VLSDATE=$$DATE2^RCDMCUT2("Include Bills with VistA Last Status Date that fall within ","the Date Range for Rated Disability Changes:",RCBEGDT,RCENDDT,"VistA Last Status Update")
  1. ;Quit if user up arrowed or timed out
  1. Q:+VLSDATE'>0
  1. S VLSBEGDT=$P(VLSDATE,U,2),VLSENDDT=$P(VLSDATE,U,3)
  1. ;
  1. ;Prompt user for Date range for Episodes of Care Date
  1. W !
  1. S EOCDATE=$$DATE2^RCDMCUT2("Include Bills for Episodes of Care within User Selected Date Range:",,2880101,,"Episodes of Care")
  1. ;Quit if user up arrowed or timed out
  1. Q:+EOCDATE'>0
  1. S EOCBEGDT=$P(EOCDATE,U,2),EOCENDDT=$P(EOCDATE,U,3)
  1. ;
  1. ; Get Report Type (Detailed/Summary)
  1. S STOPIT=0
  1. S RPTTYPE=$$GETTYPE2^RCDMCUT2(.STOPIT)
  1. Q:STOPIT>0!(RPTTYPE']"")
  1. ;
  1. ; Prompt user if report will be Excel Delimited format:
  1. S EXCEL=$$EXCEL^RCDMCUT2
  1. ;Quit is user up arrowed or timed out
  1. Q:EXCEL="^"
  1. D:EXCEL>0 EXMSG^RCDMCUT2
  1. D:EXCEL'>0
  1. . W !!,"This report may take a while to process. It is recommended that"
  1. . W !,"you Queue this report to a device that is 132 characters wide."
  1. ;
  1. ; Logic from DEVICE^RCDMCUT2 copied here
  1. N %ZIS,ZTSK,ZTRTN,ZTIO,ZTDESC,POP,ZTSAVE
  1. S %ZIS="QM"
  1. W ! D ^%ZIS
  1. I POP S STOPIT=1 Q
  1. ; RCSCR is 1 if sent to screen
  1. S RCSCR=$S($E($G(IOST),1,2)="C-":1,1:0)
  1. ; If report is Queued
  1. I $D(IO("Q")) D Q
  1. . S ZTRTN="RUN^RCDMCR4A"
  1. . S ZTIO=ION
  1. . S ZTSAVE("RCBEGDT")=""
  1. . S ZTSAVE("RCENDDT")=""
  1. . S ZTSAVE("EOCBEGDT")=""
  1. . S ZTSAVE("EOCENDDT")=""
  1. . S ZTSAVE("VLSBEGDT")=""
  1. . S ZTSAVE("VLSENDDT")=""
  1. . S ZTSAVE("RPTTYPE")=""
  1. . S ZTSAVE("RCSCR")=""
  1. . S ZTSAVE("EXCEL")=""
  1. . S ZTDESC="DMC 0-40 Percent SC Change Reconciliation Report Process"
  1. . D ^%ZTLOAD
  1. . W !!,$S($D(ZTSK):"Request Queued. TASK = "_ZTSK,1:"REQUEST CANCELLED")
  1. . D HOME^%ZIS
  1. ;
  1. Q:STOPIT>0!($D(ZTQUEUED))
  1. D RUN^RCDMCR4A
  1. I 'STOPIT D PAUSE2^RCDMCUT2
  1. Q
  1. ;
  1. ; Currently, Taskman schedulable option is not being planned for this report
  1. ; If this is going to change later on, QUERPT^RCDMCR3A would be a good example
  1. ; of how to do such an option
  1. ;
  1. QUERPT ; Initial Taskman Scheduled Queued processing
  1. ; Set up parameters
  1. ; Run report
  1. D RUN^RCDMCR4A
  1. Q
  1. ;
  1. RUN ;Get data and Print it out
  1. ;If queued ensure you delete it from the TASKS file
  1. I $D(ZTQUEUED) S ZTREQ="@"
  1. N RCPAGE
  1. S STOPIT=0 ; quit flag
  1. K ^TMP($J,"RCDMCR4")
  1. S RCPAGE=0
  1. ; Collect the data in ^TMP($J,"RCDMCR4")
  1. D COLLECT^RCDMCR4B(.STOPIT,RCBEGDT,RCENDDT,VLSBEGDT,VLSENDDT,EOCBEGDT,EOCENDDT,RPTTYPE)
  1. Q:STOPIT>0
  1. U IO
  1. ; Print Report using data in ^TMP
  1. D REPORT
  1. I 'RCSCR W !,@IOF
  1. D ^%ZISC
  1. K ^TMP($J,"RCDMCR4")
  1. K EXCEL,RCSCR
  1. Q
  1. ;
  1. REPORT ;Print report
  1. N RUNDATE,STATUS,NAME,SSN,CHGDT,RDNAME,RDSEXTRE,BILLNO
  1. N SKIP,IBCNT,SCPER
  1. S RUNDATE=$$FMTE^XLFDT($$NOW^XLFDT,"9MP")
  1. D HDR
  1. I +$D(^TMP($J,"RCDMCR4"))'>0 W !,"No data meets the criteria." Q
  1. I RPTTYPE="S" D
  1. . S NAME=""
  1. . F S NAME=$O(^TMP($J,"RCDMCR4","SUMMARY",NAME)) Q:NAME']"" D Q:STOPIT
  1. . . S SSN=""
  1. . . F S SSN=$O(^TMP($J,"RCDMCR4","SUMMARY",NAME,SSN)) Q:SSN']"" D Q:STOPIT
  1. . . . W !
  1. . . . S SCPER=^TMP($J,"RCDMCR4","SUMMARY",NAME,SSN)
  1. . . . I EXCEL>0 W NAME,U,SSN,U,+SCPER Q
  1. . . . W $E(NAME,1,25) ; Veteran Name
  1. . . . W ?27,SSN ; SSN
  1. . . . W ?41,$J(+SCPER,2) ; Comb SC%
  1. I RPTTYPE="D" D
  1. . S NAME=""
  1. . F S NAME=$O(^TMP($J,"RCDMCR4","DETAIL",NAME)) Q:NAME="" D Q:STOPIT
  1. . . S SSN=""
  1. . . F S SSN=$O(^TMP($J,"RCDMCR4","DETAIL",NAME,SSN)) Q:SSN="" D Q:STOPIT
  1. . . . S CHGDT=""
  1. . . . F S CHGDT=$O(^TMP($J,"RCDMCR4","DETAIL",NAME,SSN,CHGDT)) Q:CHGDT="" D Q:STOPIT
  1. . . . . S RDNAME=""
  1. . . . . F S RDNAME=$O(^TMP($J,"RCDMCR4","DETAIL",NAME,SSN,CHGDT,RDNAME)) Q:RDNAME="" D Q:STOPIT
  1. . . . . . S RDSEXTRE=""
  1. . . . . . F S RDSEXTRE=$O(^TMP($J,"RCDMCR4","DETAIL",NAME,SSN,CHGDT,RDNAME,RDSEXTRE)) Q:RDSEXTRE="" D Q:STOPIT
  1. . . . . . . S BILLNO=""
  1. . . . . . . F S BILLNO=$O(^TMP($J,"RCDMCR4","DETAIL",NAME,SSN,CHGDT,RDNAME,RDSEXTRE,BILLNO)) Q:BILLNO="" D Q:STOPIT
  1. . . . . . . . S IBCNT=""
  1. . . . . . . . F S IBCNT=$O(^TMP($J,"RCDMCR4","DETAIL",NAME,SSN,CHGDT,RDNAME,RDSEXTRE,BILLNO,IBCNT)) Q:IBCNT="" D Q:STOPIT
  1. . . . . . . . . ; (NAME,SSN,RDCHGDT,RDNAME,RDSEXTRE,BILLNO,IBCNT)=RDORGDT_U_RXDT_U_OPTDT_U_DISCHDT_U_DSTATUS_U_SCPER_U_VLSDT_U_CHGAMT_U_$G(RXNUM)_U_$G(RXNAM)
  1. . . . . . . . . N NODE,RDORGDT,RXDT,OPTDT,DISCHDT,STATUS,SCPER,VLSDT,CHGAMT,RXNUM,RXNAM
  1. . . . . . . . . S NODE=$G(^TMP($J,"RCDMCR4","DETAIL",NAME,SSN,CHGDT,RDNAME,RDSEXTRE,BILLNO,IBCNT))
  1. . . . . . . . . S RDORGDT=$P(NODE,U,1)
  1. . . . . . . . . S RXDT=$P(NODE,U,2)
  1. . . . . . . . . S OPTDT=$P(NODE,U,3)
  1. . . . . . . . . S DISCHDT=$P(NODE,U,4)
  1. . . . . . . . . S STATUS=$P(NODE,U,5)
  1. . . . . . . . . S SCPER=$P(NODE,U,6)
  1. . . . . . . . . S VLSDT=$P(NODE,U,7)
  1. . . . . . . . . S CHGAMT=$P(NODE,U,8)
  1. . . . . . . . . S RXNUM=$P(NODE,U,9)
  1. . . . . . . . . S RXNAM=$P(NODE,U,10)
  1. . . . . . . . . I EXCEL'>0 D WRLINE Q
  1. . . . . . . . . I EXCEL>0 D WRLINE2 Q
  1. ;Don't print summary if user ^ out
  1. Q:STOPIT
  1. I EXCEL'>0 D ULINE^RCDMCUT2("=",48)
  1. Q
  1. ;
  1. WRLINE ; Write the data formated report line
  1. D CHKP() Q:STOPIT
  1. W !
  1. ; Disable skip for now (as per direction of customer) with condition :0
  1. I (NAME_SSN_+SCPER)'=$G(SKIP(1)) D
  1. . W $E(NAME,1,13) ; Veteran Name
  1. . W ?14,SSN ; SSN
  1. . W ?24,$J(+SCPER,2) ; Comb SC%
  1. . K SKIP(2),SKIP(3)
  1. . S:0 SKIP(1)=NAME_SSN_+SCPER
  1. I VLSDT'=$G(SKIP(2)) S:0 SKIP(2)=VLSDT W ?27,$$STRIP^XLFSTR($$FMTE^XLFDT(VLSDT,"8D")," ") ; Vista CHG Date
  1. I RDNAME'=$G(SKIP(3)) S:0 SKIP(3)=RDNAME W ?35,$E(RDNAME,1,13) ; RD Name
  1. W ?49,$E(RDSEXTRE,1,2)
  1. W ?52,$S(RDORGDT="NODATE":RDORGDT,1:$$STRIP^XLFSTR($$FMTE^XLFDT(RDORGDT,"8D")," ")) ; RD Orig Date
  1. W ?60,$P(BILLNO,"/",1) ; Bill Number
  1. W:RDORGDT'="NODATE" ?72,$J("$"_$FN(CHGAMT,",",2),11) ; Charge Amount
  1. ; pick the later of OPTDT (outpatient) and DISCHDT (inpatient)
  1. I DISCHDT>OPTDT W:DISCHDT>0 ?84,$$STRIP^XLFSTR($$FMTE^XLFDT(DISCHDT,"8D")," ")
  1. E W:OPTDT>0 ?84,$$STRIP^XLFSTR($$FMTE^XLFDT(OPTDT,"8D")," ")
  1. W:RXDT>0 ?92,$$STRIP^XLFSTR($$FMTE^XLFDT(RXDT,"8D")," ") ; Med Fill Date
  1. W ?100,RXNUM ; RX #
  1. W ?109,$E(RXNAM,1,12) ; RX Name
  1. W ?123,$E(STATUS,1,9) ; This will be AR status for most cases, but for some, it will be IB Status ON HOLD
  1. Q
  1. ;
  1. WRLINE2 ; Write the Excel report line
  1. W !
  1. W $$EXOUT(NAME),U
  1. W $$EXOUT(SSN),U
  1. W +SCPER,U
  1. W $$FMTE^XLFDT(VLSDT,"9D"),U
  1. W RDNAME,U
  1. W RDSEXTRE,U
  1. I RDORGDT="NODATE" W "NODATE",U
  1. W $S(RDORGDT="NODATE":"NODATE",1:$$FMTE^XLFDT(RDORGDT,"9D")),U
  1. W $P(BILLNO,"/",1),U
  1. W "$",$FN(CHGAMT,",",2),U
  1. I DISCHDT>OPTDT W $$FMTE^XLFDT(DISCHDT,"9D")
  1. E I OPTDT W $$FMTE^XLFDT(OPTDT,"9D")
  1. W U
  1. I RXDT W $$FMTE^XLFDT(RXDT,"9D")
  1. W U
  1. W RXNUM,U
  1. W RXNAM,U
  1. W STATUS
  1. Q
  1. ;
  1. CHKP(FOOTER) ;Check for End of Page
  1. ;INPUT:
  1. ; FOOTER - Footer value. Optional. Default to 4 if nothing passed
  1. I $G(FOOTER)'>0 S FOOTER=4
  1. I $Y>(IOSL-FOOTER) D:RCSCR PAUSE^RCDMCUT2 Q:STOPIT D HDR K SKIP
  1. Q
  1. EXOUT(DATA) ; Format data so Excel won't mess it up.
  1. ; Note - there are other ways Excel mangles data, but they are not expected in this report
  1. S DATA=$TR(DATA,"""","")
  1. I DATA?1"0".N S DATA=""""_DATA_"""" Q DATA
  1. I DATA["," S DATA=""""_DATA_""""
  1. Q DATA
  1. ;
  1. HDR ;Print Report Header
  1. ; See WRLINE for header positions
  1. I EXCEL>0 D Q
  1. . W !,"Veteran Name",U,"SSN",U,"Comb SC %"
  1. . I RPTTYPE="S" Q
  1. . W U,"VistA Chd Date",U,"RD Name",U,"Ext",U,"RD Orig Date",U,"Bill Number",U,"Charge Amount",U,"Medical Care Date",U,"RXFillDT",U,"RX #",U,"RX Name",U,"Status"
  1. S RCPAGE=RCPAGE+1
  1. W @IOF,"0-40 Percent SC Change Reconciliation ",$S(RPTTYPE="D":"Detailed",1:"Summary")," Report -- Run Date: ",RUNDATE," --"
  1. W ?122,"Page "_RCPAGE
  1. W !?6,"RD Change Dates from ",$$FMTE^XLFDT(RCBEGDT,"9D")," to ",$$FMTE^XLFDT(RCENDDT,"9D")
  1. W ?57,"VistA Change Dates from ",$$FMTE^XLFDT(VLSBEGDT,"9D")," to ",$$FMTE^XLFDT(VLSENDDT,"9D")
  1. W !,?6,"Episode of Care Dates from ",$$FMTE^XLFDT(EOCBEGDT,"9D")," to ",$$FMTE^XLFDT(EOCENDDT,"9D")
  1. W !
  1. ;Print to screen or printer
  1. I RPTTYPE="S" D
  1. . W !,?40,"Comb"
  1. . W !,?5,"Veteran Name",?30,"SSN",?40,"SC %"
  1. I RPTTYPE="D" D
  1. . W !," Medical"
  1. . W !," Comb VistA RD Orig Charge Care"
  1. . W !," Veteran Name SSN SC % Chd Date RD Name Ext Date Bill Number Amount Date RXFillDT RX # RX Name Status"
  1. D ULINE^RCDMCUT2("=",$G(IOM))
  1. Q
  1. ; Support Utility to find test cases. Not a part of code executed by users, just by testers
  1. ; This utility is provided since currently there is no way to see data in file 390 anywhere except
  1. ; RDEC report, and RDEC is not useful for testers
  1. ;
  1. ; As a testers only code, it is not fully coded per usual standards
  1. RDINFO ;
  1. N DR,D,DFN,ND,OCC,PN
  1. K ^TMP($J)
  1. S DFN=""
  1. R !,"Patient Name or SSN: ",PN:99999 Q:PN="^"
  1. I PN'="" D
  1. . I PN?9N S DFN=$O(^DPT("SSN",PN,"")) I DFN Q
  1. . I PN'?9N,$D(^DPT("B",PN)) S DFN=$O(^DPT("B",PN,"")) I DFN Q
  1. . I PN'?9N,'DFN S PN=$O(^DPT("B",PN)),DFN=$O(^DPT("B",PN,"")) W !,"Patient ",PN
  1. W ! S DR=$$DATE2^RCDMCUT2(" Enter the Date Range for Rated Disability Changes.")
  1. I 'DR Q
  1. D RDCHG^DGENRDUA(DFN,$P(DR,U,2),$P(DR,U,3))
  1. S DFN="" F S DFN=$O(^TMP($J,"RDCHG",DFN)) Q:DFN="" D
  1. . W !!,"Patient ",DFN," ",$P(^DPT(DFN,0),U)
  1. . S D=$P($G(^DPT(DFN,.361)),U,2) W " Vista Chg DT: " I D W $E(D,4,5),"/",$E(D,6,7),"/",$E(D,1,3)+1700
  1. . W !," COMB SC%: ",$P($G(^DPT(DFN,.3)),U,2)
  1. . S D=$P($G(^DPT(DFN,.3)),U,14)
  1. . I D W " EFF. DATE: ",$E(D,4,5),"/",$E(D,6,7),"/",$E(D,1,3)+1700
  1. . W !
  1. . F OCC=1:1 S ND=$G(^TMP($J,"RDCHG",DFN,OCC)) Q:ND="" D
  1. . . S D=$P(ND,U)
  1. . . W !,OCC,?5,"RD Change: " I D W $E(D,4,5),"/",$E(D,6,7),"/",$E(D,1,3)+1700
  1. . . W " RD Name: ",$E($P(ND,U,3),1,30)
  1. . . W " RD %: ",$P(ND,U,4)
  1. . . W !,?5
  1. . . W " RD Extremity: ",$P(ND,U,6)
  1. . . S D=$P(ND,U,7)
  1. . . I D W " RD Orig: ",$E(D,4,5),"/",$E(D,6,7),"/",$E(D,1,3)+1700
  1. Q