- RCDMCR2B ;HEC/SBW - DMC Debt Validity Management Report - Collect Data ;28/SEP/2007
- ;;4.5;Accounts Receivable;**253**;Mar 20, 1995;Build 9
- ;;Per VHA Directive 2004-038, this routine should not be modified.
- ;
- COLLECT(STOPIT,BEGDT,DMCVAL) ; Get the report data
- ; STOPIT - Passed Variable to determine if process is to be terminated
- ; BEGDT - Beginning Date (in past) to get data for. Optional, Set
- ; 365 days in past if not passed.
- ; DMCVAL - DMC Debt Valid values that will be included in this report
- ; (i.e. DMCVAL("NULL"), DMCVAL("PENDING"), DMCVAL("YES"),
- ; or DMCVAL("NO") )
- ;Output
- ; STOPIT - Passed Variable set to 1 if process is to be terminated
- ; ^TMP($J,"RCDMCR2") with report data and summary data
- N STAT,RDATE,IEN,CTR,BADDATA
- ;Set BEGDT if valid value not passed
- S:$G(BEGDT)'>0 BEGDT=$$FMADD^XLFDT(DT,-365,0,0,0)
- ;Get AR Bill Data that is within the last 365 days
- ;for Bill's with a current status of ACTIVE, CANCELLATION, SUSPENDED,
- ;REFUNDED, OPEN, REFUND REVIEW
- F STAT=16,39,40,41,42,44 D Q:$G(STOPIT)>0
- . S RDATE=BEGDT-1
- . F S RDATE=$O(^PRCA(430,"ASDT",STAT,RDATE)) Q:RDATE'>0 D Q:$G(STOPIT)>0
- . . S IEN=0
- . . F S IEN=$O(^PRCA(430,"ASDT",STAT,RDATE,IEN)) Q:IEN'>0 D Q:$G(STOPIT)>0
- . . . S CTR=$G(CTR)+1 ;Counter
- . . . I CTR#500=0 S STOPIT=$$STOPIT^RCDMCUT2() Q:STOPIT
- . . . N FIRSTPAR,DMCVALID,DFN,STATUS,NAME,SSN,SSNLF,BILLNO,CNUM,CLOC
- . . . N PRINAMT,STATUS,EDITBY,EDITDT,OPTDT,DISCHDT,RXDT
- . . . ;Quit if bill is not a First Party Bill
- . . . S FIRSTPAR=$$FIRSTPAR^RCDMCUT1(IEN)
- . . . Q:+FIRSTPAR'>0
- . . . ;Get Report Data
- . . . S DMCVALID=$$GET1^DIQ(430,IEN_",",125,"E")
- . . . ;When DMC Debt VAlid is Null set to string value of "NULL"
- . . . S:DMCVALID="" DMCVALID="BLANK/NULL"
- . . . ;Quit if DMC Debt Valid Field not one of the request ones
- . . . Q:+$D(DMCVAL(DMCVALID))'>0
- . . . ;Quit if Veteran is not SC 50% to 100% & not Receiving VA Pension
- . . . S DFN=$$GET1^DIQ(430,IEN_",",7,"I")
- . . . ;If patient field blank get DFN from AR Debtor File
- . . . S:DFN'>0 DFN=$P(FIRSTPAR,U,2)
- . . . Q:$$DMCELIG^RCDMCUT1(DFN)'>0
- . . . S STATUS=$$GET1^DIQ(430,IEN_",",8)
- . . . ;Quit if Current Status is not Active, Open, Suspended,
- . . . ;Cancellation, Refunded, or Refund Review
- . . . Q:"^ACTIVE^OPEN^SUSPENDED^CANCELLATION^REFUNDED^REFUND REVIEW^"'[(U_STATUS_U)
- . . . ;Get Bill Data
- . . . S BADDATA=0
- . . . D GETDATA
- . . . Q:BADDATA>0
- . . . ;Check that Episode of Care is not older than 365
- . . . ;Quit if there isn't a service date in the last 365 days
- . . . Q:OPTDT<BEGDT&(DISCHDT<BEGDT)&(RXDT<BEGDT)
- . . . S ^TMP($J,"RCDMCR2","DETAIL",DMCVALID,NAME,SSNLF,BILLNO)=CNUM_U_$G(CLOC)_U_PRINAMT_U_STATUS_U_EDITBY_U_EDITDT
- . . . ;Get Summary Data
- . . . ;Set total AR bills
- . . . S ^TMP($J,"RCDMCR2","TOT","BILL")=$G(^TMP($J,"RCDMCR2","TOT","BILL"))+1
- . . . ;Set total AR bills for a given status
- . . . S ^TMP($J,"RCDMCR2","TOT-STAT",STATUS)=$G(^TMP($J,"RCDMCR2","TOT-STAT",STATUS))+1
- . . . ;Set total AR (Principle Amt) dollars
- . . . S ^TMP($J,"RCDMCR2","TOT","$")=$G(^TMP($J,"RCDMCR2","TOT","$"))+PRINAMT
- . . . ;Set totaL unique veterans
- . . . I $D(^TMP($J,"RCDMCR2","TOT","VETSSN",SSN))'>0 D
- . . . . S ^TMP($J,"RCDMCR2","TOT","VET")=$G(^TMP($J,"RCDMCR2","TOT","VET"))+1
- . . . . S ^TMP($J,"RCDMCR2","TOT","VETSSN",SSN)=""
- . . . ;Get Summary data by DMC Debt Valid field
- . . . ;Set total AR bills by DMC Debt Valid field
- . . . S ^TMP($J,"RCDMCR2","SUM",DMCVALID,"BILL")=$G(^TMP($J,"RCDMCR2","SUM",DMCVALID,"BILL"))+1
- . . . ;Set total AR bills by DMC Debt Valid value and status
- . . . S ^TMP($J,"RCDMCR2","SUM-STAT",DMCVALID,STATUS)=$G(^TMP($J,"RCDMCR2","SUM-STAT",DMCVALID,STATUS))+1
- . . . ;Set total AR (Principle Amt) dollars by DMC Debt Valid value
- . . . S ^TMP($J,"RCDMCR2","SUM",DMCVALID,"$")=$G(^TMP($J,"RCDMCR2","SUM",DMCVALID,"$"))+PRINAMT
- . . . ;Set totaL unique veterans by DMC Debt Valid value
- . . . I $D(^TMP($J,"RCDMCR2","SUM",DMCVALID,"VETSSN",SSN))'>0 D
- . . . . S ^TMP($J,"RCDMCR2","SUM",DMCVALID,"VET")=$G(^TMP($J,"RCDMCR2","SUM",DMCVALID,"VET"))+1
- . . . . S ^TMP($J,"RCDMCR2","SUM",DMCVALID,"VETSSN",SSN)=""
- Q
- ;
- GETDATA ;Get data for report
- ;Get AR Bill Data - Bill #, Patient, Current Status,
- ;Principal Balance, DMC Debt Valid Edited, DMC Debt Valid Edited Date
- ;Name, SSN, Eligibility Data, Service Dates
- N IENS,ARDATA,ERR,SERDT
- ;Quit if DFN not set
- I DFN'>0 S BADDATA=1 Q
- ;
- ;IEN is from calling routine
- S IENS=IEN_","
- D GETS^DIQ(430,IENS,".01;71;126;127","EIN","ARDATA","ERR")
- ;Bill Number
- S BILLNO=$G(ARDATA(430,IENS,.01,"E"))
- I BILLNO']"" S BADDATA=1 Q
- ;Principle amount
- S PRINAMT=$G(ARDATA(430,IENS,71,"I"))
- ;DMC Debt Valid Edited By
- S EDITBY=$G(ARDATA(430,IENS,126,"E"))
- ;DMC Debt Valid Edited Date
- S EDITDT=$G(ARDATA(430,IENS,127,"I"))
- ;
- ;Get Demographic Data
- D DEM^VADPT
- I $G(VAERR)>0 S BADDATA=1 D KVAR^VADPT Q
- S NAME=$G(VADM(1))
- I NAME']"" S BADDATA=1 Q
- S SSN=$P(VADM(2),U,1)
- S SSNLF=$G(VA("BID"))
- I SSNLF']"" S BADDATA=1 Q
- ;
- D ELIG^VADPT
- S CNUM=$G(VAEL(7))
- ;If claim # same as SSN, block first 5 characters
- I CNUM]"",CNUM=SSN S CNUM="#####"_$E(CNUM,6,10)
- D KVAR^VADPT
- ;Get Station Number in file #4 for the Claim Folder Location in file #2
- I CNUM]"" D
- . S CLOC=$$GET1^DIQ(4,+$$GET1^DIQ(2,DFN_",",.314,"I","","ERR")_",",99)
- ;
- ;Get Service Date
- S SERDT=$$GETSERDT^RCDMCUT1(BILLNO)
- ;Get outpatient date
- S OPTDT=$P(SERDT,U,2)
- ;Get Inpatient Discharge date
- S DISCHDT=$P(SERDT,U,3)
- ;Get RX fill/refill date
- S RXDT=$P(SERDT,U,4)
- Q
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HRCDMCR2B 5665 printed Apr 23, 2025@17:57:59 Page 2
- RCDMCR2B ;HEC/SBW - DMC Debt Validity Management Report - Collect Data ;28/SEP/2007
- +1 ;;4.5;Accounts Receivable;**253**;Mar 20, 1995;Build 9
- +2 ;;Per VHA Directive 2004-038, this routine should not be modified.
- +3 ;
- COLLECT(STOPIT,BEGDT,DMCVAL) ; Get the report data
- +1 ; STOPIT - Passed Variable to determine if process is to be terminated
- +2 ; BEGDT - Beginning Date (in past) to get data for. Optional, Set
- +3 ; 365 days in past if not passed.
- +4 ; DMCVAL - DMC Debt Valid values that will be included in this report
- +5 ; (i.e. DMCVAL("NULL"), DMCVAL("PENDING"), DMCVAL("YES"),
- +6 ; or DMCVAL("NO") )
- +7 ;Output
- +8 ; STOPIT - Passed Variable set to 1 if process is to be terminated
- +9 ; ^TMP($J,"RCDMCR2") with report data and summary data
- +10 NEW STAT,RDATE,IEN,CTR,BADDATA
- +11 ;Set BEGDT if valid value not passed
- +12 if $GET(BEGDT)'>0
- SET BEGDT=$$FMADD^XLFDT(DT,-365,0,0,0)
- +13 ;Get AR Bill Data that is within the last 365 days
- +14 ;for Bill's with a current status of ACTIVE, CANCELLATION, SUSPENDED,
- +15 ;REFUNDED, OPEN, REFUND REVIEW
- +16 FOR STAT=16,39,40,41,42,44
- Begin DoDot:1
- +17 SET RDATE=BEGDT-1
- +18 FOR
- SET RDATE=$ORDER(^PRCA(430,"ASDT",STAT,RDATE))
- if RDATE'>0
- QUIT
- Begin DoDot:2
- +19 SET IEN=0
- +20 FOR
- SET IEN=$ORDER(^PRCA(430,"ASDT",STAT,RDATE,IEN))
- if IEN'>0
- QUIT
- Begin DoDot:3
- +21 ;Counter
- SET CTR=$GET(CTR)+1
- +22 IF CTR#500=0
- SET STOPIT=$$STOPIT^RCDMCUT2()
- if STOPIT
- QUIT
- +23 NEW FIRSTPAR,DMCVALID,DFN,STATUS,NAME,SSN,SSNLF,BILLNO,CNUM,CLOC
- +24 NEW PRINAMT,STATUS,EDITBY,EDITDT,OPTDT,DISCHDT,RXDT
- +25 ;Quit if bill is not a First Party Bill
- +26 SET FIRSTPAR=$$FIRSTPAR^RCDMCUT1(IEN)
- +27 if +FIRSTPAR'>0
- QUIT
- +28 ;Get Report Data
- +29 SET DMCVALID=$$GET1^DIQ(430,IEN_",",125,"E")
- +30 ;When DMC Debt VAlid is Null set to string value of "NULL"
- +31 if DMCVALID=""
- SET DMCVALID="BLANK/NULL"
- +32 ;Quit if DMC Debt Valid Field not one of the request ones
- +33 if +$DATA(DMCVAL(DMCVALID))'>0
- QUIT
- +34 ;Quit if Veteran is not SC 50% to 100% & not Receiving VA Pension
- +35 SET DFN=$$GET1^DIQ(430,IEN_",",7,"I")
- +36 ;If patient field blank get DFN from AR Debtor File
- +37 if DFN'>0
- SET DFN=$PIECE(FIRSTPAR,U,2)
- +38 if $$DMCELIG^RCDMCUT1(DFN)'>0
- QUIT
- +39 SET STATUS=$$GET1^DIQ(430,IEN_",",8)
- +40 ;Quit if Current Status is not Active, Open, Suspended,
- +41 ;Cancellation, Refunded, or Refund Review
- +42 if "^ACTIVE^OPEN^SUSPENDED^CANCELLATION^REFUNDED^REFUND REVIEW^"'[(U_STATUS_U)
- QUIT
- +43 ;Get Bill Data
- +44 SET BADDATA=0
- +45 DO GETDATA
- +46 if BADDATA>0
- QUIT
- +47 ;Check that Episode of Care is not older than 365
- +48 ;Quit if there isn't a service date in the last 365 days
- +49 if OPTDT<BEGDT&(DISCHDT<BEGDT)&(RXDT<BEGDT)
- QUIT
- +50 SET ^TMP($JOB,"RCDMCR2","DETAIL",DMCVALID,NAME,SSNLF,BILLNO)=CNUM_U_$GET(CLOC)_U_PRINAMT_U_STATUS_U_EDITBY_U_EDITDT
- +51 ;Get Summary Data
- +52 ;Set total AR bills
- +53 SET ^TMP($JOB,"RCDMCR2","TOT","BILL")=$GET(^TMP($JOB,"RCDMCR2","TOT","BILL"))+1
- +54 ;Set total AR bills for a given status
- +55 SET ^TMP($JOB,"RCDMCR2","TOT-STAT",STATUS)=$GET(^TMP($JOB,"RCDMCR2","TOT-STAT",STATUS))+1
- +56 ;Set total AR (Principle Amt) dollars
- +57 SET ^TMP($JOB,"RCDMCR2","TOT","$")=$GET(^TMP($JOB,"RCDMCR2","TOT","$"))+PRINAMT
- +58 ;Set totaL unique veterans
- +59 IF $DATA(^TMP($JOB,"RCDMCR2","TOT","VETSSN",SSN))'>0
- Begin DoDot:4
- +60 SET ^TMP($JOB,"RCDMCR2","TOT","VET")=$GET(^TMP($JOB,"RCDMCR2","TOT","VET"))+1
- +61 SET ^TMP($JOB,"RCDMCR2","TOT","VETSSN",SSN)=""
- End DoDot:4
- +62 ;Get Summary data by DMC Debt Valid field
- +63 ;Set total AR bills by DMC Debt Valid field
- +64 SET ^TMP($JOB,"RCDMCR2","SUM",DMCVALID,"BILL")=$GET(^TMP($JOB,"RCDMCR2","SUM",DMCVALID,"BILL"))+1
- +65 ;Set total AR bills by DMC Debt Valid value and status
- +66 SET ^TMP($JOB,"RCDMCR2","SUM-STAT",DMCVALID,STATUS)=$GET(^TMP($JOB,"RCDMCR2","SUM-STAT",DMCVALID,STATUS))+1
- +67 ;Set total AR (Principle Amt) dollars by DMC Debt Valid value
- +68 SET ^TMP($JOB,"RCDMCR2","SUM",DMCVALID,"$")=$GET(^TMP($JOB,"RCDMCR2","SUM",DMCVALID,"$"))+PRINAMT
- +69 ;Set totaL unique veterans by DMC Debt Valid value
- +70 IF $DATA(^TMP($JOB,"RCDMCR2","SUM",DMCVALID,"VETSSN",SSN))'>0
- Begin DoDot:4
- +71 SET ^TMP($JOB,"RCDMCR2","SUM",DMCVALID,"VET")=$GET(^TMP($JOB,"RCDMCR2","SUM",DMCVALID,"VET"))+1
- +72 SET ^TMP($JOB,"RCDMCR2","SUM",DMCVALID,"VETSSN",SSN)=""
- End DoDot:4
- End DoDot:3
- if $GET(STOPIT)>0
- QUIT
- End DoDot:2
- if $GET(STOPIT)>0
- QUIT
- End DoDot:1
- if $GET(STOPIT)>0
- QUIT
- +73 QUIT
- +74 ;
- GETDATA ;Get data for report
- +1 ;Get AR Bill Data - Bill #, Patient, Current Status,
- +2 ;Principal Balance, DMC Debt Valid Edited, DMC Debt Valid Edited Date
- +3 ;Name, SSN, Eligibility Data, Service Dates
- +4 NEW IENS,ARDATA,ERR,SERDT
- +5 ;Quit if DFN not set
- +6 IF DFN'>0
- SET BADDATA=1
- QUIT
- +7 ;
- +8 ;IEN is from calling routine
- +9 SET IENS=IEN_","
- +10 DO GETS^DIQ(430,IENS,".01;71;126;127","EIN","ARDATA","ERR")
- +11 ;Bill Number
- +12 SET BILLNO=$GET(ARDATA(430,IENS,.01,"E"))
- +13 IF BILLNO']""
- SET BADDATA=1
- QUIT
- +14 ;Principle amount
- +15 SET PRINAMT=$GET(ARDATA(430,IENS,71,"I"))
- +16 ;DMC Debt Valid Edited By
- +17 SET EDITBY=$GET(ARDATA(430,IENS,126,"E"))
- +18 ;DMC Debt Valid Edited Date
- +19 SET EDITDT=$GET(ARDATA(430,IENS,127,"I"))
- +20 ;
- +21 ;Get Demographic Data
- +22 DO DEM^VADPT
- +23 IF $GET(VAERR)>0
- SET BADDATA=1
- DO KVAR^VADPT
- QUIT
- +24 SET NAME=$GET(VADM(1))
- +25 IF NAME']""
- SET BADDATA=1
- QUIT
- +26 SET SSN=$PIECE(VADM(2),U,1)
- +27 SET SSNLF=$GET(VA("BID"))
- +28 IF SSNLF']""
- SET BADDATA=1
- QUIT
- +29 ;
- +30 DO ELIG^VADPT
- +31 SET CNUM=$GET(VAEL(7))
- +32 ;If claim # same as SSN, block first 5 characters
- +33 IF CNUM]""
- IF CNUM=SSN
- SET CNUM="#####"_$EXTRACT(CNUM,6,10)
- +34 DO KVAR^VADPT
- +35 ;Get Station Number in file #4 for the Claim Folder Location in file #2
- +36 IF CNUM]""
- Begin DoDot:1
- +37 SET CLOC=$$GET1^DIQ(4,+$$GET1^DIQ(2,DFN_",",.314,"I","","ERR")_",",99)
- End DoDot:1
- +38 ;
- +39 ;Get Service Date
- +40 SET SERDT=$$GETSERDT^RCDMCUT1(BILLNO)
- +41 ;Get outpatient date
- +42 SET OPTDT=$PIECE(SERDT,U,2)
- +43 ;Get Inpatient Discharge date
- +44 SET DISCHDT=$PIECE(SERDT,U,3)
- +45 ;Get RX fill/refill date
- +46 SET RXDT=$PIECE(SERDT,U,4)
- +47 QUIT