[613] | 1 | RCBEPAY ;WISC/RFJ-payment processing (top routine) ;1 Jun 00
|
---|
| 2 | ;;4.5;Accounts Receivable;**153**;Mar 20, 1995
|
---|
| 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
| 4 | Q
|
---|
| 5 | ;
|
---|
| 6 | ;
|
---|
| 7 | PROCESS(RCRECTDA,RCPAYDA) ; process a payment for receipt
|
---|
| 8 | ; rcrectda - receipt ien file 344
|
---|
| 9 | ; rcpayda - payment ien file 344 under rcrectda
|
---|
| 10 | ; returns 0 if processed, 1^error if not processed
|
---|
| 11 | ;
|
---|
| 12 | N RCACCT,RCBILLDA,RCDATA,RCERROR,RCPAYAMT,RCPAYDAT,RCTRANDA,X
|
---|
| 13 | ;
|
---|
| 14 | ; lock the receipt payment
|
---|
| 15 | L +^RCY(344,RCRECTDA,1,RCPAYDA):10
|
---|
| 16 | I '$T Q "1^Another user is working with this payment"
|
---|
| 17 | ;
|
---|
| 18 | ; get the payment data
|
---|
| 19 | S RCDATA=^RCY(344,RCRECTDA,1,RCPAYDA,0)
|
---|
| 20 | ;
|
---|
| 21 | ; there is no account, this will go to suspense
|
---|
| 22 | I $P(RCDATA,"^",3)="" L -^RCY(344,RCRECTDA,1,RCPAYDA) Q 0
|
---|
| 23 | ;
|
---|
| 24 | ; check the payment for errors
|
---|
| 25 | S X=$$CHECKPAY^RCBEPAYC(RCRECTDA,RCPAYDA)
|
---|
| 26 | I X L -^RCY(344,RCRECTDA,1,RCPAYDA) Q X
|
---|
| 27 | ;
|
---|
| 28 | ; get the payment date from the payment. if not on payment get it
|
---|
| 29 | ; from the deposit. if not on deposit, set equal to today
|
---|
| 30 | S RCPAYDAT=$P($P(RCDATA,"^",6),".") I 'RCPAYDAT S RCPAYDAT=$P($G(^RCY(344.1,+$P(^RCY(344,RCRECTDA,0),"^",6),0)),"^",3) I 'RCPAYDAT S RCPAYDAT=DT
|
---|
| 31 | ; get the payment amount (amount paid minus amount processed).
|
---|
| 32 | ; if the payment amount is not greater than zero, do not post.
|
---|
| 33 | S RCPAYAMT=$P(RCDATA,"^",4)-$P(RCDATA,"^",5) I RCPAYAMT'>0 L -^RCY(344,RCRECTDA,1,RCPAYDA) Q 0
|
---|
| 34 | ;
|
---|
| 35 | ; get the account
|
---|
| 36 | S RCACCT=$P(RCDATA,"^",3)
|
---|
| 37 | ; if the account is a bill and the debtor is first party,
|
---|
| 38 | ; then get the account from the debtor file
|
---|
| 39 | I RCACCT["PRCA(430," S X=$P($G(^RCD(340,+$P($G(^PRCA(430,+RCACCT,0)),"^",9),0)),"^") I X["DPT(" S RCACCT=X
|
---|
| 40 | ;
|
---|
| 41 | ;
|
---|
| 42 | ; ----------------- START PROCESSING PAYMENT -----------------
|
---|
| 43 | ;
|
---|
| 44 | ; === benefit debt (example: first party account) ===
|
---|
| 45 | I RCACCT["DPT(" D Q RCERROR
|
---|
| 46 | . S RCERROR=$$FIRSTPTY^RCBEPAYF
|
---|
| 47 | . ; store or clear error
|
---|
| 48 | . D SETERROR(RCRECTDA,RCPAYDA,$P(RCERROR,"^",2))
|
---|
| 49 | . L -^RCY(344,RCRECTDA,1,RCPAYDA)
|
---|
| 50 | ;
|
---|
| 51 | ;
|
---|
| 52 | ; === non-benefit debt (example: third party) ===
|
---|
| 53 | S RCBILLDA=+$P(RCDATA,"^",3)
|
---|
| 54 | ; lock the bill to prevent another used from changing the balance
|
---|
| 55 | L +^PRCA(430,RCBILLDA):10
|
---|
| 56 | I '$T D Q RCERROR
|
---|
| 57 | . S RCERROR="1^Another user is working with bill "_$P(^PRCA(430,RCBILLDA,0),"^")
|
---|
| 58 | . D SETERROR(RCRECTDA,RCPAYDA,$P(RCERROR,"^",2))
|
---|
| 59 | . L -^RCY(344,RCRECTDA,1,RCPAYDA)
|
---|
| 60 | ;
|
---|
| 61 | ; exempt any interest/admin/penalty charges added on or after
|
---|
| 62 | ; the payment date
|
---|
| 63 | D EXEMPT^RCBECHGE(RCBILLDA,RCPAYDAT)
|
---|
| 64 | ;
|
---|
| 65 | ; once charges have been exempted, recheck the payment for errors
|
---|
| 66 | S X=$$CHECKPAY^RCBEPAYC(RCRECTDA,RCPAYDA)
|
---|
| 67 | I X D Q RCERROR
|
---|
| 68 | . S RCERROR="1^"_$P(X,"^",2)
|
---|
| 69 | . D SETERROR(RCRECTDA,RCPAYDA,$P(RCERROR,"^",2))
|
---|
| 70 | . L -^PRCA(430,RCBILLDA)
|
---|
| 71 | . L -^RCY(344,RCRECTDA,1,RCPAYDA)
|
---|
| 72 | ;
|
---|
| 73 | ; apply payment to bill
|
---|
| 74 | ; return error if problem adding payment transaction
|
---|
| 75 | S RCTRANDA=$$PAYTRAN^RCBEPAY1(RCBILLDA,RCPAYAMT,RCRECTDA,RCPAYDA,RCPAYDAT)
|
---|
| 76 | I 'RCTRANDA D Q RCERROR
|
---|
| 77 | . S RCERROR="1^"_$P(RCTRANDA,"^",2)
|
---|
| 78 | . D SETERROR(RCRECTDA,RCPAYDA,$P(RCERROR,"^",2))
|
---|
| 79 | . L -^PRCA(430,RCBILLDA)
|
---|
| 80 | . L -^RCY(344,RCRECTDA,1,RCPAYDA)
|
---|
| 81 | ;
|
---|
| 82 | ; set the amount processed in the receipt
|
---|
| 83 | D SETAMT(RCRECTDA,RCPAYDA,$P($G(^PRCA(433,RCTRANDA,1)),"^",5))
|
---|
| 84 | ;
|
---|
| 85 | ; payment applied to bill
|
---|
| 86 | D SETERROR(RCRECTDA,RCPAYDA,"")
|
---|
| 87 | L -^PRCA(430,RCBILLDA)
|
---|
| 88 | L -^RCY(344,RCRECTDA,1,RCPAYDA)
|
---|
| 89 | Q 0
|
---|
| 90 | ;
|
---|
| 91 | ;
|
---|
| 92 | SETAMT(RCRECTDA,RCPAYDA,RCAMOUNT) ; update the amount posted on the receipt
|
---|
| 93 | N DATA
|
---|
| 94 | S DATA=$G(^RCY(344,RCRECTDA,1,RCPAYDA,0))
|
---|
| 95 | I DATA="" Q
|
---|
| 96 | S $P(^RCY(344,RCRECTDA,1,RCPAYDA,0),"^",5)=$P(DATA,"^",5)+RCAMOUNT
|
---|
| 97 | Q
|
---|
| 98 | ;
|
---|
| 99 | ;
|
---|
| 100 | SETERROR(RCRECTDA,RCPAYDA,RCERROR) ; store the error on the receipt
|
---|
| 101 | ; or clear the posting error if null and defined
|
---|
| 102 | ; error is null and posting error data in file is null
|
---|
| 103 | I RCERROR="",$P($G(^RCY(344,RCRECTDA,1,RCPAYDA,1)),"^")="" Q
|
---|
| 104 | ; error is null, clear posting error
|
---|
| 105 | I RCERROR="" S $P(^RCY(344,RCRECTDA,1,RCPAYDA,1),"^")="" Q
|
---|
| 106 | ; error exists, set the posting error
|
---|
| 107 | I RCERROR'="" S $P(^RCY(344,RCRECTDA,1,RCPAYDA,1),"^")=$E(RCERROR,1,60)
|
---|
| 108 | Q
|
---|