/
api_status_alerts.rb
118 lines (100 loc) · 3.03 KB
/
api_status_alerts.rb
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
# frozen_string_literal: true
class ApiStatusAlerts
include ActiveModel::Model
attr_accessor :decision_review
def all
case decision_review
when Appeal
appeal_alerts
when AppealStatusApiDecorator
appeal_alerts
else
claim_review_alerts
end
end
def claim_review_alerts
[
post_decision
].compact
end
def appeal_alerts
[
post_decision,
post_remand_decision,
post_effectuation,
evidentiary_period,
scheduled_hearing
].flatten.compact.uniq
end
def appeal?
decision_review.is_a?(AppealStatusApiDecorator) || decision_review.is_a?(Appeal)
end
def post_decision
return unless decision_review.api_alerts_show_decision_alert?
return unless Time.zone.today <= decision_review.due_date_to_appeal_decision
return if appeal? && Time.zone.today > decision_review.cavc_due_date
{
type: "ama_post_decision",
details:
{
decisionDate: decision_review.decision_date_for_api_alert,
availableOptions: decision_review.available_review_options,
dueDate: decision_review.due_date_to_appeal_decision,
cavcDueDate: appeal? ? (decision_review.decision_date_for_api_alert + 120.days) : nil
}
}
end
def post_remand_decision
return unless decision_review.remand_decision_event_date
return unless decision_review.decision_event_date
return unless Time.zone.today <= decision_review.remand_decision_event_date + 365.days
decision_review.remand_supplemental_claims.map do |remand_sc|
{
type: "ama_post_decision",
details:
{
decisionDate: remand_sc.decision_event_date,
availableOptions: remand_sc.available_review_options,
dueDate: remand_sc.decision_event_date + 365.days,
cavcDueDate: remand_sc.decision_event_date + 120.days
}
}
end
end
def post_effectuation
# only the effectuations tracked in VBMS
return unless decision_review.decision_effectuation_event_date
{
type: "ama_post_decision",
details:
{
decisionDate: decision_review.decision_effectuation_event_date,
availableOptions: decision_review.available_review_options,
dueDate: decision_review.decision_effectuation_event_date + 365.days,
cavcDueDate: decision_review.decision_effectuation_event_date + 120.days
}
}
end
def evidentiary_period
return unless decision_review.evidence_submission_hold_pending?
task = decision_review.tasks.open.find_by(type: EvidenceSubmissionWindowTask.name)
{
type: "evidentiary_period",
details: {
due_date: task.timer_ends_at.to_date
}
}
end
def scheduled_hearing
return unless decision_review.hearing_docket?
scheduled_hearing = decision_review.scheduled_hearing
return unless scheduled_hearing
{
type: "scheduled_hearing",
details: {
date: scheduled_hearing.scheduled_for.to_date,
type: decision_review.api_scheduled_hearing_type
}
}
end
end