| 1 | BPSOS57 ;BHAM ISC/FCS/DRS/FLS - BPS Log of Transactions Utils ;06/01/2004
 | 
|---|
| 2 |  ;;1.0;E CLAIMS MGMT ENGINE;**1,5**;JUN 2004;Build 45
 | 
|---|
| 3 |  ;;Per VHA Directive 2004-038, this routine should not be modified.
 | 
|---|
| 4 |  Q
 | 
|---|
| 5 |  ; Numerous BPS Log of Transaction functions are here
 | 
|---|
| 6 |  ; Each assumes that IEN57 is defined
 | 
|---|
| 7 |  ; Originally copied from BPSOSQ
 | 
|---|
| 8 |  ;
 | 
|---|
| 9 | PREVIOUS(N57) ;
 | 
|---|
| 10 |  I '$D(N57) S N57=IEN57
 | 
|---|
| 11 |  N RXI,RXR S RXI=$P(^BPSTL(N57,1),U,11)
 | 
|---|
| 12 |  S RXR=$P(^BPSTL(N57,1),U)
 | 
|---|
| 13 |  I RXI=""!(RXR="") Q ""
 | 
|---|
| 14 |  Q $O(^BPSTL("NON-FILEMAN","RXIRXR",RXI,RXR,N57),-1)
 | 
|---|
| 15 | LAST57(RXI,RXR) Q $O(^BPSTL("NON-FILEMAN","RXIRXR",RXI,RXR,""),-1)
 | 
|---|
| 16 | DRGDFN() ; EP - BPS Log of Transaction field
 | 
|---|
| 17 |  N RXI
 | 
|---|
| 18 |  S RXI=$$RXI
 | 
|---|
| 19 |  I 'RXI Q ""
 | 
|---|
| 20 |  Q $$RXAPI1^BPSUTIL1(RXI,6,"I") ; Given IEN57, return DRGDFN
 | 
|---|
| 21 | DRGNAME() ; EP - BPS Log of Transaction field
 | 
|---|
| 22 |  N RXI
 | 
|---|
| 23 |  S RXI=$$RXI
 | 
|---|
| 24 |  I 'RXI Q ""
 | 
|---|
| 25 |  Q $$RXAPI1^BPSUTIL1(RXI,6,"E") ; Given IEN57, return DRGNAME
 | 
|---|
| 26 | RELDATE() ;EP - BPS Log of Transaction field
 | 
|---|
| 27 |  N RXI,RXR
 | 
|---|
| 28 |  S RXI=$$RXI,RXR=$$RXR
 | 
|---|
| 29 |  I 'RXI Q ""
 | 
|---|
| 30 |  I RXR Q $$REFAPI1^BPSUTIL1(RXI,RXR,17,"I")
 | 
|---|
| 31 |  Q $$RXAPI1^BPSUTIL1(RXI,31,"I")
 | 
|---|
| 32 | RXI() Q $P(^BPSTL(IEN57,1),U,11) ; Given IEN57, return RXI
 | 
|---|
| 33 | RXR() Q $P(^BPSTL(IEN57,1),U,1) ; Given IEN57, return RXR
 | 
|---|
| 34 | NDC() Q $P(^BPSTL(IEN57,1),U,2)
 | 
|---|
| 35 | QTY() Q $P(^BPSTL(IEN57,5),U) ; Given IEN57, return quantity
 | 
|---|
| 36 | AMT() Q $P(^BPSTL(IEN57,5),U,5) ; return total $amount
 | 
|---|
| 37 | CHG() Q $P(^BPSTL(IEN57,5),U,5) ; Given IEN57, ret total charge
 | 
|---|
| 38 | INSIEN() Q $P(^BPSTL(IEN57,1),U,6)
 | 
|---|
| 39 | PATIENT() Q $P(^BPSTL(IEN57,0),U,6)
 | 
|---|
| 40 | HRN() ; Health record number and facility abbreviation
 | 
|---|
| 41 |  ; Called by BPS Log of Transaction field
 | 
