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