| 1 | RCBECHGA ;WISC/RFJ-add admin charges to account (called by rcbechgs) ;1 Jun 00
 | 
|---|
| 2 |  ;;4.5;Accounts Receivable;**153,167**;Mar 20, 1995
 | 
|---|
| 3 |  ;;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 |  Q
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 | ADMIN ;  this is called by rcbechgs and is a continuation of that routine
 | 
|---|
| 8 |  ;  variables passed to this entry point:
 | 
|---|
| 9 |  ;    rcdebtda = the ien of the debtor entry in file 340
 | 
|---|
| 10 |  ;    rcdata0  = the 0th node for the debtor in rcd(340,rcdebtda,0)
 | 
|---|
| 11 |  ;    rcupdate = the fm date that charges are being added
 | 
|---|
| 12 |  ;      the rcupdate variable is the statement date for non-benefit
 | 
|---|
| 13 |  ;      debts or (statement date minus 3 days) for benefit (first
 | 
|---|
| 14 |  ;      party debts)
 | 
|---|
| 15 |  ;
 | 
|---|
| 16 |  N RCADDATE,RCBILLDA,RCDATA6,RCDATE,RCFADMIN,RCFQUIT,RCLASTDT,RCXDAYS,REPAYDAT,X
 | 
|---|
| 17 |  ;
 | 
|---|
| 18 |  ;  get the last date admin was charged to this account
 | 
|---|
| 19 |  S RCADDATE=$P($G(^RCD(340,+RCDEBTDA,.1)),"^",2)
 | 
|---|
| 20 |  ;  take the current statement date in variable rcupdate
 | 
|---|
| 21 |  ;  (this is actually 3 days before the statement date for
 | 
|---|
| 22 |  ;  benefit first party debts and is when admin charges
 | 
|---|
| 23 |  ;  get added) and subtract 1 month (this date will be the
 | 
|---|
| 24 |  ;  last statement date).  If the last admin charge date
 | 
|---|
| 25 |  ;  is greater than the last statement date, do not add
 | 
|---|
| 26 |  ;  admin a second time for the same month.
 | 
|---|
| 27 |  I RCADDATE>$$FPS^RCAMFN01(RCUPDATE,-1) Q
 | 
|---|
| 28 |  ;
 | 
|---|
| 29 |  S RCDATE=0 F  S RCDATE=$O(^TMP("RCBECHGS",$J,"LIST",RCDATE)) Q:'RCDATE  D  I $G(RCFQUIT) Q
 | 
|---|
| 30 |  .   S RCBILLDA=0 F  S RCBILLDA=$O(^TMP("RCBECHGS",$J,"LIST",RCDATE,RCBILLDA)) Q:'RCBILLDA  D  I $G(RCFQUIT) Q
 | 
|---|
| 31 |  .   .   ;  bill category is set up to not charge admin, get next bill
 | 
|---|
| 32 |  .   .   I '$P($G(^PRCA(430.2,+$P(^PRCA(430,RCBILLDA,0),"^",2),0)),"^",11) Q
 | 
|---|
| 33 |  .   .   S RCDATA6=$G(^PRCA(430,RCBILLDA,6))
 | 
|---|
| 34 |  .   .   ;
 | 
|---|
| 35 |  .   .   ;  --- block begin ------------------------------------------
 | 
|---|
| 36 |  .   .   ;  --- once sites begin populating the new field .12      ---
 | 
|---|
| 37 |  .   .   ;  --- in file 340, the following block of code can       ---
 | 
|---|
| 38 |  .   .   ;  --- be removed:                                        ---
 | 
|---|
| 39 |  .   .   ;  get the last date admin was charged to this bill.
 | 
|---|
| 40 |  .   .   ;  rcaddate is the last date for the account.  since
 | 
|---|
| 41 |  .   .   ;  this may not be populated, check the following:
 | 
|---|
| 42 |  .   .   ;  use field .12 in file 430, or use field 67
 | 
|---|
| 43 |  .   .   S RCLASTDT=RCADDATE
 | 
|---|
| 44 |  .   .   I 'RCLASTDT S RCLASTDT=$P($G(^PRCA(430,RCBILLDA,.1)),"^",2) I 'RCLASTDT S RCLASTDT=$P(RCDATA6,"^",7)
 | 
|---|
| 45 |  .   .   ;  take the current statement date in variable rcupdate
 | 
