| 1 | RCRJRCOB ;WISC/RFJ-calculate a bills balance ;1 Mar 97
 | 
|---|
| 2 |  ;;4.5;Accounts Receivable;**68,96,103,153,156**;Mar 20, 1995
 | 
|---|
| 3 |  ;;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 |  Q
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 | BILLBAL(BILLDA,DATEEND) ;  find bills balance on dateend
 | 
|---|
| 8 |  ;  returns principal ^ interest ^ admin ^ mf ^ cc
 | 
|---|
| 9 |  N ACTDATE,ADMIN,CC,DATA1,DATA7,INTEREST,LASTTRAN,MF,PRINBAL,TRANDA,TYPE,VALUE
 | 
|---|
| 10 |  ;
 | 
|---|
| 11 |  ;  bill activated after dateend
 | 
|---|
| 12 |  S ACTDATE=$P($P($G(^PRCA(430,BILLDA,6)),"^",21),".")
 | 
|---|
| 13 |  I 'ACTDATE!(ACTDATE>DATEEND) Q "^^^^"
 | 
|---|
| 14 |  ;
 | 
|---|
| 15 |  ;  this lock cannot fail and must be executed to prevent bill
 | 
|---|
| 16 |  ;  activity during the calculation of the bills balance
 | 
|---|
| 17 |  L +^PRCA(430,BILLDA)
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 |  ;  try and find last 433 transaction
 | 
|---|
| 20 |  S LASTTRAN=999999999999 F  S LASTTRAN=$O(^PRCA(433,"C",BILLDA,LASTTRAN),-1) Q:'LASTTRAN  S DATA1=$G(^PRCA(433,LASTTRAN,1)) I $P($P(DATA1,"^",9),".")'>DATEEND,$P(DATA1,"^",2)'=45 Q
 | 
|---|
| 21 |  ;
 | 
|---|
| 22 |  ;  there are no transactions in file 433
 | 
|---|
| 23 |  I 'LASTTRAN  D  G UNLOCK
 | 
|---|
| 24 |  .   S PRINBAL=+$P($G(^PRCA(430,BILLDA,0)),"^",3)
 | 
|---|
| 25 |  .   S (INTEREST,ADMIN,MF,CC)=0
 | 
|---|
| 26 |  ;
 | 
|---|
| 27 |  ;  the last transaction may not be in date order
 | 
|---|
| 28 |  S TRANDA=LASTTRAN F  S TRANDA=$O(^PRCA(433,"C",BILLDA,TRANDA)) Q:'TRANDA  I $P($P($G(^PRCA(433,TRANDA,1)),"^",9),".")'>DATEEND S LASTTRAN=TRANDA
 | 
|---|
| 29 |  ;
 | 
|---|
| 30 |  ;  the last transaction was during time period, use bill balance
 | 
|---|
| 31 |  I '$O(^PRCA(433,"C",BILLDA,LASTTRAN)) D  G UNLOCK
 | 
|---|
| 32 |  .   S DATA7=$G(^PRCA(430,BILLDA,7))
 | 
|---|
| 33 |  .   S PRINBAL=+$P(DATA7,"^")
 | 
|---|
| 34 |  .   S INTEREST=+$P(DATA7,"^",2)
 | 
|---|
| 35 |  .   S ADMIN=$P(DATA7,"^",3)
 | 
|---|
| 36 |  .   S MF=$P(DATA7,"^",4)
 | 
|---|
| 37 |  .   S CC=$P(DATA7,"^",5)
 | 
|---|
| 38 |  ;
 | 
|---|
| 39 |  ;  calculate balance
 | 
|---|
| 40 |  S DATA7=$G(^PRCA(430,BILLDA,7))
 | 
|---|
| 41 |  S PRINBAL=+$P(DATA7,"^")
 | 
|---|
| 42 |  S INTEREST=+$P(DATA7,"^",2)
 | 
|---|
| 43 |  S ADMIN=$P(DATA7,"^",3)
 | 
|---|
| 44 |  S MF=$P(DATA7,"^",4)
 | 
|---|
| 45 |  S CC=$P(DATA7,"^",5)
 | 
|---|
| 46 |  ;
 | 
