Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: BARRPAY

BARRPAY.m

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