|---|
| 42 |  Q 0
 | 
|---|
| 43 | USER() N X S X=$P(^BPSTL(IEN57,0),U,10) S:'X X=$G(DUZ) Q X
 | 
|---|
| 44 | NOW() N %,%H,%I,X D NOW^%DTC Q %
 | 
|---|
| 45 | ISREVERS(N) ;EP - BPSOSIY
 | 
|---|
| 46 |  ; Returns reversal claim #, else false
 | 
|---|
| 47 |  N X S X=$G(^BPSTL(N,4)) Q:X="" 0
 | 
|---|
| 48 |  I X Q $P(X,U) ; reversal of electronic claim
 | 
|---|
| 49 |  Q 0
 | 
|---|
| 50 | REVACC(N) ;EP - BPSOSIY
 | 
|---|
| 51 |  ; was this an accepted reversal? return true or false
 | 
|---|
| 52 |  ; Treat Duplicate of Accepted Reversal ("S") as accepted
 | 
|---|
| 53 |  N X
 | 
|---|
| 54 |  S X=$$REVRESP(N)
 | 
|---|
| 55 |  Q X="A"!(X="S")
 | 
|---|
| 56 | REVRESP(N) ;
 | 
|---|
| 57 |  N RESP S RESP=$P(^BPSTL(N,4),U,2)
 | 
|---|
| 58 |  I 'RESP Q "?"
 | 
|---|
| 59 |  N X S X=$$RESP500^BPSOSQ4(RESP,"I")
 | 
|---|
| 60 |  Q X ; Should be "A" or "R" - can be "S" (Duplicate of Accepted Reversal)
 | 
|---|
| 61 |  ;
 | 
|---|
| 62 | POSITION() ; return pointer to position within claim (D1)
 | 
|---|
| 63 |  Q $P($G(^BPSTL(IEN57,0)),U,9)
 | 
|---|
| 64 | IEN02() ; return pointer to claim
 | 
|---|
| 65 |  Q $P($G(^BPSTL(IEN57,0)),U,4)
 | 
|---|
| 66 | IEN03() ; return pointer to response
 | 
|---|
| 67 |  Q $P($G(^BPSTL(IEN57,0)),U,5)
 | 
|---|
| 68 | REVIEN02() ; return pointer to reversal claim
 | 
|---|
| 69 |  Q $P($G(^BPSTL(IEN57,4)),U)
 | 
|---|
| 70 | REVIEN03() ; return pointer to reversal response
 | 
|---|
| 71 |  Q $P($G(^BPSTL(IEN57,4)),U,2)
 | 
|---|
| 72 | FIELD(F,REV) ; EP - BPS Log of Transaction fields
 | 
|---|
| 73 |  ; Retrieve field F from claim or response - Given IEN57
 | 
|---|
| 74 |  ; Returns value
 | 
|---|
| 75 |  ; Special for reject codes:  F=511 gets ","-delimited string of codes
 | 
|---|
| 76 |  ;  F=511.01 gets first code, F=511.02 gets second one, etc.
 | 
|---|
| 77 |  N X,IEN02,IEN03,POS,IEN57 S IEN57=D0
 | 
|---|
| 78 |  S POS=$$POSITION,IEN02=$$IEN02,IEN03=$$IEN03
 | 
|---|
| 79 |  I $G(REV) S IEN02=$$REVIEN02,IEN03=$$REVIEN03
 | 
|---|
| 80 |  ;
 | 
|---|
| 81 |  ; Validate IENs
 | 
|---|
| 82 |  I 'IEN02 Q ""
 | 
|---|
| 83 |  I 'POS,F=308!(F>400) Q ""
 | 
|---|
| 84 |  I 'IEN03,F>500 Q ""
 | 
|---|
| 85 |  ;
 | 
|---|
| 86 |  ; Get Data
 | 
|---|
| 87 |  I F<400,F'=308 S X=$$GET1^DIQ(9002313.02,IEN02_",",F,"I")
 | 
