Repository navigation
Expand file tree
/
Copy pathsimplified_expenses_checker_flow.rb
More file actions
304 lines (261 loc) · 8.37 KB
/
Copy pathsimplified_expenses_checker_flow.rb
File metadata and controls
304 lines (261 loc) · 8.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
class SimplifiedExpensesCheckerFlow < SmartAnswer::Flow
def define
content_id "8ad76560-8a27-42ee-9a99-8aaa8f0109a5"
name "simplified-expenses-checker"
status :published
# Q1 - vehicle expense
radio :vehicle_expense? do
option :car
option :van
option :motorcycle
option :no_vehicle
on_response do |response|
self.calculator = SmartAnswer::Calculators::SimplifiedExpensesCheckerCalculator.new
calculator.type_of_vehicle = response
end
next_node do
question :home_or_business_premises_expense?
end
end
# Q2 - home or business premises expense
radio :home_or_business_premises_expense? do
option :using_home_for_business
option :live_on_business_premises
option :no_expense
on_response do |response|
calculator.business_premises_expense = response
end
next_node do |response|
calculator.business_premises_expense = response
if response == "no_expense" &&
calculator.type_of_vehicle == "no_vehicle"
outcome :you_cant_use_result
else
raise SmartAnswer::InvalidResponse if response =~ /live_on_business_premises.*?using_home_for_business/
if calculator.vehicle?
question :which_tax_year?
elsif calculator.working_from_home?
question :hours_work_home?
elsif calculator.living_on_business_premises?
question :deduct_from_premises?
end
end
end
end
# Q3 - which tax year?
radio :which_tax_year? do
option :'2026-2027'
option :'2025-2026'
option :'2024-2025'
option :'2023-2024'
option :'2022-2023'
on_response do |response|
calculator.tax_year = response
end
next_node do
question :buying_new_vehicle?
end
end
# Q4 - buying new vehicle?
radio :buying_new_vehicle? do
option :new
option :used
option :no
on_response do |response|
calculator.new_or_used_vehicle = response
end
next_node do |response|
if %w[new used].include?(response)
question :how_much_expect_to_claim?
else
question :capital_allowances?
end
end
end
# Q5 - capital allowances claimed?
# if yes => go to Result 3 if in Q1 only [car_van] and/or [motorcylce] was selected
#
# if yes and other expenses apart from cars and/or motorbikes selected in Q1 store as capital_allowance_claimed and add text to result (see result 2) and go to questions for other expenses, ie don't go to Q4 & Q8
#
# if no go to Q4
radio :capital_allowances? do
option :capital_allowance
option :simplified_expenses
option :no
on_response do |response|
calculator.selected_allowance = response
end
next_node do |response|
calculator.selected_allowance = response
if calculator.capital_allowance?
if calculator.vehicle_only?
outcome :capital_allowance_result
elsif calculator.home?
question :hours_work_home?
elsif calculator.business_premises?
question :deduct_from_premises?
end
elsif calculator.simplified_expenses?
if calculator.vehicle_only?
outcome :you_cant_claim_capital_allowance
elsif calculator.home?
question :hours_work_home?
elsif calculator.business_premises?
question :deduct_from_premises?
end
elsif calculator.no_allowance?
if calculator.van? || calculator.motorcycle?
question :how_much_expect_to_claim?
elsif calculator.car?
question :car_status_before_usage?
end
end
end
end
# Q6 - Was your car new or second-hand when you started using it for your business?
radio :car_status_before_usage? do
option :new
option :used
on_response do |response|
calculator.car_status_before_usage = response
end
next_node do
question :how_much_expect_to_claim?
end
end
# Q7 - claim vehicle expenses
money_question :how_much_expect_to_claim? do
on_response do |response|
calculator.vehicle_costs = response
end
next_node do
if calculator.car?
question :is_vehicle_green?
elsif calculator.van? || calculator.motorcycle?
question :price_of_vehicle?
end
end
end
# Q8 - is vehicle green?
radio :is_vehicle_green? do
option :low
option :medium
option :high
on_response do |response|
calculator.vehicle_emission = case response
when "low"
if calculator.new_car?
response
else
"medium"
end
else
response
end
end
next_node do
question :price_of_vehicle?
end
end
# Q9 - price of vehicle
money_question :price_of_vehicle? do
on_response do |response|
calculator.vehicle_price = response
end
next_node do
question :vehicle_business_use_time?
end
end
# Q10 - vehicle private use time
value_question :vehicle_business_use_time?, parse: :to_f do
# deduct percentage amount from [high_reimbursement_cost] or [medium_reimbursement_cost] and store as [high_reimbursement_write_off] or [medium_reimbursement_write_off]
on_response do |response|
calculator.business_use_percent = response
end
next_node do |response|
raise SmartAnswer::InvalidResponse if response.to_i > 100
if calculator.car? || calculator.van?
question :drive_business_miles_car_van?
else
question :drive_business_miles_motorcycle?
end
end
end
# Q11 - miles to drive for business car_or_van
value_question :drive_business_miles_car_van? do
on_response do |response|
calculator.business_miles_car_van = response
end
next_node do
if calculator.working_from_home?
question :hours_work_home?
elsif calculator.living_on_business_premises?
question :deduct_from_premises?
else
outcome :you_can_use_result
end
end
end
# Q12 - miles to drive for business motorcycle
value_question :drive_business_miles_motorcycle? do
on_response do |response|
calculator.business_miles_motorcycle = response
end
next_node do
if calculator.working_from_home?
question :hours_work_home?
elsif calculator.living_on_business_premises?
question :deduct_from_premises?
else
outcome :you_can_use_result
end
end
end
# Q13 - hours for home work
value_question :hours_work_home? do
on_response do |response|
calculator.hours_worked_home = response
end
next_node do |response|
if response.to_f < 1
raise SmartAnswer::InvalidResponse
elsif response.to_f < 25
outcome :you_cant_use_result
else
question :current_claim_amount_home?
end
end
end
# Q14 - how much do you claim?
money_question :current_claim_amount_home? do
on_response do |response|
calculator.home_costs = response
end
next_node do
outcome :you_can_use_result
end
end
# Q15 = how much do you deduct from premises for private use?
money_question :deduct_from_premises? do
on_response do |response|
calculator.business_premises_cost = response
end
next_node do
question :people_live_on_premises?
end
end
# Q16 - people who live on business premises?
value_question :people_live_on_premises?, parse: :to_i do
on_response do |response|
calculator.hours_lived_on_business_premises = response
end
next_node do
outcome :you_can_use_result
end
end
outcome :you_cant_use_result
outcome :you_can_use_result
outcome :capital_allowance_result
outcome :you_cant_claim_capital_allowance
end
end