| [613] | 1 | FBAAUTL4 ;AISC/CMR,dmk,WCIOFO/SAB-UTILITY ROUTINE ;7/11/2001 | 
|---|
|  | 2 | ;;3.5;FEE BASIS;**4,32,77,81**;JAN 30, 1995 | 
|---|
|  | 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
|  | 4 | ; | 
|---|
|  | 5 | CPT(X,Y,FBSRVDT) ;return external format of CPT code | 
|---|
|  | 6 | ;INPUT   X = ien of CPT | 
|---|
|  | 7 | ;optional Y I Y return description, I 'Y return external format of CPT | 
|---|
|  | 8 | ;optional FBSRVDT - date of service | 
|---|
|  | 9 | ;OUTPUT  external format of CPT code or description of CPT code | 
|---|
|  | 10 | I '$G(X) Q "" | 
|---|
|  | 11 | N Z | 
|---|
|  | 12 | S Z=$$CPT^ICPTCOD(X,$S($G(FBSRVDT)>0:+$G(FBSRVDT),1:""),1) | 
|---|
|  | 13 | Q $S('$G(Y):$P(Z,U,2),1:$P(Z,U,3)) | 
|---|
|  | 14 | ; | 
|---|
|  | 15 | MOD(X,Y,FBSRVDT) ;return external format of modifier | 
|---|
|  | 16 | ;INPUT   X = ien of modifier | 
|---|
|  | 17 | ;optional Y I Y return description, I 'Y return external format of mod | 
|---|
|  | 18 | ;optional FBSRVDT - date of service | 
|---|
|  | 19 | ;OUTPUT  external format of modifier or description of CPT code | 
|---|
|  | 20 | I '$G(X) Q "" | 
|---|
|  | 21 | N Z | 
|---|
|  | 22 | S Z=$$MOD^ICPTMOD(X,"I",$S($G(FBSRVDT)>0:+$G(FBSRVDT),1:""),1) | 
|---|
|  | 23 | Q $S('$G(Y):$P(Z,U,2),1:$P(Z,U,3)) | 
|---|
|  | 24 | ; | 
|---|
|  | 25 | CPTDATA(W,X,Y,Z) ;get internal value of CPT | 
|---|
|  | 26 | ; input | 
|---|
|  | 27 | ;   W = IEN of PATIENT in file 162 | 
|---|
|  | 28 | ;   X = IEN of VENDOR multiple in file 162 | 
|---|
|  | 29 | ;   Y = IEN of INITIAL TREATMENT DATE multiple in file 162 | 
|---|
|  | 30 | ;   Z = IEN of SERVICE PROVIDED multiple in file 162 | 
|---|
|  | 31 | ; returns | 
|---|
|  | 32 | ;   value of SERVICE PROVIDED (internal) | 
|---|
|  | 33 | ; | 
|---|
|  | 34 | I '$G(W)!('$G(X))!('$G(Y))!('$G(Z)) Q "" | 
|---|
|  | 35 | Q $P($G(^FBAAC(W,1,X,1,Y,1,Z,0)),U) | 
|---|
|  | 36 | ; | 
|---|
|  | 37 | MODDATA(W,X,Y,Z) ;get internal values of CPT Modifier | 
|---|
|  | 38 | ; input | 
|---|
|  | 39 | ;   W = IEN of PATIENT in file 162 | 
|---|
|  | 40 | ;   X = IEN of VENDOR multiple in file 162 | 
|---|
|  | 41 | ;   Y = IEN of INITIAL TREATMENT DATE multiple in file 162 | 
|---|
|  | 42 | ;   Z = IEN of SERVICE PROVIDED multiple in file 162 | 
|---|
|  | 43 | ; output | 
|---|
|  | 44 | ;   FBMODA( array of CPT MODIFIERs | 
|---|
|  | 45 | ;     FBMODA(#)=CPT MODIFIER (internal value) | 
|---|
|  | 46 | ;     where # is the IEN for an entry in the CPT MODIFIER multiple | 
|---|
|  | 47 | K FBMODA | 
|---|
|  | 48 | I '$G(W)!('$G(X))!('$G(Y))!('$G(Z)) Q | 
|---|
|  | 49 | N FBI,FBMOD | 
|---|
|  | 50 | S FBI=0 F  S FBI=$O(^FBAAC(W,1,X,1,Y,1,Z,"M",FBI)) Q:'FBI  D | 
|---|
|  | 51 | . S FBMOD=$P($G(^FBAAC(W,1,X,1,Y,1,Z,"M",FBI,0)),U) | 
|---|
|  | 52 | . Q:FBMOD="" | 
|---|
|  | 53 | . S FBMODA(FBI)=FBMOD | 
|---|
|  | 54 | Q | 
|---|
|  | 55 | ; | 
|---|
|  | 56 | APS(FBJ,FBK,FBL,FBM) ; amount paid symbol | 
|---|
|  | 57 | ; input | 
|---|
|  | 58 | ;   FBJ = IEN of PATIENT in file 162 | 
|---|
|  | 59 | ;   FBK = IEN of VENDOR multiple in file 162 | 
|---|
|  | 60 | ;   FBL = IEN of INITIAL TREATMENT DATE multiple in file 162 | 
|---|
|  | 61 | ;   FBM = IEN of SERVICE PROVIDED multiple in file 162 | 
|---|
|  | 62 | ; returns symbol | 
|---|
|  | 63 | ;   where value is M (Mill Bill emergency care - 38 U.S.C. 1725) | 
|---|
|  | 64 | ;                  R (RBRVS fee schedule amount) | 
|---|
|  | 65 | ;                  F (VA fee schedule amount) | 
|---|
|  | 66 | ;                  C (contracted service amount) | 
|---|
|  | 67 | ;                  U (usual & customary - claimed) | 
|---|
|  | 68 | ;                  null if no amount paid | 
|---|
|  | 69 | N FBAP,FBRET,FBY0,FBY2 | 
|---|
|  | 70 | S FBRET="" | 
|---|
|  | 71 | S FBY0=$G(^FBAAC(FBJ,1,FBK,1,FBL,1,FBM,0)) | 
|---|
|  | 72 | S FBY2=$G(^FBAAC(FBJ,1,FBK,1,FBL,1,FBM,2)) | 
|---|
|  | 73 | S FBAP=$P(FBY0,U,3) | 
|---|
|  | 74 | I FBAP>0 D | 
|---|
|  | 75 | . ; use fee schedule info for payment (if any) | 
|---|
|  | 76 | . I +FBAP=+$P(FBY2,U,12) S FBRET=$P(FBY2,U,13) Q:FBRET]"" | 
|---|
|  | 77 | . ; if no fee schedule info then calc 75th percentile and check | 
|---|
|  | 78 | . I $P(FBY2,U,12)="" D  Q:FBRET]"" | 
|---|
|  | 79 | . . S FBCPT=$$CPT($P(FBY0,U)) | 
|---|
|  | 80 | . . S FBMODL=$$MODL("^FBAAC("_FBJ_",1,"_FBK_",1,"_FBL_",1,"_FBM_",""M"")","E") | 
|---|
|  | 81 | . . S FBDOS=$P($G(^FBAAC(FBJ,1,FBK,1,FBL,0)),U) | 
|---|
|  | 82 | . . I +FBAP=+$$PRCTL^FBAAFSF(FBCPT,FBMODL,FBDOS) S FBRET="F" | 
|---|
|  | 83 | . ; since not paid by a fee schedule, check prompt pay type | 
|---|
|  | 84 | . I $P(FBY2,U,2) S FBRET="C" Q | 
|---|
|  | 85 | . ; since not fee schedule or contract check POV code to identify | 
|---|
|  | 86 | . ;   Mill Bill payments | 
|---|
|  | 87 | . S:"^39^52^"[(U_$P($G(^FBAA(161.82,+$P(FBY0,U,18),0)),U,3)_U) FBRET="M" | 
|---|
|  | 88 | . Q:FBRET]"" | 
|---|
|  | 89 | . ; all other payments considered u&c | 
|---|
|  | 90 | . S FBRET="U" | 
|---|
|  | 91 | Q FBRET | 
|---|
|  | 92 | ; | 
|---|
|  | 93 | CHKBI(X,Y) ;called to determine if batch number or invoice number | 
|---|
|  | 94 | ;already exists | 
|---|
|  | 95 | ;X= next batch/invoice number | 
|---|
|  | 96 | ;Y=1 if Batch | 
|---|
|  | 97 | ;Y undefined if invoice number passed | 
|---|
|  | 98 | ;returns a truth if X is ok for next batch/invoice # | 
|---|
|  | 99 | ; | 
|---|
|  | 100 | I 'X Q "" | 
|---|
|  | 101 | I $G(Y) Q $S($D(^FBAA(161.7,"B",X)):"",1:1) | 
|---|
|  | 102 | I '$G(Y) Q $S($D(^FBAA(162.1,"B",X)):"",$D(^FBAAI("B",X)):"",$D(^FBAAC("C",X)):"",1:1) | 
|---|
|  | 103 | ; | 
|---|
|  | 104 | MODL(FBAN,FBFLAG) ;return sorted list given array of modifiers | 
|---|
|  | 105 | ; Input | 
|---|
|  | 106 | ;   FBAN - closed root of array containing modifiers | 
|---|
|  | 107 | ;          the data must be in nodes descendent from this root. | 
|---|
|  | 108 | ;          The subscripts of the nodes below FBAN must be | 
|---|
|  | 109 | ;          positive numbers. The CPT MODIFIER internal value | 
|---|
|  | 110 | ;          must be the first piece in these nodes or in the | 
|---|
|  | 111 | ;          0-node descendent from these nodes. | 
|---|
|  | 112 | ;          i.e. | 
|---|
|  | 113 | ;            ARRAY(number)=CPT MODIFIER (internal value) | 
|---|
|  | 114 | ;                  OR | 
|---|
|  | 115 | ;            ARRAY(number,0)=CPT MODIFIER (internal value) | 
|---|
|  | 116 | ;   FBFLAG - (optional) flag, E or I, default I | 
|---|
|  | 117 | ;          I to return internal values of modifiers | 
|---|
|  | 118 | ;          E to return external values of modifiers | 
|---|
|  | 119 | ; Returns string of sorted modifiers (e.g. "1,3,7") | 
|---|
|  | 120 | ; | 
|---|
|  | 121 | N FBI,FBRET,FBSORT,FBX,FBZERO | 
|---|
|  | 122 | S FBRET="" | 
|---|
|  | 123 | S FBFLAG=$G(FBFLAG,"I") | 
|---|
|  | 124 | ; | 
|---|
|  | 125 | ; if any descendent data then determine if it is 0-node descendent | 
|---|
|  | 126 | S FBZERO=0 I $O(@FBAN@(0)),$D(@FBAN@($O(@FBAN@(0)),0))#2 S FBZERO=1 | 
|---|
|  | 127 | ; | 
|---|
|  | 128 | ; loop thru input array and place modifiers in a sort array | 
|---|
|  | 129 | S FBI=0 F  S FBI=$O(@FBAN@(FBI)) Q:'FBI  D | 
|---|
|  | 130 | . ; get the cpt modifier | 
|---|
|  | 131 | . I FBZERO S FBX=$P(@FBAN@(FBI,0),U) | 
|---|
|  | 132 | . E  S FBX=$P(@FBAN@(FBI),U) | 
|---|
|  | 133 | . I FBFLAG="E" D | 
|---|
|  | 134 | . . ; convert to external value | 
|---|
|  | 135 | . . S FBX=$$MOD^ICPTMOD(FBX,"I") | 
|---|
|  | 136 | . . I FBX>0 S FBX=$P(FBX,U,2) | 
|---|
|  | 137 | . . E  S FBX="" | 
|---|
|  | 138 | . I FBX]"" S FBSORT(FBX)="" | 
|---|
|  | 139 | ; | 
|---|
|  | 140 | ; loop thru sorted array and add the modifiers to return value | 
|---|
|  | 141 | S FBX="" F  S FBX=$O(FBSORT(FBX)) Q:FBX=""  S FBRET=FBRET_","_FBX | 
|---|
|  | 142 | ; | 
|---|
|  | 143 | ; strip leading comma (if any) | 
|---|
|  | 144 | I $E(FBRET)="," S FBRET=$E(FBRET,2,999) | 
|---|
|  | 145 | ; | 
|---|
|  | 146 | ; return value | 
|---|
|  | 147 | Q FBRET | 
|---|
|  | 148 | ; | 
|---|
|  | 149 | REPMOD(FBJ,FBK,FBL,FBM) ; Replace CPT Modifier(s) in payment | 
|---|
|  | 150 | ; input | 
|---|
|  | 151 | ;   FBJ = IEN of PATIENT in file 162 | 
|---|
|  | 152 | ;   FBK = IEN of VENDOR multiple in file 162 | 
|---|
|  | 153 | ;   FBL = IEN of INITIAL TREATMENT DATE multiple in file 162 | 
|---|
|  | 154 | ;   FBM = IEN of SERVICE PROVIDED multiple in file 162 | 
|---|
|  | 155 | ;   FBMODA( array of modifiers | 
|---|
|  | 156 | ;      where FBMODA(number)=CPT Modifier (internal) | 
|---|
|  | 157 | ; | 
|---|
|  | 158 | N FBI,FBIENS,FBFDA | 
|---|
|  | 159 | S FBIENS=FBM_","_FBL_","_FBK_","_FBJ_"," | 
|---|
|  | 160 | ; | 
|---|
|  | 161 | ; delete any existing CPT MODIFIER entries from global | 
|---|
|  | 162 | I $O(^FBAAC(FBJ,1,FBK,1,FBL,1,FBM,"M",0)) D | 
|---|
|  | 163 | . K FBFDA S FBI=0 | 
|---|
|  | 164 | . F  S FBI=$O(^FBAAC(FBJ,1,FBK,1,FBL,1,FBM,"M",FBI)) Q:'FBI  D | 
|---|
|  | 165 | . . S FBFDA(162.06,FBI_","_FBIENS,.01)="@" | 
|---|
|  | 166 | . D FILE^DIE("","FBFDA") D MSG^DIALOG() | 
|---|
|  | 167 | ; | 
|---|
|  | 168 | ; create CPT MODIFIER entries from data in array FBMODA | 
|---|
|  | 169 | I $O(FBMODA(0)) D | 
|---|
|  | 170 | . K FBFDA S FBI=0 F  S FBI=$O(FBMODA(FBI)) Q:'FBI  D | 
|---|
|  | 171 | . . S FBFDA(162.06,"+"_FBI_","_FBIENS,.01)=FBMODA(FBI) | 
|---|
|  | 172 | . D UPDATE^DIE("","FBFDA") D MSG^DIALOG() | 
|---|
|  | 173 | ; | 
|---|
|  | 174 | Q | 
|---|
|  | 175 | ; | 
|---|
|  | 176 | ;FBAAUTL4 | 
|---|