[613] | 1 | PRCAHV ;LL/ELZ-API for My HealtheVet ;06/17/02
|
---|
| 2 | ;;4.5;Accounts Receivable;**183,209**;Mar 20, 1995
|
---|
| 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
| 4 | ;Based on ALSIBAL, LL/ELZ, Version 3.0, 10/30/01 (Ed Zeigler)
|
---|
| 5 | ;
|
---|
| 6 | ;
|
---|
| 7 | ;Balance calculation (External entry point)
|
---|
| 8 | ;Input:
|
---|
| 9 | ; PRCAICN - Patient's ICN (required)
|
---|
| 10 | ; PRCATY - Account Receivable Transaction Types, possible values (case insensitive):
|
---|
| 11 | ; "OPEN" (default) the same as "113,112,102,107" - open/active Trans. Types
|
---|
| 12 | ; "ALL", all Transaction Types
|
---|
| 13 | ; <list of Trans.Type numbers, comma delimited>
|
---|
| 14 | ;Output:
|
---|
| 15 | ; 1-success, 0-no data, '-1'-error, '-2'-patient doesn't exist, '-3'-program error
|
---|
| 16 | ; RESULT (by reference)=<balance value> or zero if error/no data
|
---|
| 17 | BALANCE(RESULT,PRCAICN,PRCATY) N DFN,RCST
|
---|
| 18 | S RESULT=0 ;Initial value
|
---|
| 19 | I $G(PRCAICN)="" S RCST=-1 G BALQ ;Bad parameter
|
---|
| 20 | S DFN=$$DFN($G(PRCAICN)) I 'DFN S RCST=-2 G BALQ ;No such patient
|
---|
| 21 | S RCST=$$INTBAL(.RESULT,DFN,.PRCATY)
|
---|
| 22 | BALQ Q RCST
|
---|
| 23 | ;
|
---|
| 24 | ;
|
---|
| 25 | ;This function will look up a patient's detail to their copay balance
|
---|
| 26 | ;Input:
|
---|
| 27 | ; PRCAICN - Patient's ICN
|
---|
| 28 | ; PRCATY - Account Receivable Transaction Types, possible values (case insensitive):
|
---|
| 29 | ; "OPEN" (default) the same as "113,112,102,107" - open/active Trans. Types
|
---|
| 30 | ; "ALL", all Transaction Types,
|
---|
| 31 | ; <list of Trans.Type numbers, comma delimited>
|
---|
| 32 | ;Output: 1-success, 0-no data, '-1'-error, '-2'-patient doesn't exist, '-3'-program error
|
---|
| 33 | ; RESULT(1..n)=<Bill No>^<Date Bill Prepared(FM)>^<Description>^<Balance>^<Status Number>
|
---|
| 34 | ; RESULT may be undefined if error or no data
|
---|
| 35 | DETAIL(RESULT,PRCAICN,PRCATY) N DFN,RCST
|
---|
| 36 | K RESULT ;Initial value
|
---|
| 37 | I $G(PRCAICN)="" S RCST=-1 G DETQ ;Bad parameter
|
---|
| 38 | S DFN=$$DFN($G(PRCAICN)) I 'DFN S RCST=-2 G DETQ ;No such patient
|
---|
| 39 | S RCST=$$INTDTL(.RESULT,DFN,.PRCATY)
|
---|
| 40 | DETQ Q RCST
|
---|
| 41 | ;
|
---|
| 42 | ;
|
---|
| 43 | ;This function will look up for transaction details for the given bill
|
---|
| 44 | ;Input:
|
---|
| 45 | ; PRCABILL - Bill name (External number)
|
---|
| 46 | ;Output:
|
---|
| 47 | ; 1-success, 0-no data, '-1'-no parameter, '-2'-the bill doesn't exist, '-3'-program error
|
---|
| 48 | ; RESULT(i)=<Trans.No>^<Date(FM)>^<Trans.Type>^<reserved>^<Trans. amount>^<Descr1>^<Descr2>^<Descr3>^<Descr4>^<Descr5>
|
---|
| 49 | ; RESULT may be undefined if error or no data
|
---|
| 50 | ; RESULT(1..n) may not be longer that 255 char - the Description may be truncated.
|
---|
| 51 | TRANS(RESULT,PRCABILL) N PRCAIEN,RCST
|
---|
| 52 | K RESULT ;Initial value
|
---|
| 53 | I $G(PRCABILL)="" S RCST=-1 G TRANSQ ;Bad parameter
|
---|
| 54 | S PRCAIEN=$$BILIEN($G(PRCABILL)) I 'PRCAIEN S RCST=-2 G TRANSQ ;No such bill
|
---|
| 55 | S RCST=$$INTTRANS(.RESULT,PRCAIEN)
|
---|
| 56 | TRANSQ Q RCST
|
---|
| 57 | ;
|
---|
| 58 | ;Conversions
|
---|
| 59 | ;~~~~~~~~~~~
|
---|
| 60 | ;Input: Paient's ICN
|
---|
| 61 | ;Output: Patient's IEN (or 0 in not found)
|
---|
| 62 | DFN(PRCAICN) ;Receive patient's IEN by ICN
|
---|
| 63 | N DFN
|
---|
| 64 | I $G(PRCAICN)="" Q 0 ;No parameter
|
---|
| 65 | S DFN=$O(^DPT("AICN",PRCAICN,0)) I 'DFN Q 0 ;Not found in x-ref
|
---|
| 66 | I '$D(^DPT(DFN)) Q 0 ;Invalid cross-reference
|
---|
| 67 | Q DFN
|
---|
| 68 | ;
|
---|
| 69 | ;Input: bill name ('external' number)
|
---|
| 70 | ;Output: bill IEN (internal record number) or 0 if not found
|
---|
| 71 | BILIEN(PRCABN) ;Receive bill's IEN by name
|
---|
| 72 | N PRCAIEN
|
---|
| 73 | I $G(PRCABN)="" Q 0 ;No parameter
|
---|
| 74 | S PRCAIEN=$O(^PRCA(430,"B",PRCABN,0)) I 'PRCAIEN Q 0 ;Not found in x-ref
|
---|
| 75 | I '$D(^PRCA(430,PRCAIEN)) Q 0 ;Invalid cross-reference
|
---|
| 76 | Q PRCAIEN
|
---|
| 77 | ;
|
---|
| 78 | ;
|
---|
| 79 | ;Internal functions
|
---|
| 80 | ;~~~~~~~~~~~~~~~~~~
|
---|
| 81 | ; These functions accept internal codes (IEN),
|
---|
| 82 | ; return success code,
|
---|
| 83 | ; return requested data in parameter by reference (no data murging)
|
---|
| 84 | ;
|
---|
| 85 | ;
|
---|
| 86 | ;Balance calculation (internal entry point)
|
---|
| 87 | ;Input: DFN - Patient's IEN
|
---|
| 88 | ; PRCATY - Account Receivable Transaction Types, possible values:
|
---|
| 89 | ; "OPEN" (default) the same as "113,112,102,107" - open/active Trans. Types
|
---|
| 90 | ; "ALL", all Transaction Types
|
---|
| 91 | ; <list of Trans.Type numbers, comma delimited>
|
---|
| 92 | ;Output: 1-success, 0-no data, '-1'-error '-2'-patient doesn't exist
|
---|
| 93 | ; RESULT=<balance value> or zero if error/no data
|
---|
| 94 | INTBAL(RESULT,DFN,PRCATY) ; this will look up a patient's copay balance
|
---|
| 95 | N X,Y,C,PRCADB,DEBT,TRAN,BILL,BAT
|
---|
| 96 | S RESULT=0
|
---|
| 97 | S X="ERROR^PRCAHV",@^%ZOSF("TRAP")
|
---|
| 98 | S:'$D(U) U="^"
|
---|
| 99 | ;
|
---|
| 100 | I '$G(DFN) Q -1 ;No/bad parameter
|
---|
| 101 | I '$D(^DPT(DFN)) Q -2 ;The patient does not exist
|
---|
| 102 | S PRCADB=DFN_";DPT(",DEBT=$O(^RCD(340,"B",PRCADB,0)) I 'DEBT Q 0 ;No such debtor
|
---|
| 103 | D ADJTYPE(.PRCATY) ; Adjust type (or set default)
|
---|
| 104 | ;Standard call. Parameters: PRCATY - types list, DEBT - debtor
|
---|
| 105 | K ^TMP("PRCAAPR",$J)
|
---|
| 106 | D COMP^PRCAAPR S RESULT=+$G(^TMP("PRCAAPR",$J,"C"))
|
---|
| 107 | K ^TMP("PRCAAPR",$J)
|
---|
| 108 | Q 1
|
---|
| 109 | ;
|
---|
| 110 | ;Function: Details of patient's balance
|
---|
| 111 | ;Input: DFN - Patient's IEN
|
---|
| 112 | ; PRCATY - Account Receivable Transaction Types, possible values:
|
---|
| 113 | ; "OPEN" (default) the same as "113,112,102,107" - open/active Trans. Types
|
---|
| 114 | ; "ALL", all Transaction Types
|
---|
| 115 | ; <list of Trans.Type numbers, comma delimited>
|
---|
| 116 | ;Output: 1-success, 0-no data, '-1'-error '-2'-patient doesn't exist
|
---|
| 117 | ; RESULT(1..n)=<Bill No>^<Date Bill Prepared(FM)>^<Description>^<Balance>^<Status Number>
|
---|
| 118 | ; RESULT may be undefined if error or no data
|
---|
| 119 | INTDTL(RESULT,DFN,PRCATY) ;
|
---|
| 120 | N X,Y,C,PRCADB,DEBT,TRAN,BILL,BAT,RCS,RCX,RCC,RCZ,RCY,RCB,RCDT,RCP
|
---|
| 121 | K RESULT
|
---|
| 122 | S X="ERROR^PRCAHV",@^%ZOSF("TRAP")
|
---|
| 123 | S:'$D(U) U="^"
|
---|
| 124 | ;
|
---|
| 125 | I '$G(DFN) Q -1 ;No/bad parameter
|
---|
| 126 | I '$D(^DPT(DFN)) Q -2 ;No such patient
|
---|
| 127 | S PRCADB=DFN_";DPT(",DEBT=$O(^RCD(340,"B",PRCADB,0)) I 'DEBT Q 0 ;No information for the patient
|
---|
| 128 | ;
|
---|
| 129 | D ADJTYPE(.PRCATY) ; Adjust type (or set default)
|
---|
| 130 | ;Standard call. Parameters: PRCATY - types list, DEBT - debtor
|
---|
| 131 | K ^TMP("PRCAAPR",$J),^TMP("PRCAHV",$J)
|
---|
| 132 | D COMP^PRCAAPR
|
---|
| 133 | ;
|
---|
| 134 | ; Sort the bills by date, ignore 3rd party bills
|
---|
| 135 | S (RCC,RCS)=0 F S RCS=$O(^TMP("PRCAAPR",$J,"C",RCS)) Q:RCS<1 D
|
---|
| 136 | . S RCX=0 F S RCX=$O(^TMP("PRCAAPR",$J,"C",RCS,RCX)) Q:RCX<1 D
|
---|
| 137 | .. ; No support for unprocessed payments
|
---|
| 138 | .. I RCS=99 Q ;S RCC=RCC+1,RESULT(RCC)="^^UNPROCESSED PAYMENT^"_$G(^TMP("PRCAAPR",$J,"C",RCS,RCX)) Q
|
---|
| 139 | .. S RCY=$G(^PRCA(430,RCX,0)) Q:RCY=""
|
---|
| 140 | .. S PRCADB=$P(RCY,"^",9) ; bill debtor
|
---|
| 141 | .. I $P($G(^RCD(340,PRCADB,0)),U)'[";DPT(" Q ;not a 1st party bill
|
---|
| 142 | .. S RCDT=+$P(RCY,"^",10)
|
---|
| 143 | .. S ^TMP("PRCAHV",$J,RCDT,RCS,RCX)=$G(^TMP("PRCAAPR",$J,"C",RCS,RCX))
|
---|
| 144 | K ^TMP("PRCAAPR",$J)
|
---|
| 145 | ;
|
---|
| 146 | S (RCC,RCDT)=0 F S RCDT=$O(^TMP("PRCAHV",$J,RCDT)) Q:'RCDT D
|
---|
| 147 | . S RCS=0 F S RCS=$O(^TMP("PRCAHV",$J,RCDT,RCS)) Q:'RCS D
|
---|
| 148 | .. S RCX=0 F S RCX=$O(^TMP("PRCAHV",$J,RCDT,RCS,RCX)) Q:'RCX D
|
---|
| 149 | ... N RCDESC
|
---|
| 150 | ... D BILLDESC^RCCPCPS1(RCX)
|
---|
| 151 | ... S RCB=0,RCZ=$G(^TMP("PRCAHV",$J,RCDT,RCS,RCX))
|
---|
| 152 | ... F RCP=1:1:5 S RCB=RCB+$P(RCZ,U,RCP)
|
---|
| 153 | ... S RCY=^PRCA(430,RCX,0)
|
---|
| 154 | ... S RCC=RCC+1,RESULT(RCC)=$P(RCY,U)_U_$P(RCY,U,10)_U_RCDESC(1)_U_RCB_U_RCS
|
---|
| 155 | ;
|
---|
| 156 | K ^TMP("PRCAHV",$J)
|
---|
| 157 | Q 1 ;Success, data not guaranteed
|
---|
| 158 | ;
|
---|
| 159 | ;Function: Transaction details
|
---|
| 160 | ;Input: RCBILL - Bill IEN
|
---|
| 161 | ;Output: 1-success, 0-no data, '-1'-no parameter '-2'-the bill doesn't exist, '-3'-program error
|
---|
| 162 | ; RESULT(i)=<Trans.No>^<Date(FM)>^<Trans.Type>^<reserved>^<Trans. amount>^<Descr1>^<Descr2>^<Descr3>^<Descr4>^<Descr5>
|
---|
| 163 | ; RESULT may be undefined if error or no data
|
---|
| 164 | INTTRANS(RESULT,RCBILL) ; returns transaction details for the given bill IEN
|
---|
| 165 | N RCTRAN,RCNUM,X,Y,C
|
---|
| 166 | K RESULT
|
---|
| 167 | S X="ERROR^PRCAHV",@^%ZOSF("TRAP")
|
---|
| 168 | S:'$D(U) U="^"
|
---|
| 169 | I $G(RCBILL)="" Q -1 ;Bad parameter
|
---|
| 170 | I '$D(^PRCA(430,RCBILL,0)) Q -2 ;The bill doesn't exist
|
---|
| 171 | I '$D(^PRCA(433,"C",RCBILL)) Q 0 ;No data
|
---|
| 172 | S (RCNUM,RCTRAN)=0 F S RCTRAN=$O(^PRCA(433,"C",RCBILL,RCTRAN)) Q:'RCTRAN D
|
---|
| 173 | . Q:'$D(^PRCA(433,RCTRAN,0)) ;Corrupted cross-reference
|
---|
| 174 | . N RCDESC,RCTOTAL,RCY,RCI,RCTXT,RCD,RCTTY,RCAMT
|
---|
| 175 | . D TRANDESC^RCCPCPS1(RCTRAN)
|
---|
| 176 | . S RCY=$G(^PRCA(433,RCTRAN,1))
|
---|
| 177 | . S RCTTY=$P(RCY,U,2) ; Transaction Type
|
---|
| 178 | . S RCAMT=$P(RCY,U,5) ; Transaction Amount
|
---|
| 179 | . I ",2,8,9,10,11,14,19,47,34,35,29,"[(","_RCTTY_",") I RCAMT'<0 S RCAMT=-RCAMT
|
---|
| 180 | . I ",2,8,9,10,11,12,14,19,47,34,35,29,"'[(","_RCTTY_",") I RCAMT<0 S RCAMT=-RCAMT
|
---|
| 181 | . ;S RCTXT=RCTRAN_U_$P(RCY,U)_U_$G(RCTOTAL("INT"))_U_$G(RCTOTAL("ADM"))_U_$P(RCY,U,5)
|
---|
| 182 | . S RCTXT=RCTRAN_U_$P(RCY,U)_U_RCTTY_U_U_RCAMT
|
---|
| 183 | . S RCI=0 F S RCI=$O(RCDESC(RCI)) Q:'RCI S RCD=$$TRIM(RCDESC(RCI)) Q:($L(RCD)+$L(RCTXT))>254 S RCTXT=RCTXT_U_RCD
|
---|
| 184 | . S RCNUM=RCNUM+1
|
---|
| 185 | . S RESULT(RCNUM)=RCTXT
|
---|
| 186 | ;
|
---|
| 187 | Q 1 ;Success, data not guaranteed
|
---|
| 188 | ;
|
---|
| 189 | TRIM(RCTXT) ;Remove starting and ending spaces
|
---|
| 190 | N RCI,RES
|
---|
| 191 | S RES=RCTXT
|
---|
| 192 | F RCI=1:1:$L(RES) Q:$E(RES,RCI)'=" "
|
---|
| 193 | I RCI>1 S $E(RES,1,RCI-1)=""
|
---|
| 194 | F RCI=$L(RES):-1:1 Q:$E(RES,RCI)'=" "
|
---|
| 195 | I RCI<$L(RES) S $E(RES,RCI+1,$L(RES))=""
|
---|
| 196 | Q RES
|
---|
| 197 | ;
|
---|
| 198 | ;Adjust Account Receivable Transaction Type:
|
---|
| 199 | ;1) Convert to upper case
|
---|
| 200 | ;2) Undefined will became "OPEN"
|
---|
| 201 | ;3) OPEN will became "113,112,102,107"
|
---|
| 202 | ADJTYPE(RCTYPE) ;
|
---|
| 203 | S RCTYPE=$TR($G(RCTYPE,"OPEN"),"openal ","OPENAL") ; Convert tp upper case
|
---|
| 204 | I RCTYPE="OPEN" S RCTYPE="113,112,102,107"
|
---|
| 205 | Q
|
---|
| 206 | ;
|
---|
| 207 | ;Program error trap
|
---|
| 208 | ERROR Q -3
|
---|
| 209 | ;
|
---|
| 210 | ;Temporary entry points - test only! Will be removed after testing
|
---|
| 211 | TEST N C,R,P,A,O
|
---|
| 212 | S (P,C)=0 F S P=$O(^DPT("AICN",P)) Q:'P S R=$$DETAIL(.O,P,"ALL") I R>0 I $D(O) W !,P,?20,R,! D TESTZW(.O) S C=C+1 Q:C>500
|
---|
| 213 | Q
|
---|
| 214 | ;
|
---|
| 215 | TEST2 N C,R,P,A
|
---|
| 216 | S (P,C)=0 F S P=$O(^PRCA(430,"B",P)) Q:'P S R=$$TRANS(.A,P) I R W !,P,?20,R,! I $D(A) D TESTZW(.A) S C=C+1 Q:C>500
|
---|
| 217 | Q
|
---|
| 218 | TESTZW(PRA) N RCI
|
---|
| 219 | S RCI="" F S RCI=$O(PRA(RCI)) Q:'RCI W !,RCI,?10,PRA(RCI)
|
---|
| 220 | Q
|
---|