|---|
| 88 |  E  I F=308!(F>400&(F<500)) S X=$$GET1^DIQ(9002313.0201,POS_","_IEN02_",",F,"I")
 | 
|---|
| 89 |  E  I F=501!(F=524) S X=$$GET1^DIQ(9002313.03,IEN03_",",F,"I")
 | 
|---|
| 90 |  E  I F\1=511 D REJCODES S:F#1 X=$G(X(F#1*100))
 | 
|---|
| 91 |  E  S X=$$GET1^DIQ(9002313.0301,POS_","_IEN03_",",F,"I")
 | 
|---|
| 92 |  ;
 | 
|---|
| 93 |  ; Do format conversions
 | 
|---|
| 94 |  F  Q:$E(X,$L(X))'=" "  S X=$E(X,1,$L(X)-1)
 | 
|---|
| 95 |  D STRIPID ; strip field ID, if any
 | 
|---|
| 96 |  D MONEY ; money fields, where appropriate
 | 
|---|
| 97 |  D OTHER ; other special conversions
 | 
|---|
| 98 |  Q X
 | 
|---|
| 99 |  ;
 | 
|---|
| 100 | REJCODES ; rejection codes for IEN03
 | 
|---|
| 101 |  ; X = ","-delimited string of two-char codes
 | 
|---|
| 102 |  ; X(j)=code_" "_description
 | 
|---|
| 103 |  K X S X=""
 | 
|---|
| 104 |  N I,J S (I,J)=0
 | 
|---|
| 105 |  F  S I=$O(^BPSR(IEN03,1000,POS,511,I)) Q:'I  D
 | 
|---|
| 106 |  . N A S A=$P(^BPSR(IEN03,1000,POS,511,I,0),U) Q:'A
 | 
|---|
| 107 |  . S A=$O(^BPSF(9002313.93,"B",A,0)) Q:'A
 | 
|---|
| 108 |  . S A=^BPSF(9002313.93,A,0)
 | 
|---|
| 109 |  . S:X]"" X=X_"," S X=X_$P(A,U)
 | 
|---|
| 110 |  . S J=J+1,X(J)=$P(A,U)_" "_$P(A,U,2)
 | 
|---|
| 111 |  Q
 | 
|---|
| 112 |  ;
 | 
|---|
| 113 | STRIPID ; some fields have two-character field ID
 | 
|---|
| 114 |  ; and first eliminate all those that don't:
 | 
|---|
| 115 |  Q:F<307  Q:F=308
 | 
|---|
| 116 |  I F>400,F<500 Q:F<410  Q:F=411  Q:F=414  Q:F=415  Q:F=419  Q:F=420  Q:F=426
 | 
|---|
| 117 |  ;IHS/DSD/lwj 10/02 nxt line changed on behalf of David Slauenwhite
 | 
|---|
| 118 |  I F>500 Q:F<512  Q:F=525  Q:F=526  ;DS 10/11/01
 | 
|---|
| 119 |  S X=$E(X,3,$L(X))
 | 
|---|
| 120 |  Q
 | 
|---|
| 121 | MONEY ; some fields are money fields in signed overpunch format
 | 
|---|
| 122 |  Q:F<400
 | 
|---|
| 123 |  ;IHS/DSD/lwj 10/02 nxt line changed on behalf of David Slauenwhite
 | 
|---|
| 124 |  I F>400,F<500 I F'=409,F'=410,F'=426,F'=430,F'=431,F'=433,F'=438,F'=428,F'=412 Q
 | 
|---|
| 125 |  I F>500 Q:F<505  Q:F=510  Q:F\1=511  Q:F=522  Q:F>523
 | 
|---|
| 126 |  S X=+$$DFF2EXT^BPSECFM(X)
 | 
|---|
| 127 |  I X=0 S X="" ; so [CAPTIONED] doesn't print it
 | 
|---|
| 128 |  Q
 | 
|---|
| 129 | OTHER ; other special conversions
 | 
|---|
| 130 |  I F=442 S X=X/1000 Q  ; metric decimal quantity
 | 
|---|
| 131 |  Q
 | 
|---|