| 1 | RCBEPAYF ;WISC/RFJ-first party payment processing(called by rcbepay) ;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 | FIRSTPTY() ; apply payment to first party account
|
---|
| 8 | ; called by rcbepay
|
---|
| 9 | N PAYMENT,RCBILBAL,RCBILLDA,RCDATE,RCDEBTDA,RCERROR,RCREPAMT,RCSTATUS,RCTRANDA,X
|
---|
| 10 | K ^TMP("RCBEPAY",$J)
|
---|
| 11 | ;
|
---|
| 12 | ; look up account in debtor file
|
---|
| 13 | S RCDEBTDA=$$DEBT^RCEVUTL(RCACCT)
|
---|
| 14 | I RCDEBTDA<0 Q "1^Could not add Patient ("_RCACCT_") to debtor file"
|
---|
| 15 | ;
|
---|
| 16 | ; lock the debtor account
|
---|
| 17 | L +^RCD(340,RCDEBTDA):20 I '$T Q "1^Another user is working with this patient account"
|
---|
| 18 | ;
|
---|
| 19 | ; build list of active(16) and open(42) bills for patient
|
---|
| 20 | ; sorted by date bill prepared
|
---|
| 21 | F RCSTATUS=16,42 S RCBILLDA=0 F S RCBILLDA=$O(^PRCA(430,"AS",RCDEBTDA,RCSTATUS,RCBILLDA)) Q:'RCBILLDA D
|
---|
| 22 | . ; check bill for prepayment
|
---|
| 23 | . I $P(^PRCA(430,RCBILLDA,0),"^",2)=26 Q
|
---|
| 24 | . ; if this bill was entered for payment applied against it on
|
---|
| 25 | . ; the receipt, set the tmp global with the date prepared
|
---|
| 26 | . ; equal to zero so payment will be applied to it first
|
---|
| 27 | . I $P(RCDATA,"^",3)["PRCA(430,",RCBILLDA=+$P(RCDATA,"^",3) S ^TMP("RCBEPAY",$J,0,RCBILLDA)="" Q
|
---|
| 28 | . S ^TMP("RCBEPAY",$J,+$P(^PRCA(430,RCBILLDA,0),"^",10),RCBILLDA)=""
|
---|
| 29 | ;
|
---|
| 30 | ; loop all the bills for a patients account and keep looping them
|
---|
| 31 | ; until either there is no more bills or the money paid is zero.
|
---|
| 32 | ; the bills are looped in case of repayments. if there is money
|
---|
| 33 | ; left over, this will apply more money to the repayment bills
|
---|
| 34 | ; instead of creating a prepayment. a prepayment should only be
|
---|
| 35 | ; created if all bills for the account is collected/closed.
|
---|
| 36 | S RCERROR=0
|
---|
| 37 | ; quit the loop if no money left to apply OR an error occurred OR
|
---|
| 38 | ; no more bills left to apply payment to
|
---|
| 39 | F D I 'RCPAYAMT!(RCERROR)!($O(^TMP("RCBEPAY",$J,""))="") Q
|
---|
| 40 | . ; loop the bills by date prepared and apply the payment
|
---|
| 41 | . ; quit if no money left to apply OR and error occurred
|
---|
| 42 | . S RCDATE="" F S RCDATE=$O(^TMP("RCBEPAY",$J,RCDATE)) Q:RCDATE="" D I 'RCPAYAMT!(RCERROR) Q
|
---|
| 43 | . . S RCBILLDA=0 F S RCBILLDA=$O(^TMP("RCBEPAY",$J,RCDATE,RCBILLDA)) Q:'RCBILLDA D I 'RCPAYAMT!(RCERROR) Q
|
---|
| 44 | . . . L +^PRCA(430,RCBILLDA):10
|
---|
| 45 | . . . I '$T S RCERROR="1^Another user is working will bill "_$P(^PRCA(430,RCBILLDA,0),"^") Q
|
---|
| 46 | . . . ;
|
---|
| 47 | . . . ; exempt any interest/admin/penalty charges added on or after
|
---|
| 48 | . . . ; the payment date
|
---|
| 49 | . . . D EXEMPT^RCBECHGE(RCBILLDA,RCPAYDAT)
|
---|
| 50 | . . . ;
|
---|
| 51 | . . . ; get the repayment amount (if any)
|
---|
| 52 | . . . S RCREPAMT=$P($G(^PRCA(430,RCBILLDA,4)),"^",3)
|
---|
| 53 | . . . ;
|
---|
| 54 | . . . ; get the balance of the bill
|
---|
| 55 | . . . S X=$G(^PRCA(430,RCBILLDA,7))
|
---|
| 56 | . . . S RCBILBAL=$P(X,"^")+$P(X,"^",2)+$P(X,"^",3)+$P(X,"^",4)+$P(X,"^",5)
|
---|
| 57 | . . . ; if bill has no balance, chg status = collected/closed
|
---|
| 58 | . . . I 'RCBILBAL D CHGSTAT^RCBEUBIL(RCBILLDA,22) L -^PRCA(430,RCBILLDA) K ^TMP("RCBEPAY",$J,RCDATE,RCBILLDA) Q
|
---|
| 59 | . . . ;
|
---|
| 60 | . . . ; determine amount to pay
|
---|
| 61 | . . . ; if the payment is greater than billed amount, pay billed amount
|
---|
| 62 | . . . ; if there is a repayment amount, pay the repayment amount
|
---|
| 63 | . . . ; do not allow payment to exceed amount paid
|
---|
| 64 | . . . S PAYMENT=RCPAYAMT
|
---|
| 65 | . . . I PAYMENT>RCBILBAL S PAYMENT=RCBILBAL
|
---|
| 66 | . . . I RCREPAMT S PAYMENT=RCREPAMT I PAYMENT>RCBILBAL S PAYMENT=RCBILBAL
|
---|
| 67 | . . . I PAYMENT>RCPAYAMT S PAYMENT=RCPAYAMT
|
---|
| 68 | . . . ;
|
---|
| 69 | . . . ; apply payment to bill
|
---|
| 70 | . . . ; return error if problem adding payment transaction
|
---|
| 71 | . . . S RCTRANDA=$$PAYTRAN^RCBEPAY1(RCBILLDA,PAYMENT,RCRECTDA,RCPAYDA,RCPAYDAT)
|
---|
| 72 | . . . I 'RCTRANDA L -^PRCA(430,RCBILLDA) S RCERROR="1^"_$P(RCTRANDA,"^",2) Q
|
---|
| 73 | . . . ;
|
---|
| 74 | . . . ; payment applied to bill, subtract off the payment amount
|
---|
| 75 | . . . S RCPAYAMT=RCPAYAMT-$P($G(^PRCA(433,RCTRANDA,1)),"^",5)
|
---|
| 76 | . . . ;
|
---|
| 77 | . . . ; set the amount processed on the receipt payment
|
---|
| 78 | . . . D SETAMT^RCBEPAY(RCRECTDA,RCPAYDA,$P($G(^PRCA(433,RCTRANDA,1)),"^",5))
|
---|
| 79 | . . . ;
|
---|
| 80 | . . . ; get the new balance of the bill. if it is zero
|
---|
| 81 | . . . ; remove it from the tmp global (this will stop the
|
---|
| 82 | . . . ; loop if dollars are left and no bills are active)
|
---|
| 83 | . . . S X=$G(^PRCA(430,RCBILLDA,7))
|
---|
| 84 | . . . S RCBILBAL=$P(X,"^")+$P(X,"^",2)+$P(X,"^",3)+$P(X,"^",4)+$P(X,"^",5)
|
---|
| 85 | . . . I 'RCBILBAL K ^TMP("RCBEPAY",$J,RCDATE,RCBILLDA)
|
---|
| 86 | . . . ;
|
---|
| 87 | . . . L -^PRCA(430,RCBILLDA)
|
---|
| 88 | ;
|
---|
| 89 | K ^TMP("RCBEPAY",$J)
|
---|
| 90 | ;
|
---|
| 91 | ; if an error occurred, quit
|
---|
| 92 | I RCERROR L -^RCD(340,RCDEBTDA) Q RCERROR
|
---|
| 93 | ;
|
---|
| 94 | ; if no money left, quit
|
---|
| 95 | I 'RCPAYAMT L -^RCD(340,RCDEBTDA) Q 0
|
---|
| 96 | ;
|
---|
| 97 | ; dollars remaining, create a prepayment
|
---|
| 98 | N %,%H,%I,%X,D,D0,DFN,DI,DIC,DICR,DIG,DIH,DIU,DIV,DIW,DQ,I,PRCA,RCREF,VA,VADM
|
---|
| 99 | D EN^PRCAPAY3(RCACCT,RCPAYAMT,RCPAYDAT,DUZ,$P(^RCY(344,RCRECTDA,0),"^"),"","",.RCERROR,"")
|
---|
| 100 | ; no errors
|
---|
| 101 | I RCERROR=""!(RCERROR=0) D
|
---|
| 102 | . S RCERROR=0
|
---|
| 103 | . ; set the amount processed on the receipt
|
---|
| 104 | . D SETAMT^RCBEPAY(RCRECTDA,RCPAYDA,RCPAYAMT)
|
---|
| 105 | ; error creating prepayment
|
---|
| 106 | I RCERROR'=0 S RCERROR="1^"_RCERROR
|
---|
| 107 | ;
|
---|
| 108 | L -^RCD(340,RCDEBTDA)
|
---|
| 109 | Q RCERROR
|
---|