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
|
---|