[613] | 1 | RCBMILLC ;WISC/RFJ-millennium bill (calculations top routine) ;27 Jun 2001 11:10 AM
|
---|
| 2 | ;;4.5;Accounts Receivable;**170,174**;Mar 20, 1995
|
---|
| 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
| 4 | Q
|
---|
| 5 | ;
|
---|
| 6 | ;
|
---|
| 7 | BILLFUND(RCBILLDA,RCDATEND) ; for a bill up to a given date,
|
---|
| 8 | ; calculate the amount that should be paid to MCCF and HSIF
|
---|
| 9 | ; returns:
|
---|
| 10 | ; tmp("rcbmilldata",$j,rcbillda,rctranda) = transaction type (P I D)
|
---|
| 11 | ; piece 2 = principal amt of transaction
|
---|
| 12 | ; piece 3 = amount owed to mccf
|
---|
| 13 | ; piece 4 = amount owed to hsif
|
---|
| 14 | ; piece 5 = for payment, amount already paid to mccf
|
---|
| 15 | ; piece 6 = for payment, amount already paid to hsif
|
---|
| 16 | ;
|
---|
| 17 | ; returns amt owed to mccf for bill
|
---|
| 18 | ; amt owed to hsif for bill
|
---|
| 19 | ; amt paid to mccf for bill
|
---|
| 20 | ; amt paid to hsif for bill
|
---|
| 21 | ;
|
---|
| 22 | N AMTPAID,AMTOHSIF,AMTOMCCF,CHARGES,PRINCPAL,RCBALANC,RCCHARGE,RCDATA1,RCEFFDAT,RCTOHSIF,RCTOMCCF,RCTOTAL,RCTRANDA,RCVALUE
|
---|
| 23 | K ^TMP($J,"RCBMILLDATA",RCBILLDA)
|
---|
| 24 | ;
|
---|
| 25 | I '$G(RCDATEND) N RCDATEND S RCDATEND=9999999
|
---|
| 26 | ;
|
---|
| 27 | ; this is the effective date for splitting the dollars
|
---|
| 28 | ; should be in the form 3020204 for feb 4, 2002
|
---|
| 29 | S RCEFFDAT=3020204
|
---|
| 30 | ;
|
---|
| 31 | ; this is the standard charge amount. the total increase or
|
---|
| 32 | ; decrease adjustment must be evenly divisable by this amount
|
---|
| 33 | ; for splitting into separate funds
|
---|
| 34 | S RCCHARGE=7
|
---|
| 35 | ;
|
---|
| 36 | ; this is the amount of RCCHARGE that goes to mccf and hsif
|
---|
| 37 | S RCTOMCCF=2
|
---|
| 38 | S RCTOHSIF=RCCHARGE-RCTOMCCF
|
---|
| 39 | ;
|
---|
| 40 | ; initialize the amounts owed to mccf and hsif for a bill
|
---|
| 41 | ; these variables are returned with the quit at the end
|
---|
| 42 | S RCTOTAL("OWED TO MCCF")=0
|
---|
| 43 | S RCTOTAL("OWED TO HSIF")=0
|
---|
| 44 | S RCTOTAL("PAID TO MCCF")=0
|
---|
| 45 | S RCTOTAL("PAID TO HSIF")=0
|
---|
| 46 | ;
|
---|
| 47 | ; initialize running balance, used internally to track amounts
|
---|
| 48 | S RCBALANC("MCCF AFTER EFF DATE")=0
|
---|
| 49 | ;
|
---|
| 50 | ; if it is an old bill that has an orignal amt, set it up
|
---|
| 51 | S RCBALANC("MCCF BEFORE EFF DATE")=0
|
---|
| 52 | S RCBALANC("HSIF")=0
|
---|
| 53 | I $P($G(^PRCA(430,RCBILLDA,0)),"^",3) D
|
---|
| 54 | . S RCVALUE=$P(^PRCA(430,RCBILLDA,0),"^",3)
|
---|
| 55 | . S AMTOMCCF("BEFORE EFF DATE")=RCVALUE
|
---|
| 56 | . S AMTOMCCF("AFTER EFF DATE")=0
|
---|
| 57 | . S RCTRANDA=0
|
---|
| 58 | . D SETTEMP^RCBMILLD("I*",RCVALUE,.AMTOMCCF,0)
|
---|
| 59 | ;
|
---|
| 60 | S RCTRANDA=0 F S RCTRANDA=$O(^PRCA(433,"C",RCBILLDA,RCTRANDA)) Q:'RCTRANDA D
|
---|
| 61 | . ;
|
---|
| 62 | . ; make sure the transaction is before the ending date
|
---|
| 63 | . S RCDATA1=$G(^PRCA(433,RCTRANDA,1))
|
---|
| 64 | . I $P(RCDATA1,"^",9)>RCDATEND Q
|
---|
| 65 | . ;
|
---|
| 66 | . ; get the principal of the transaction, this call
|
---|
| 67 | . ; also verifies this is a valid "complete" transaction
|
---|
| 68 | . S RCVALUE=$$TRANBAL^RCRJRCOT(RCTRANDA)
|
---|
| 69 | . ; if no principal, quit
|
---|
| 70 | . I '$P(RCVALUE,"^") Q
|
---|
| 71 | . ;
|
---|
| 72 | . ;
|
---|
| 73 | . ; * * * I N C R E A S E * * *
|
---|
| 74 | . I $P(RCDATA1,"^",2)=1 D Q
|
---|
| 75 | . . ; the date of the transaction must be after the effective
|
---|
| 76 | . . ; date or all of the principal goes to mccf
|
---|
| 77 | . . I $P(RCDATA1,"^",9)<RCEFFDAT D Q
|
---|
| 78 | . . . S AMTOMCCF("BEFORE EFF DATE")=$P(RCVALUE,"^")
|
---|
| 79 | . . . S AMTOMCCF("AFTER EFF DATE")=0
|
---|
| 80 | . . . D SETTEMP^RCBMILLD("I*",$P(RCVALUE,"^"),.AMTOMCCF,0)
|
---|
| 81 | . . ;
|
---|
| 82 | . . ; the principal amount has to be evenly divisable by [the standard
|
---|
| 83 | . . ; charge: in rccharge]. if not all principal goes to mccf
|
---|
| 84 | . . I $P(RCVALUE,"^")#RCCHARGE'=0 D Q
|
---|
| 85 | . . . S AMTOMCCF("BEFORE EFF DATE")=$P(RCVALUE,"^")
|
---|
| 86 | . . . S AMTOMCCF("AFTER EFF DATE")=0
|
---|
| 87 | . . . D SETTEMP^RCBMILLD("I*",$P(RCVALUE,"^"),.AMTOMCCF,0)
|
---|
| 88 | . . ;
|
---|
| 89 | . . ; after the effective date
|
---|
| 90 | . . S AMTOMCCF("BEFORE EFF DATE")=0
|
---|
| 91 | . . ;
|
---|
| 92 | . . ; the amount to MCCF is the number of times [the standard charge:
|
---|
| 93 | . . ; in rccharge] goes into the principal, multiplied by the amount
|
---|
| 94 | . . ; that goes to mccf: in rctomccf
|
---|
| 95 | . . S AMTOMCCF("AFTER EFF DATE")=($P(RCVALUE,"^")/RCCHARGE)*RCTOMCCF
|
---|
| 96 | . . ;
|
---|
| 97 | . . ; the amount to MCCF is the difference
|
---|
| 98 | . . S AMTOHSIF=$P(RCVALUE,"^")-AMTOMCCF("AFTER EFF DATE")
|
---|
| 99 | . . ;
|
---|
| 100 | . . D SETTEMP^RCBMILLD("I",$P(RCVALUE,"^"),.AMTOMCCF,AMTOHSIF)
|
---|
| 101 | . ;
|
---|
| 102 | . ;
|
---|
| 103 | . ; * * * D E C R E A S E * * *
|
---|
| 104 | . I $P(RCDATA1,"^",2)=35 D Q
|
---|
| 105 | . . ; the date of the transaction must be after the effective
|
---|
| 106 | . . ; date or all of the principal comes from mccf
|
---|
| 107 | . . I $P(RCDATA1,"^",9)<RCEFFDAT D Q
|
---|
| 108 | . . . S AMTOMCCF("BEFORE EFF DATE")=-$P(RCVALUE,"^")
|
---|
| 109 | . . . S AMTOMCCF("AFTER EFF DATE")=0
|
---|
| 110 | . . . D SETTEMP^RCBMILLD("D*",-$P(RCVALUE,"^"),.AMTOMCCF,0)
|
---|
| 111 | . . ;
|
---|
| 112 | . . ; calculate the number of copayment charges that make up
|
---|
| 113 | . . ; the principal. this number is used to calculate the
|
---|
| 114 | . . ; dollars to hsif
|
---|
| 115 | . . S CHARGES=$P(RCVALUE,"^")\RCCHARGE
|
---|
| 116 | . . ;
|
---|
| 117 | . . ; calculate the amount that should go to hsif
|
---|
| 118 | . . S AMTOHSIF=+$J(CHARGES*RCTOHSIF,0,2)
|
---|
| 119 | . . ;
|
---|
| 120 | . . ; remainder goes to mccf
|
---|
| 121 | . . S AMTOMCCF=$P(RCVALUE,"^")-AMTOHSIF
|
---|
| 122 | . . ;
|
---|
| 123 | . . ; if the amount coming from hsif exceeds the amount owed to hsif,
|
---|
| 124 | . . ; move it to mccf
|
---|
| 125 | . . I AMTOHSIF>RCBALANC("HSIF") S AMTOHSIF=RCBALANC("HSIF"),AMTOMCCF=$P(RCVALUE,"^")-AMTOHSIF
|
---|
| 126 | . . ;
|
---|
| 127 | . . ; if the amount to mccf exceeds amount owed to mccf,
|
---|
| 128 | . . ; move more to hsif
|
---|
| 129 | . . I AMTOMCCF>(RCBALANC("MCCF AFTER EFF DATE")+RCBALANC("MCCF BEFORE EFF DATE")) D
|
---|
| 130 | . . . S AMTOMCCF=RCBALANC("MCCF AFTER EFF DATE")+RCBALANC("MCCF BEFORE EFF DATE")
|
---|
| 131 | . . . S AMTOHSIF=$P(RCVALUE,"^")-AMTOMCCF
|
---|
| 132 | . . ;
|
---|
| 133 | . . ; split the amount before and after effective date,
|
---|
| 134 | . . ; default is allocate all to after effective date
|
---|
| 135 | . . S AMTOMCCF("AFTER EFF DATE")=AMTOMCCF
|
---|
| 136 | . . S AMTOMCCF("BEFORE EFF DATE")=0
|
---|
| 137 | . . ;
|
---|
| 138 | . . ; if the amount to mccf after the effective date exceeds the amount owed to mccf after the
|
---|
| 139 | . . ; effective date, place more in mccf before the effective date
|
---|
| 140 | . . I AMTOMCCF("AFTER EFF DATE")>RCBALANC("MCCF AFTER EFF DATE") D
|
---|
| 141 | . . . S AMTOMCCF("BEFORE EFF DATE")=AMTOMCCF("AFTER EFF DATE")-RCBALANC("MCCF AFTER EFF DATE")
|
---|
| 142 | . . . S AMTOMCCF("AFTER EFF DATE")=RCBALANC("MCCF AFTER EFF DATE")
|
---|
| 143 | . . ;
|
---|
| 144 | . . ; make amounts negative for decrease
|
---|
| 145 | . . S AMTOMCCF("BEFORE EFF DATE")=-AMTOMCCF("BEFORE EFF DATE")
|
---|
| 146 | . . S AMTOMCCF("AFTER EFF DATE")=-AMTOMCCF("AFTER EFF DATE")
|
---|
| 147 | . . ;
|
---|
| 148 | . . D SETTEMP^RCBMILLD("D",-$P(RCVALUE,"^"),.AMTOMCCF,-AMTOHSIF)
|
---|
| 149 | . ;
|
---|
| 150 | . ;
|
---|
| 151 | . ; * * * P A Y M E N T S * * *
|
---|
| 152 | . ; if it is a payment transaction, get the amount
|
---|
| 153 | . ; already paid to the funds
|
---|
| 154 | . I $P(RCDATA1,"^",2)=2!($P(RCDATA1,"^",2)=34) D Q
|
---|
| 155 | . . ; calculate the amount of this payment that should go to MCCF
|
---|
| 156 | . . ; for transactions created prior to the effective date
|
---|
| 157 | . . S AMTOMCCF("BEFORE EFF DATE")=RCBALANC("MCCF BEFORE EFF DATE")
|
---|
| 158 | . . I AMTOMCCF("BEFORE EFF DATE")>$P(RCVALUE,"^") S AMTOMCCF("BEFORE EFF DATE")=$P(RCVALUE,"^")
|
---|
| 159 | . . ;
|
---|
| 160 | . . ; recalculate principal remaining after the mandatory amount
|
---|
| 161 | . . ; is given to MCCF
|
---|
| 162 | . . S PRINCPAL=$P(RCVALUE,"^")-AMTOMCCF("BEFORE EFF DATE")
|
---|
| 163 | . . ;
|
---|
| 164 | . . ; calculate the number of copayment charges that make up
|
---|
| 165 | . . ; the principal remaining. this number is used to calculate the
|
---|
| 166 | . . ; dollars to hsif. calculate the remainder after the standard
|
---|
| 167 | . . ; charge is allocated to mccf and hsif.
|
---|
| 168 | . . S CHARGES=PRINCPAL\RCCHARGE
|
---|
| 169 | . . S PRINCPAL=PRINCPAL#RCCHARGE
|
---|
| 170 | . . ;
|
---|
| 171 | . . ; calculate the amount that should go to mccf
|
---|
| 172 | . . ; it is the number of standard charges times the
|
---|
| 173 | . . ; amount of each standard charge allocated to mccf
|
---|
| 174 | . . S AMTOMCCF("AFTER EFF DATE")=+$J(CHARGES*RCTOMCCF,0,2)
|
---|
| 175 | . . ;
|
---|
| 176 | . . ; if the remainder is less than the standard charge
|
---|
| 177 | . . ; allocated to mccf, add it also
|
---|
| 178 | . . I PRINCPAL<RCTOMCCF S AMTOMCCF("AFTER EFF DATE")=AMTOMCCF("AFTER EFF DATE")+PRINCPAL
|
---|
| 179 | . . ;
|
---|
| 180 | . . ; if the remainder is more than the standard charge
|
---|
| 181 | . . ; allocated to mccf, add one more standard charge to
|
---|
| 182 | . . ; mccf and give the rest to hsif
|
---|
| 183 | . . I PRINCPAL>RCTOMCCF S AMTOMCCF("AFTER EFF DATE")=AMTOMCCF("AFTER EFF DATE")+RCTOMCCF
|
---|
| 184 | . . ;
|
---|
| 185 | . . ; if the amount to mccf exceeds the amount owed to mccf,
|
---|
| 186 | . . ; place more in hsif
|
---|
| 187 | . . I AMTOMCCF("AFTER EFF DATE")>RCBALANC("MCCF AFTER EFF DATE") D
|
---|
| 188 | . . . S AMTOMCCF("AFTER EFF DATE")=RCBALANC("MCCF AFTER EFF DATE")
|
---|
| 189 | . . ;
|
---|
| 190 | . . ; balance of payment goes to hsif
|
---|
| 191 | . . S AMTOHSIF=$P(RCVALUE,"^")-AMTOMCCF("BEFORE EFF DATE")-AMTOMCCF("AFTER EFF DATE")
|
---|
| 192 | . . ;
|
---|
| 193 | . . ; get the amount paid to the funds
|
---|
| 194 | . . S AMTPAID=$G(^PRCA(433,RCTRANDA,9))
|
---|
| 195 | . . ;
|
---|
| 196 | . . ; make amounts negative for payment
|
---|
| 197 | . . S AMTOMCCF("BEFORE EFF DATE")=-AMTOMCCF("BEFORE EFF DATE")
|
---|
| 198 | . . S AMTOMCCF("AFTER EFF DATE")=-AMTOMCCF("AFTER EFF DATE")
|
---|
| 199 | . . ;
|
---|
| 200 | . . D SETTEMP^RCBMILLD("P",-$P(RCVALUE,"^"),.AMTOMCCF,-AMTOHSIF,$P(AMTPAID,"^"),$P(AMTPAID,"^",2))
|
---|
| 201 | . ;
|
---|
| 202 | . ;
|
---|
| 203 | . ; * * * R E E S T A B L I S H * * *
|
---|
| 204 | . ; if it is a restablish transaction, add the amount to mccf
|
---|
| 205 | . I $P(RCDATA1,"^",2)=43 D Q
|
---|
| 206 | . . S AMTOMCCF("BEFORE EFF DATE")=$P(RCVALUE,"^")
|
---|
| 207 | . . S AMTOMCCF("AFTER EFF DATE")=0
|
---|
| 208 | . . D SETTEMP^RCBMILLD("R",$P(RCVALUE,"^"),.AMTOMCCF,0)
|
---|
| 209 | ;
|
---|
| 210 | Q RCTOTAL("OWED TO MCCF")_"^"_RCTOTAL("OWED TO HSIF")_"^"_RCTOTAL("PAID TO MCCF")_"^"_RCTOTAL("PAID TO HSIF")
|
---|