- BARRPAY ; IHS/SD/PKD - TOP PAYERS REPORT ; 07/2/2010
- ;;1.8;IHS ACCOUNTS RECEIVABLE;**19,23,24**;OCT 26, 2005;Build 69
- ; New Reports - Top Payers - PKD
- ; IHS/SD/POTT 03/13ADDED NEW VA billing -BAR*1.8*23
- ; IHS/SD/POTT 07/13 ADDED SUPPORT FOR ICD-10 -BAR*1.8*23
- ; IHS/SD/POTT HEAT143222 01/14 FIX USER EXIT AFTER D MOREQ - BAR*1.8*24
- Q
- ; *******************************
- ;
- EN ; EP
- K BARY,BAR,PKD
- D:'$D(BARUSR) INIT^BARUTL ;Setup basic A/R variables
- S BARP("RTN")="BARRPAY" ; Routine used to get data
- S BAR("LOC")="BILLING" ; Financial Reports - verify w/ Adrian/Gina -pkd
- D ^BARRSEL ; Select exclusion parameters
- I $D(DTOUT)!$D(DUOUT)!$D(DIROUT) Q
- D MOREQ ; Additional Questions: Sort by; include CXL's; how many to top payers
- I $D(DTOUT)!$D(DUOUT)!$D(DIROUT) Q ;HEAT143222 BAR*1.8*24
- ;
- HD S BAR("HD",0)=BARMENU
- D ^BARRHD ; Report header
- ; Add additional Selection Criteria to the Headers
- I $D(BARY("DX"))!$D(BARY("DX9"))!$D(BARY("DX10")) D DX^BARRHD ;P.OTT -BAR*1.8*23
- ;
- I $D(BARY("CLIN")) D HDCLIN
- I $D(BARY("APPR")) D HDAPPR
- I $D(BARY("ADJTYP")) D HDRADJ
- D HDRSORT
- N SORT,SORTNM,SUBNM,T,TMP,TRIEN,VISITLOC,COUNT,ADJTYP
- S BARQ("RC")="COMPUTE^BARRPAY" ; Compute routine
- S BARQ("RP")="PRINT^BARRPAY2" ; Print routine
- S BARQ("NS")="BAR" ; Namespace for variables
- S BARQ("RX")="POUT^BARRUTL" ; Clean-up routine
- K ^TMP($J,"BAR-PAY"), ^TMP($J,"BAR-PAYS"), ^TMP($J,"BAR-PAYS1")
- D ^BARDBQUE ; Double queuing
- ;D PAZ^BARRUTL
- Q
- ;*************
- COMPUTE ;
- ;
- S BAR("SUBR")="BAR-PAY"
- K ^TMP($J,"BAR-PAY"),^TMP($J,"BAR-PAYS"),^TMP($J,"BAR-PAYS1")
- S COUNT=0 ; Total transactions counted
- I "VAX"[BARY("DT") D LOOP^BARRUTL,SHOWERR Q ;visit / approved / transmit date sort
- I BARY("DT")="T" D TRANS^BARRUTL,SHOWERR Q ; transaction date sort
- I BARY("DT")="B" D BATCHDT,SHOWERR Q ; batch date sort
- Q
- SHOWERR Q
- Q
- N BARTMP
- I $D(^TMP($J,"BAR-PAY","ERR")) D
- . W !,"List of rejected entries from PAY report #1"
- . S BARTMP=$NA(^TMP($J,"BAR-PAY","ERR"))
- . F S BARTMP=$Q(@BARTMP) Q:BARTMP="" Q:$QS(BARTMP,2)'="BAR-PAY" Q:$QS(BARTMP,3)'="ERR" D
- . . W !,BARTMP," = ",$G(@BARTMP)
- ;
- I $D(^TMP($J,"BAR-BAR-PAY")) D
- . W !,"List of rejected entries from PAY report #2"
- . S BARTMP=$NA(^TMP($J,"BAR-BAR-PAY","ERR"))
- . F S BARTMP=$Q(@BARTMP) Q:BARTMP="" Q:$QS(BARTMP,2)'="BAR-BAR-PAY" D
- . . W !,BARTMP," = ",$G(@BARTMP)
- Q
- BATCHDT ; Sort by Collection Batch Date, get transactions
- S BARP("DT")=BARY("DT",1)-.5
- F S BARP("DT")=$O(^BARCOL(DUZ(2),"C",BARP("DT"))) Q:'BARP("DT")!(BARP("DT")>(BARY("DT",2)+.5)) D
- . S BARP("BATCH")=0 F S BARP("BATCH")=$O(^BARCOL(DUZ(2),"C",BARP("DT"),BARP("BATCH"))) Q:'BARP("BATCH") D
- . . I '$D(^BARTR(DUZ(2),"AD",BARP("BATCH"))) S ^TMP($J,"BAR-PAY","ERR","COL-BATCH",BARP("BATCH"))="NO TRIENS" Q
- . . S TRIEN="" F S TRIEN=$O(^BARTR(DUZ(2),"AD",BARP("BATCH"),TRIEN)) Q:TRIEN="" D
- . . . S BARTR=TRIEN D DATA
- Q
- ; ***************
- ;
- DATA ; EP
- ; "T" - transaction Date returns BARTR = BARTR IEN
- ; Called by BARRUTL if no parameters
- ; BAR - ^BARBL IEN
- S BARP("HIT")=0
- I BARY("DT")="T"!(BARY("DT")="B") D Q:'BARP("HIT")
- . N T S T=$P($G(^BARTR(DUZ(2),BARTR,1)),U) Q:'T
- . Q:T'=43&(T'=40) ; Adjustments and Payments only
- . S TRIEN=BARTR
- . S BAR=$P(^BARTR(DUZ(2),TRIEN,0),U,4) ; BAR = BILL IEN
- . Q:'BAR
- . S BARP("HIT")=1
- 1 S BARP("HIT")=0
- ; LOOP^BARRUTL returns the BILL NUMBER - need the TR-IEN to check parms
- D BILL^BARRCHK ; BARP("HIT")=1 if all selected parameters pass
- 4 Q:'BARP("HIT")
- 3 S BAR("3P LOC")=$$FIND3PB^BARUTL(DUZ(2),BAR)
- I BAR("3P LOC")="" D Q ; Bill not found 3PB
- . ;I DUZ=838 W " BILL NOT FND IN 3PB"
- S (BAR3PDUZ,VISITLOC)=$P(BAR("3P LOC"),",") ; Save VisitLoc for Sort
- S BAR3PIEN=$P(BAR("3P LOC"),",",2)
- ;
- S BARB3PB0=$G(^ABMDBILL(BAR3PDUZ,BAR3PIEN,0))
- S BARBSTAT=$P(BARB3PB0,U,4) ; Bill Status - X=Cancelled
- 2 I BARY("CXL")=0&(BARBSTAT="X") D Q ; No cancellations
- . ;I DUZ=838 W " THIS IS A CANECLLATION"
- S SORT(1)="NO ADDED SORT",SORT=BARY("BARSORTX") ; primary sort after LOC
- ;1:PROVIDER;2:CLINIC;3:APPROVING OFFICIAL;4:PRIMARY DIAGNOSIS;5:ADJUSTMENT TYPE;6:ALLOWANCE CATEGORY"
- I SORT=1 S SORT(1)=$P(BAR(1),U,13) ;PRV
- I SORT=2 S SORT(1)=$P(BAR(1),U,8) ;Clinic
- I SORT=3 S SORT(1)=$P($G(^BARBL(DUZ(2),BAR,2)),U,15) D ;APPRV OFCL
- . I SORT(1)="" S SORT(1)=0
- S BARP("HIT")=0
- TRIEN N TT,BARTEST,HIT,BARTRANC,PMTCRD,PAIDAMT
- I BARY("DT")'="T"&(BARY("DT")'="B") S TRIEN="" D Q
- . F S TRIEN=$O(^BARTR(DUZ(2),"AC",BAR,TRIEN)) Q:'TRIEN D TRCHK
- ;
- TRCHK S (PAIDAMT,PMTCRD)=0
- I '$D(^BARTR(DUZ(2),TRIEN)) D Q ; quit if no transaction
- . ;I DUZ=838 W " NO TRANSACTION"
- ;
- S BARTRANC=$P($G(^BARTR(DUZ(2),TRIEN,1)),U)
- Q:BARTRANC="" ;No amounts
- Q:BARTRANC'=40&(BARTRANC'=43)
- S BARTEST=$P($G(^BARTR(DUZ(2),TRIEN,1)),U,2) ; ADJ CAT
- Q:BARTEST=21!(BARTEST=22) ; Pending & Gen'l Info don't affect totals
- I BARTRANC=43 Q:BARTEST'=13&(BARTEST'=14) ; See Allowable Amt calc in ^BARBLCLC
- ; Only Co-Pays and Deductible Adjustments are included in Allowable Amount
- S ADJTYP=$P($G(^BARTR(DUZ(2),TRIEN,1)),U,3) ; ADJ TYPE
- I $G(BARY("ADJTYP"))]"" Q:ADJTYP'=BARY("ADJTYP") ; comment out unless they really want it. ****
- S HIT=0
- S BARPAYER=$P(^BARTR(DUZ(2),TRIEN,0),U,6)
- ;I DUZ=838 I BARPAYER'=BAR("I") D
- . W !,"*** PROBLEM: ACCNT# in ^BARTR(",DUZ(2),",",TRIEN," ->(",BARPAYER
- . W ") is different from ACCNT# in ^BARBL(",DUZ(2),",",BAR," ->(",BAR("I"),") WILL USE ",BAR("I")
- S BARPAYER=BAR("I")
- I BARPAYER="" D Q ; A/R ACCT aka PAYER
- . S ^TMP($J,"BAR-PAY","ERR","-NO PAYER",TRIEN)=""
- I $G(^BARAC(DUZ(2),BARPAYER,0))="" D Q
- . S ^TMP($J,"BAR-PAY","ERR","-NO BARAC ENTRY",TRIEN,BARAC)=""
- S BARAC=+$P(^BARAC(DUZ(2),BARPAYER,0),U) ;
- I $P(^BARAC(DUZ(2),BARPAYER,0),";",2)'["AUTNINS" Q ; Quit if Payer is not Insurance Co
- ;S BARPYALL=$P(^AUTNINS(BARAC,2),U) ; ALLOWANCE OLD PTR
- S D0=BARPAYER ;S D0=BARAC
- S BARPYALL=$$VALI^BARVPM(8) ;GETS FLD # .211 P.OTT
- S BAR("ALL")=BARPYALL ;
- I $D(BARY("ALL")) Q:BARY("ALL","CODES")'[BAR("ALL")_" " ; ALLOWANCE CAT
- S BARPYNM=$P(^AUTNINS(BARAC,0),U) ;NAME
- S T=$G(^BARTR(DUZ(2),TRIEN,0))
- I BARTRANC=40 S PAIDAMT=$P(T,U,2)
- I BARTRANC=43 S PMTCRD=$P(T,"^",2)-$P(T,"^",3) ; aka ALLOWANCE AMOUNT
- ; Add credits / deduct debits for adjustments
- S TMP=$G(^TMP($J,"BAR-PAY","ARACT",VISITLOC,BARPAYER))
- D SETSORT
- S ^TMP($J,"BAR-PAY","ARACT",VISITLOC,BARPAYER)=TMP
- I SORT(1)'="" D
- . S X=BARY("BARSORTX")
- . S BARTAG=$S(X=1:"PRV",X=2:"CLIN",X=3:"CSHR",X=4:"DX",X=5:"ADJTY",X=6:"ALLOWCAT",1:"NOSORT")
- . I BARTAG="NOSORT" S SORT(1)=BARTAG,SORTNM=" "
- . E D @BARTAG
- . S TMP=$G(^TMP($J,"BAR-PAY",BARTAG,VISITLOC,SORT(1),BARPAYER))
- . D SETSORT
- . S ^TMP($J,"BAR-PAY",BARTAG,VISITLOC,SORT(1),BARPAYER)=TMP
- ; will re-sort before printing
- ;S ^TMP($J,"BAR-PAY",BAR)=""
- S COUNT=COUNT+1
- Q
- SETSORT ;
- S $P(TMP,U)=$P(TMP,U)+1 ; TRANSACTION COUNT
- S $P(TMP,U,2)=$P(TMP,U,2)+PAIDAMT ; AMOUNT PAID
- S $P(TMP,U,3)=$P(TMP,U,3)+PMTCRD ; ALLOWANCE AMT per TRANSACTION
- Q
- ; *******************************
- PRV ; Provider Name
- S SUBNM="PROVIDER: "
- S SORT=$P($G(BAR(1)),U,13)
- I SORT="" S SORT(1)="No Provider Listed" Q
- S SORT(1)=$P(^VA(200,SORT,0),U,1)
- Q
- ; . S BARTAG=$S(X=1:"PRV",X=2:"CLIN",X=3:"CSHR",X=4:"DX",X=5:"ADJTY",X=6:"ALLOWCAT",1:"NOSORT")
- CLIN ; Visit Location Name
- S SUBNM="CLINIC: "
- S SORT=$P(BAR(1),U,12)
- I SORT="" S SORT=DUZ(2) ; If not a satellite, use the Parent Location as
- S SORT(1)=$P(^DIC(40.7,SORT,0),U,1)
- Q
- CSHR ;
- S SUBNM="APPROVING OFFICIAL: "
- ; not finding it in ^BARBL(DUZ(2),BILLIEN,2) so
- ; looking ^ABMDBILL(DUZ(2),3PBIEN,1)
- ; S SORT=$P($G(BAR(2)),U,15)
- S SORT=$P($G(^ABMDBILL(BAR3PDUZ,BAR3PIEN,1)),U,4)
- I SORT="" S SORT(1)="No Approving Official" Q
- S SORT(1)=$P(^VA(200,SORT,0),U,1)
- Q
- DX ; ^ICD9(547,0)=202.04^LC^NODULAR LYMPHOMA AXILLA^^17^^^^
- S SUBNM="Primary DX: "
- S SORT=BAR("DX",1)_" " ; set in ^BARRCHK
- I BAR("DX",1)="No DX" S SORT(1)="No DX entered" Q
- I BAR("DX",1)=" " S SORT(1)="No DX entered" Q ;3/12/2014
- S SORT=$O(^ICD9("AB",SORT,"")) ; get IEN
- S SORT(1)=BAR("DX",1)_" "_$P(^ICD9(SORT,0),U,3)
- Q
- ADJTY ;
- S SUBNM=("ADJUSTMENT TYPE: ")
- I BARTRANC=40 S SORT(1)="Payment, not Adjustment" Q
- S SORT=$G(ADJTYP) I ADJTYP="" S SORT(1)="No Adj Type" Q
- S SORT(1)=$P(^BARTBL(SORT,0),U)
- Q
- ALLOWCAT ;
- S SUBNM="ALLOWANCE CATEGORY: "
- S SORT=BARALL(BARPYALL) ; Allowance Category (set in tag: MOREQ)
- S SORT(1)=SORT ;
- Q
- NOSORT ;
- S SORT(1)="",SUBNM=" "
- Q
- ; *************************************
- MOREQ ; Additional Questions
- ; Set-up Allowance Code Grid
- K BARALL ;P.OTT
- F X="R","MH","MD","MC","MMC" S BARALL(X)="MEDICARE (INS TYPES R MH MD MC MMC)"
- F X="D","K","FPL" S BARALL(X)="MEDICAID (INS TYPES D K FPL)"
- F X="P","H","F","M" S BARALL(X)="PRIVATE INSURANCE (INS TYPES P H F M)"
- F X="W","C","N","I","G","T","SEP","TSI" S BARALL(X)="OTHER (INS TYPES W C N I G T SEP TSI)"
- F X="V" S BARALL(X)="VETERANS (INS TYPES V)"
- ; Select Sort from all available parameters
- I $D(BARY("ALL")) D ; Get the ALLOWANCE CATEGORIES to include
- . N ALL
- . S ALL=$P(BARY("ALL","NM"),"(INS TYPES ",2)
- . S BARY("ALL","CODES")=$E(ALL,1,$L(ALL)-1)_" "
- K DIR
- S DIR(0)="SO^1:PROVIDER;2:CLINIC;3:APPROVING OFFICIAL;4:PRIMARY DIAGNOSIS;5:ADJUSTMENT TYPE;6:ALLOWANCE CATEGORY"
- S DIR("A")="Select a * SORT * Field"
- S DIR("?")="The report can be sorted by one of the listed parameters."
- D ^DIR Q:Y="^"
- K DIR
- I $E(X)="^" S BARDONE=1 Q
- S BARY("BARSORTX")=+Y
- I $D(DTOUT)!($D(DUOUT)) S BARDONE2=1 Q
- D DISP^BARRSEL
- W !!,"SORT PARAMETER in Effect for Top Payer Report: "
- S BARSORTR=$P($T(SORTEXT),":",BARY("BARSORTX")+2) W BARSORTR
- SORTEXT ;;:No Sort Selected:PROVIDER:CLINIC:APPROVING OFFICIAL:PRIMARY DIAGNOSIS:ADJUSTMENT TYPE:ALLOWANCE CATEGORY
- NMBR ; Number of entries to print
- W ! K DIR
- S DIR("A")="Select number of entries to display"
- S DIR("B")=5 ; Default to Top 5
- S DIR(0)="LO^1:100"
- D ^DIR
- Q:$D(DTOUT)!($D(DUOUT))!(Y<1)
- S BAR("NBR TO PRINT")=+Y
- ASKCXL ;
- W !
- K DIR
- S DIR("A")="Do you wish to include cancelled bills in your count? YES/NO"
- S DIR("B")="YES"
- S DIR(0)="Y"
- D ^DIR
- K DIR
- Q:($D(DUOUT)!$D(DTOUT))
- S BARY("CXL")=Y ; Quit parameter
- Q
- ADJTYP ; from ^BARRSEL
- S DIR(0)="SO^13:Deductible Adjustments;14:Co-Pays"
- S DIR("A")="Select ONE of the above INCLUSION PARAMETERS"
- D ^DIR
- I $D(DTOUT)!$D(DUOUT)!$D(DIRUT)!(Y="") Q
- S BARY("ADJTYP")=Y
- Q
- ;
- HDCLIN ; If clinic selected, add to HDR to print
- S BAR("CONJ")="at Clinic "
- S BAR("TXT")=BARY("CLIN","NM")
- D CHK^BARRHD
- Q
- HDAPPR ;
- ; Approving Official (ie cashier)
- S BAR("CONJ")="Approving Official "
- S BAR("TXT")=BARY("APPR","NM")
- D CHK^BARRHD
- Q
- HDRADJ ; If Adj selected, add to HDR to print
- S BAR("CONJ")="Adjustment: "
- S BAR("TXT")=$P(^BAR(90052.01,BARY("ADJTYP"),0),U)
- D CHK^BARRHD
- Q
- HDRSORT ; Add Sort selected to HEADERS
- S BAR("CONJ")="Sort by: "
- S BAR("TXT")=BARSORTR
- D CHK^BARRHD
- Q