- RCDPENE1 ;AITC/CJE - NEGATIVE ERA LINE REPORT ;Dec 20, 2014@18:42
- ;;4.5;Accounts Receivable;**424**;Mar 20, 1995;Build 11
- ;Per VA Directive 6402, this routine should not be modified.
- Q
- COMPILE ; Generate the Auto Posting report ^TMP array
- ; Input: GLOB - "^TMP("RCDPENER",$J)"
- ; RCDISP - 0 - Output to paper or screen, 1 - Output to Excel
- ; RCDIV - 1 - All divisions, 2 - Selected divisions
- ; RCDIVS()- Array of selected divisions if RCDIV=2
- ; RCRANGE - 1^Start Date^End Date
- ; RCJOB - $J
- ; RCLAIM - "M" - Medical Claims, "P" - Pharmacy Claims, "B" - Both
- ; RCPAGE - Initialized to 0
- ; RCPARRAY- Array of selected payers
- ; RCPROG - "RCDPENER"
- ; RCSORT - 0 - Sort by Payer Name, 1 - Sort by Payer TIN
- ; RCWHICH - 1 - Filter by Payer Name, 2 - Filter by Payer TIN
- ; ^TMP("RCSELPAY",RCJOB) - Selected Payer Names or TINs
- ;
- ; Output: ^TMP("RCDPENER",$J) Contains report details in ^ delimited format
- ; (See SAVE subroutine for details)
- ;
- N AMT,APDATE,CNT,END,ERAIEN,IEN,OKAY,RCECME,RCRZ,STA,STNAM,STNUM
- S APDATE=$$FMADD^XLFDT($P(RCRANGE,U,2),-1)
- S APDATE=APDATE+.24 ; File date has time stamp, prevent it from including date/time before selected range
- S END=$P(RCRANGE,U,3),CNT=0
- ;
- ; Scan AC index for ERA within date range of ERA created dates
- F S APDATE=$O(^RCY(344.4,"AFD",APDATE)) Q:'APDATE Q:(APDATE\1)>END D
- . S ERAIEN=""
- . F S ERAIEN=$O(^RCY(344.4,"AFD",APDATE,ERAIEN)) Q:'ERAIEN D
- . . ;
- . . ; Check division - Note return values are set to UNKNOWN if not available
- . . D ERASTA^RCDPEAPQ(ERAIEN,.STA,.STNUM,.STNAM)
- . . I RCDIV=2,'$D(RCDIVS(STA)) Q
- . . ;
- . . ; PRCA*4.5*304 - Check if we include this ERA in report
- . . I RCPAY="A",RCLAIM'="A" D Q:'OKAY
- . . . S OKAY=$$ISTYPE^RCDPEU1(344.4,ERAIEN,RCLAIM)
- . . ;
- . . ; Check Payer Name
- . . I RCPAY'="A" D Q:'OKAY
- . . . S OKAY=$$ISSEL^RCDPEU1(344.4,ERAIEN)
- . . ;
- . . ; If it does not already exist for this ERA, build X-ref of ERA detail lines to the lines in the worklist
- . . I '$D(^TMP("RCDPEAPP2",$J,ERAIEN)) D BUILD^RCDPEAPQ(ERAIEN)
- . . ;
- . . ; Scan index for negative lines within the ERA and save to ^TMP if there is one
- . . S RCRZ=0 I ERAIEN=92933
- . . F S RCRZ=$O(^RCY(344.4,ERAIEN,1,RCRZ)) Q:'RCRZ D ;
- . . . S AMT=$$GET1^DIQ(344.41,RCRZ_","_ERAIEN_",",.03,"I")
- . . . I AMT<0 D SAVE(ERAIEN,RCRZ,RCSORT) ; Save negative claim line detail to ^TMP global
- Q
- SAVE(ERAIEN,RCRZ,RCSORT) ; EP - Save to ^TMP global
- ; Input: ERAIEN - Internal IEN into file 344.4
- ; RCRZ - Internal IEN into sub-file 344.41
- ; STNAM - Division Name (Primary Sort)
- ; STNUM - Station Number
- ; ^TMP("RCDPEAPP2",$J,ERAIEN,RCRZ) - Array of detail lines
- ; Output: ^TMP("RCDPENER",$J) Contains report details in ^ delimited format
- ;
- ; 1 - Station Name (STNAM)
- ; 2 - Station Number (STNUM)
- ; 3 - Payer Name (PAYNAM)
- ; 4 - Patient Name (PTNAM)
- ; 5 - ERA # (ERANUM)
- ; 6 - ERA Date (ERADATE)
- ; 7 - Claim # (BILL)
- ; 8 - Amount Paid (TOTPAMT)
- ; 9 - Claim Balance (TOTBAL)
- ; 10 - Claim Status (STATUS)
- ; 11 - Trace # (TRACE)
- ; 12 - Date of Service (DOS)
- ;
- N BALANCE,BAMT,BILL,CLAIMIEN,COLLECT,DATE,DOS,EOBIEN,ERADATE,ERANUM ; PRCA*4.5*345
- N PAMT,PAYIX1,PAYIX2,PAYNAM,PTNAM,RECEIPT,SEQ,SEQ1,SEQ2,STATUS,STIX
- N TIN,TOTBAL,TOTBAMT,TOTPAMT,TRACE,XX
- S PAYNAM=$$GET1^DIQ(344.4,ERAIEN,.06,"E") ; Payer Name from ERA Record
- S TIN=$$GET1^DIQ(344.4,ERAIEN,.03,"E") ; Payer TIN from ERA Record
- S:RCSORT=0 PAYIX1=PAYNAM,PAYIX2=TIN
- S:RCSORT=1 PAYIX1=TIN,PAYIX2=PAYNAM
- S:PAYNAM="" PAYNAM="UNKNOWN"
- S STIX=STNAM_"/"_STNUM
- ;
- S TRACE=$$GET1^DIQ(344.4,ERAIEN,.02,"E") ; Trace Number
- S PTNAM=$$PNM4^RCDPEWL1(ERAIEN,RCRZ) ; Patient name from claim file #399
- S ERANUM=$$GET1^DIQ(344.4,ERAIEN,.01,"E") ; ERA Number
- S ERADATE=$$GET1^DIQ(344.4,ERAIEN,.07,"I") ; Date received (file date/time)
- S ERADATE=$$FMTE^XLFDT(ERADATE,"2DZ")
- S XX=$$GET1^DIQ(344.41,RCRZ_","_ERAIEN,.25,"I") ; Receipt IEN
- ;
- S (TOTBAMT,TOTBAL,COLLECT,CLAIMIEN,TOTPAMT)=0,DOS="UNKNOWN",BILL="",STATUS=""
- S EOBIEN=$$GET1^DIQ(344.41,RCRZ_","_ERAIEN,.02,"I") ; IEN for 361.1
- I EOBIEN D ;
- . S CLAIMIEN=$$GET1^DIQ(361.1,EOBIEN,.01,"I") ; IEN for 399
- . S DOS=$$GET1^DIQ(361.1,EOBIEN,1.1,"I") ; Date of Service
- . S DOS=$$FMTE^XLFDT(DOS,"2DZ")
- . S BILL=$$EXTERNAL^DILFD(344.41,.02,,EOBIEN) ; Bill Number
- . ; Get Billed Amount from AR (Original Balance)
- . I CLAIMIEN D
- . . S TOTBAMT=$J(+$$GET1^DIQ(430,CLAIMIEN,3,"I"),0,2) ; Original Amount
- . . S TOTBAL=$J(+$$GET1^DIQ(430,CLAIMIEN,71,"I"),0,2) ; Principal Balance
- . . S STATUS=$$GET1^DIQ(430,CLAIMIEN,8,"E") ; Claim Status
- S TOTPAMT=$J($$GET1^DIQ(344.41,RCRZ_","_ERAIEN,.03,"I"),0,2) ; Amount Paid on Claim
- ; Balance from AR (Principal Balance)
- ;
- S PTNAM=$S('CLAIMIEN:"",1:$$PNM4^RCDPEWL1(ERAIEN,RCRZ))
- S:TOTBAMT COLLECT=$J(TOTPAMT/TOTBAMT*100,0,2)_"%"
- S CNT=CNT+1
- S XX=STNAM_U_STNUM_U_PAYNAM_U_PTNAM_U_ERANUM_U_ERADATE
- S XX=XX_U_BILL_U_TOTPAMT_U_TOTBAL_U_STATUS_U_TRACE_U_DOS
- S @GLOB@(STIX,PAYIX1,PAYIX2,CNT)=XX
- ;
- Q
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HRCDPENE1 5425 printed Mar 13, 2025@20:49:40 Page 2
- RCDPENE1 ;AITC/CJE - NEGATIVE ERA LINE REPORT ;Dec 20, 2014@18:42
- +1 ;;4.5;Accounts Receivable;**424**;Mar 20, 1995;Build 11
- +2 ;Per VA Directive 6402, this routine should not be modified.
- +3 QUIT
- COMPILE ; Generate the Auto Posting report ^TMP array
- +1 ; Input: GLOB - "^TMP("RCDPENER",$J)"
- +2 ; RCDISP - 0 - Output to paper or screen, 1 - Output to Excel
- +3 ; RCDIV - 1 - All divisions, 2 - Selected divisions
- +4 ; RCDIVS()- Array of selected divisions if RCDIV=2
- +5 ; RCRANGE - 1^Start Date^End Date
- +6 ; RCJOB - $J
- +7 ; RCLAIM - "M" - Medical Claims, "P" - Pharmacy Claims, "B" - Both
- +8 ; RCPAGE - Initialized to 0
- +9 ; RCPARRAY- Array of selected payers
- +10 ; RCPROG - "RCDPENER"
- +11 ; RCSORT - 0 - Sort by Payer Name, 1 - Sort by Payer TIN
- +12 ; RCWHICH - 1 - Filter by Payer Name, 2 - Filter by Payer TIN
- +13 ; ^TMP("RCSELPAY",RCJOB) - Selected Payer Names or TINs
- +14 ;
- +15 ; Output: ^TMP("RCDPENER",$J) Contains report details in ^ delimited format
- +16 ; (See SAVE subroutine for details)
- +17 ;
- +18 NEW AMT,APDATE,CNT,END,ERAIEN,IEN,OKAY,RCECME,RCRZ,STA,STNAM,STNUM
- +19 SET APDATE=$$FMADD^XLFDT($PIECE(RCRANGE,U,2),-1)
- +20 ; File date has time stamp, prevent it from including date/time before selected range
- SET APDATE=APDATE+.24
- +21 SET END=$PIECE(RCRANGE,U,3)
- SET CNT=0
- +22 ;
- +23 ; Scan AC index for ERA within date range of ERA created dates
- +24 FOR
- SET APDATE=$ORDER(^RCY(344.4,"AFD",APDATE))
- if 'APDATE
- QUIT
- if (APDATE\1)>END
- QUIT
- Begin DoDot:1
- +25 SET ERAIEN=""
- +26 FOR
- SET ERAIEN=$ORDER(^RCY(344.4,"AFD",APDATE,ERAIEN))
- if 'ERAIEN
- QUIT
- Begin DoDot:2
- +27 ;
- +28 ; Check division - Note return values are set to UNKNOWN if not available
- +29 DO ERASTA^RCDPEAPQ(ERAIEN,.STA,.STNUM,.STNAM)
- +30 IF RCDIV=2
- IF '$DATA(RCDIVS(STA))
- QUIT
- +31 ;
- +32 ; PRCA*4.5*304 - Check if we include this ERA in report
- +33 IF RCPAY="A"
- IF RCLAIM'="A"
- Begin DoDot:3
- +34 SET OKAY=$$ISTYPE^RCDPEU1(344.4,ERAIEN,RCLAIM)
- End DoDot:3
- if 'OKAY
- QUIT
- +35 ;
- +36 ; Check Payer Name
- +37 IF RCPAY'="A"
- Begin DoDot:3
- +38 SET OKAY=$$ISSEL^RCDPEU1(344.4,ERAIEN)
- End DoDot:3
- if 'OKAY
- QUIT
- +39 ;
- +40 ; If it does not already exist for this ERA, build X-ref of ERA detail lines to the lines in the worklist
- +41 IF '$DATA(^TMP("RCDPEAPP2",$JOB,ERAIEN))
- DO BUILD^RCDPEAPQ(ERAIEN)
- +42 ;
- +43 ; Scan index for negative lines within the ERA and save to ^TMP if there is one
- +44 SET RCRZ=0
- IF ERAIEN=92933
- +45 ;
- FOR
- SET RCRZ=$ORDER(^RCY(344.4,ERAIEN,1,RCRZ))
- if 'RCRZ
- QUIT
- Begin DoDot:3
- +46 SET AMT=$$GET1^DIQ(344.41,RCRZ_","_ERAIEN_",",.03,"I")
- +47 ; Save negative claim line detail to ^TMP global
- IF AMT<0
- DO SAVE(ERAIEN,RCRZ,RCSORT)
- End DoDot:3
- End DoDot:2
- End DoDot:1
- +48 QUIT
- SAVE(ERAIEN,RCRZ,RCSORT) ; EP - Save to ^TMP global
- +1 ; Input: ERAIEN - Internal IEN into file 344.4
- +2 ; RCRZ - Internal IEN into sub-file 344.41
- +3 ; STNAM - Division Name (Primary Sort)
- +4 ; STNUM - Station Number
- +5 ; ^TMP("RCDPEAPP2",$J,ERAIEN,RCRZ) - Array of detail lines
- +6 ; Output: ^TMP("RCDPENER",$J) Contains report details in ^ delimited format
- +7 ;
- +8 ; 1 - Station Name (STNAM)
- +9 ; 2 - Station Number (STNUM)
- +10 ; 3 - Payer Name (PAYNAM)
- +11 ; 4 - Patient Name (PTNAM)
- +12 ; 5 - ERA # (ERANUM)
- +13 ; 6 - ERA Date (ERADATE)
- +14 ; 7 - Claim # (BILL)
- +15 ; 8 - Amount Paid (TOTPAMT)
- +16 ; 9 - Claim Balance (TOTBAL)
- +17 ; 10 - Claim Status (STATUS)
- +18 ; 11 - Trace # (TRACE)
- +19 ; 12 - Date of Service (DOS)
- +20 ;
- +21 ; PRCA*4.5*345
- NEW BALANCE,BAMT,BILL,CLAIMIEN,COLLECT,DATE,DOS,EOBIEN,ERADATE,ERANUM
- +22 NEW PAMT,PAYIX1,PAYIX2,PAYNAM,PTNAM,RECEIPT,SEQ,SEQ1,SEQ2,STATUS,STIX
- +23 NEW TIN,TOTBAL,TOTBAMT,TOTPAMT,TRACE,XX
- +24 ; Payer Name from ERA Record
- SET PAYNAM=$$GET1^DIQ(344.4,ERAIEN,.06,"E")
- +25 ; Payer TIN from ERA Record
- SET TIN=$$GET1^DIQ(344.4,ERAIEN,.03,"E")
- +26 if RCSORT=0
- SET PAYIX1=PAYNAM
- SET PAYIX2=TIN
- +27 if RCSORT=1
- SET PAYIX1=TIN
- SET PAYIX2=PAYNAM
- +28 if PAYNAM=""
- SET PAYNAM="UNKNOWN"
- +29 SET STIX=STNAM_"/"_STNUM
- +30 ;
- +31 ; Trace Number
- SET TRACE=$$GET1^DIQ(344.4,ERAIEN,.02,"E")
- +32 ; Patient name from claim file #399
- SET PTNAM=$$PNM4^RCDPEWL1(ERAIEN,RCRZ)
- +33 ; ERA Number
- SET ERANUM=$$GET1^DIQ(344.4,ERAIEN,.01,"E")
- +34 ; Date received (file date/time)
- SET ERADATE=$$GET1^DIQ(344.4,ERAIEN,.07,"I")
- +35 SET ERADATE=$$FMTE^XLFDT(ERADATE,"2DZ")
- +36 ; Receipt IEN
- SET XX=$$GET1^DIQ(344.41,RCRZ_","_ERAIEN,.25,"I")
- +37 ;
- +38 SET (TOTBAMT,TOTBAL,COLLECT,CLAIMIEN,TOTPAMT)=0
- SET DOS="UNKNOWN"
- SET BILL=""
- SET STATUS=""
- +39 ; IEN for 361.1
- SET EOBIEN=$$GET1^DIQ(344.41,RCRZ_","_ERAIEN,.02,"I")
- +40 ;
- IF EOBIEN
- Begin DoDot:1
- +41 ; IEN for 399
- SET CLAIMIEN=$$GET1^DIQ(361.1,EOBIEN,.01,"I")
- +42 ; Date of Service
- SET DOS=$$GET1^DIQ(361.1,EOBIEN,1.1,"I")
- +43 SET DOS=$$FMTE^XLFDT(DOS,"2DZ")
- +44 ; Bill Number
- SET BILL=$$EXTERNAL^DILFD(344.41,.02,,EOBIEN)
- +45 ; Get Billed Amount from AR (Original Balance)
- +46 IF CLAIMIEN
- Begin DoDot:2
- +47 ; Original Amount
- SET TOTBAMT=$JUSTIFY(+$$GET1^DIQ(430,CLAIMIEN,3,"I"),0,2)
- +48 ; Principal Balance
- SET TOTBAL=$JUSTIFY(+$$GET1^DIQ(430,CLAIMIEN,71,"I"),0,2)
- +49 ; Claim Status
- SET STATUS=$$GET1^DIQ(430,CLAIMIEN,8,"E")
- End DoDot:2
- End DoDot:1
- +50 ; Amount Paid on Claim
- SET TOTPAMT=$JUSTIFY($$GET1^DIQ(344.41,RCRZ_","_ERAIEN,.03,"I"),0,2)
- +51 ; Balance from AR (Principal Balance)
- +52 ;
- +53 SET PTNAM=$SELECT('CLAIMIEN:"",1:$$PNM4^RCDPEWL1(ERAIEN,RCRZ))
- +54 if TOTBAMT
- SET COLLECT=$JUSTIFY(TOTPAMT/TOTBAMT*100,0,2)_"%"
- +55 SET CNT=CNT+1
- +56 SET XX=STNAM_U_STNUM_U_PAYNAM_U_PTNAM_U_ERANUM_U_ERADATE
- +57 SET XX=XX_U_BILL_U_TOTPAMT_U_TOTBAL_U_STATUS_U_TRACE_U_DOS
- +58 SET @GLOB@(STIX,PAYIX1,PAYIX2,CNT)=XX
- +59 ;
- +60 QUIT