|---|
| 47 |  ;  if the bill's status is write-off, balance and int = 0
 | 
|---|
| 48 |  I $P($G(^PRCA(430,BILLDA,0)),"^",8)=23 S (PRINBAL,INTEREST,ADMIN,MF,CC)=0
 | 
|---|
| 49 |  ;
 | 
|---|
| 50 |  S TRANDA=LASTTRAN
 | 
|---|
| 51 |  F  S TRANDA=$O(^PRCA(433,"C",BILLDA,TRANDA)) Q:'TRANDA  I $P($G(^PRCA(433,TRANDA,0)),"^",4)=2 D
 | 
|---|
| 52 |  .   S VALUE=$$TRANBAL^RCRJRCOT(TRANDA) I VALUE="" Q
 | 
|---|
| 53 |  .   ;
 | 
|---|
| 54 |  .   S TYPE=$P($G(^PRCA(433,TRANDA,1)),"^",2)
 | 
|---|
| 55 |  .   I TYPE=1!(TYPE=12)!(TYPE=13)!(TYPE=43) D  Q
 | 
|---|
| 56 |  .   .   S PRINBAL=PRINBAL-$P(VALUE,"^")
 | 
|---|
| 57 |  .   .   S INTEREST=INTEREST-$P(VALUE,"^",2)
 | 
|---|
| 58 |  .   .   S ADMIN=ADMIN-$P(VALUE,"^",3)
 | 
|---|
| 59 |  .   .   S MF=MF-$P(VALUE,"^",4)
 | 
|---|
| 60 |  .   .   S CC=CC-$P(VALUE,"^",5)
 | 
|---|
| 61 |  .   I TYPE=2!(TYPE=8)!(TYPE=9)!(TYPE=10)!(TYPE=11)!(TYPE=14)!(TYPE=29)!(TYPE=34)!(TYPE=35)!(TYPE=41) D  Q
 | 
|---|
| 62 |  .   .   S PRINBAL=PRINBAL+$P(VALUE,"^")
 | 
|---|
| 63 |  .   .   S INTEREST=INTEREST+$P(VALUE,"^",2)
 | 
|---|
| 64 |  .   .   S ADMIN=ADMIN+$P(VALUE,"^",3)
 | 
|---|
| 65 |  .   .   S MF=MF+$P(VALUE,"^",4)
 | 
|---|
| 66 |  .   .   S CC=CC+$P(VALUE,"^",5)
 | 
|---|
| 67 |  ;
 | 
|---|
| 68 |  ;  do not allow balances to be negative
 | 
|---|
| 69 |  I PRINBAL<0 S PRINBAL=0
 | 
|---|
| 70 |  ;  for transaction type 2,9,14, admin could not be broken out separate
 | 
|---|
| 71 |  ;  if its negative, add it to interest
 | 
|---|
| 72 |  I ADMIN<0 S INTEREST=INTEREST+ADMIN,ADMIN=0
 | 
|---|
| 73 |  I INTEREST<0 S ADMIN=ADMIN+INTEREST,INTEREST=0
 | 
|---|
| 74 |  ;
 | 
|---|
| 75 | UNLOCK ;  come here to unlock global and return results  
 | 
|---|
| 76 |  L -^PRCA(430,BILLDA)
 | 
|---|
| 77 |  ;
 | 
|---|
| 78 |  Q PRINBAL_"^"_INTEREST_"^"_ADMIN_"^"_MF_"^"_CC
 | 
|---|
| 79 |  ;
 | 
|---|
| 80 |  ;
 | 
|---|
| 81 | CURRENT(BILLDA,DATEEND,AYEAROLD) ; finds a bills balance and age
 | 
|---|
| 82 |  N DA,DATA4,COUNTCUR,CURRAMT,FUTURAMT,INTEREST,NONCURR,PRINBAL,RCVALUE,TOTREPAY
 | 
|---|
| 83 |  ;
 | 
|---|
| 84 |  ;  find a bills balance
 | 
|---|
| 85 |  S RCVALUE=$$BILLBAL(BILLDA,DATEEND)
 | 
|---|
| 86 |  ;
 | 
|---|
| 87 |  ;  count as a current receivable
 | 