|---|
| 46 |  .   .   ;  (this is actually 3 days before the statement date for
 | 
|---|
| 47 |  .   .   ;  benefit first party debts and is when admin charges
 | 
|---|
| 48 |  .   .   ;  get added) and subtract 1 month (this date will be the
 | 
|---|
| 49 |  .   .   ;  last statement date).  If the last admin charge date
 | 
|---|
| 50 |  .   .   ;  is greater than the last statement date, do not add
 | 
|---|
| 51 |  .   .   ;  admin a second time for the same month.
 | 
|---|
| 52 |  .   .   I RCLASTDT>$$FPS^RCAMFN01(RCUPDATE,-1) S RCFQUIT=1 Q
 | 
|---|
| 53 |  .   .   ;  --- block end ---------------------------------------------
 | 
|---|
| 54 |  .   .   ;
 | 
|---|
| 55 |  .   .   ;  *** the account has RCXDAYS from the initial            ***
 | 
|---|
| 56 |  .   .   ;  *** notification (in letter1 date) to pay the account   ***
 | 
|---|
| 57 |  .   .   ;  *** in full or setup a repayment plan.  RCXDAYS is 30   ***
 | 
|---|
| 58 |  .   .   ;  *** for non-benefit debts and 57 for benefit (first     ***
 | 
|---|
| 59 |  .   .   ;  *** party debts)                                        ***
 | 
|---|
| 60 |  .   .   ;  *** letter 1 = initial notification                     ***
 | 
|---|
| 61 |  .   .   ;  *** letter 2 = 30 days from initial notification        ***
 | 
|---|
| 62 |  .   .   ;  *** letter 3 = 60 days from initial notification        ***
 | 
|---|
| 63 |  .   .   ;
 | 
|---|
| 64 |  .   .   ;  non-benefit debt, no letter1 date so not been 30 days
 | 
|---|
| 65 |  .   .   I $P(RCDATA0,"^")'["DPT(" D  I RCXDAYS=0 Q
 | 
|---|
| 66 |  .   .   .   S RCXDAYS=30
 | 
|---|
| 67 |  .   .   .   I '$P(RCDATA6,"^",1) S RCXDAYS=0 Q
 | 
|---|
| 68 |  .   .   .   ;  rcupdate is the statement date for non-benefit debts
 | 
|---|
| 69 |  .   .   .   ;  check to see if it has been 1 month (30 days) by
 | 
|---|
| 70 |  .   .   .   ;  adding a month to the letter1 date.  if this date is
 | 
|---|
| 71 |  .   .   .   ;  greater than the current statement date (in rcupdate)
 | 
|---|
| 72 |  .   .   .   ;  then it has not been 30 days from initial notification
 | 
|---|
| 73 |  .   .   .   I RCUPDATE<$$FPS^RCAMFN01($P(RCDATA6,"^",1),1) S RCXDAYS=0
 | 
|---|
| 74 |  .   .   ;
 | 
|---|
| 75 |  .   .   ;  benefit debt, no letter2 date so not been 57 days
 | 
