- RCDPEAC ;ALB/TMK/PJH - ACTIVE BILLS WITH EEOB ON FILE ;Jun 06, 2014@19:11:19
- ;;4.5;Accounts Receivable;**208,269,276,298,303,326,332,432**;Mar 20, 1995;Build 16
- ;Per VA Directive 6402, this routine should not be modified.
- ;
- EN ; Entry point for Active Bills With EEOB Report [RCDPE ACTIVE WITH EEOB REPORT]
- N %ZIS,CHAM,DTOUT,DUOUT,END,HDR,POP,RCCT,RCDISPTY,RCHDR,RCINS,RCLSTMGR,RCPAR,RCPGNUM,RCSORT,RCSTOP,RCTMPND,RCZRO
- N START,TRIC,VAUTD,X,Y
- ; PRCA*4.5*276 - IA 1077 - Query Division
- D DIVISION^VAUTOMA
- I 'VAUTD&($D(VAUTD)'=11) Q
- ; PRCA*4.5*276 - select report format
- Q:'$$SELECT(.RCINS,.RCSORT,.RCZRO,.RCTYPE)
- ;
- S RCTMPND="",RCPGNUM=0,RCSTOP=0
- I RCLSTMGR D G ENOUT
- . S RCTMPND=$T(+0)_"^AR - ACTIVE BILLS WITH EEOB REPORT" K ^TMP($J,RCTMPND) ; clean any residue
- . D ENQ
- . M HDR=RCHDR
- . D LMRPT^RCDPEARL(.HDR,$NA(^TMP($J,RCTMPND))) ; generate ListMan display
- . I $D(RCTMPND) K ^TMP($J,RCTMPND)
- ;
- W !
- S %ZIS="QM" D ^%ZIS Q:POP
- I $D(IO("Q")) D Q
- .N ZTDESC,ZTRTN,ZTSAVE,ZTSK
- .S ZTRTN="ENQ^RCDPEAC",ZTDESC="AR - ACTIVE BILLS WITH EEOB REPORT"
- .S ZTSAVE("*")=""
- .D ^%ZTLOAD
- .W !!,$S($D(ZTSK):"Your task number"_ZTSK_" has been queued.",1:"Unable to queue this job.")
- .K IO("Q") D HOME^%ZIS
- U IO
- ;
- ENQ ; Queued entry point for the report
- ; RCSORT and array RCINS must exist
- ; RCINS = "A" for all ins co, "R" for range, "S" for selected individual
- ; for RCINS="R" ("FR")=from payer name and ("TR")=to payer name
- ; for RCINS="S" ("S",INS CO IEN IN FILE 36)=""
- ; RCSORT = "PN" for sort by patient name followed by ;- if reverse order
- ; "L4" for sort by patient SSN followed by ;- if reverse order
- ;
- N POSTDT,RC0,RC399,RC399M1,RC430,RCACT,RCBILL,RCEIEN,RCEOB,RCEX,RCEXT,RCINC,RCKEY2,RCKEY4,RCNEW
- N RCPAYNAM,RCPT,RCSSN,RCSTOP,RCTOT,RCZ,RCZ0,RCZ1,SN,X,Y,Z,Z0
- K ^TMP($J,"RCSORT")
- S RCCT=0 ;Page count for List Manager
- S RCEXT=0 ; Set Excel page 1 count
- I 'RCLSTMGR D HDRBLD
- I RCLSTMGR D HDRLM
- S RCACT=+$O(^PRCA(430.3,"AC",102,0)) ; Get active status ien
- G:'RCACT ENOUT
- ;
- I 'RCLSTMGR D HDRLST^RCDPEARL(0,.RCHDR) ; initial report header
- S RCBILL=0,RCDT=START-.0001
- ; PRCA*4.5*303 - Changed loop to use the "AD" index on 361.1 so that the number of records checked is limited by
- ; the START and END dates of when the EEOB was recieved in VistA
- ; PRCA*4.5*326 - Start modified block. Change INCLUDE params and shorten line lengths.
- F S RCDT=$O(^IBM(361.1,"AD",RCDT)) Q:(RCDT>(END_".24"))!(RCDT="") D
- . S RCEIEN="" F S RCEIEN=$O(^IBM(361.1,"AD",RCDT,RCEIEN)) Q:RCEIEN="" D ;
- . . S RCBILL=$P(^IBM(361.1,RCEIEN,0),U,1)
- . . S RCINC=$$INCLUDE(RCBILL,RCEIEN,RCTYPE) ; PRCA*4.5*326 - Inclusion by payer or payer type
- . . I RCINC,($P(^PRCA(430,RCBILL,0),U,8)=RCACT),$$EEOB(RCBILL,.RCEOB,RCZRO) D ; PRCA*4.5*326
- . . . S (RCTOT,RCEOB,SN)=0
- . . . F S RCEOB=$O(RCEOB(RCEOB)) Q:'RCEOB F S SN=$O(RCEOB(RCEOB,SN)) Q:'SN D
- . . . . S RCTOT=RCTOT+$G(^IBM(361.1,RCEOB,1))
- . . . . ; PRCA*4.5*326 - Begin block - Change insurance co. name (file 36) to payer name (file 344.6)
- . . . . S RCPAYNAM=$$INSNM(RCBILL,RCEIEN)
- . . . . S RCKEY2=$$SL1(RCSORT,RCBILL),RCKEY4=+RCEOB(RCEOB,SN)_"_"_RCEOB_"_"_SN
- . . . . S ^TMP($J,"RCSORT",RCPAYNAM,RCKEY2,RCBILL,RCKEY4,RCEOB)=$P(RCEOB(RCEOB,SN),U,2) ; PRCA*4.5.303 add ERA PD AMOUNT
- . . . . I $O(RCEOB(0)) S ^TMP($J,"RCSORT",RCPAYNAM,RCKEY2,RCBILL)=RCTOT ;This is from the eob and will be the same for each line
- . . . . ; PRCA*4.5*326 - End block
- ;
- S RCZ="",(RCSTOP,RCNEW)=0
- F S RCZ=$O(^TMP($J,"RCSORT",RCZ)) Q:RCZ=""!RCSTOP D S:($G(RCINS)="R")!($G(RCINS)="S")&(RCPGNUM>1) RCNEW=1
- . I RCSORT'["-" D
- .. S RCZ0="" F S RCZ0=$O(^TMP($J,"RCSORT",RCZ,RCZ0)) Q:RCZ0=""!RCSTOP D OUTPUT(RCZ,RCZ0,RCSORT,.RCSTOP,.RCINS,RCNEW) S RCNEW=0
- . I RCSORT["-" D
- .. S RCZ0="" F S RCZ0=$O(^TMP($J,"RCSORT",RCZ,RCZ0),-1) Q:RCZ0=""!RCSTOP D OUTPUT(RCZ,RCZ0,RCSORT,.RCSTOP,.RCINS,.RCNEW) S RCNEW=0
- ;
- I '$D(^TMP($J,"RCSORT")) S $P(Z," ",25)="",Z=Z_"*** NO RECORDS TO PRINT ***" D SL^RCDPEARL(Z,.RCCT,RCTMPND)
- I $D(^TMP($J,"RCSORT")),'RCSTOP D SL^RCDPEARL($$ENDORPRT^RCDPEARL,.RCCT,RCTMPND)
- ; PRCA*4.5*303 - If regular report (no listmanager or queued) ask user to quit
- I 'RCSTOP,'RCLSTMGR,'$D(ZTQUEUED) D ASK^RCDPEARL(.RCSTOP)
- ;
- ENOUT I $D(ZTQUEUED) S ZTREQ="@"
- I '$D(ZTQUEUED) D ^%ZISC
- K ^TMP($J,"RCSORT"),RCDT
- Q
- ;
- OUTPUT(RCZ,RCZ0,RCSORT,RCSTOP,RCINS,RCNEW) ; Output the data
- ; RCZ, RCZ0 are the first 2 sort levels for the array
- ; RCINS = insurance co info array
- ; RCSTOP passed by ref - returned if user chooses to stop
- ; RCNEW = 1 if the header should be forced to print
- N ZZ,RCEPD
- S RCBILL=0 F S RCBILL=$O(^TMP($J,"RCSORT",RCZ,RCZ0,RCBILL)) Q:'RCBILL!RCSTOP S RCZ1="" F S RCZ1=$O(^TMP($J,"RCSORT",RCZ,RCZ0,RCBILL,RCZ1)) Q:RCZ1=""!RCSTOP D
- . I $D(ZTQUEUED),$$S^%ZTLOAD S (RCSTOP,ZTSTOP)=1 K ZTREQ I +$G(RCSTOP) W !!,"***TASK STOPPED BY USER***" Q
- . ; IA 1992 - BILL/CLAIMS file (#399)
- . S RC399=$G(^DGCR(399,RCBILL,0)),RC399M1=$G(^DGCR(399,RCBILL,"M1")),RCPT=+$P(RC399,U,2),RC430=$G(^PRCA(430,RCBILL,0)) ;RC430 is from the top level
- . ; PRCA*4.5*276 - Check for Division
- . I VAUTD=0 Q:$P(RC399,U,22)="" Q:$G(VAUTD($P(RC399,U,22)))=""
- . ; PRCA*4.5*326 remove phamacy check. Now in $$INCLUDE logic
- . S RCSTOP=$$NEWPG(.RCINS,RCNEW) S RCNEW=0 Q:RCSTOP
- . S X=$$GET1^DIQ(430,RCBILL_",",11)
- . ; PRCA*4.5*276 - Row #1: Print last 4 SSN only - Move Bill Number to end
- . S RCSSN=$P($G(^DPT(RCPT,0)),U,9),RCSSN=$E(RCSSN,$L(RCSSN)-3,$L(RCSSN))
- . I $G(RCDISPTY) S RCEX=$P($G(^DPT(RCPT,0)),U)_"^"_RCSSN_"^"_$TR($P(RC430,U),"-","")
- . E D
- . . S Z=$E($P($G(^DPT(RCPT,0)),U)_$J("",25),1,25)_" "_$E(RCSSN_$J("",5),1,5)_" "_$TR($P(RC430,U),"-","")
- . . D SL^RCDPEARL(Z,.RCCT,RCTMPND)
- . ; PRCA*4.5*276 - Row #2: Move Ins Name, Balance, Amt Bill, Amt Paid
- . S Y=+$G(^TMP($J,"RCSORT",RCZ,RCZ0,RCBILL))
- . I $G(RCDISPTY) S RCEX=RCEX_"^"_RCZ_"^"_+X_"^"_+$P(RC430,U,3)_"^"_Y ; PRCA*4.5*326 - Use RCZ for insurance name
- . E D
- . . ; PRCA*4.5*326 - Use RCZ for insurance name
- . . S Z=$E(RCZ_$J("",30),1,30)_$E($J("",12)_$J(+X,"",2),1+$L($J(+X,"",2)),12+$L($J(+X,"",2)))_$E($J("",13)_$J(+$P(RC430,U,3),"",2),1+$L($J(+$P(RC430,U,3),"",2)),13+$L($J(+$P(RC430,U,3),"",2)))_$E($J("",13),1,13-$L(Y))_$J(Y,"",2)
- . . D SL^RCDPEARL(Z,.RCCT,RCTMPND)
- . ; PRCA*4.5*276 Do not display Date Referred
- . S RCEOB=0,RCEPD="" F S RCEOB=$O(^TMP($J,"RCSORT",RCZ,RCZ0,RCBILL,RCZ1,RCEOB)) Q:'RCEOB!RCSTOP S RCEPD=$G(^TMP($J,"RCSORT",RCZ,RCZ0,RCBILL,RCZ1,RCEOB)) D
- . . S RCSTOP=$$NEWPG(.RCINS,RCNEW,2)
- . . Q:RCSTOP
- . . S RC0=$G(^IBM(361.1,RCEOB,0))
- . . ; PRCA*4.5*276 - Row #3: Trace#, Date Rec'd, Date Posted
- . . I $G(RCDISPTY) W !,RCEX_"^"_$P(RC0,U,7)_"^"_$$FMTE^XLFDT($P(RC0,U,5),"2D")_"^"_$S(RCZ1:$$FMTE^XLFDT(+RCZ1,"2D"),1:"")_"^"_RCEPD
- . . E D
- . . . S Z=" "_$P(RC0,U,7)_$J("",50-$L($P(RC0,U,7)))_$J(RCEPD,10,2)_" "_$E($$FMTE^XLFDT($P(RC0,U,5),"2D")_$J("",8),1,8)_" "_$E($S(RCZ1:$$FMTE^XLFDT(+RCZ1,"2D"),1:"")_$J("",8),1,8)
- . . . D SL^RCDPEARL(Z,.RCCT,RCTMPND)
- . I '$G(RCDISPTY) S Z="" D SL^RCDPEARL(Z,.RCCT,RCTMPND)
- ;
- Q
- ;
- INCLUDE(RCZ,EOBIEN,RCTYPE) ; PRCA*4.5*326 change parameters
- ; Function returns 1 if record should be included based on ins co
- ; RCINS = array containing insurance co information
- ; RCZ = ien of the entry in file 430
- N OK,RCI,RCINM,RCAINP,XX ; PRCA*4.5*326
- S OK=1
- S RCI=+$$INS(RCZ)
- ;
- I 'RCI S OK=0 G INCQ ; Not a third party bill
- ;
- ; PRCA*4.5*326 - Start modified block - Check for payer match
- I RCINS'="A" D ;
- . S OK=$$ISSEL^RCDPEU1(361.1,EOBIEN)
- E I RCTYPE'="A" D ;
- . S OK=$$ISTYPE^RCDPEU1(361.1,EOBIEN,RCTYPE)
- ; PRCA*4.5*326 - End modified block
- ;
- INCQ Q OK
- ;
- INSNM(RCZ,EOBIEN) ; Returns the name of payer from the ERA associated with the EOB
- ; If that is null, return the insurance co for bill ien RCZ file 430
- ; Input: RCZ = Point to bill, file #430
- ; EOBIEN = Pointer to EOB file 361.1
- ; Returns: NM = Free text name of Payer from ERA or insurance on bill if ERA not found.
- ;
- N ERAIEN,FILE,NM
- S NM=""
- S ERAIEN=$$EOBERA^RCDPEU1(EOBIEN)
- I ERAIEN S NM=$$GETNAME^RCDPEU1(344.4,ERAIEN)
- I NM="" S NM=$P($G(^DIC(36,+$$INS(RCZ),0)),U)
- Q NM
- ;
- INS(RCZ) ; Returns ien of insurance co for bill ien RCZ from file 430
- N RC
- S RC=$P($G(^PRCA(430,RCZ,0)),U,9) ;DEBTOR
- Q $S($P($G(^RCD(340,+RC,0)),U)'["DIC(36":"",1:+^(0))
- ;
- NEWPG(RCINS,RCNEW,RCLINES) ; Check for new page needed, output header
- ; RCINS = ins co selection criteria
- ; RCNEW = 1 to force new page
- ; RCLINES = Number of lines before IOSL to force new page
- ; Function returns 1 if user chooses to stop output
- S RCLINES=$G(RCLINES,5)
- I RCNEW!(($Y+RCLINES)>IOSL) D
- . D:'$G(RCDISPTY) HDRLST^RCDPEARL(.RCSTOP,.RCHDR)
- Q RCSTOP
- ;
- EEOB(RCZ,RCEOB,RCZRO) ; Find all non-MRA EEOBs for bill ien RCZ
- ; Function returns 1 if any valid EEOBs found, 0 if none
- ; RCEOB(eob ien)=date posted returned for valid EEOBs found -
- ; pass by reference
- N OK,Z,Z0,Z00,DET,SN,ZPD,ZINC
- K RCEOB
- ;
- S (Z,OK,SN,ZINC)=0
- ; IA 4051 for File #361.1
- F S Z=$O(^IBM(361.1,"B",RCZ,Z)) Q:'Z I $P($G(^IBM(361.1,Z,0)),U,4)'=1 D
- . ; retrieve the EEOB data from ERA Detail sub-entry
- . S (Z0,DET)=0
- . F S Z0=$O(^RCY(344.4,"ADET",Z,Z0)) Q:'Z0 F S DET=$O(^RCY(344.4,"ADET",Z,Z0,DET)) Q:'DET D ; ERA Detail
- . . ; PRCA*4.5*303 - added check for Zero paid or Paid > 0 check for report.
- . . S ZINC=0,ZPD=+$P($G(^RCY(344.4,Z0,1,DET,0)),U,3)
- . . I (RCZRO="A") S ZINC=1 ; PRCA*4.5*332
- . . I (RCZRO="Z"),(ZPD=0) S ZINC=1
- . . I (RCZRO="P"),(ZPD>0) S ZINC=1 ; PRCA*4.5*332
- . . ; PRCA*4.5*303 - Removed looking for Receipt, include record based on ERA DETAIL POST STATUS
- . . ; PRCA*4.5*303 - Removed check for Receipt (If Z1 is not empty) Changed date to Piece 7 and
- . . ; added check for either 0 paid or paid >0 depending on selection. Added ERA PD AMOUNT as second piece of RCEOB array
- . . I ZINC S SN=SN+1,RCEOB(Z,SN)=+$P($G(^RCY(344.4,Z0,0)),U,7)_U_ZPD,OK=1 ; PRCA*4.5*332
- ;
- Q OK
- ;
- SL1(RCSORT,RCZ) ; Function returns 1st sort level data from ien RCZ in file 430
- ; RCSORT = "PN" for patient name sort = "L4" for SSN last 4 sort
- N DAT
- I RCSORT="PN" S DAT=$P($G(^DPT(+$P($G(^PRCA(430,RCZ,0)),U,7),0)),U)
- I RCSORT="L4" S DAT=$P($G(^DPT(+$P($G(^PRCA(430,RCZ,0)),U,7),0)),U,9),DAT=$E(DAT,$L(DAT)-3,$L(DAT))
- Q $S($G(DAT)'="":DAT,1:" ")
- ;
- SELECT(RCINS,RCSORT,RCZRO,RCTYPE) ; Select insurance co, sort criteria, Zero Payment, Bill type (Med/RX) and if output for EXCEL format is selected
- ; Function returns values selected for RCSORT and RCINS - passed by ref
- N RCQUIT,DONE,DIR,X,Y,%DT
- S (RCQUIT,DONE,RCLSTMGR)=0
- ; PRCA*4.5*326 - Begin changed block - Ask to show Medical/Pharmacy Tricare, CHAMPVA or All
- S RCTYPE=$$RTYPE^RCDPEU1("")
- I RCTYPE=-1 G SELQ
- ;
- S RCINS=$$PAYRNG^RCDPEU1()
- I RCINS=-1 G SELQ
- ;
- I RCINS'="A" D I XX=-1 G SELQ
- . S RCPAR("TYPE")=RCTYPE
- . S RCPAR("SELC")=RCINS
- . S RCPAR("DICA")="SELECT INSURANCE COMPANY: "
- . S XX=$$SELPAY^RCDPEU1(.RCPAR)
- ; PRCA*4.5*326 - End changed block
- ;
- ; PRCA*4.5*303 - Add Zero $ Prompt and Medical/Pharmacy EEOBs Prompt
- S DIR(0)="SA^P:PAYMENT EEOBs;Z:ZERO PAYMENT EEOBs;A:ALL"
- S DIR("A")="RUN REPORT FOR (P)AYMENT EEOBs or (Z)ERO PAYMENT EEOBs or (A)LL: ",DIR("B")="ALL"
- W ! D ^DIR K DIR
- I $D(DTOUT)!$D(DUOUT) G SELQ
- S RCZRO=$E(Y,1)
- ;
- S DIR(0)="SA^P:PATIENT NAME;L:LAST 4 OF PATIENT SSN",DIR("A")="WITHIN INS CO, SORT BY (P)ATIENT NAME OR (L)AST 4 OF SSN?: ",DIR("B")="PATIENT NAME" W ! D ^DIR K DIR
- I $D(DTOUT)!$D(DUOUT) G SELQ
- S RCSORT=$S(Y="P":"PN",1:"L4")
- S DIR(0)="SA^F:FIRST TO LAST;L:LAST TO FIRST",DIR("A")="SORT "_$S(RCSORT="PN":"PATIENT NAME",1:"LAST 4")_" (F)IRST TO LAST OR (L)AST TO FIRST?: ",DIR("B")="FIRST TO LAST" D ^DIR K DIR
- I $D(DTOUT)!$D(DUOUT) G SELQ
- I Y="L" S RCSORT=RCSORT_";-"
- ;
- ; PRCA*4.5*298 - Add Date Range Prompts
- K DIR
- S DIR("?")="ENTER THE EARLIEST RECEIVED DATE TO INCLUDE ON THE REPORT"
- S DIR(0)="DAO^:"_DT_":APE",DIR("A")="START DATE (RECEIVED): ",DIR("B")="T" D ^DIR K DIR
- I $D(DTOUT)!$D(DUOUT)!(Y="") G SELQ
- S START=Y
- K DIR
- S DIR("?")="ENTER THE LATEST RECEIVED DATE TO INCLUDE ON THE REPORT"
- S DIR("B")="T"
- S DIR(0)="DAO^"_START_":"_DT_":APE",DIR("A")="END DATE (RECEIVED): " D ^DIR K DIR
- I $D(DTOUT)!$D(DUOUT)!(Y="") G SELQ
- S END=Y
- ; PRCA*4.5*326 - Remove old Tricare and CHAMPVA prompts
- ;
- ; PRCA*4.5*276 - Determine whether to gather data for Excel report.
- S RCDISPTY=$$DISPTY^RCDPEM3 G SELQ:RCDISPTY<0
- I RCDISPTY D INFO^RCDPEM6 S DONE=1 G SELQ
- ;
- ; PRCA*4.5*298 - Add ListManager Prompts
- S RCLSTMGR=$$ASKLM^RCDPEARL G:RCLSTMGR<0 SELQ
- ;
- S DONE=1
- ;
- SELQ ;
- Q DONE
- ;
- LIST(DIR,RCINS) ; Sets up help array for ins co selected in DIR("?")
- N CT,Z
- S CT=1
- I '$O(RCINS("S",0)) S DIR("?")="NO INSURANCE COMPANIES SELECTED" Q
- S DIR("?",1)="INSURANCE COMPANIES ALREADY SELECTED:"
- S Z=0 F S Z=$O(RCINS("S",Z)) Q:'Z S CT=CT+1,DIR("?",CT)=" "_$P($G(^DIC(36,Z,0)),U)
- S DIR("?")=" "
- Q
- ;
- HDRBLD ; create the report header
- ; returns RCHDR,RCPGNUM,RCSTOP
- ; RCHDR(0) = header text line count
- ; RCHDR("PGNUM") = page number
- ; RCHDR("XECUTE") = M code for page number
- ; RCHDR("RUNDATE") = date/time report generated
- ; RCPGNUM - page counter
- ; RCSTOP - flag to stop listing
- ; INPUT:
- ; RCDTRNG - date range filter value to be printed as part of the header
- ; RCPAY - Payer filter value(s)
- ; RCLSTMGR
- ;
- N Z0
- S Z0=""
- K RCHDR S RCHDR("RUNDATE")=$$NOW^RCDPEARL,RCPGNUM=0,RCSTOP=0
- ;
- I RCDISPTY D Q ; Excel format, xecute code is QUIT, null page number
- . S RCHDR(0)=1,RCHDR("XECUTE")="Q",RCPGNUM=""
- . S RCHDR(1)="PATIENT NAME^SSN^BILL#^INS CO NAME^BALANCE^AMT BILLE^AMT PAID^TRACE#^DT REC'D^DT POST^ERA PD AMT"
- ;
- N MSG,DATE,Y,DIV,HCNT
- S RCHDR(1)=$$HDRNM,HCNT=1 ; line 1 will be replaced by XECUTE code below
- S RCHDR("XECUTE")="N Y S RCPGNUM=RCPGNUM+1,Y=$$HDRNM^"_$T(+0)_"_$S(RCLSTMGR:"""",1:$J(""Page: ""_RCPGNUM,12)),RCHDR(1)=$J("" "",80-$L(Y)\2)_Y"
- ;
- S Y="RUN DATE: "_RCHDR("RUNDATE"),HCNT=HCNT+1,RCHDR(HCNT)=$J("",80-$L(Y)\2)_Y
- I VAUTD=1 S Y="DIVISIONS: ALL"
- I VAUTD=0 D
- . S Z0=0,Y="DIVISIONS: " F X=1:1 S Z0=$O(VAUTD(Z0)) Q:Z0="" S:X>1 Y=Y_", " S Y=Y_VAUTD(Z0)
- S HCNT=HCNT+1,RCHDR(HCNT)=$J("",80-$L(Y)\2)_Y
- I RCINS="S" S Z=0,Z0="" F S Z=$O(RCINS("S",Z)) Q:'Z S Z0=Z0_$S(Z0'="":",",1:"")_$P($G(^DIC(36,Z,0)),U)
- ; PRCA*4.5*326 - Start modified block
- S Z0="PAYERS: "_$S(RCINS="A":"ALL ",RCINS="R":"RANGE",1:"SELECTED")
- S Z0=Z0_$J("",16)_"MEDICAL/PHARMACY/TRICARE/CHAMPVA: "_$S(RCTYPE="M":"MEDICAL",RCTYPE="P":"PHARMACY",RCTYPE="T":"TRICARE",RCTYPE="C":"CHAMPVA",1:"ALL") ;PRCA*4.5*432 Add CHAMPVA
- S HCNT=HCNT+1,RCHDR(HCNT)=$J("",80-$L(Z0)\2)_Z0,Z0=""
- ; PRCA*4.5*326 modify next two lines for tricare filter
- S Z0=Z0_"DATE RANGE: "_$$FMTE^XLFDT(START,"2Z")_"-"_$$FMTE^XLFDT(END,"2Z")
- S Z0=Z0_$J("",16)_" PAYMENT TYPE: "_$S(RCZRO="Z":"ZERO PAYMENT",RCZRO="P":"PAYMENT",1:"ALL") ; PRCA*4.5*332
- ; PRCA*4.5*326 - End modified block
- ;
- S HCNT=HCNT+1,RCHDR(HCNT)=$J("",80-$L(Z0)\2)_Z0
- ;
- S HCNT=HCNT+1,RCHDR(HCNT)=""
- S Y="PATIENT NAME SSN BILL#",HCNT=HCNT+1,RCHDR(HCNT)=Y
- S Y="INS CO NAME BALANCE AMT BILLED AMT PAID",HCNT=HCNT+1,RCHDR(HCNT)=Y
- S Y=" TRACE# ERA PD AMT REC'D DT POST",HCNT=HCNT+1,RCHDR(HCNT)=Y
- S Y=$TR($J("",IOM)," ","="),HCNT=HCNT+1,RCHDR(HCNT)=Y
- S RCHDR(0)=HCNT
- Q
- ;
- HDRLM ; create the list manager version of the report header
- ; returns RCHDR,RCPGNUM,RCSTOP
- ; RCHDR(0) = header text line count
- ; RCHDR("PGNUM") = page number
- ; RCHDR("XECUTE") = M code for page number
- ; RCHDR("RUNDATE") = date/time report generated
- ; RCPGNUM - page counter
- ; RCSTOP - flag to stop listing
- ;INPUT:
- ; RCDTRNG - date range filter value to be printed as part of the header
- ; RCPAY - Payer filter value(s)
- ; RCLSTMGR
- ;
- N Z0 S Z0=""
- K RCHDR S RCPGNUM=0,RCSTOP=0
- N MSG,DATE,Y,DIV,HCNT
- ; PRCA*4.5*326 Start modified code block
- S HCNT=1
- S RCHDR("TITLE")=$$HDRNM,RCHDR("XECUTE")="Q"
- S RCHDR(1)="DATE RANGE: "_$$FMTE^XLFDT(START,"2Z")_"-"_$$FMTE^XLFDT(END,"2Z")_$J("",16)
- S RCHDR(1)=RCHDR(1)_" PAYMENT TYPE: "_$S(RCZRO="Z":"ZERO PAYMENT",RCZRO="P":"PAYMENT",1:"ALL") ; PRCA*4.5*332
- I VAUTD=1 S Y="DIVISIONS: ALL"
- I VAUTD=0 D
- . S Z0=0,Y="DIVISIONS: " F X=1:1 S Z0=$O(VAUTD(Z0)) Q:Z0="" S:X>1 Y=Y_", " S Y=Y_VAUTD(Z0)
- S HCNT=HCNT+1,RCHDR(HCNT)=Y
- I RCINS="S" S Z=0,Z0="" F S Z=$O(RCINS("S",Z)) Q:'Z S Z0=Z0_$S(Z0'="":",",1:"")_$P($G(^DIC(36,Z,0)),U)
- S Z0="PAYERS: "_$S(RCINS="A":"ALL ",RCINS="R":"RANGE",1:"SELECTED")
- S Z0=Z0_$J("",38-$L(Z0))_"MEDICAL/PHARMACY/TRICARE/CHAMPVA: "_$S(RCTYPE="M":"MEDICAL",RCTYPE="P":"PHARMACY",RCTYPE="T":"TRICARE",RCTYPE="C":"CHAMPVA",1:"ALL") ;PRCA*4.5*432 Add CHAMPVA
- ; PRCA*4.5*326 End modified code block
- S HCNT=HCNT+1,RCHDR(HCNT)=Z0
- I RCINS="A" S HCNT=HCNT+1,RCHDR(HCNT)=""
- ;
- S Y="PATIENT NAME SSN BILL#",HCNT=HCNT+1,RCHDR(HCNT)=Y
- S Y="INS CO NAME BALANCE AMT BILLED AMT PAID",HCNT=HCNT+1,RCHDR(HCNT)=Y
- S Y=" TRACE# ERA PD AMT REC'D DT POST",HCNT=HCNT+1,RCHDR(HCNT)=Y
- S RCHDR(0)=HCNT
- Q
- ;
- ; extrinsic variable, name for header PRCA*4.5*298
- HDRNM() Q "EDI LOCKBOX ACTIVE BILLS W/EEOB REPORT"
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HRCDPEAC 17546 printed Apr 23, 2025@17:58:37 Page 2
- RCDPEAC ;ALB/TMK/PJH - ACTIVE BILLS WITH EEOB ON FILE ;Jun 06, 2014@19:11:19
- +1 ;;4.5;Accounts Receivable;**208,269,276,298,303,326,332,432**;Mar 20, 1995;Build 16
- +2 ;Per VA Directive 6402, this routine should not be modified.
- +3 ;
- EN ; Entry point for Active Bills With EEOB Report [RCDPE ACTIVE WITH EEOB REPORT]
- +1 NEW %ZIS,CHAM,DTOUT,DUOUT,END,HDR,POP,RCCT,RCDISPTY,RCHDR,RCINS,RCLSTMGR,RCPAR,RCPGNUM,RCSORT,RCSTOP,RCTMPND,RCZRO
- +2 NEW START,TRIC,VAUTD,X,Y
- +3 ; PRCA*4.5*276 - IA 1077 - Query Division
- +4 DO DIVISION^VAUTOMA
- +5 IF 'VAUTD&($DATA(VAUTD)'=11)
- QUIT
- +6 ; PRCA*4.5*276 - select report format
- +7 if '$$SELECT(.RCINS,.RCSORT,.RCZRO,.RCTYPE)
- QUIT
- +8 ;
- +9 SET RCTMPND=""
- SET RCPGNUM=0
- SET RCSTOP=0
- +10 IF RCLSTMGR
- Begin DoDot:1
- +11 ; clean any residue
- SET RCTMPND=$TEXT(+0)_"^AR - ACTIVE BILLS WITH EEOB REPORT"
- KILL ^TMP($JOB,RCTMPND)
- +12 DO ENQ
- +13 MERGE HDR=RCHDR
- +14 ; generate ListMan display
- DO LMRPT^RCDPEARL(.HDR,$NAME(^TMP($JOB,RCTMPND)))
- +15 IF $DATA(RCTMPND)
- KILL ^TMP($JOB,RCTMPND)
- End DoDot:1
- GOTO ENOUT
- +16 ;
- +17 WRITE !
- +18 SET %ZIS="QM"
- DO ^%ZIS
- if POP
- QUIT
- +19 IF $DATA(IO("Q"))
- Begin DoDot:1
- +20 NEW ZTDESC,ZTRTN,ZTSAVE,ZTSK
- +21 SET ZTRTN="ENQ^RCDPEAC"
- SET ZTDESC="AR - ACTIVE BILLS WITH EEOB REPORT"
- +22 SET ZTSAVE("*")=""
- +23 DO ^%ZTLOAD
- +24 WRITE !!,$SELECT($DATA(ZTSK):"Your task number"_ZTSK_" has been queued.",1:"Unable to queue this job.")
- +25 KILL IO("Q")
- DO HOME^%ZIS
- End DoDot:1
- QUIT
- +26 USE IO
- +27 ;
- ENQ ; Queued entry point for the report
- +1 ; RCSORT and array RCINS must exist
- +2 ; RCINS = "A" for all ins co, "R" for range, "S" for selected individual
- +3 ; for RCINS="R" ("FR")=from payer name and ("TR")=to payer name
- +4 ; for RCINS="S" ("S",INS CO IEN IN FILE 36)=""
- +5 ; RCSORT = "PN" for sort by patient name followed by ;- if reverse order
- +6 ; "L4" for sort by patient SSN followed by ;- if reverse order
- +7 ;
- +8 NEW POSTDT,RC0,RC399,RC399M1,RC430,RCACT,RCBILL,RCEIEN,RCEOB,RCEX,RCEXT,RCINC,RCKEY2,RCKEY4,RCNEW
- +9 NEW RCPAYNAM,RCPT,RCSSN,RCSTOP,RCTOT,RCZ,RCZ0,RCZ1,SN,X,Y,Z,Z0
- +10 KILL ^TMP($JOB,"RCSORT")
- +11 ;Page count for List Manager
- SET RCCT=0
- +12 ; Set Excel page 1 count
- SET RCEXT=0
- +13 IF 'RCLSTMGR
- DO HDRBLD
- +14 IF RCLSTMGR
- DO HDRLM
- +15 ; Get active status ien
- SET RCACT=+$ORDER(^PRCA(430.3,"AC",102,0))
- +16 if 'RCACT
- GOTO ENOUT
- +17 ;
- +18 ; initial report header
- IF 'RCLSTMGR
- DO HDRLST^RCDPEARL(0,.RCHDR)
- +19 SET RCBILL=0
- SET RCDT=START-.0001
- +20 ; PRCA*4.5*303 - Changed loop to use the "AD" index on 361.1 so that the number of records checked is limited by
- +21 ; the START and END dates of when the EEOB was recieved in VistA
- +22 ; PRCA*4.5*326 - Start modified block. Change INCLUDE params and shorten line lengths.
- +23 FOR
- SET RCDT=$ORDER(^IBM(361.1,"AD",RCDT))
- if (RCDT>(END_".24"))!(RCDT="")
- QUIT
- Begin DoDot:1
- +24 ;
- SET RCEIEN=""
- FOR
- SET RCEIEN=$ORDER(^IBM(361.1,"AD",RCDT,RCEIEN))
- if RCEIEN=""
- QUIT
- Begin DoDot:2
- +25 SET RCBILL=$PIECE(^IBM(361.1,RCEIEN,0),U,1)
- +26 ; PRCA*4.5*326 - Inclusion by payer or payer type
- SET RCINC=$$INCLUDE(RCBILL,RCEIEN,RCTYPE)
- +27 ; PRCA*4.5*326
- IF RCINC
- IF ($PIECE(^PRCA(430,RCBILL,0),U,8)=RCACT)
- IF $$EEOB(RCBILL,.RCEOB,RCZRO)
- Begin DoDot:3
- +28 SET (RCTOT,RCEOB,SN)=0
- +29 FOR
- SET RCEOB=$ORDER(RCEOB(RCEOB))
- if 'RCEOB
- QUIT
- FOR
- SET SN=$ORDER(RCEOB(RCEOB,SN))
- if 'SN
- QUIT
- Begin DoDot:4
- +30 SET RCTOT=RCTOT+$GET(^IBM(361.1,RCEOB,1))
- +31 ; PRCA*4.5*326 - Begin block - Change insurance co. name (file 36) to payer name (file 344.6)
- +32 SET RCPAYNAM=$$INSNM(RCBILL,RCEIEN)
- +33 SET RCKEY2=$$SL1(RCSORT,RCBILL)
- SET RCKEY4=+RCEOB(RCEOB,SN)_"_"_RCEOB_"_"_SN
- +34 ; PRCA*4.5.303 add ERA PD AMOUNT
- SET ^TMP($JOB,"RCSORT",RCPAYNAM,RCKEY2,RCBILL,RCKEY4,RCEOB)=$PIECE(RCEOB(RCEOB,SN),U,2)
- +35 ;This is from the eob and will be the same for each line
- IF $ORDER(RCEOB(0))
- SET ^TMP($JOB,"RCSORT",RCPAYNAM,RCKEY2,RCBILL)=RCTOT
- +36 ; PRCA*4.5*326 - End block
- End DoDot:4
- End DoDot:3
- End DoDot:2
- End DoDot:1
- +37 ;
- +38 SET RCZ=""
- SET (RCSTOP,RCNEW)=0
- +39 FOR
- SET RCZ=$ORDER(^TMP($JOB,"RCSORT",RCZ))
- if RCZ=""!RCSTOP
- QUIT
- Begin DoDot:1
- +40 IF RCSORT'["-"
- Begin DoDot:2
- +41 SET RCZ0=""
- FOR
- SET RCZ0=$ORDER(^TMP($JOB,"RCSORT",RCZ,RCZ0))
- if RCZ0=""!RCSTOP
- QUIT
- DO OUTPUT(RCZ,RCZ0,RCSORT,.RCSTOP,.RCINS,RCNEW)
- SET RCNEW=0
- End DoDot:2
- +42 IF RCSORT["-"
- Begin DoDot:2
- +43 SET RCZ0=""
- FOR
- SET RCZ0=$ORDER(^TMP($JOB,"RCSORT",RCZ,RCZ0),-1)
- if RCZ0=""!RCSTOP
- QUIT
- DO OUTPUT(RCZ,RCZ0,RCSORT,.RCSTOP,.RCINS,.RCNEW)
- SET RCNEW=0
- End DoDot:2
- End DoDot:1
- if ($GET(RCINS)="R")!($GET(RCINS)="S")&(RCPGNUM>1)
- SET RCNEW=1
- +44 ;
- +45 IF '$DATA(^TMP($JOB,"RCSORT"))
- SET $PIECE(Z," ",25)=""
- SET Z=Z_"*** NO RECORDS TO PRINT ***"
- DO SL^RCDPEARL(Z,.RCCT,RCTMPND)
- +46 IF $DATA(^TMP($JOB,"RCSORT"))
- IF 'RCSTOP
- DO SL^RCDPEARL($$ENDORPRT^RCDPEARL,.RCCT,RCTMPND)
- +47 ; PRCA*4.5*303 - If regular report (no listmanager or queued) ask user to quit
- +48 IF 'RCSTOP
- IF 'RCLSTMGR
- IF '$DATA(ZTQUEUED)
- DO ASK^RCDPEARL(.RCSTOP)
- +49 ;
- ENOUT IF $DATA(ZTQUEUED)
- SET ZTREQ="@"
- +1 IF '$DATA(ZTQUEUED)
- DO ^%ZISC
- +2 KILL ^TMP($JOB,"RCSORT"),RCDT
- +3 QUIT
- +4 ;
- OUTPUT(RCZ,RCZ0,RCSORT,RCSTOP,RCINS,RCNEW) ; Output the data
- +1 ; RCZ, RCZ0 are the first 2 sort levels for the array
- +2 ; RCINS = insurance co info array
- +3 ; RCSTOP passed by ref - returned if user chooses to stop
- +4 ; RCNEW = 1 if the header should be forced to print
- +5 NEW ZZ,RCEPD
- +6 SET RCBILL=0
- FOR
- SET RCBILL=$ORDER(^TMP($JOB,"RCSORT",RCZ,RCZ0,RCBILL))
- if 'RCBILL!RCSTOP
- QUIT
- SET RCZ1=""
- FOR
- SET RCZ1=$ORDER(^TMP($JOB,"RCSORT",RCZ,RCZ0,RCBILL,RCZ1))
- if RCZ1=""!RCSTOP
- QUIT
- Begin DoDot:1
- +7 IF $DATA(ZTQUEUED)
- IF $$S^%ZTLOAD
- SET (RCSTOP,ZTSTOP)=1
- KILL ZTREQ
- IF +$GET(RCSTOP)
- WRITE !!,"***TASK STOPPED BY USER***"
- QUIT
- +8 ; IA 1992 - BILL/CLAIMS file (#399)
- +9 ;RC430 is from the top level
- SET RC399=$GET(^DGCR(399,RCBILL,0))
- SET RC399M1=$GET(^DGCR(399,RCBILL,"M1"))
- SET RCPT=+$PIECE(RC399,U,2)
- SET RC430=$GET(^PRCA(430,RCBILL,0))
- +10 ; PRCA*4.5*276 - Check for Division
- +11 IF VAUTD=0
- if $PIECE(RC399,U,22)=""
- QUIT
- if $GET(VAUTD($PIECE(RC399,U,22)))=""
- QUIT
- +12 ; PRCA*4.5*326 remove phamacy check. Now in $$INCLUDE logic
- +13 SET RCSTOP=$$NEWPG(.RCINS,RCNEW)
- SET RCNEW=0
- if RCSTOP
- QUIT
- +14 SET X=$$GET1^DIQ(430,RCBILL_",",11)
- +15 ; PRCA*4.5*276 - Row #1: Print last 4 SSN only - Move Bill Number to end
- +16 SET RCSSN=$PIECE($GET(^DPT(RCPT,0)),U,9)
- SET RCSSN=$EXTRACT(RCSSN,$LENGTH(RCSSN)-3,$LENGTH(RCSSN))
- +17 IF $GET(RCDISPTY)
- SET RCEX=$PIECE($GET(^DPT(RCPT,0)),U)_"^"_RCSSN_"^"_$TRANSLATE($PIECE(RC430,U),"-","")
- +18 IF '$TEST
- Begin DoDot:2
- +19 SET Z=$EXTRACT($PIECE($GET(^DPT(RCPT,0)),U)_$JUSTIFY("",25),1,25)_" "_$EXTRACT(RCSSN_$JUSTIFY("",5),1,5)_" "_$TRANSLATE($PIECE(RC430,U),"-","")
- +20 DO SL^RCDPEARL(Z,.RCCT,RCTMPND)
- End DoDot:2
- +21 ; PRCA*4.5*276 - Row #2: Move Ins Name, Balance, Amt Bill, Amt Paid
- +22 SET Y=+$GET(^TMP($JOB,"RCSORT",RCZ,RCZ0,RCBILL))
- +23 ; PRCA*4.5*326 - Use RCZ for insurance name
- IF $GET(RCDISPTY)
- SET RCEX=RCEX_"^"_RCZ_"^"_+X_"^"_+$PIECE(RC430,U,3)_"^"_Y
- +24 IF '$TEST
- Begin DoDot:2
- +25 ; PRCA*4.5*326 - Use RCZ for insurance name
- +26 SET Z=$EXTRACT(RCZ_$JUSTIFY("",30),1,30)_$EXTRACT($JUSTIFY("",12)_...
- SET $JUSTIFY(+X,"",2),1+$LENGTH($JUSTIFY(+X,"",2)),12+$LENGTH($JUSTIFY(+X,"",2)))_$EXTRACT($JUSTIFY("",13)_$JUSTIFY(+$PIECE(RC430,U,3),"",2),1+$LENGTH($JUSTIFY(+$PIECE(RC430,U,3),"",2)),13+...
- ... $LENGTH($JUSTIFY(+$PIECE(RC430,U,3),"",2)))_$EXTRACT($JUSTIFY("",13),1,13-$LENGTH(Y))_$JUSTIFY(Y,"",2)
- +27 DO SL^RCDPEARL(Z,.RCCT,RCTMPND)
- End DoDot:2
- +28 ; PRCA*4.5*276 Do not display Date Referred
- +29 SET RCEOB=0
- SET RCEPD=""
- FOR
- SET RCEOB=$ORDER(^TMP($JOB,"RCSORT",RCZ,RCZ0,RCBILL,RCZ1,RCEOB))
- if 'RCEOB!RCSTOP
- QUIT
- SET RCEPD=$GET(^TMP($JOB,"RCSORT",RCZ,RCZ0,RCBILL,RCZ1,RCEOB))
- Begin DoDot:2
- +30 SET RCSTOP=$$NEWPG(.RCINS,RCNEW,2)
- +31 if RCSTOP
- QUIT
- +32 SET RC0=$GET(^IBM(361.1,RCEOB,0))
- +33 ; PRCA*4.5*276 - Row #3: Trace#, Date Rec'd, Date Posted
- +34 IF $GET(RCDISPTY)
- WRITE !,RCEX_"^"_$PIECE(RC0,U,7)_"^"_$$FMTE^XLFDT($PIECE(RC0,U,5),"2D")_"^"_$SELECT(RCZ1:$$FMTE^XLFDT(+RCZ1,"2D"),1:"")_"^"_RCEPD
- +35 IF '$TEST
- Begin DoDot:3
- +36 SET Z=" "_$PIECE(RC0,U,7)_$JUSTIFY("",50-$LENGTH($PIECE(RC0,U,7)))_$JUSTIFY(RCEPD,10,2)_" "_$EXTRACT($$FMTE^XLFDT($PIECE(RC0,U,5),"2D")_$JUSTIFY("",8),1,8)_" "_$EXTRACT($SELECT(RCZ1:$$FMTE^XLFDT(+RCZ1,"2D"),1:"")_$J
- USTIFY("",8),1,8)
- +37 DO SL^RCDPEARL(Z,.RCCT,RCTMPND)
- End DoDot:3
- End DoDot:2
- +38 IF '$GET(RCDISPTY)
- SET Z=""
- DO SL^RCDPEARL(Z,.RCCT,RCTMPND)
- End DoDot:1
- +39 ;
- +40 QUIT
- +41 ;
- INCLUDE(RCZ,EOBIEN,RCTYPE) ; PRCA*4.5*326 change parameters
- +1 ; Function returns 1 if record should be included based on ins co
- +2 ; RCINS = array containing insurance co information
- +3 ; RCZ = ien of the entry in file 430
- +4 ; PRCA*4.5*326
- NEW OK,RCI,RCINM,RCAINP,XX
- +5 SET OK=1
- +6 SET RCI=+$$INS(RCZ)
- +7 ;
- +8 ; Not a third party bill
- IF 'RCI
- SET OK=0
- GOTO INCQ
- +9 ;
- +10 ; PRCA*4.5*326 - Start modified block - Check for payer match
- +11 ;
- IF RCINS'="A"
- Begin DoDot:1
- +12 SET OK=$$ISSEL^RCDPEU1(361.1,EOBIEN)
- End DoDot:1
- +13 ;
- IF '$TEST
- IF RCTYPE'="A"
- Begin DoDot:1
- +14 SET OK=$$ISTYPE^RCDPEU1(361.1,EOBIEN,RCTYPE)
- End DoDot:1
- +15 ; PRCA*4.5*326 - End modified block
- +16 ;
- INCQ QUIT OK
- +1 ;
- INSNM(RCZ,EOBIEN) ; Returns the name of payer from the ERA associated with the EOB
- +1 ; If that is null, return the insurance co for bill ien RCZ file 430
- +2 ; Input: RCZ = Point to bill, file #430
- +3 ; EOBIEN = Pointer to EOB file 361.1
- +4 ; Returns: NM = Free text name of Payer from ERA or insurance on bill if ERA not found.
- +5 ;
- +6 NEW ERAIEN,FILE,NM
- +7 SET NM=""
- +8 SET ERAIEN=$$EOBERA^RCDPEU1(EOBIEN)
- +9 IF ERAIEN
- SET NM=$$GETNAME^RCDPEU1(344.4,ERAIEN)
- +10 IF NM=""
- SET NM=$PIECE($GET(^DIC(36,+$$INS(RCZ),0)),U)
- +11 QUIT NM
- +12 ;
- INS(RCZ) ; Returns ien of insurance co for bill ien RCZ from file 430
- +1 NEW RC
- +2 ;DEBTOR
- SET RC=$PIECE($GET(^PRCA(430,RCZ,0)),U,9)
- +3 QUIT $SELECT($PIECE($GET(^RCD(340,+RC,0)),U)'["DIC(36":"",1:+^(0))
- +4 ;
- NEWPG(RCINS,RCNEW,RCLINES) ; Check for new page needed, output header
- +1 ; RCINS = ins co selection criteria
- +2 ; RCNEW = 1 to force new page
- +3 ; RCLINES = Number of lines before IOSL to force new page
- +4 ; Function returns 1 if user chooses to stop output
- +5 SET RCLINES=$GET(RCLINES,5)
- +6 IF RCNEW!(($Y+RCLINES)>IOSL)
- Begin DoDot:1
- +7 if '$GET(RCDISPTY)
- DO HDRLST^RCDPEARL(.RCSTOP,.RCHDR)
- End DoDot:1
- +8 QUIT RCSTOP
- +9 ;
- EEOB(RCZ,RCEOB,RCZRO) ; Find all non-MRA EEOBs for bill ien RCZ
- +1 ; Function returns 1 if any valid EEOBs found, 0 if none
- +2 ; RCEOB(eob ien)=date posted returned for valid EEOBs found -
- +3 ; pass by reference
- +4 NEW OK,Z,Z0,Z00,DET,SN,ZPD,ZINC
- +5 KILL RCEOB
- +6 ;
- +7 SET (Z,OK,SN,ZINC)=0
- +8 ; IA 4051 for File #361.1
- +9 FOR
- SET Z=$ORDER(^IBM(361.1,"B",RCZ,Z))
- if 'Z
- QUIT
- IF $PIECE($GET(^IBM(361.1,Z,0)),U,4)'=1
- Begin DoDot:1
- +10 ; retrieve the EEOB data from ERA Detail sub-entry
- +11 SET (Z0,DET)=0
- +12 ; ERA Detail
- FOR
- SET Z0=$ORDER(^RCY(344.4,"ADET",Z,Z0))
- if 'Z0
- QUIT
- FOR
- SET DET=$ORDER(^RCY(344.4,"ADET",Z,Z0,DET))
- if 'DET
- QUIT
- Begin DoDot:2
- +13 ; PRCA*4.5*303 - added check for Zero paid or Paid > 0 check for report.
- +14 SET ZINC=0
- SET ZPD=+$PIECE($GET(^RCY(344.4,Z0,1,DET,0)),U,3)
- +15 ; PRCA*4.5*332
- IF (RCZRO="A")
- SET ZINC=1
- +16 IF (RCZRO="Z")
- IF (ZPD=0)
- SET ZINC=1
- +17 ; PRCA*4.5*332
- IF (RCZRO="P")
- IF (ZPD>0)
- SET ZINC=1
- +18 ; PRCA*4.5*303 - Removed looking for Receipt, include record based on ERA DETAIL POST STATUS
- +19 ; PRCA*4.5*303 - Removed check for Receipt (If Z1 is not empty) Changed date to Piece 7 and
- +20 ; added check for either 0 paid or paid >0 depending on selection. Added ERA PD AMOUNT as second piece of RCEOB array
- +21 ; PRCA*4.5*332
- IF ZINC
- SET SN=SN+1
- SET RCEOB(Z,SN)=+$PIECE($GET(^RCY(344.4,Z0,0)),U,7)_U_ZPD
- SET OK=1
- End DoDot:2
- End DoDot:1
- +22 ;
- +23 QUIT OK
- +24 ;
- SL1(RCSORT,RCZ) ; Function returns 1st sort level data from ien RCZ in file 430
- +1 ; RCSORT = "PN" for patient name sort = "L4" for SSN last 4 sort
- +2 NEW DAT
- +3 IF RCSORT="PN"
- SET DAT=$PIECE($GET(^DPT(+$PIECE($GET(^PRCA(430,RCZ,0)),U,7),0)),U)
- +4 IF RCSORT="L4"
- SET DAT=$PIECE($GET(^DPT(+$PIECE($GET(^PRCA(430,RCZ,0)),U,7),0)),U,9)
- SET DAT=$EXTRACT(DAT,$LENGTH(DAT)-3,$LENGTH(DAT))
- +5 QUIT $SELECT($GET(DAT)'="":DAT,1:" ")
- +6 ;
- SELECT(RCINS,RCSORT,RCZRO,RCTYPE) ; Select insurance co, sort criteria, Zero Payment, Bill type (Med/RX) and if output for EXCEL format is selected
- +1 ; Function returns values selected for RCSORT and RCINS - passed by ref
- +2 NEW RCQUIT,DONE,DIR,X,Y,%DT
- +3 SET (RCQUIT,DONE,RCLSTMGR)=0
- +4 ; PRCA*4.5*326 - Begin changed block - Ask to show Medical/Pharmacy Tricare, CHAMPVA or All
- +5 SET RCTYPE=$$RTYPE^RCDPEU1("")
- +6 IF RCTYPE=-1
- GOTO SELQ
- +7 ;
- +8 SET RCINS=$$PAYRNG^RCDPEU1()
- +9 IF RCINS=-1
- GOTO SELQ
- +10 ;
- +11 IF RCINS'="A"
- Begin DoDot:1
- +12 SET RCPAR("TYPE")=RCTYPE
- +13 SET RCPAR("SELC")=RCINS
- +14 SET RCPAR("DICA")="SELECT INSURANCE COMPANY: "
- +15 SET XX=$$SELPAY^RCDPEU1(.RCPAR)
- End DoDot:1
- IF XX=-1
- GOTO SELQ
- +16 ; PRCA*4.5*326 - End changed block
- +17 ;
- +18 ; PRCA*4.5*303 - Add Zero $ Prompt and Medical/Pharmacy EEOBs Prompt
- +19 SET DIR(0)="SA^P:PAYMENT EEOBs;Z:ZERO PAYMENT EEOBs;A:ALL"
- +20 SET DIR("A")="RUN REPORT FOR (P)AYMENT EEOBs or (Z)ERO PAYMENT EEOBs or (A)LL: "
- SET DIR("B")="ALL"
- +21 WRITE !
- DO ^DIR
- KILL DIR
- +22 IF $DATA(DTOUT)!$DATA(DUOUT)
- GOTO SELQ
- +23 SET RCZRO=$EXTRACT(Y,1)
- +24 ;
- +25 SET DIR(0)="SA^P:PATIENT NAME;L:LAST 4 OF PATIENT SSN"
- SET DIR("A")="WITHIN INS CO, SORT BY (P)ATIENT NAME OR (L)AST 4 OF SSN?: "
- SET DIR("B")="PATIENT NAME"
- WRITE !
- DO ^DIR
- KILL DIR
- +26 IF $DATA(DTOUT)!$DATA(DUOUT)
- GOTO SELQ
- +27 SET RCSORT=$SELECT(Y="P":"PN",1:"L4")
- +28 SET DIR(0)="SA^F:FIRST TO LAST;L:LAST TO FIRST"
- SET DIR("A")="SORT "_$SELECT(RCSORT="PN":"PATIENT NAME",1:"LAST 4")_" (F)IRST TO LAST OR (L)AST TO FIRST?: "
- SET DIR("B")="FIRST TO LAST"
- DO ^DIR
- KILL DIR
- +29 IF $DATA(DTOUT)!$DATA(DUOUT)
- GOTO SELQ
- +30 IF Y="L"
- SET RCSORT=RCSORT_";-"
- +31 ;
- +32 ; PRCA*4.5*298 - Add Date Range Prompts
- +33 KILL DIR
- +34 SET DIR("?")="ENTER THE EARLIEST RECEIVED DATE TO INCLUDE ON THE REPORT"
- +35 SET DIR(0)="DAO^:"_DT_":APE"
- SET DIR("A")="START DATE (RECEIVED): "
- SET DIR("B")="T"
- DO ^DIR
- KILL DIR
- +36 IF $DATA(DTOUT)!$DATA(DUOUT)!(Y="")
- GOTO SELQ
- +37 SET START=Y
- +38 KILL DIR
- +39 SET DIR("?")="ENTER THE LATEST RECEIVED DATE TO INCLUDE ON THE REPORT"
- +40 SET DIR("B")="T"
- +41 SET DIR(0)="DAO^"_START_":"_DT_":APE"
- SET DIR("A")="END DATE (RECEIVED): "
- DO ^DIR
- KILL DIR
- +42 IF $DATA(DTOUT)!$DATA(DUOUT)!(Y="")
- GOTO SELQ
- +43 SET END=Y
- +44 ; PRCA*4.5*326 - Remove old Tricare and CHAMPVA prompts
- +45 ;
- +46 ; PRCA*4.5*276 - Determine whether to gather data for Excel report.
- +47 SET RCDISPTY=$$DISPTY^RCDPEM3
- if RCDISPTY<0
- GOTO SELQ
- +48 IF RCDISPTY
- DO INFO^RCDPEM6
- SET DONE=1
- GOTO SELQ
- +49 ;
- +50 ; PRCA*4.5*298 - Add ListManager Prompts
- +51 SET RCLSTMGR=$$ASKLM^RCDPEARL
- if RCLSTMGR<0
- GOTO SELQ
- +52 ;
- +53 SET DONE=1
- +54 ;
- SELQ ;
- +1 QUIT DONE
- +2 ;
- LIST(DIR,RCINS) ; Sets up help array for ins co selected in DIR("?")
- +1 NEW CT,Z
- +2 SET CT=1
- +3 IF '$ORDER(RCINS("S",0))
- SET DIR("?")="NO INSURANCE COMPANIES SELECTED"
- QUIT
- +4 SET DIR("?",1)="INSURANCE COMPANIES ALREADY SELECTED:"
- +5 SET Z=0
- FOR
- SET Z=$ORDER(RCINS("S",Z))
- if 'Z
- QUIT
- SET CT=CT+1
- SET DIR("?",CT)=" "_$PIECE($GET(^DIC(36,Z,0)),U)
- +6 SET DIR("?")=" "
- +7 QUIT
- +8 ;
- HDRBLD ; create the report header
- +1 ; returns RCHDR,RCPGNUM,RCSTOP
- +2 ; RCHDR(0) = header text line count
- +3 ; RCHDR("PGNUM") = page number
- +4 ; RCHDR("XECUTE") = M code for page number
- +5 ; RCHDR("RUNDATE") = date/time report generated
- +6 ; RCPGNUM - page counter
- +7 ; RCSTOP - flag to stop listing
- +8 ; INPUT:
- +9 ; RCDTRNG - date range filter value to be printed as part of the header
- +10 ; RCPAY - Payer filter value(s)
- +11 ; RCLSTMGR
- +12 ;
- +13 NEW Z0
- +14 SET Z0=""
- +15 KILL RCHDR
- SET RCHDR("RUNDATE")=$$NOW^RCDPEARL
- SET RCPGNUM=0
- SET RCSTOP=0
- +16 ;
- +17 ; Excel format, xecute code is QUIT, null page number
- IF RCDISPTY
- Begin DoDot:1
- +18 SET RCHDR(0)=1
- SET RCHDR("XECUTE")="Q"
- SET RCPGNUM=""
- +19 SET RCHDR(1)="PATIENT NAME^SSN^BILL#^INS CO NAME^BALANCE^AMT BILLE^AMT PAID^TRACE#^DT REC'D^DT POST^ERA PD AMT"
- End DoDot:1
- QUIT
- +20 ;
- +21 NEW MSG,DATE,Y,DIV,HCNT
- +22 ; line 1 will be replaced by XECUTE code below
- SET RCHDR(1)=$$HDRNM
- SET HCNT=1
- +23 SET RCHDR("XECUTE")="N Y S RCPGNUM=RCPGNUM+1,Y=$$HDRNM^"_$TEXT(+0)_"_$S(RCLSTMGR:"""",1:$J(""Page: ""_RCPGNUM,12)),RCHDR(1)=$J("" "",80-$L(Y)\2)_Y"
- +24 ;
- +25 SET Y="RUN DATE: "_RCHDR("RUNDATE")
- SET HCNT=HCNT+1
- SET RCHDR(HCNT)=$JUSTIFY("",80-$LENGTH(Y)\2)_Y
- +26 IF VAUTD=1
- SET Y="DIVISIONS: ALL"
- +27 IF VAUTD=0
- Begin DoDot:1
- +28 SET Z0=0
- SET Y="DIVISIONS: "
- FOR X=1:1
- SET Z0=$ORDER(VAUTD(Z0))
- if Z0=""
- QUIT
- if X>1
- SET Y=Y_", "
- SET Y=Y_VAUTD(Z0)
- End DoDot:1
- +29 SET HCNT=HCNT+1
- SET RCHDR(HCNT)=$JUSTIFY("",80-$LENGTH(Y)\2)_Y
- +30 IF RCINS="S"
- SET Z=0
- SET Z0=""
- FOR
- SET Z=$ORDER(RCINS("S",Z))
- if 'Z
- QUIT
- SET Z0=Z0_$SELECT(Z0'="":",",1:"")_$PIECE($GET(^DIC(36,Z,0)),U)
- +31 ; PRCA*4.5*326 - Start modified block
- +32 SET Z0="PAYERS: "_$SELECT(RCINS="A":"ALL ",RCINS="R":"RANGE",1:"SELECTED")
- +33 ;PRCA*4.5*432 Add CHAMPVA
- SET Z0=Z0_$JUSTIFY("",16)_"MEDICAL/PHARMACY/TRICARE/CHAMPVA: "_$SELECT(RCTYPE="M":"MEDICAL",RCTYPE="P":"PHARMACY",RCTYPE="T":"TRICARE",RCTYPE="C":"CHAMPVA",1:"ALL")
- +34 SET HCNT=HCNT+1
- SET RCHDR(HCNT)=$JUSTIFY("",80-$LENGTH(Z0)\2)_Z0
- SET Z0=""
- +35 ; PRCA*4.5*326 modify next two lines for tricare filter
- +36 SET Z0=Z0_"DATE RANGE: "_$$FMTE^XLFDT(START,"2Z")_"-"_$$FMTE^XLFDT(END,"2Z")
- +37 ; PRCA*4.5*332
- SET Z0=Z0_$JUSTIFY("",16)_" PAYMENT TYPE: "_$SELECT(RCZRO="Z":"ZERO PAYMENT",RCZRO="P":"PAYMENT",1:"ALL")
- +38 ; PRCA*4.5*326 - End modified block
- +39 ;
- +40 SET HCNT=HCNT+1
- SET RCHDR(HCNT)=$JUSTIFY("",80-$LENGTH(Z0)\2)_Z0
- +41 ;
- +42 SET HCNT=HCNT+1
- SET RCHDR(HCNT)=""
- +43 SET Y="PATIENT NAME SSN BILL#"
- SET HCNT=HCNT+1
- SET RCHDR(HCNT)=Y
- +44 SET Y="INS CO NAME BALANCE AMT BILLED AMT PAID"
- SET HCNT=HCNT+1
- SET RCHDR(HCNT)=Y
- +45 SET Y=" TRACE# ERA PD AMT REC'D DT POST"
- SET HCNT=HCNT+1
- SET RCHDR(HCNT)=Y
- +46 SET Y=$TRANSLATE($JUSTIFY("",IOM)," ","=")
- SET HCNT=HCNT+1
- SET RCHDR(HCNT)=Y
- +47 SET RCHDR(0)=HCNT
- +48 QUIT
- +49 ;
- HDRLM ; create the list manager version of the report header
- +1 ; returns RCHDR,RCPGNUM,RCSTOP
- +2 ; RCHDR(0) = header text line count
- +3 ; RCHDR("PGNUM") = page number
- +4 ; RCHDR("XECUTE") = M code for page number
- +5 ; RCHDR("RUNDATE") = date/time report generated
- +6 ; RCPGNUM - page counter
- +7 ; RCSTOP - flag to stop listing
- +8 ;INPUT:
- +9 ; RCDTRNG - date range filter value to be printed as part of the header
- +10 ; RCPAY - Payer filter value(s)
- +11 ; RCLSTMGR
- +12 ;
- +13 NEW Z0
- SET Z0=""
- +14 KILL RCHDR
- SET RCPGNUM=0
- SET RCSTOP=0
- +15 NEW MSG,DATE,Y,DIV,HCNT
- +16 ; PRCA*4.5*326 Start modified code block
- +17 SET HCNT=1
- +18 SET RCHDR("TITLE")=$$HDRNM
- SET RCHDR("XECUTE")="Q"
- +19 SET RCHDR(1)="DATE RANGE: "_$$FMTE^XLFDT(START,"2Z")_"-"_$$FMTE^XLFDT(END,"2Z")_$JUSTIFY("",16)
- +20 ; PRCA*4.5*332
- SET RCHDR(1)=RCHDR(1)_" PAYMENT TYPE: "_$SELECT(RCZRO="Z":"ZERO PAYMENT",RCZRO="P":"PAYMENT",1:"ALL")
- +21 IF VAUTD=1
- SET Y="DIVISIONS: ALL"
- +22 IF VAUTD=0
- Begin DoDot:1
- +23 SET Z0=0
- SET Y="DIVISIONS: "
- FOR X=1:1
- SET Z0=$ORDER(VAUTD(Z0))
- if Z0=""
- QUIT
- if X>1
- SET Y=Y_", "
- SET Y=Y_VAUTD(Z0)
- End DoDot:1
- +24 SET HCNT=HCNT+1
- SET RCHDR(HCNT)=Y
- +25 IF RCINS="S"
- SET Z=0
- SET Z0=""
- FOR
- SET Z=$ORDER(RCINS("S",Z))
- if 'Z
- QUIT
- SET Z0=Z0_$SELECT(Z0'="":",",1:"")_$PIECE($GET(^DIC(36,Z,0)),U)
- +26 SET Z0="PAYERS: "_$SELECT(RCINS="A":"ALL ",RCINS="R":"RANGE",1:"SELECTED")
- +27 ;PRCA*4.5*432 Add CHAMPVA
- SET Z0=Z0_$JUSTIFY("",38-$LENGTH(Z0))_"MEDICAL/PHARMACY/TRICARE/CHAMPVA: "_$SELECT(RCTYPE="M":"MEDICAL",RCTYPE="P":"PHARMACY",RCTYPE="T":"TRICARE",RCTYPE="C":"CHAMPVA",1:"ALL")
- +28 ; PRCA*4.5*326 End modified code block
- +29 SET HCNT=HCNT+1
- SET RCHDR(HCNT)=Z0
- +30 IF RCINS="A"
- SET HCNT=HCNT+1
- SET RCHDR(HCNT)=""
- +31 ;
- +32 SET Y="PATIENT NAME SSN BILL#"
- SET HCNT=HCNT+1
- SET RCHDR(HCNT)=Y
- +33 SET Y="INS CO NAME BALANCE AMT BILLED AMT PAID"
- SET HCNT=HCNT+1
- SET RCHDR(HCNT)=Y
- +34 SET Y=" TRACE# ERA PD AMT REC'D DT POST"
- SET HCNT=HCNT+1
- SET RCHDR(HCNT)=Y
- +35 SET RCHDR(0)=HCNT
- +36 QUIT
- +37 ;
- +38 ; extrinsic variable, name for header PRCA*4.5*298
- HDRNM() QUIT "EDI LOCKBOX ACTIVE BILLS W/EEOB REPORT"