|---|
| 88 |  D CURRENT^RCRJRCOC(BILLDA,RCVALUE)
 | 
|---|
| 89 |  ;
 | 
|---|
| 90 |  S PRINBAL=$P(RCVALUE,"^"),INTEREST=$P(RCVALUE,"^",2)+$P(RCVALUE,"^",3)+$P(RCVALUE,"^",4)+$P(RCVALUE,"^",5)
 | 
|---|
| 91 |  ;  if no repay plan date or its greater than date range or no amt due
 | 
|---|
| 92 |  S DATA4=$G(^PRCA(430,BILLDA,4))
 | 
|---|
| 93 |  I '$P(DATA4,"^")!($P($P(DATA4,"^"),".")>DATEEND)!('$P(DATA4,"^",3)) D SETTOTAL^RCRJRCO1(2,PRINBAL,INTEREST),AGE Q
 | 
|---|
| 94 |  ;
 | 
|---|
| 95 |  ;  total number of repayment due dates
 | 
|---|
| 96 |  S TOTREPAY=$P($G(^PRCA(430,BILLDA,5,0)),"^",3)
 | 
|---|
| 97 |  I 'TOTREPAY D SETTOTAL^RCRJRCO1(2,PRINBAL,INTEREST),AGE Q
 | 
|---|
| 98 |  ;
 | 
|---|
| 99 |  ;  count the number of current repayments (less than yr old)
 | 
|---|
| 100 |  S DA=0 F COUNTCUR=0:1 S DA=$O(^PRCA(430,BILLDA,5,DA)) Q:'DA!($P($G(^(DA,0)),"^")>AYEAROLD)
 | 
|---|
| 101 |  ;
 | 
|---|
| 102 |  ;  how many repayments are non-current
 | 
|---|
| 103 |  S NONCURR=TOTREPAY-COUNTCUR
 | 
|---|
| 104 |  ;  all are current
 | 
|---|
| 105 |  I 'NONCURR D SETTOTAL^RCRJRCO1(2,PRINBAL,INTEREST),AGE Q
 | 
|---|
| 106 |  ;
 | 
|---|
| 107 |  ;  future amount = noncurrent bills * repayment amount due
 | 
|---|
| 108 |  S FUTURAMT=NONCURR*$P(DATA4,"^",3),CURRAMT=PRINBAL-FUTURAMT
 | 
|---|
| 109 |  ;  no current amt (all future)
 | 
|---|
| 110 |  I 'CURRAMT D SETTOTAL^RCRJRCO1(12,FUTURAMT,INTEREST),AGE Q
 | 
|---|
| 111 |  ;
 | 
|---|
| 112 |  D SETTOTAL^RCRJRCO1(2,CURRAMT,INTEREST)
 | 
|---|
| 113 |  D SETTOTAL^RCRJRCO1(12,FUTURAMT,0)
 | 
|---|
| 114 |  D AGE
 | 
|---|
| 115 |  Q
 | 
|---|
| 116 |  ;
 | 
|---|
| 117 |  ;
 | 
|---|
| 118 | AGE ;  finds the age of delinquents
 | 
|---|
| 119 |  ;  the date the 2nd letter was sent
 | 
|---|
| 120 |  N DAYSDIFF,LETRDATE
 | 
|---|
| 121 |  S LETRDATE=$P($P($G(^PRCA(430,BILLDA,6)),"^",2),".")
 | 
|---|
| 122 |  I 'LETRDATE!(LETRDATE>DATEEND) Q
 | 
|---|
| 123 |  ;
 | 
|---|
| 124 |  S DAYSDIFF=$$FMDIFF^XLFDT(DATEEND,LETRDATE,1)
 | 
|---|
| 125 |  ;  pass criteria 2 based on days difference
 | 
|---|
| 126 |  D SETTOTAL^RCRJRCO1($S(DAYSDIFF<31:3,DAYSDIFF<61:4,DAYSDIFF<91:5,DAYSDIFF<121:6,DAYSDIFF<181:7,DAYSDIFF<366:8,DAYSDIFF<731:9,DAYSDIFF<1096:10,1:11),PRINBAL,INTEREST)
 | 
|---|
| 127 |  Q
 | 
|---|