|---|
| 76 |  .   .   I $P(RCDATA0,"^")["DPT(" D  I RCXDAYS=0 Q
 | 
|---|
| 77 |  .   .   .   S RCXDAYS=57
 | 
|---|
| 78 |  .   .   .   I '$P(RCDATA6,"^",2) S RCXDAYS=0 Q
 | 
|---|
| 79 |  .   .   .   ;  since the update happens 3 days before the statement
 | 
|---|
| 80 |  .   .   .   ;  date, you must add 3 days to the update before checking
 | 
|---|
| 81 |  .   .   .   ;  to see if it is less than the letter3 date (letter2
 | 
|---|
| 82 |  .   .   .   ;  date plus 1 month)
 | 
|---|
| 83 |  .   .   .   I $$FMADD^XLFDT(RCUPDATE,3)<$$FPS^RCAMFN01($P(RCDATA6,"^",2),1) S RCXDAYS=0
 | 
|---|
| 84 |  .   .   ;
 | 
|---|
| 85 |  .   .   ;  this variable is used to indicate the reason why admin is
 | 
|---|
| 86 |  .   .   ;  being charged
 | 
|---|
| 87 |  .   .   S RCFADMIN=""
 | 
|---|
| 88 |  .   .   ;  get the repayment plan date
 | 
|---|
| 89 |  .   .   S REPAYDAT=$P($G(^PRCA(430,RCBILLDA,4)),"^")
 | 
|---|
| 90 |  .   .   ;  if there is repayment plan established, test for the date
 | 
|---|
| 91 |  .   .   ;  it was established and if the account defaulted on it.
 | 
|---|
| 92 |  .   .   ;  return rcfadmin equal null if admin should not be charged
 | 
|---|
| 93 |  .   .   I REPAYDAT D  I RCFADMIN="" Q
 | 
|---|
| 94 |  .   .   .   ;  check to see if a repayment plan was set up within
 | 
|---|
| 95 |  .   .   .   ;  RCXDAYS of the initial notification and if not, charge
 | 
|---|
| 96 |  .   .   .   ;  admin on the account.  letter1 date is the initial
 | 
|---|
| 97 |  .   .   .   ;  notification. set rcfadmin to reason to charge admin
 | 
|---|
| 98 |  .   .   .   I REPAYDAT>$$FMADD^XLFDT($P(RCDATA6,"^"),RCXDAYS) S RCFADMIN="Repayment plan not established in "_RCXDAYS_" days from initial notification." Q
 | 
|---|
| 99 |  .   .   .   ;  check to see if the account defaulted on the repayment
 | 
|---|
| 100 |  .   .   .   ;  plan up to the date the admin is being charged, if so
 | 
|---|
| 101 |  .   .   .   ;  charge admin on the account
 | 
|---|
| 102 |  .   .   .   S X=$$REPAYDEF(RCBILLDA,RCUPDATE) I X S RCFADMIN=$P(X,"^",3)
 | 
|---|
| 103 |  .   .   ;
 | 
|---|
| 104 |  .   .   ;  charge admin
 | 
|---|
| 105 |  .   .   I RCFADMIN="" S RCFADMIN="Full payment or repayment plan not established in "_RCXDAYS_" days from initial notification."
 | 
|---|
| 106 |  .   .   S X=+$P($$ADM^RCMSFN01(),"^") I 'X Q
 | 
|---|
| 107 |  .   .   S $P(^TMP("RCBECHGS",$J,"ADDCHG",RCBILLDA),"^",2)=X
 | 
|---|
| 108 |  .   .   S $P(^TMP("RCBECHGS",$J,"ADDCHG",RCBILLDA),"^",4)=RCFADMIN
 | 
|---|
| 109 |  .   .   ;  set this variable to exit loop for rest of bills for account
 | 
|---|
| 110 |  .   .   S RCFQUIT=1
 | 
|---|
| 111 |  Q
 | 
|---|
| 112 |  ;
 | 
|---|
| 113 |  ;
 | 
|---|
| 114 | REPAYDEF(RCBILLDA,RCUPDATE) ;  check to see if bill is in default of the
 | 
|---|
| 115 |  ;  repayment plan up to a specified date (rcupdate)
 | 
|---|
| 116 |  ;  return piece 1 is 1 if in default, 0 if not in default
 | 
|---|
| 117 |  ;         piece 2 is the date of default
 | 
|---|
| 118 |  ;         piece 3 is the reason why bill found in default
 | 
|---|
| 119 |  ;
 | 
|---|
| 120 |  N DATA,REPAYDAT
 | 
|---|
| 121 |  ;  get the last payment date
 | 
|---|
| 122 |  S REPAYDAT=$O(^PRCA(430,RCBILLDA,5,"B",RCUPDATE),-1)
 | 
|---|
| 123 |  I 'REPAYDAT Q 0
 | 
|---|
| 124 |  S DATA=$G(^PRCA(430,RCBILLDA,5,+$O(^PRCA(430,RCBILLDA,5,REPAYDAT,0)),0))
 | 
|---|
| 125 |  ;  in some cases, the repayment date is in the form YYYMM (no day)
 | 
|---|
| 126 |  I $L(REPAYDAT)=5 S REPAYDAT=REPAYDAT_"01"
 | 
|---|
| 127 |  ;  payment not received for date prior to repayment date
 | 
|---|
| 128 |  I '$P(DATA,"^",2) Q "1^"_REPAYDAT_"^Payment Not Received before due date "_$$FORMATDT(REPAYDAT)
 | 
|---|
| 129 |  Q 0
 | 
|---|
| 130 |  ;
 | 
|---|
| 131 |  ;
 | 
|---|
| 132 | REPDATA(RCBILLDA,DAYS) ; - Return Repayment Plan information
 | 
|---|
| 133 |  ;  Input: RCBILLDA=Pointer to the AR file #430
 | 
|---|
| 134 |  ;             DAYS=Number of days over the due date for a payment not 
 | 
|---|
| 135 |  ;                  received to be considered defaulted.
 | 
|---|
| 136 |  ; Output: String with the following "^" (up-arrow) pieces:
 | 
|---|
| 137 |  ;              1. Repayment Plan Start Date (FM Format)
 | 
|---|
| 138 |  ;              2. Balance (Repayment Plan)
 | 
|---|
| 139 |  ;              3. Monthly Payment Amount
 | 
|---|
| 140 |  ;              4. Due Date (day of the month)
 | 
|---|
| 141 |  ;              5. Last Payment Date (from file #433)
 | 
|---|
| 142 |  ;              6. Last Payment Amount (from file #433)
 | 
|---|
| 143 |  ;              7. Number of Payments Due
 | 
|---|
| 144 |  ;              8. Number of Payments Defaulted
 | 
|---|
| 145 |  ;         or NULL if no Repayment Plan were found for the Bill
 | 
|---|
| 146 |  ; 
 | 
|---|
| 147 |  N RCPMT,RCDEF,RCDUE,RCELM,RCLDAM,RCLTR,RCRP,RCTRA,Y
 | 
|---|
| 148 |  ;
 | 
|---|
| 149 |  S (RCDUE,RCDEF,RCLTR)=0,RCPMT="A"
 | 
|---|
| 150 |  F  S RCPMT=$O(^PRCA(430,RCBILLDA,5,RCPMT),-1) Q:'RCPMT  D  Q:RCLTR
 | 
|---|
| 151 |  .   S RCELM=$G(^PRCA(430,RCBILLDA,5,RCPMT,0)) Q:RCELM=""
 | 
|---|
| 152 |  .   ;
 | 
|---|
| 153 |  .   ; - Payment received. Assume it's the last payment made on the Plan
 | 
|---|
| 154 |  .   I $P(RCELM,"^",2) S RCLTR=$P(RCELM,"^",4) Q
 | 
|---|
| 155 |  .   ; 
 | 
|---|
| 156 |  .   ; - A payment will be considered defaulted if a payment had not
 | 
|---|
| 157 |  .   ;   been received on an installment where the due date is at
 | 
|---|
| 158 |  .   ;   least DAYS days the past.
 | 
|---|
| 159 |  .   I $$FMDIFF^XLFDT(DT,$P(RCELM,"^"))'<DAYS D 
 | 
|---|
| 160 |  .   .   S RCDEF=RCDEF+1
 | 
|---|
| 161 |  .   ;
 | 
|---|
| 162 |  .   S RCDUE=RCDUE+1
 | 
|---|
| 163 |  ;
 | 
|---|
| 164 |  ; - If there are no DUE Payments, the Repayment Plan is paid in full
 | 
|---|
| 165 |  ;   In this case, no information is returned
 | 
|---|
| 166 |  I 'RCDUE Q ""
 | 
|---|
| 167 |  ;
 | 
|---|
| 168 |  ; - Gets the Date & Amount of the last payment on the Repayment Plan.
 | 
|---|
| 169 |  ;   Retrieves it from file #433 (AR Transaction)
 | 
|---|
| 170 |  S RCLDAM="^"
 | 
|---|
| 171 |  I RCLTR S RCTRA=$G(^PRCA(433,RCLTR,1)) D
 | 
|---|
| 172 |  .   S RCLDAM=($P(RCTRA,"^",9)\1)_"^"_$P(RCTRA,"^",5)
 | 
|---|
| 173 |  ;
 | 
|---|
| 174 |  S RCRP=$G(^PRCA(430,RCBILLDA,4))
 | 
|---|
| 175 |  S Y=$P(RCRP,"^")_"^"_($P(RCRP,"^",3)*RCDUE)_"^"_$P(RCRP,"^",3)
 | 
|---|
| 176 |  S Y=Y_"^"_$P(RCRP,"^",2)_"^"_RCLDAM_"^"_RCDUE_"^"_RCDEF
 | 
|---|
| 177 |  Q Y
 | 
|---|
| 178 |  ;
 | 
|---|
| 179 | FORMATDT(DATE) ;  format the date to return
 | 
|---|
| 180 |  Q $E(DATE,4,5)_"/"_$E(DATE,6,7)_"/"_$E(DATE,2,3)
 | 
|---|