1 | FBAAFS ;WCIOFO/dmk,SAB-OUTPATIENT FEE SCHEDULE ;5/27/2006
|
---|
2 | ;;3.5;FEE BASIS;**4,53,71,92,99**;JAN 30, 1995
|
---|
3 | ;
|
---|
4 | LOOKUP ; Entry point for option to get fee schdule amount
|
---|
5 | ; without having to enter in a payment
|
---|
6 | ;
|
---|
7 | W !!
|
---|
8 | ;
|
---|
9 | ; ask date of service - required
|
---|
10 | S DIR(0)="D^::EX",DIR("A")="Enter date of service"
|
---|
11 | S DIR("B")=$$FMTE^XLFDT($S($G(FBDATE):FBDATE,1:DT))
|
---|
12 | D ^DIR K DIR I $D(DIRUT) G LOOKUPX
|
---|
13 | S FBDATE=+Y
|
---|
14 | I FBDATE<2990901 W !,"Note: Date is prior to VA implementation of RBRVS fee schedule (9/1/99).",!
|
---|
15 | ;
|
---|
16 | D CPTM^FBAALU(FBDATE) I 'FBGOT G LOOKUPX
|
---|
17 | S FBCPT=FBX
|
---|
18 | S FBMODLE=$$MODL^FBAAUTL4("FBMODA","E")
|
---|
19 | ;
|
---|
20 | ; ask vendor - optional
|
---|
21 | S DIR(0)="PO^161.2:EM",DIR("A")="Enter Fee Basis Vendor [optional]"
|
---|
22 | D ^DIR K DIR I $D(DTOUT)!$D(DUOUT) G LOOKUPX
|
---|
23 | S FBVEN=$P(Y,U)
|
---|
24 | ;
|
---|
25 | ; ask zip - required
|
---|
26 | D ASKZIP(FBVEN,FBDATE) I FBZIP="" G LOOKUPX
|
---|
27 | ;
|
---|
28 | ; ask place of service OR facility
|
---|
29 | ;S DIR(0)="SA^0:NON-FACILITY;1:FACILITY",DIR("A")="Place of Service: "
|
---|
30 | ;S DIR("B")="NON-FACILITY"
|
---|
31 | ;D ^DIR K DIR I $D(DIRUT) G LOOKUPX
|
---|
32 | ;S FBFAC=Y
|
---|
33 | D POS^FBAACO1 I '$G(FBHCFA(30)) G LOOKUPX
|
---|
34 | S FBFAC=$$FAC(FBHCFA(30))
|
---|
35 | I FBFAC="" W $C(7),!,"Error: Can't determine if facility or non-facility setting" G LOOKUPX
|
---|
36 | ;
|
---|
37 | ; report schedule amount
|
---|
38 | S FBRSLT=$$GET^FBAAFS(FBCPT,FBMODLE,FBDATE,FBZIP,FBFAC)
|
---|
39 | I $P($G(FBRSLT),U)]"" D
|
---|
40 | . W !?5,"Amount to Pay: $ ",$P(FBRSLT,U)," from the "
|
---|
41 | . W:$P(FBRSLT,U,3)]"" $P(FBRSLT,U,3)," " ; year if returned
|
---|
42 | . W:$P(FBRSLT,U,2)]"" $$EXTERNAL^DILFD(162.03,45,"",$P(FBRSLT,U,2))
|
---|
43 | I $P($G(FBRSLT),U)']"" D
|
---|
44 | . W !?5,"Unable to determine a FEE schedule amount.",!
|
---|
45 | . I $D(FBERR) D DERR
|
---|
46 | ;
|
---|
47 | G LOOKUP
|
---|
48 | ;
|
---|
49 | LOOKUPX ; exit for lookup
|
---|
50 | K DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
|
---|
51 | K FBAACP,FBAAOUT,FBCPT,FBDATE,FBERR,FBFAC,FBGOT,FBMOD,FBMODLE,FBMODS
|
---|
52 | K FBRSLT,FBVEN,FBX,FBZIP
|
---|
53 | Q
|
---|
54 | ;
|
---|
55 | GET(CPT,MODL,DOS,ZIP,FAC,TIME) ; call to calculate Fee Schedule amount
|
---|
56 | ; Input
|
---|
57 | ; CPT - CPT/HCPCS code, external value, required
|
---|
58 | ; MODL - list of optional CPT/HCPCS modifiers, external values
|
---|
59 | ; delimited by commas
|
---|
60 | ; DOS - date of service, fileman format, required
|
---|
61 | ; ZIP - zip code, 5 digit, required
|
---|
62 | ; FAC - facility flag, 0 or 1, required
|
---|
63 | ; indicates if procedure was performed in facility (1)
|
---|
64 | ; or non-facility (0)
|
---|
65 | ; TIME - anesthesia time (minutes), reserved for future use
|
---|
66 | ; Returns string
|
---|
67 | ; dollar amount^schedule used^schedule year (only when RBRVS)
|
---|
68 | ;
|
---|
69 | N FBAMT,FBERR,FBSCH,FBSCHYR
|
---|
70 | ; initialization
|
---|
71 | S (FBAMT,FBSCH,FBSCHYR)=""
|
---|
72 | K FBERR
|
---|
73 | S CPT=$G(CPT)
|
---|
74 | S DOS=$G(DOS)
|
---|
75 | S ZIP=$G(ZIP)
|
---|
76 | S FAC=$G(FAC)
|
---|
77 | S TIME=$G(TIME)
|
---|
78 | ;
|
---|
79 | ; validate input parameters
|
---|
80 | I CPT="" D ERR("Missing CPT")
|
---|
81 | I DOS'?7N D ERR("Invalid Date of Service")
|
---|
82 | ;
|
---|
83 | ; try RBRVS schedule
|
---|
84 | I '$D(FBERR) D
|
---|
85 | . S FBX=$$RBRVS^FBAAFSR(CPT,MODL,DOS,ZIP,FAC,TIME)
|
---|
86 | . S:$P(FBX,U)]"" FBAMT=$P(FBX,U),FBSCH="R",FBSCHYR=$P(FBX,U,2)
|
---|
87 | . K FBERR
|
---|
88 | ;
|
---|
89 | ; if not on RBRVS schedule try 75th percentile schedule
|
---|
90 | I '$D(FBERR),FBAMT']"" D
|
---|
91 | . S FBAMT=$$PRCTL^FBAAFSF(CPT,MODL,DOS)
|
---|
92 | . S:FBAMT]"" FBSCH="F",FBSCHYR=""
|
---|
93 | . K FBERR
|
---|
94 | ;
|
---|
95 | ; return result
|
---|
96 | K FBERR
|
---|
97 | Q $S(FBAMT]"":FBAMT_U_FBSCH_U_FBSCHYR,1:"")
|
---|
98 | ;
|
---|
99 | ERR(MSG) ; add error message to array
|
---|
100 | S FBERR=$G(FBERR)+1
|
---|
101 | S FBERR(FBERR)=MSG
|
---|
102 | Q
|
---|
103 | ;
|
---|
104 | DERR ; display error messages
|
---|
105 | N FBI
|
---|
106 | F FBI=0 F S FBI=$O(FBERR(FBI)) Q:'FBI W !,FBERR(FBI)
|
---|
107 | Q
|
---|
108 | ;
|
---|
109 | ASKZIP(FBVEN,FBDOS) ;called from payment routines to ask user the
|
---|
110 | ;site of service zip code.
|
---|
111 | ; input
|
---|
112 | ; FBVEN - (optional) internal entry number of vendor (#161.2)
|
---|
113 | ; used to determine a default zip code
|
---|
114 | ; FBDOS - (optional) date of service
|
---|
115 | ; used to determine if GPCIs are available for the zip code
|
---|
116 | ; output
|
---|
117 | ; FBZIP - zip code, 5 digit
|
---|
118 | ; FBAAOUT if user '^' out without answering
|
---|
119 | N DIR,DUOUT,DIRUT,DTOUT,X,Y
|
---|
120 | N FBCY,FBGPCIY0
|
---|
121 | ASKZIP1 ;
|
---|
122 | S FBZIP=""
|
---|
123 | S DIR(0)="162.03,42"
|
---|
124 | ; set default zip code if vendor available
|
---|
125 | I $G(FBVEN) D
|
---|
126 | . S X=$P($P($G(^FBAAV(FBVEN,0)),U,6),"-")
|
---|
127 | . I X]"" S DIR("B")=X
|
---|
128 | D ^DIR K DIR I $D(DIRUT) S FBAAOUT=1 Q
|
---|
129 | S FBZIP=Y
|
---|
130 | ;
|
---|
131 | ; if date after VA implementation then check for GPCIs
|
---|
132 | I $G(FBDOS)]"",FBDOS>2990900 D I Y D ASKZIP1
|
---|
133 | . S FBCY=$E(FBDOS,1,3)+1700
|
---|
134 | . ; if year after most recent RBRVS schedule then use prior year sched
|
---|
135 | . I FBCY>$$LASTCY^FBAAFSR() S FBCY=FBCY-1
|
---|
136 | . D ZIP^FBAAFSR(FBCY,FBZIP)
|
---|
137 | . S Y=0 I FBGPCIY0="" D
|
---|
138 | . . W $C(7),!,"Warning: ",FBCY," GPCIs are not on file for this zip code."
|
---|
139 | . . S DIR(0)="Y",DIR("A")="Do you want to enter a different zip code"
|
---|
140 | . . S DIR("B")="YES"
|
---|
141 | . . S DIR("?",1)="Geographic Practice Cost Index (GPCI) values are"
|
---|
142 | . . S DIR("?",2)="needed for calculation of the RBRVS physician fee"
|
---|
143 | . . S DIR("?",3)="schedule amount. There are not any GPCI values on"
|
---|
144 | . . S DIR("?",4)="file for the specified year and zip code."
|
---|
145 | . . S DIR("?")="Answer YES to enter a different zip code."
|
---|
146 | . . D ^DIR K DIR
|
---|
147 | Q
|
---|
148 | ;
|
---|
149 | ASKTIME ;called to ask time in minutes if the service provided
|
---|
150 | ;is an anesthesia service (00100-01999)
|
---|
151 | ;return FBTIME equal to # of minutes or zero if '^'/timeout
|
---|
152 | ;return FBAAOUT if user does not answer
|
---|
153 | S FBTIME=0
|
---|
154 | S DIR(0)="162.03,43" D ^DIR K DIR I $D(DTOUT)!($D(DUOUT)) S FBAAOUT=1 Q
|
---|
155 | S FBTIME=+Y
|
---|
156 | I '$G(FBTIME) D G ASKTIME
|
---|
157 | . W !,$C(7),"Time entry is required!",!
|
---|
158 | Q
|
---|
159 | ;
|
---|
160 | ANES(CPT) ; call to determine if the CPT code has a major category
|
---|
161 | ;of anesthesia.
|
---|
162 | ; CPT = 5 digit CPT code (EXTERNAL)
|
---|
163 | ; returns 1 if CPT is an anesthesia code else return 0.
|
---|
164 | ;
|
---|
165 | S CPT=$G(CPT)
|
---|
166 | Q $S(+CPT>99&(+CPT<2000):1,1:0)
|
---|
167 | ;
|
---|
168 | FAC(POS) ; call to determine if the place of service is a facility
|
---|
169 | ; Input
|
---|
170 | ; POS - place of service, internal, pointer to #353.1
|
---|
171 | ; Returns 0 or 1 or null
|
---|
172 | ; = 0 if place of service is non-facility setting
|
---|
173 | ; = 1 if place of service is facility setting
|
---|
174 | ; = null value if type of setting could not be determined
|
---|
175 | N CODE,RET
|
---|
176 | S (CODE,RET)=""
|
---|
177 | I $G(POS)]"" S CODE=$$GET1^DIQ(353.1,POS,.01)
|
---|
178 | ; list of codes considered as facility settings
|
---|
179 | S FCODE="^21^22^23^24^26^31^34^41^42^51^52^53^56^61^"
|
---|
180 | ; list of codes considered as non-facility settings
|
---|
181 | S NFCODE="^01^03^04^09^11^12^13^14^15^20^25^32^33^49^50^54^55^57^60^62^65^71^72^81^99^"
|
---|
182 | I FCODE[(U_CODE_U) S RET=1
|
---|
183 | I NFCODE[(U_CODE_U) S RET=0
|
---|
184 | Q RET
|
---|
185 | ;
|
---|
186 | ;FBAAFS
|
---|