RCVCR1 ;SLC/LLB/JC - First Party Veterans Charge Report ; SEP 9,2020@16:17
 ;;4.5;Accounts Receivable;**373,379**;Mar 20, 1995;Build 16
 ;;Per VA Directive 6402, this routine should not be modified.
 ;
 ;External References  Type       ICR #
 ;-------------------  ---------  -----
 ; HOME^%ZIS           Supported  10086
 ; ^DIC                Supported  10006
 ; ^DIQ                Supported  10004
 ; EN^DIQ1             Supported  10015
 ; ^DIR                Supported  10026
 ; RX^PSO52API         Supported  4820
 ; DEM^VADPT           Supported  10061
 ; $$FMTE^XLFDT        Supported  10103
 ; $$NOW^XLFDT         Supported  10103
 ; $$CJ^XLFSTR         Supported  10104
 ; $$STRIP^XLFSTR      Supported  10104
 ; EN^XUTMDEVQ         Supported  1519
 ;
 ;ICR#  TYPE          DESCRIPTION
 ;----- ----------    ---------------------
 ; 7218 Private       File (#350), access to fields (#.08),(#.09),(#.1),(#.12),(#.18),(#.19),(#.2),(#12),(#13),(#14)
 ; 4541 Private       File (#350), access to the "C" cross-reference and fields (#.01),(#.02),(#.03),(#.04),(#.05),(#.06),(#.07),(#.11),(#.14),(#.15),(#.16),(#.17)
 ;
START ;
 N DFN,VETNM,FRMDT,FRMDTINT,TODT,TODTINT,IBSVCTYP,IBSVCNM,IBQUIT,DGPAGE
 N IBSTAT,IBSTATNM,POP,%ZIS,X,ZTSAVE,Y,LETTER,STAT,SSN,DIRUT,IBRXNAM
 S (POP,DIRUT,IBQUIT,DGPAGE)=0
 D INIT
 I POP Q
 W !!,"The number of characters per row should be set to 256."
 W !,"Please use the following path to modify the display settings:"
 W !,"In Reflections. File >>> Settings >>> Terminal Configuration"
 W !," >>> Set Up Display Settings >>> Number of characters per row",!
 W !,"To capture as a spreadsheet format, at the DEVICE prompt, please accept the"
 W !,"default value of 0;256;99999. This should help avoid wrapping problems.",!
 W !,"For pagination, please use "";256;"" for the device value instead of the default.",!
 S %ZIS=""
 S %ZIS("B")="0;256;99999"
 S ZTSAVE("FRMDTINT")=""
 S ZTSAVE("LETTER")=""
 S X="FIRST PARTY VETERAN CHARGE REPORT"
 D EN^XUTMDEVQ("DISPHEAD^RCVCR1",X,.ZTSAVE,.%ZIS)
 D HOME^%ZIS
 D CLEAN
 Q
 ;
INIT ;
 ;
 W @IOF
 W !,"*** Print the First Party Veteran Charge Report ***",!
 W !,"This report captures detailed 1st party bill information for a specific "
 W !,"Veteran, within a user specified range of dates of service."
 W !,"This report output requires screen size of 256 characters wide.",!
 ; Get Veteran Name
 S DIC="^DPT(",DIC(0)="AQEZMV",DIC("A")="Enter Veteran Name: "
 D ^DIC
 K DIC
 I +Y<1 K DIC S POP=1 Q
 S DFN=$P(Y,U)
 S VETNM=$P(Y,U,2)
 D DEM^VADPT
 S SSN=$P(VADM(2),U,1)
 ;Get From date
 W !
 N DIR
 S DIR(0)="DO^:DT:EX"
 S DIR("A")="Enter From Date "
 D ^DIR
 I +Y<1 K DIR S POP=1 Q
 K DIR
 S FRMDT=X,FRMDTINT=Y
 ;Get To date
 S DIR(0)="DA^"_FRMDTINT_":"_DT_":EX"
 S Y=DT D D^DIQ S DIR("B")="TODAY"
 S DIR("A")="Enter To Date: "
 D ^DIR
 I +Y<1 K DIR S POP=1 Q
 K DIR
 S TODT=X,TODTINT=Y
 ; Get Service Type
 S DIR(0)="SO^1:Medical Care;2:Outpatient Medication;3:Both (Medical Care and Outpatient Medication)"
 S DIR("L",1)="Which type of copayment do you wish to see?"
 S DIR("L",2)="  1. Medical Care"
 S DIR("L",3)="  2. Outpatient Medication"
 S DIR("L")="  3. Both (Medical Care and Outpatient Medication)"
 S DIR("B")="3"
 S DIR("A")="Enter selection (1,2 or 3) "
 D ^DIR
 K DIR
 I +Y<1!(+Y>3) K DIR S POP=1 Q
 S IBSVCTYP=Y,IBSVCNM=Y(0)
 ; Get IB Status
 S DIR(0)="SO^1:Billed;2:On Hold;3:Cancelled;4:All (Billed, On Hold, Cancelled)"
 S DIR("L",1)="Which IB status for the selected copayment(s) do you wish to see?"
 S DIR("L",2)="  1. Billed"
 S DIR("L",3)="  2. On Hold"
 S DIR("L",4)="  3. Cancelled"
 S DIR("L")="  4. All (Billed, On Hold, Cancelled)"
 S DIR("B")="4"
 S DIR("A")="Enter Status selection (1,2,3 or 4) "
 D ^DIR
 K DIR
 I +Y<1!(+Y>4) K DIR S POP=1 Q
 S IBSTAT=Y,IBSTATNM=Y(0)
 ;Ask if Letters should print
 W !
 S DIR("A")="Enter Selection (1,2,or 3) "
 S DIR(0)="SO^1:Letter Dates;2:Total Payments Received on Bill Number;3:Neither"
 S DIR("L",1)="Do you want to see: "
 S DIR("L",2)="  1. Letter Dates"
 S DIR("L",3)="  2. Total Payments Received on Bill Number"
 S DIR("L")="  3. Neither"
 S DIR("B")="3"
 D ^DIR
 I $G(DIRUT) S POP=1 Q
 K DIR
 I +Y<1!(+Y>3) K DIR S POP=1 Q
 S LETTER=Y
 Q
 ;
DISPHEAD ; Write report header
 ;
 W @IOF
 W !,"First Party Veteran Charge Report",!
 W !,"Run date: ",$$FMTE^XLFDT($$NOW^XLFDT,"MP")
 W !,"Service Dates From ",$$FMTE^XLFDT(FRMDTINT,"5D")," To ",$$FMTE^XLFDT(TODTINT,"5D")
 W !,"Copayment Type Selected: ",IBSVCNM
 W !,"IB Status Selected: ",IBSTATNM
 N TRM S TRM=($E(IOST)="C")
 W !!
 D PRTCOLHD
 D RUNRPT
 D OUTPRPT
 Q:IBQUIT
 D ASKCONT(0)
 Q
 ;
ASKCONT(FLAG) ; display "press <Enter> to continue" prompt
 N Z
 W !!,$$CJ^XLFSTR("Press <Enter> to "_$S(FLAG=1:"continue.",1:"exit."),20)
 R !,Z:DTIME
 Q
 ;
PRTCOLHD ;
 ;
 N COL,CNT,CNAME,LENGTH,END,SCOL,LOC
 S END=255,SCOL=21,COL=0
 ;I $G(LETTER)="NO" S END=220,SCOL=17
 I $G(LETTER)'=1 S END=220,SCOL=17  ;JMC If Total Payment or Neither selected
 S DGPAGE=$G(DGPAGE)+1
 F CNT=1:1:SCOL D
 . S CNAME=$P($T(COLHD+CNT),U,2)
 . S LENGTH=$P($T(COLHD+CNT),U,4)
 . S LOC=COL+((LENGTH-$L(CNAME))\2)
 . I CNT>1 S LOC=LOC+1
 . W ?LOC,CNAME
 . S COL=COL+LENGTH
 . I CNT>1 S COL=COL+1
 . I CNT<SCOL W ?COL,"^"
 I $G(LETTER)=2 W ?223,"^Total Principal"
 W !
 S COL=0
 F CNT=1:1:SCOL D
 . S CNAME=$P($T(COLHD+CNT),U,3)
 . S LENGTH=$P($T(COLHD+CNT),U,4)
 . S LOC=COL+((LENGTH-$L(CNAME))\2)
 . I CNT>1 S LOC=LOC+1
 . S COL=COL+LENGTH
 . W ?LOC,CNAME
 . I CNT>1 S COL=COL+1
 . I CNT<SCOL W ?COL,"^"
 I $G(LETTER)=2 W ?223,"^Paid on Bill Number"
 Q
COLHD ; $T target. Format: Column #^1st row data^2nd row data^Field Width
 ;;1^^Veteran Name^26
 ;;2^^SSN^9
 ;;3^^Bill Number^11
 ;;4^^Category^26
 ;;5^Charge^Amount^8
 ;;6^Unit^Day^4
 ;;7^Medical^DOS^7
 ;;8^Release^RX DT^7
 ;;9^^RX Number^12
 ;;10^^RX Name^16
 ;;11^^IB Status^13
 ;;12^^AR Status^21
 ;;13^Cancel^Date^7
 ;;14^Cancellation^Reason^14
 ;;15^^Cancelled By^16
 ;;16^^APPR^6
 ;;17^^RSC^4
 ;;18^^Letter1^7
 ;;19^^Letter2^7
 ;;20^^Letter3^7
 ;;21^^Letter4^7
 Q
 ;
RUNRPT ;Gather data for Report
 D GET350
 I IBSTAT=4 D GET399^RCVCR2 ; Only pull file #399 data if user selected All as the desired IB Status
 Q
 ;
GET350 ; Collect data originating from the INTEGRATED BILLING ACTION file (#350)
 ;
 N IBIEN,IB0,STATLST,CNT,STATLST,LINE,RESULT,IBSTATNM,POP,SVCTYP,BILLNUM
 N DATEINFO,TRIGDT,SVCDT,XTEMP,DIC,DR,DA,DIQ,FBILLNUM,LCNT,LTRFLD,RC430IEN
 N TLTR,IBCANCLR,IBCANCLD,IBCANCLB,ARSTAT,ARAPPR,ARRSC,ARIEN,ARFLDS,RC430TPR
 S (IBIEN,IBCANCLR,ICANCLD,IBCANCLB)="",(CNT,RC430TPR)=0
 ; STATUS=BILLED,ON HOLD,CANCELLED, or ALL
 S STATLST=$S(IBSTAT=1:"/3/",IBSTAT=2:"/8/",IBSTAT=3:"/10/",1:"/3/8/10/")
 K ^TMP($J,"RCVCR")
 F  S IBIEN=$O(^IB("C",DFN,IBIEN)) Q:IBIEN=""  D
 . K IBFLDS
 . S DIC=350,DR=".01:.07;.08;.09:.12;.14:.2;12:14",DA=IBIEN,DIQ="IBFLDS",DIQ(0)="IE" D EN^DIQ1
 . S STAT="/"_IBFLDS(350,IBIEN,.05,"I")_"/"
 . S DATEINFO=$$GETDTS
 . I DATEINFO["#" D
 . . S RXDATE=IBFLDS(350,IBIEN,12,"I")
 . . S RXNUM=$E(IBFLDS(350,IBIEN,.08,"E"),1,12)
 . . S RXNAME=""
 . . S DATEINFO="RX/"_"350/"_RXDATE_"/"_RXDATE_"/"_RXNUM_"/"_$E(RXNAME,1,16)
 . S TRIGDT=$P(DATEINFO,"/",3)
 . S SVCDT=$P(DATEINFO,"/",4)
 . I TRIGDT'<FRMDTINT,TRIGDT'>TODTINT,(STATLST[STAT) D
 . . ;Check Service Type
 . . S RESULT=IBFLDS(350,IBIEN,.04,"I"),SVCTYP=$P(RESULT,":",1)
 . . I IBSVCTYP=1,(SVCTYP=52!(IBFLDS(350,IBIEN,.03,"E")["RX")) Q  ;Only include Medical
 . . I IBSVCTYP=2,(SVCTYP'=52),(IBFLDS(350,IBIEN,.03,"E")'["RX") Q  ;Only include RX
 . . ;Get Cancellation information if it exists
 . . S IBCANCLR=IBFLDS(350,IBIEN,.1,"E")
 . . S IBCANCLD=IBFLDS(350,IBIEN,14,"I")
 . . S IBCANCLB=IBFLDS(350,IBIEN,13,"E")
 . . ;Get data & Set into scratch global ^TMP($J,"RCVCR",BILLNUM,DATE,CNT)=
 . . ;FILE#^IBIEN^REF#^PARENT CHARGE^PARENT EVENT^STATUS^UNITS^TOTAL CHARG^AR BILL NUMBER^CATEGORY
 . . ;MEDICAL DOS^Release RX DT^RX #^RX Name^
 . . ;CNT is used to distinguish entries with the same Bill Number
 . . S (CNT,ARIEN)=0
 . . S FBILLNUM=IBFLDS(350,IBIEN,.11,"I") I FBILLNUM="" S BILLNUM=0
 . . I FBILLNUM["-" S BILLNUM=$P(FBILLNUM,"-",2)
 . . I BILLNUM'="" S ARIEN=$O(^PRCA(430,"D",BILLNUM,"")) ;Get IEN to 430 based on bill number
 . . S (ARSTAT,ARAPPR,ARRSC)=""
 . . I BILLNUM'="",$G(ARIEN)'=""  D
 . . . S DIC=430,DR="8;203;255.1",DA=ARIEN,DIQ="ARFLDS",DIQ(0)="IE" D EN^DIQ1
 . . . S ARSTAT=$G(ARFLDS(430,ARIEN,8,"E")) ; AR Status
 . . . S ARAPPR=$G(ARFLDS(430,ARIEN,203,"E")) ; APPR
 . . . I ARAPPR="" S ARAPPR="RVW"
 . . . S ARRSC=$G(ARFLDS(430,ARIEN,255.1,"I")) ; RSC
 . . . I ARRSC="" S ARRSC="RVW"
 . . S IBSTATNM=IBFLDS(350,IBIEN,.05,"E")
 . . I $D(^TMP($J,"RCVCR",BILLNUM,SVCDT)) S CNT="" S CNT=$O(^TMP($J,"RCVCR",BILLNUM,SVCDT,CNT),-1)+1
 . . S XTEMP=350_U_IBIEN_U_IBFLDS(350,IBIEN,.01,"E") ; Pos 1-3 FILE^IBIEN^IB Ref #
 . . S XTEMP=XTEMP_U_IBFLDS(350,IBIEN,.09,"E") ;Pos 4 Parent Charge 
 . . S XTEMP=XTEMP_U_IBFLDS(350,IBIEN,.16,"E") ;Pos 5 Parent Event
 . . S XTEMP=XTEMP_U_IBSTATNM_U_IBFLDS(350,IBIEN,.06,"E") ;Pos 6 IB STATUS Pos 7 Units Col 11&6
 . . S XTEMP=XTEMP_U_IBFLDS(350,IBIEN,.07,"E") ;Pos 8 Total Charge Col 5
 . . S XTEMP=XTEMP_U_$E(BILLNUM,1,21) ;Pos 9 AR Bill # Col 3
 . . S XTEMP=XTEMP_U_$E(IBFLDS(350,IBIEN,.03,"E"),1,26) ;Pos 10 Category Col 4
 . . I SVCTYP'=52 D
 . . . I IBFLDS(350,IBIEN,.03,"E")["RX" S XTEMP=XTEMP_U_U_$$STRIP^XLFSTR($$FMTE^XLFDT(SVCDT,"8D")," ")_U_U ;Pos 11 blank Pos 12 Release RX Date Col 7&8
 . . . I IBFLDS(350,IBIEN,.03,"E")'["RX" S XTEMP=XTEMP_U_$$STRIP^XLFSTR($$FMTE^XLFDT(SVCDT,"8D")," ")_U_U_U ;Pos 11  Medical DOS Pos 12-14 blank Col 7,8,9,10
 . . I SVCTYP=52 S XTEMP=XTEMP_U_U_$$STRIP^XLFSTR($$FMTE^XLFDT(SVCDT,"8D")," ") ;Pos 11 blank Pos 12 Release RX Date Col 7&8
 . . I SVCTYP=52 S XTEMP=XTEMP_U_$P(DATEINFO,"/",5)_U_$P(DATEINFO,"/",6) ;Pos 13 RX Number, Pos 14 RX Name Col 9&10
 . . S XTEMP=XTEMP_U_$E($G(ARSTAT),1,21) ;Pos 15 AR Status Col 12
 . . S XTEMP=XTEMP_U I $G(IBCANCLR)'="" S XTEMP=XTEMP_$$STRIP^XLFSTR($$FMTE^XLFDT($G(IBCANCLD),"8D")," ") ;Pos 16 Cancel Dt
 . . S XTEMP=XTEMP_U I $G(IBCANCLR)'="" S XTEMP=XTEMP_$E($G(IBCANCLR),1,14) ;Pos 17 Cancel Reason
 . . S XTEMP=XTEMP_U I $G(IBCANCLR)'="" S XTEMP=XTEMP_$E(IBCANCLB,1,16) ;Pos 18 Cancel By
 . . S XTEMP=XTEMP_U_$G(ARAPPR) ;Pos 19 APPR
 . . S XTEMP=XTEMP_U_$G(ARRSC) ;Pos 20 RSC
 . . ;Get Letter dates if they exist
 . . I FBILLNUM D
 . . . I '$D(^PRCA(430,"B",FBILLNUM)) Q
 . . . S RC430IEN=$O(^PRCA(430,"B",FBILLNUM,""))
 . . . I $G(LETTER)=1 D  ;JMC display letters if Letter Dates selected
 . . . . K ARFLDS
 . . . . S DIC=430,DR="61:63;68",DA=RC430IEN,DIQ="ARFLDS",DIQ(0)="I" D EN^DIQ1
 . . . . S LCNT=0
 . . . . F LTRFLD=61,62,63,68 D
 . . . . . S LCNT=LCNT+1 S TLTR="LTR"_LCNT
 . . . . . S @TLTR=ARFLDS(430,RC430IEN,LTRFLD,"I")
 . . . . . I @TLTR'="" S XTEMP=XTEMP_U_$$STRIP^XLFSTR($$FMTE^XLFDT(@TLTR,"8D")," ") ; Pos 21-24 Letter 1-4
 . . . . . I @TLTR="" S XTEMP=XTEMP_U_"NO DATE" ; Pos 21-24 Letter 1-4
 . . . I $G(LETTER)=2 D  ;user wants to display Total Payments Received on Bill Number
 . . . . S RC430TPR=+$P($G(^PRCA(430,RC430IEN,7)),"^",7)
 . . . . S XTEMP=XTEMP_U_RC430TPR
 . . S ^TMP($J,"RCVCR",BILLNUM,SVCDT,CNT)=XTEMP
 . . K XTEMP
 Q
 ;
OUTPRPT ; Loop through ^TMP to write report lines.
 N LINE,BILLNUM,CNT,JUNK,RCTPRARY
 S CNT=0,POP=0,LINE="",BILLNUM="",JUNK=0
 I '$D(^TMP($J,"RCVCR")) S POP=1 W !,"NO DATA FOUND" Q
 F  S BILLNUM=$O(^TMP($J,"RCVCR",BILLNUM)) Q:BILLNUM=""!POP  D  Q:IBQUIT
 . S SVCDT="" F  S SVCDT=$O(^TMP($J,"RCVCR",BILLNUM,SVCDT)) Q:SVCDT=""!POP  D  Q:IBQUIT
 . . S CNT="" F  S CNT=$O(^TMP($J,"RCVCR",BILLNUM,SVCDT,CNT)) Q:CNT=""  D  Q:IBQUIT
 . . . I $Y>(IOSL-4) W ! D PAUSE(.IBQUIT) Q:IBQUIT  W @IOF D PRTCOLHD
 . . . S LINE=^TMP($J,"RCVCR",BILLNUM,SVCDT,CNT)
 . . . I $P(LINE,U,9)=0 S $P(LINE,U,9)=""
 . . . I '$P(LINE,U,4) D WRITEREC(LINE)
 . . . I $P(LINE,U,4)=$P(LINE,U,3),($P(LINE,U,3)'="") D WRITEREC(LINE)
 K ^TMP($J,"RCVCR"),RCTPRARY
 Q
 ;
WRITEREC(LINE) ; Write one line of report
 ; display date as DDmmmYY $$STRIP^XLFSTR($$FMTE^XLFDT(3070308,"8D")," ")
 W !,$E(VETNM,1,26),?26,U,SSN,?36,U,$P(LINE,U,9),?48,U,$P(LINE,U,10),?75,U,$J($P(LINE,U,8),8,2)
 W ?84,U,$P(LINE,U,7),?89,U,$P(LINE,U,11),?97,U,$P(LINE,U,12),?105,U,$P(LINE,U,13),?118,U,$P(LINE,U,14)
 W ?135,U,$P(LINE,U,6),?149,U,$P(LINE,U,15),?171,U,$P(LINE,U,16),?179,U,$P(LINE,U,17),?194,U,$P(LINE,U,18)
 W ?211,U,$P(LINE,U,19),?218,U,$P(LINE,U,20)
 I $G(LETTER)=1 W ?223,U,$P(LINE,U,21),?231,U,$P(LINE,U,22),?239,U,$P(LINE,U,23),?247,U,$P(LINE,U,24)  ;JMC Only print if 1 selected
 I $G(LETTER)=2 D
 . W ?223,U
 . I $P(LINE,U,9)="" Q
 . I '$D(RCTPRARY($P(LINE,U,9))) W $J($P(LINE,U,21),11,2)  ;display the Total Principal Paid on Bill Number only once
 . S RCTPRARY($P(LINE,U,9))=""
 Q
 ;
GETDTS() ; Get appropriate selection trigger dates by type of service
 ;Determine transaction type 52, RX Manual RX Out pat, inpatient, LTC inpatient, LTC Outpatient
 ;based on transaction type get date used for selection and determine if it falls within the 
 ;date range for the report.
 ; Return: Transaction type/File derived from/SELDT (Selection date)/DISPDT (display date).
 ; in the case of RX the following is appended to the return /RX #/Drug Name
 N IBTYPINT,IBTYPE,IBTYPE,IBBG,DATES,RESPONSE,SVCTYP,RXFLDS,RXRFILL,RXNUM,RXNAME,IBCAT,IBDTENT
 N RXDATE,RXIEN,RXNODE,IBDTFRM,RXFILDT
 S RESPONSE="",RXRFILL="",IBCAT="",IBDTFRM="",IBDTENT=""
 ;RX via pharmacy system
 S IBCAT=IBFLDS(350,IBIEN,.03,"E")
 S IBTYPE=IBFLDS(350,IBIEN,.04,"E") S SVCTYP=+IBTYPE
 I SVCTYP=52 D  ;RX
 . I $P(IBTYPE,";",2)'="" S RXRFILL=$P(IBTYPE,":",3)
 . K ^TMP($J,"RXRDT")
 . S RXIEN=+$P(IBTYPE,":",2)
 . S RXNODE="0,2"
 . I RXRFILL'="" S RXNODE="0,2,R^^"_RXRFILL
 . D RX^PSO52API(DFN,"RXRDT",RXIEN,,RXNODE,,)
 . I +$G(^TMP($J,"RXRDT",RXIEN,0))=-1 S RESPONSE="RX/"_"350#"_$P(^TMP($J,"RXRDT",RXIEN,0),U,2) Q
 . I RESPONSE'="" Q
 . I RXRFILL'="",$P(^TMP($J,"RXRDT",DFN,RXIEN,"RF",0),U,1)=-1 Q  ;No data for refill
 . ;get the release date 
 . I RXRFILL'="" S RXDATE=$P($G(^TMP($J,"RXRDT",DFN,RXIEN,"RF",RXRFILL,17)),U,1)
 . E  S RXDATE=$P($G(^TMP($J,"RXRDT",DFN,RXIEN,31)),U,1)
 . ;get the fill date 
 . I RXRFILL'="" S RXFILDT=$P($G(^TMP($J,"RXRDT",DFN,RXIEN,"RF",RXRFILL,0.01)),U,1)
 . E  S RXFILDT=+$P($G(^TMP($J,"RXRDT",DFN,RXIEN,22)),U,1)
 . ;if no release date then use the refill date instead 
 . I 'RXDATE,RXFILDT S RXDATE=RXFILDT
 . S RXDATE=RXDATE\1
 . S RXNUM=^TMP($J,"RXRDT",DFN,RXIEN,.01)
 . S RXNAME=$P(^TMP($J,"RXRDT",DFN,RXIEN,6),U,2)
 . S RESPONSE="RX/"_"350/"_RXDATE_"/"_RXDATE_"/"_RXNUM_"/"_$E(RXNAME,1,16)
 I RESPONSE'="" Q RESPONSE
 ;Manually entered RX
 I SVCTYP=350 D
 . I IBCAT'["RX" Q  ; Medical Charge
 . S IBDTENT=IBFLDS(350,IBIEN,.15,"I")
 . I IBDTENT="" S IBDTENT=IBFLDS(350,IBIEN,12,"I")
 . S IBDTFRM=IBFLDS(350,IBIEN,.14,"I")
 . I IBDTFRM="" S IBDTFRM=IBDTENT
 . S RESPONSE="RXM/"_"350/"_IBDTENT_"/"_IBDTFRM
 I RESPONSE'="" Q RESPONSE
 ;Inpatient or LTC Inpatient
 ;INP/350/(#.14) DATE BILLED FROM - used as trigger date to compare against the date range/(#.14) DATE BILLED FROM - used as DOS
 I IBCAT["INPT"!(IBCAT["ADMISSION") D
 . ;S RESPONSE="INP/"_"350/"_IBFLDS(350,IBIEN,.15,"I")_"/"_IBFLDS(350,IBIEN,.14,"I")
 . S RESPONSE="INP/"_"350/"_IBFLDS(350,IBIEN,.14,"I")_"/"_IBFLDS(350,IBIEN,.14,"I")  ;jmc
 I RESPONSE'="" Q RESPONSE
 ;All Outpatient except for LTC
 S RESPONSE="OPT/350/"_IBFLDS(350,IBIEN,.14,"I")_"/"_IBFLDS(350,IBIEN,.14,"I")
 Q RESPONSE
 ;
PAUSE(IBQUIT) ;
 I $G(DGPAGE)>0,TRM K DIR S DIR(0)="E" D ^DIR K DIR S:+Y=0 IBQUIT=1
 Q
CLEAN ; KILL ALL REMAINING VARIABLES BEFORE EXIT
 K ^TMP($J,"RXRDT")
 K RXFLDS,IBFLDS,TRIGDT,DPTDFN,IBRXFILL,IBRXNAM,IBRXNUM,ICANCLD,LTR1,LTR2,LTR3,LTR4,VADM
 K ARSTAT,ARAPPR,ARRSC
 Q
 ;
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HRCVCR1   15975     printed  Sep 23, 2025@19:25:20                                                                                                                                                                                                     Page 2
RCVCR1    ;SLC/LLB/JC - First Party Veterans Charge Report ; SEP 9,2020@16:17
 +1       ;;4.5;Accounts Receivable;**373,379**;Mar 20, 1995;Build 16
 +2       ;;Per VA Directive 6402, this routine should not be modified.
 +3       ;
 +4       ;External References  Type       ICR #
 +5       ;-------------------  ---------  -----
 +6       ; HOME^%ZIS           Supported  10086
 +7       ; ^DIC                Supported  10006
 +8       ; ^DIQ                Supported  10004
 +9       ; EN^DIQ1             Supported  10015
 +10      ; ^DIR                Supported  10026
 +11      ; RX^PSO52API         Supported  4820
 +12      ; DEM^VADPT           Supported  10061
 +13      ; $$FMTE^XLFDT        Supported  10103
 +14      ; $$NOW^XLFDT         Supported  10103
 +15      ; $$CJ^XLFSTR         Supported  10104
 +16      ; $$STRIP^XLFSTR      Supported  10104
 +17      ; EN^XUTMDEVQ         Supported  1519
 +18      ;
 +19      ;ICR#  TYPE          DESCRIPTION
 +20      ;----- ----------    ---------------------
 +21      ; 7218 Private       File (#350), access to fields (#.08),(#.09),(#.1),(#.12),(#.18),(#.19),(#.2),(#12),(#13),(#14)
 +22      ; 4541 Private       File (#350), access to the "C" cross-reference and fields (#.01),(#.02),(#.03),(#.04),(#.05),(#.06),(#.07),(#.11),(#.14),(#.15),(#.16),(#.17)
 +23      ;
START     ;
 +1        NEW DFN,VETNM,FRMDT,FRMDTINT,TODT,TODTINT,IBSVCTYP,IBSVCNM,IBQUIT,DGPAGE
 +2        NEW IBSTAT,IBSTATNM,POP,%ZIS,X,ZTSAVE,Y,LETTER,STAT,SSN,DIRUT,IBRXNAM
 +3        SET (POP,DIRUT,IBQUIT,DGPAGE)=0
 +4        DO INIT
 +5        IF POP
               QUIT 
 +6        WRITE !!,"The number of characters per row should be set to 256."
 +7        WRITE !,"Please use the following path to modify the display settings:"
 +8        WRITE !,"In Reflections. File >>> Settings >>> Terminal Configuration"
 +9        WRITE !," >>> Set Up Display Settings >>> Number of characters per row",!
 +10       WRITE !,"To capture as a spreadsheet format, at the DEVICE prompt, please accept the"
 +11       WRITE !,"default value of 0;256;99999. This should help avoid wrapping problems.",!
 +12       WRITE !,"For pagination, please use "";256;"" for the device value instead of the default.",!
 +13       SET %ZIS=""
 +14       SET %ZIS("B")="0;256;99999"
 +15       SET ZTSAVE("FRMDTINT")=""
 +16       SET ZTSAVE("LETTER")=""
 +17       SET X="FIRST PARTY VETERAN CHARGE REPORT"
 +18       DO EN^XUTMDEVQ("DISPHEAD^RCVCR1",X,.ZTSAVE,.%ZIS)
 +19       DO HOME^%ZIS
 +20       DO CLEAN
 +21       QUIT 
 +22      ;
INIT      ;
 +1       ;
 +2        WRITE @IOF
 +3        WRITE !,"*** Print the First Party Veteran Charge Report ***",!
 +4        WRITE !,"This report captures detailed 1st party bill information for a specific "
 +5        WRITE !,"Veteran, within a user specified range of dates of service."
 +6        WRITE !,"This report output requires screen size of 256 characters wide.",!
 +7       ; Get Veteran Name
 +8        SET DIC="^DPT("
           SET DIC(0)="AQEZMV"
           SET DIC("A")="Enter Veteran Name: "
 +9        DO ^DIC
 +10       KILL DIC
 +11       IF +Y<1
               KILL DIC
               SET POP=1
               QUIT 
 +12       SET DFN=$PIECE(Y,U)
 +13       SET VETNM=$PIECE(Y,U,2)
 +14       DO DEM^VADPT
 +15       SET SSN=$PIECE(VADM(2),U,1)
 +16      ;Get From date
 +17       WRITE !
 +18       NEW DIR
 +19       SET DIR(0)="DO^:DT:EX"
 +20       SET DIR("A")="Enter From Date "
 +21       DO ^DIR
 +22       IF +Y<1
               KILL DIR
               SET POP=1
               QUIT 
 +23       KILL DIR
 +24       SET FRMDT=X
           SET FRMDTINT=Y
 +25      ;Get To date
 +26       SET DIR(0)="DA^"_FRMDTINT_":"_DT_":EX"
 +27       SET Y=DT
           DO D^DIQ
           SET DIR("B")="TODAY"
 +28       SET DIR("A")="Enter To Date: "
 +29       DO ^DIR
 +30       IF +Y<1
               KILL DIR
               SET POP=1
               QUIT 
 +31       KILL DIR
 +32       SET TODT=X
           SET TODTINT=Y
 +33      ; Get Service Type
 +34       SET DIR(0)="SO^1:Medical Care;2:Outpatient Medication;3:Both (Medical Care and Outpatient Medication)"
 +35       SET DIR("L",1)="Which type of copayment do you wish to see?"
 +36       SET DIR("L",2)="  1. Medical Care"
 +37       SET DIR("L",3)="  2. Outpatient Medication"
 +38       SET DIR("L")="  3. Both (Medical Care and Outpatient Medication)"
 +39       SET DIR("B")="3"
 +40       SET DIR("A")="Enter selection (1,2 or 3) "
 +41       DO ^DIR
 +42       KILL DIR
 +43       IF +Y<1!(+Y>3)
               KILL DIR
               SET POP=1
               QUIT 
 +44       SET IBSVCTYP=Y
           SET IBSVCNM=Y(0)
 +45      ; Get IB Status
 +46       SET DIR(0)="SO^1:Billed;2:On Hold;3:Cancelled;4:All (Billed, On Hold, Cancelled)"
 +47       SET DIR("L",1)="Which IB status for the selected copayment(s) do you wish to see?"
 +48       SET DIR("L",2)="  1. Billed"
 +49       SET DIR("L",3)="  2. On Hold"
 +50       SET DIR("L",4)="  3. Cancelled"
 +51       SET DIR("L")="  4. All (Billed, On Hold, Cancelled)"
 +52       SET DIR("B")="4"
 +53       SET DIR("A")="Enter Status selection (1,2,3 or 4) "
 +54       DO ^DIR
 +55       KILL DIR
 +56       IF +Y<1!(+Y>4)
               KILL DIR
               SET POP=1
               QUIT 
 +57       SET IBSTAT=Y
           SET IBSTATNM=Y(0)
 +58      ;Ask if Letters should print
 +59       WRITE !
 +60       SET DIR("A")="Enter Selection (1,2,or 3) "
 +61       SET DIR(0)="SO^1:Letter Dates;2:Total Payments Received on Bill Number;3:Neither"
 +62       SET DIR("L",1)="Do you want to see: "
 +63       SET DIR("L",2)="  1. Letter Dates"
 +64       SET DIR("L",3)="  2. Total Payments Received on Bill Number"
 +65       SET DIR("L")="  3. Neither"
 +66       SET DIR("B")="3"
 +67       DO ^DIR
 +68       IF $GET(DIRUT)
               SET POP=1
               QUIT 
 +69       KILL DIR
 +70       IF +Y<1!(+Y>3)
               KILL DIR
               SET POP=1
               QUIT 
 +71       SET LETTER=Y
 +72       QUIT 
 +73      ;
DISPHEAD  ; Write report header
 +1       ;
 +2        WRITE @IOF
 +3        WRITE !,"First Party Veteran Charge Report",!
 +4        WRITE !,"Run date: ",$$FMTE^XLFDT($$NOW^XLFDT,"MP")
 +5        WRITE !,"Service Dates From ",$$FMTE^XLFDT(FRMDTINT,"5D")," To ",$$FMTE^XLFDT(TODTINT,"5D")
 +6        WRITE !,"Copayment Type Selected: ",IBSVCNM
 +7        WRITE !,"IB Status Selected: ",IBSTATNM
 +8        NEW TRM
           SET TRM=($EXTRACT(IOST)="C")
 +9        WRITE !!
 +10       DO PRTCOLHD
 +11       DO RUNRPT
 +12       DO OUTPRPT
 +13       if IBQUIT
               QUIT 
 +14       DO ASKCONT(0)
 +15       QUIT 
 +16      ;
ASKCONT(FLAG) ; display "press <Enter> to continue" prompt
 +1        NEW Z
 +2        WRITE !!,$$CJ^XLFSTR("Press <Enter> to "_$SELECT(FLAG=1:"continue.",1:"exit."),20)
 +3        READ !,Z:DTIME
 +4        QUIT 
 +5       ;
PRTCOLHD  ;
 +1       ;
 +2        NEW COL,CNT,CNAME,LENGTH,END,SCOL,LOC
 +3        SET END=255
           SET SCOL=21
           SET COL=0
 +4       ;I $G(LETTER)="NO" S END=220,SCOL=17
 +5       ;JMC If Total Payment or Neither selected
           IF $GET(LETTER)'=1
               SET END=220
               SET SCOL=17
 +6        SET DGPAGE=$GET(DGPAGE)+1
 +7        FOR CNT=1:1:SCOL
               Begin DoDot:1
 +8                SET CNAME=$PIECE($TEXT(COLHD+CNT),U,2)
 +9                SET LENGTH=$PIECE($TEXT(COLHD+CNT),U,4)
 +10               SET LOC=COL+((LENGTH-$LENGTH(CNAME))\2)
 +11               IF CNT>1
                       SET LOC=LOC+1
 +12               WRITE ?LOC,CNAME
 +13               SET COL=COL+LENGTH
 +14               IF CNT>1
                       SET COL=COL+1
 +15               IF CNT<SCOL
                       WRITE ?COL,"^"
               End DoDot:1
 +16       IF $GET(LETTER)=2
               WRITE ?223,"^Total Principal"
 +17       WRITE !
 +18       SET COL=0
 +19       FOR CNT=1:1:SCOL
               Begin DoDot:1
 +20               SET CNAME=$PIECE($TEXT(COLHD+CNT),U,3)
 +21               SET LENGTH=$PIECE($TEXT(COLHD+CNT),U,4)
 +22               SET LOC=COL+((LENGTH-$LENGTH(CNAME))\2)
 +23               IF CNT>1
                       SET LOC=LOC+1
 +24               SET COL=COL+LENGTH
 +25               WRITE ?LOC,CNAME
 +26               IF CNT>1
                       SET COL=COL+1
 +27               IF CNT<SCOL
                       WRITE ?COL,"^"
               End DoDot:1
 +28       IF $GET(LETTER)=2
               WRITE ?223,"^Paid on Bill Number"
 +29       QUIT 
COLHD     ; $T target. Format: Column #^1st row data^2nd row data^Field Width
 +1       ;;1^^Veteran Name^26
 +2       ;;2^^SSN^9
 +3       ;;3^^Bill Number^11
 +4       ;;4^^Category^26
 +5       ;;5^Charge^Amount^8
 +6       ;;6^Unit^Day^4
 +7       ;;7^Medical^DOS^7
 +8       ;;8^Release^RX DT^7
 +9       ;;9^^RX Number^12
 +10      ;;10^^RX Name^16
 +11      ;;11^^IB Status^13
 +12      ;;12^^AR Status^21
 +13      ;;13^Cancel^Date^7
 +14      ;;14^Cancellation^Reason^14
 +15      ;;15^^Cancelled By^16
 +16      ;;16^^APPR^6
 +17      ;;17^^RSC^4
 +18      ;;18^^Letter1^7
 +19      ;;19^^Letter2^7
 +20      ;;20^^Letter3^7
 +21      ;;21^^Letter4^7
 +22       QUIT 
 +23      ;
RUNRPT    ;Gather data for Report
 +1        DO GET350
 +2       ; Only pull file #399 data if user selected All as the desired IB Status
           IF IBSTAT=4
               DO GET399^RCVCR2
 +3        QUIT 
 +4       ;
GET350    ; Collect data originating from the INTEGRATED BILLING ACTION file (#350)
 +1       ;
 +2        NEW IBIEN,IB0,STATLST,CNT,STATLST,LINE,RESULT,IBSTATNM,POP,SVCTYP,BILLNUM
 +3        NEW DATEINFO,TRIGDT,SVCDT,XTEMP,DIC,DR,DA,DIQ,FBILLNUM,LCNT,LTRFLD,RC430IEN
 +4        NEW TLTR,IBCANCLR,IBCANCLD,IBCANCLB,ARSTAT,ARAPPR,ARRSC,ARIEN,ARFLDS,RC430TPR
 +5        SET (IBIEN,IBCANCLR,ICANCLD,IBCANCLB)=""
           SET (CNT,RC430TPR)=0
 +6       ; STATUS=BILLED,ON HOLD,CANCELLED, or ALL
 +7        SET STATLST=$SELECT(IBSTAT=1:"/3/",IBSTAT=2:"/8/",IBSTAT=3:"/10/",1:"/3/8/10/")
 +8        KILL ^TMP($JOB,"RCVCR")
 +9        FOR 
               SET IBIEN=$ORDER(^IB("C",DFN,IBIEN))
               if IBIEN=""
                   QUIT 
               Begin DoDot:1
 +10               KILL IBFLDS
 +11               SET DIC=350
                   SET DR=".01:.07;.08;.09:.12;.14:.2;12:14"
                   SET DA=IBIEN
                   SET DIQ="IBFLDS"
                   SET DIQ(0)="IE"
                   DO EN^DIQ1
 +12               SET STAT="/"_IBFLDS(350,IBIEN,.05,"I")_"/"
 +13               SET DATEINFO=$$GETDTS
 +14               IF DATEINFO["#"
                       Begin DoDot:2
 +15                       SET RXDATE=IBFLDS(350,IBIEN,12,"I")
 +16                       SET RXNUM=$EXTRACT(IBFLDS(350,IBIEN,.08,"E"),1,12)
 +17                       SET RXNAME=""
 +18                       SET DATEINFO="RX/"_"350/"_RXDATE_"/"_RXDATE_"/"_RXNUM_"/"_$EXTRACT(RXNAME,1,16)
                       End DoDot:2
 +19               SET TRIGDT=$PIECE(DATEINFO,"/",3)
 +20               SET SVCDT=$PIECE(DATEINFO,"/",4)
 +21               IF TRIGDT'<FRMDTINT
                       IF TRIGDT'>TODTINT
                           IF (STATLST[STAT)
                               Begin DoDot:2
 +22      ;Check Service Type
 +23                               SET RESULT=IBFLDS(350,IBIEN,.04,"I")
                                   SET SVCTYP=$PIECE(RESULT,":",1)
 +24      ;Only include Medical
                                   IF IBSVCTYP=1
                                       IF (SVCTYP=52!(IBFLDS(350,IBIEN,.03,"E")["RX"))
                                           QUIT 
 +25      ;Only include RX
                                   IF IBSVCTYP=2
                                       IF (SVCTYP'=52)
                                           IF (IBFLDS(350,IBIEN,.03,"E")'["RX")
                                               QUIT 
 +26      ;Get Cancellation information if it exists
 +27                               SET IBCANCLR=IBFLDS(350,IBIEN,.1,"E")
 +28                               SET IBCANCLD=IBFLDS(350,IBIEN,14,"I")
 +29                               SET IBCANCLB=IBFLDS(350,IBIEN,13,"E")
 +30      ;Get data & Set into scratch global ^TMP($J,"RCVCR",BILLNUM,DATE,CNT)=
 +31      ;FILE#^IBIEN^REF#^PARENT CHARGE^PARENT EVENT^STATUS^UNITS^TOTAL CHARG^AR BILL NUMBER^CATEGORY
 +32      ;MEDICAL DOS^Release RX DT^RX #^RX Name^
 +33      ;CNT is used to distinguish entries with the same Bill Number
 +34                               SET (CNT,ARIEN)=0
 +35                               SET FBILLNUM=IBFLDS(350,IBIEN,.11,"I")
                                   IF FBILLNUM=""
                                       SET BILLNUM=0
 +36                               IF FBILLNUM["-"
                                       SET BILLNUM=$PIECE(FBILLNUM,"-",2)
 +37      ;Get IEN to 430 based on bill number
                                   IF BILLNUM'=""
                                       SET ARIEN=$ORDER(^PRCA(430,"D",BILLNUM,""))
 +38                               SET (ARSTAT,ARAPPR,ARRSC)=""
 +39                               IF BILLNUM'=""
                                       IF $GET(ARIEN)'=""
                                           Begin DoDot:3
 +40                                           SET DIC=430
                                               SET DR="8;203;255.1"
                                               SET DA=ARIEN
                                               SET DIQ="ARFLDS"
                                               SET DIQ(0)="IE"
                                               DO EN^DIQ1
 +41      ; AR Status
                                               SET ARSTAT=$GET(ARFLDS(430,ARIEN,8,"E"))
 +42      ; APPR
                                               SET ARAPPR=$GET(ARFLDS(430,ARIEN,203,"E"))
 +43                                           IF ARAPPR=""
                                                   SET ARAPPR="RVW"
 +44      ; RSC
                                               SET ARRSC=$GET(ARFLDS(430,ARIEN,255.1,"I"))
 +45                                           IF ARRSC=""
                                                   SET ARRSC="RVW"
                                           End DoDot:3
 +46                               SET IBSTATNM=IBFLDS(350,IBIEN,.05,"E")
 +47                               IF $DATA(^TMP($JOB,"RCVCR",BILLNUM,SVCDT))
                                       SET CNT=""
                                       SET CNT=$ORDER(^TMP($JOB,"RCVCR",BILLNUM,SVCDT,CNT),-1)+1
 +48      ; Pos 1-3 FILE^IBIEN^IB Ref #
                                   SET XTEMP=350_U_IBIEN_U_IBFLDS(350,IBIEN,.01,"E")
 +49      ;Pos 4 Parent Charge 
                                   SET XTEMP=XTEMP_U_IBFLDS(350,IBIEN,.09,"E")
 +50      ;Pos 5 Parent Event
                                   SET XTEMP=XTEMP_U_IBFLDS(350,IBIEN,.16,"E")
 +51      ;Pos 6 IB STATUS Pos 7 Units Col 11&6
                                   SET XTEMP=XTEMP_U_IBSTATNM_U_IBFLDS(350,IBIEN,.06,"E")
 +52      ;Pos 8 Total Charge Col 5
                                   SET XTEMP=XTEMP_U_IBFLDS(350,IBIEN,.07,"E")
 +53      ;Pos 9 AR Bill # Col 3
                                   SET XTEMP=XTEMP_U_$EXTRACT(BILLNUM,1,21)
 +54      ;Pos 10 Category Col 4
                                   SET XTEMP=XTEMP_U_$EXTRACT(IBFLDS(350,IBIEN,.03,"E"),1,26)
 +55                               IF SVCTYP'=52
                                       Begin DoDot:3
 +56      ;Pos 11 blank Pos 12 Release RX Date Col 7&8
                                           IF IBFLDS(350,IBIEN,.03,"E")["RX"
                                               SET XTEMP=XTEMP_U_U_$$STRIP^XLFSTR($$FMTE^XLFDT(SVCDT,"8D")," ")_U_U
 +57      ;Pos 11  Medical DOS Pos 12-14 blank Col 7,8,9,10
                                           IF IBFLDS(350,IBIEN,.03,"E")'["RX"
                                               SET XTEMP=XTEMP_U_$$STRIP^XLFSTR($$FMTE^XLFDT(SVCDT,"8D")," ")_U_U_U
                                       End DoDot:3
 +58      ;Pos 11 blank Pos 12 Release RX Date Col 7&8
                                   IF SVCTYP=52
                                       SET XTEMP=XTEMP_U_U_$$STRIP^XLFSTR($$FMTE^XLFDT(SVCDT,"8D")," ")
 +59      ;Pos 13 RX Number, Pos 14 RX Name Col 9&10
                                   IF SVCTYP=52
                                       SET XTEMP=XTEMP_U_$PIECE(DATEINFO,"/",5)_U_$PIECE(DATEINFO,"/",6)
 +60      ;Pos 15 AR Status Col 12
                                   SET XTEMP=XTEMP_U_$EXTRACT($GET(ARSTAT),1,21)
 +61      ;Pos 16 Cancel Dt
                                   SET XTEMP=XTEMP_U
                                   IF $GET(IBCANCLR)'=""
                                       SET XTEMP=XTEMP_$$STRIP^XLFSTR($$FMTE^XLFDT($GET(IBCANCLD),"8D")," ")
 +62      ;Pos 17 Cancel Reason
                                   SET XTEMP=XTEMP_U
                                   IF $GET(IBCANCLR)'=""
                                       SET XTEMP=XTEMP_$EXTRACT($GET(IBCANCLR),1,14)
 +63      ;Pos 18 Cancel By
                                   SET XTEMP=XTEMP_U
                                   IF $GET(IBCANCLR)'=""
                                       SET XTEMP=XTEMP_$EXTRACT(IBCANCLB,1,16)
 +64      ;Pos 19 APPR
                                   SET XTEMP=XTEMP_U_$GET(ARAPPR)
 +65      ;Pos 20 RSC
                                   SET XTEMP=XTEMP_U_$GET(ARRSC)
 +66      ;Get Letter dates if they exist
 +67                               IF FBILLNUM
                                       Begin DoDot:3
 +68                                       IF '$DATA(^PRCA(430,"B",FBILLNUM))
                                               QUIT 
 +69                                       SET RC430IEN=$ORDER(^PRCA(430,"B",FBILLNUM,""))
 +70      ;JMC display letters if Letter Dates selected
                                           IF $GET(LETTER)=1
                                               Begin DoDot:4
 +71                                               KILL ARFLDS
 +72                                               SET DIC=430
                                                   SET DR="61:63;68"
                                                   SET DA=RC430IEN
                                                   SET DIQ="ARFLDS"
                                                   SET DIQ(0)="I"
                                                   DO EN^DIQ1
 +73                                               SET LCNT=0
 +74                                               FOR LTRFLD=61,62,63,68
                                                       Begin DoDot:5
 +75                                                       SET LCNT=LCNT+1
                                                           SET TLTR="LTR"_LCNT
 +76                                                       SET @TLTR=ARFLDS(430,RC430IEN,LTRFLD,"I")
 +77      ; Pos 21-24 Letter 1-4
                                                           IF @TLTR'=""
                                                               SET XTEMP=XTEMP_U_$$STRIP^XLFSTR($$FMTE^XLFDT(@TLTR,"8D")," ")
 +78      ; Pos 21-24 Letter 1-4
                                                           IF @TLTR=""
                                                               SET XTEMP=XTEMP_U_"NO DATE"
                                                       End DoDot:5
                                               End DoDot:4
 +79      ;user wants to display Total Payments Received on Bill Number
                                           IF $GET(LETTER)=2
                                               Begin DoDot:4
 +80                                               SET RC430TPR=+$PIECE($GET(^PRCA(430,RC430IEN,7)),"^",7)
 +81                                               SET XTEMP=XTEMP_U_RC430TPR
                                               End DoDot:4
                                       End DoDot:3
 +82                               SET ^TMP($JOB,"RCVCR",BILLNUM,SVCDT,CNT)=XTEMP
 +83                               KILL XTEMP
                               End DoDot:2
               End DoDot:1
 +84       QUIT 
 +85      ;
OUTPRPT   ; Loop through ^TMP to write report lines.
 +1        NEW LINE,BILLNUM,CNT,JUNK,RCTPRARY
 +2        SET CNT=0
           SET POP=0
           SET LINE=""
           SET BILLNUM=""
           SET JUNK=0
 +3        IF '$DATA(^TMP($JOB,"RCVCR"))
               SET POP=1
               WRITE !,"NO DATA FOUND"
               QUIT 
 +4        FOR 
               SET BILLNUM=$ORDER(^TMP($JOB,"RCVCR",BILLNUM))
               if BILLNUM=""!POP
                   QUIT 
               Begin DoDot:1
 +5                SET SVCDT=""
                   FOR 
                       SET SVCDT=$ORDER(^TMP($JOB,"RCVCR",BILLNUM,SVCDT))
                       if SVCDT=""!POP
                           QUIT 
                       Begin DoDot:2
 +6                        SET CNT=""
                           FOR 
                               SET CNT=$ORDER(^TMP($JOB,"RCVCR",BILLNUM,SVCDT,CNT))
                               if CNT=""
                                   QUIT 
                               Begin DoDot:3
 +7                                IF $Y>(IOSL-4)
                                       WRITE !
                                       DO PAUSE(.IBQUIT)
                                       if IBQUIT
                                           QUIT 
                                       WRITE @IOF
                                       DO PRTCOLHD
 +8                                SET LINE=^TMP($JOB,"RCVCR",BILLNUM,SVCDT,CNT)
 +9                                IF $PIECE(LINE,U,9)=0
                                       SET $PIECE(LINE,U,9)=""
 +10                               IF '$PIECE(LINE,U,4)
                                       DO WRITEREC(LINE)
 +11                               IF $PIECE(LINE,U,4)=$PIECE(LINE,U,3)
                                       IF ($PIECE(LINE,U,3)'="")
                                           DO WRITEREC(LINE)
                               End DoDot:3
                               if IBQUIT
                                   QUIT 
                       End DoDot:2
                       if IBQUIT
                           QUIT 
               End DoDot:1
               if IBQUIT
                   QUIT 
 +12       KILL ^TMP($JOB,"RCVCR"),RCTPRARY
 +13       QUIT 
 +14      ;
WRITEREC(LINE) ; Write one line of report
 +1       ; display date as DDmmmYY $$STRIP^XLFSTR($$FMTE^XLFDT(3070308,"8D")," ")
 +2        WRITE !,$EXTRACT(VETNM,1,26),?26,U,SSN,?36,U,$PIECE(LINE,U,9),?48,U,$PIECE(LINE,U,10),?75,U,$JUSTIFY($PIECE(LINE,U,8),8,2)
 +3        WRITE ?84,U,$PIECE(LINE,U,7),?89,U,$PIECE(LINE,U,11),?97,U,$PIECE(LINE,U,12),?105,U,$PIECE(LINE,U,13),?118,U,$PIECE(LINE,U,14)
 +4        WRITE ?135,U,$PIECE(LINE,U,6),?149,U,$PIECE(LINE,U,15),?171,U,$PIECE(LINE,U,16),?179,U,$PIECE(LINE,U,17),?194,U,$PIECE(LINE,U,18)
 +5        WRITE ?211,U,$PIECE(LINE,U,19),?218,U,$PIECE(LINE,U,20)
 +6       ;JMC Only print if 1 selected
           IF $GET(LETTER)=1
               WRITE ?223,U,$PIECE(LINE,U,21),?231,U,$PIECE(LINE,U,22),?239,U,$PIECE(LINE,U,23),?247,U,$PIECE(LINE,U,24)
 +7        IF $GET(LETTER)=2
               Begin DoDot:1
 +8                WRITE ?223,U
 +9                IF $PIECE(LINE,U,9)=""
                       QUIT 
 +10      ;display the Total Principal Paid on Bill Number only once
                   IF '$DATA(RCTPRARY($PIECE(LINE,U,9)))
                       WRITE $JUSTIFY($PIECE(LINE,U,21),11,2)
 +11               SET RCTPRARY($PIECE(LINE,U,9))=""
               End DoDot:1
 +12       QUIT 
 +13      ;
GETDTS()  ; Get appropriate selection trigger dates by type of service
 +1       ;Determine transaction type 52, RX Manual RX Out pat, inpatient, LTC inpatient, LTC Outpatient
 +2       ;based on transaction type get date used for selection and determine if it falls within the 
 +3       ;date range for the report.
 +4       ; Return: Transaction type/File derived from/SELDT (Selection date)/DISPDT (display date).
 +5       ; in the case of RX the following is appended to the return /RX #/Drug Name
 +6        NEW IBTYPINT,IBTYPE,IBTYPE,IBBG,DATES,RESPONSE,SVCTYP,RXFLDS,RXRFILL,RXNUM,RXNAME,IBCAT,IBDTENT
 +7        NEW RXDATE,RXIEN,RXNODE,IBDTFRM,RXFILDT
 +8        SET RESPONSE=""
           SET RXRFILL=""
           SET IBCAT=""
           SET IBDTFRM=""
           SET IBDTENT=""
 +9       ;RX via pharmacy system
 +10       SET IBCAT=IBFLDS(350,IBIEN,.03,"E")
 +11       SET IBTYPE=IBFLDS(350,IBIEN,.04,"E")
           SET SVCTYP=+IBTYPE
 +12      ;RX
           IF SVCTYP=52
               Begin DoDot:1
 +13               IF $PIECE(IBTYPE,";",2)'=""
                       SET RXRFILL=$PIECE(IBTYPE,":",3)
 +14               KILL ^TMP($JOB,"RXRDT")
 +15               SET RXIEN=+$PIECE(IBTYPE,":",2)
 +16               SET RXNODE="0,2"
 +17               IF RXRFILL'=""
                       SET RXNODE="0,2,R^^"_RXRFILL
 +18               DO RX^PSO52API(DFN,"RXRDT",RXIEN,,RXNODE,,)
 +19               IF +$GET(^TMP($JOB,"RXRDT",RXIEN,0))=-1
                       SET RESPONSE="RX/"_"350#"_$PIECE(^TMP($JOB,"RXRDT",RXIEN,0),U,2)
                       QUIT 
 +20               IF RESPONSE'=""
                       QUIT 
 +21      ;No data for refill
                   IF RXRFILL'=""
                       IF $PIECE(^TMP($JOB,"RXRDT",DFN,RXIEN,"RF",0),U,1)=-1
                           QUIT 
 +22      ;get the release date 
 +23               IF RXRFILL'=""
                       SET RXDATE=$PIECE($GET(^TMP($JOB,"RXRDT",DFN,RXIEN,"RF",RXRFILL,17)),U,1)
 +24              IF '$TEST
                       SET RXDATE=$PIECE($GET(^TMP($JOB,"RXRDT",DFN,RXIEN,31)),U,1)
 +25      ;get the fill date 
 +26               IF RXRFILL'=""
                       SET RXFILDT=$PIECE($GET(^TMP($JOB,"RXRDT",DFN,RXIEN,"RF",RXRFILL,0.01)),U,1)
 +27              IF '$TEST
                       SET RXFILDT=+$PIECE($GET(^TMP($JOB,"RXRDT",DFN,RXIEN,22)),U,1)
 +28      ;if no release date then use the refill date instead 
 +29               IF 'RXDATE
                       IF RXFILDT
                           SET RXDATE=RXFILDT
 +30               SET RXDATE=RXDATE\1
 +31               SET RXNUM=^TMP($JOB,"RXRDT",DFN,RXIEN,.01)
 +32               SET RXNAME=$PIECE(^TMP($JOB,"RXRDT",DFN,RXIEN,6),U,2)
 +33               SET RESPONSE="RX/"_"350/"_RXDATE_"/"_RXDATE_"/"_RXNUM_"/"_$EXTRACT(RXNAME,1,16)
               End DoDot:1
 +34       IF RESPONSE'=""
               QUIT RESPONSE
 +35      ;Manually entered RX
 +36       IF SVCTYP=350
               Begin DoDot:1
 +37      ; Medical Charge
                   IF IBCAT'["RX"
                       QUIT 
 +38               SET IBDTENT=IBFLDS(350,IBIEN,.15,"I")
 +39               IF IBDTENT=""
                       SET IBDTENT=IBFLDS(350,IBIEN,12,"I")
 +40               SET IBDTFRM=IBFLDS(350,IBIEN,.14,"I")
 +41               IF IBDTFRM=""
                       SET IBDTFRM=IBDTENT
 +42               SET RESPONSE="RXM/"_"350/"_IBDTENT_"/"_IBDTFRM
               End DoDot:1
 +43       IF RESPONSE'=""
               QUIT RESPONSE
 +44      ;Inpatient or LTC Inpatient
 +45      ;INP/350/(#.14) DATE BILLED FROM - used as trigger date to compare against the date range/(#.14) DATE BILLED FROM - used as DOS
 +46       IF IBCAT["INPT"!(IBCAT["ADMISSION")
               Begin DoDot:1
 +47      ;S RESPONSE="INP/"_"350/"_IBFLDS(350,IBIEN,.15,"I")_"/"_IBFLDS(350,IBIEN,.14,"I")
 +48      ;jmc
                   SET RESPONSE="INP/"_"350/"_IBFLDS(350,IBIEN,.14,"I")_"/"_IBFLDS(350,IBIEN,.14,"I")
               End DoDot:1
 +49       IF RESPONSE'=""
               QUIT RESPONSE
 +50      ;All Outpatient except for LTC
 +51       SET RESPONSE="OPT/350/"_IBFLDS(350,IBIEN,.14,"I")_"/"_IBFLDS(350,IBIEN,.14,"I")
 +52       QUIT RESPONSE
 +53      ;
PAUSE(IBQUIT) ;
 +1        IF $GET(DGPAGE)>0
               IF TRM
                   KILL DIR
                   SET DIR(0)="E"
                   DO ^DIR
                   KILL DIR
                   if +Y=0
                       SET IBQUIT=1
 +2        QUIT 
CLEAN     ; KILL ALL REMAINING VARIABLES BEFORE EXIT
 +1        KILL ^TMP($JOB,"RXRDT")
 +2        KILL RXFLDS,IBFLDS,TRIGDT,DPTDFN,IBRXFILL,IBRXNAM,IBRXNUM,ICANCLD,LTR1,LTR2,LTR3,LTR4,VADM
 +3        KILL ARSTAT,ARAPPR,ARRSC
 +4        QUIT 
 +5       ;