[613] | 1 | RCBDFST1 ;WISC/RFJ-patient statement utilities continued ;1 Dec 00
|
---|
| 2 | ;;4.5;Accounts Receivable;**162**;Mar 20, 1995
|
---|
| 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
| 4 | Q
|
---|
| 5 | ;
|
---|
| 6 | ;
|
---|
| 7 | CHEKACCT(RCDEBTDA) ; check to see if a debtor is in balance
|
---|
| 8 | ; returns null if in balance, or the calculated statement
|
---|
| 9 | ; if out of balance
|
---|
| 10 | ; returns rcbilbal,rcevent,rcnewact,rcstate,rclastev
|
---|
| 11 | ; returns ^tmp("rcbdfst1",$j ... (see NEWTRANS below)
|
---|
| 12 | ;
|
---|
| 13 | N %,DATA1,OUTOFBAL
|
---|
| 14 | ; get the current balance of all active bills
|
---|
| 15 | D BILLBAL(RCDEBTDA)
|
---|
| 16 | ; get the last statement, rclastev=ien file 341 ^ statement date
|
---|
| 17 | S RCLASTEV=$$LASTEVNT(RCDEBTDA)
|
---|
| 18 | I RCLASTEV L +^RC(341,+RCLASTEV)
|
---|
| 19 | ; get the last statement balance
|
---|
| 20 | D EVENTBAL(+RCLASTEV)
|
---|
| 21 | ; get new activity after the statement date
|
---|
| 22 | D NEWTRANS(RCDEBTDA,$P(RCLASTEV,"^",2),9999999)
|
---|
| 23 | ; test for out of balance
|
---|
| 24 | ; out of balance if the statement balance +/- new activity
|
---|
| 25 | ; does not equal the current bill balance
|
---|
| 26 | S OUTOFBAL=""
|
---|
| 27 | F %="PB","IN","AD","MF","CC" D
|
---|
| 28 | . ; copy current statement to rcstate, rcstate used to track
|
---|
| 29 | . ; what the statement balance should be
|
---|
| 30 | . S RCSTATE(%)=RCEVENT(%)
|
---|
| 31 | . I RCEVENT(%)+RCNEWACT(%)=RCBILBAL(%) Q
|
---|
| 32 | . S OUTOFBAL=1
|
---|
| 33 | . S RCSTATE(%)=RCBILBAL(%)-RCNEWACT(%)
|
---|
| 34 | ; compute calculated statement total
|
---|
| 35 | S RCSTATE=0
|
---|
| 36 | F %="PB","IN","AD","MF","CC" S RCSTATE=RCSTATE+RCSTATE(%)
|
---|
| 37 | ;
|
---|
| 38 | I OUTOFBAL S OUTOFBAL=RCSTATE("PB")_"^"_RCSTATE("IN")_"^"_RCSTATE("AD")_"^"_RCSTATE("CC")_"^"_RCSTATE("MF")
|
---|
| 39 | ;
|
---|
| 40 | L -^RC(341,+RCLASTEV)
|
---|
| 41 | Q OUTOFBAL
|
---|
| 42 | ;
|
---|
| 43 | ;
|
---|
| 44 | BILLBAL(DEBTDA) ; get the bill balances for a debtor
|
---|
| 45 | ; returns array RCBILBAL("PB")=principal balance
|
---|
| 46 | ; RCBILBAL("IN")=interest balance
|
---|
| 47 | ; RCBILBAL("AD")=admin balance
|
---|
| 48 | ; RCBILBAL("MF")=marshal fee balance
|
---|
| 49 | ; RCBILBAL("CC")=court cost balance
|
---|
| 50 | ; RCBILBAL =total balance
|
---|
| 51 | N %,BILLDA,DATA7,STATUS
|
---|
| 52 | ; initialize
|
---|
| 53 | S RCBILBAL=0
|
---|
| 54 | F %="PB","IN","AD","MF","CC" S RCBILBAL(%)=0
|
---|
| 55 | ;
|
---|
| 56 | ; for active, open, and refund review (for prepayments),
|
---|
| 57 | ; calc bill balance
|
---|
| 58 | F STATUS=16,42,44 S BILLDA=0 F S BILLDA=$O(^PRCA(430,"AS",DEBTDA,STATUS,BILLDA)) Q:'BILLDA D
|
---|
| 59 | . S DATA7=$P($G(^PRCA(430,BILLDA,7)),"^",1,5)
|
---|
| 60 | . ; if prepayment, subtract it from active bills principal balance
|
---|
| 61 | . I $P($G(^PRCA(430,BILLDA,0)),"^",2)=26 S RCBILBAL("PB")=RCBILBAL("PB")-$P(DATA7,"^") Q
|
---|
| 62 | . ; add balances
|
---|
| 63 | . S RCBILBAL("PB")=RCBILBAL("PB")+$P(DATA7,"^") ;principal
|
---|
| 64 | . S RCBILBAL("IN")=RCBILBAL("IN")+$P(DATA7,"^",2) ;interest
|
---|
| 65 | . S RCBILBAL("AD")=RCBILBAL("AD")+$P(DATA7,"^",3) ;admin
|
---|
| 66 | . S RCBILBAL("MF")=RCBILBAL("MF")+$P(DATA7,"^",4) ;marshal fee
|
---|
| 67 | . S RCBILBAL("CC")=RCBILBAL("CC")+$P(DATA7,"^",5) ;court cost
|
---|
| 68 | ;
|
---|
| 69 | ; compute total
|
---|
| 70 | F %="PB","IN","AD","MF","CC" S RCBILBAL=RCBILBAL+RCBILBAL(%)
|
---|
| 71 | Q
|
---|
| 72 | ;
|
---|
| 73 | ;
|
---|
| 74 | NEWTRANS(DEBTDA,BEGDATE,ENDDATE) ; get new transaction activity between dates
|
---|
| 75 | ; returns global array
|
---|
| 76 | ; tmp("rcbdfst1",$j,account,transactiondate,bill,transaction)=value
|
---|
| 77 | ; where
|
---|
| 78 | ; value = ^ prin ^ int ^ admin ^ mf ^ cc
|
---|
| 79 | ;
|
---|
| 80 | N %,BILLDA,DATE,ORIGAMT,STATUS,TRANDA,VALUE
|
---|
| 81 | ; initialize
|
---|
| 82 | S RCNEWACT=0
|
---|
| 83 | F %="PB","IN","AD","MF","CC" S RCNEWACT(%)=0
|
---|
| 84 | K ^TMP("RCBDFST1",$J,DEBTDA)
|
---|
| 85 | ;
|
---|
| 86 | ; get new bills
|
---|
| 87 | S DATE=BEGDATE F S DATE=$O(^PRCA(430,"ATD",DEBTDA,DATE)) Q:'DATE!(DATE>ENDDATE) D
|
---|
| 88 | . S BILLDA=0 F S BILLDA=$O(^PRCA(430,"ATD",DEBTDA,DATE,BILLDA)) Q:'BILLDA D
|
---|
| 89 | . . S ORIGAMT=$P($G(^PRCA(430,BILLDA,0)),"^",3)
|
---|
| 90 | . . S ^TMP("RCBDFST1",$J,DEBTDA,DATE,BILLDA,0)=ORIGAMT
|
---|
| 91 | . . S RCNEWACT("PB")=RCNEWACT("PB")+ORIGAMT
|
---|
| 92 | ;
|
---|
| 93 | ; get transactions
|
---|
| 94 | S DATE=BEGDATE F S DATE=$O(^PRCA(433,"ATD",DEBTDA,DATE)) Q:'DATE!(DATE>ENDDATE) D
|
---|
| 95 | . S TRANDA=0 F S TRANDA=$O(^PRCA(433,"ATD",DEBTDA,DATE,TRANDA)) Q:'TRANDA D
|
---|
| 96 | . . ; if not a valid transaction, do not include it
|
---|
| 97 | . . I '$$VALID^RCRJRCOT(TRANDA) Q
|
---|
| 98 | . . S BILLDA=+$P(^PRCA(433,TRANDA,0),"^",2)
|
---|
| 99 | . . ; get the transaction value
|
---|
| 100 | . . S VALUE=$$TRANVALU^RCDPBTLM(TRANDA)
|
---|
| 101 | . . ; transaction has no value
|
---|
| 102 | . . I $TR(VALUE,"^0")="" Q
|
---|
| 103 | . . ; for patient statements, if the bill is a prepayment(26),
|
---|
| 104 | . . ; change the sign
|
---|
| 105 | . . I $P($G(^PRCA(430,BILLDA,0)),"^",2)=26 F %=2:1:6 S $P(VALUE,"^",%)=-$P(VALUE,"^",%)
|
---|
| 106 | . . S ^TMP("RCBDFST1",$J,DEBTDA,DATE,BILLDA,TRANDA)=VALUE
|
---|
| 107 | . . S RCNEWACT("PB")=RCNEWACT("PB")+$P(VALUE,"^",2)
|
---|
| 108 | . . S RCNEWACT("IN")=RCNEWACT("IN")+$P(VALUE,"^",3)
|
---|
| 109 | . . S RCNEWACT("AD")=RCNEWACT("AD")+$P(VALUE,"^",4)
|
---|
| 110 | . . S RCNEWACT("MF")=RCNEWACT("MF")+$P(VALUE,"^",5)
|
---|
| 111 | . . S RCNEWACT("CC")=RCNEWACT("CC")+$P(VALUE,"^",6)
|
---|
| 112 | ;
|
---|
| 113 | ; compute total
|
---|
| 114 | F %="PB","IN","AD","MF","CC" S RCNEWACT=RCNEWACT+RCNEWACT(%)
|
---|
| 115 | Q
|
---|
| 116 | ;
|
---|
| 117 | ;
|
---|
| 118 | LASTEVNT(DEBTDA) ; get last type of event for debtor patient statement (2)
|
---|
| 119 | N EVENTDA,REVDATE,TYPEDA
|
---|
| 120 | ; find the inverse date of the last statement, return 0 if none
|
---|
| 121 | S TYPEDA=+$O(^RC(341.1,"AC",2,0))
|
---|
| 122 | S REVDATE=+$O(^RC(341,"AD",DEBTDA,TYPEDA,0))
|
---|
| 123 | I 'REVDATE Q 0
|
---|
| 124 | ; find the internal entry number of the statement
|
---|
| 125 | S EVENTDA=+$O(^RC(341,"AD",DEBTDA,TYPEDA,REVDATE,0))
|
---|
| 126 | ; return the internal entry number ^ last statement date
|
---|
| 127 | Q EVENTDA_"^"_(9999999.999999-REVDATE)
|
---|
| 128 | ;
|
---|
| 129 | ;
|
---|
| 130 | EVENTBAL(EVENTDA) ; get the last statement balance
|
---|
| 131 | ; returns array RCEVENT("PB")=principal balance
|
---|
| 132 | ; RCEVENT("IN")=interest balance
|
---|
| 133 | ; RCEVENT("AD")=admin balance
|
---|
| 134 | ; RCEVENT("MF")=marshal fee balance
|
---|
| 135 | ; RCEVENT("CC")=court cost balance
|
---|
| 136 | ; RCEVENT =total balance
|
---|
| 137 | N %,DATA1
|
---|
| 138 | S DATA1=$G(^RC(341,EVENTDA,1))
|
---|
| 139 | S RCEVENT("PB")=$P(DATA1,"^",1) ;principal
|
---|
| 140 | S RCEVENT("IN")=$P(DATA1,"^",2) ;interest
|
---|
| 141 | S RCEVENT("AD")=$P(DATA1,"^",3) ;admin
|
---|
| 142 | S RCEVENT("CC")=$P(DATA1,"^",4) ;court cost
|
---|
| 143 | S RCEVENT("MF")=$P(DATA1,"^",5) ;marshal fee
|
---|
| 144 | ; compute total
|
---|
| 145 | S RCEVENT=0
|
---|
| 146 | F %="PB","IN","AD","MF","CC" S RCEVENT=RCEVENT+RCEVENT(%)
|
---|
| 147 | Q
|
---|