Class: HealthCareApplication
Constant Summary
collapse
- FORM_ID =
'10-10EZ'
- ACTIVEDUTY_ELIGIBILITY =
'TRICARE'
- DISABILITY_THRESHOLD =
50
- LOCKBOX =
Lockbox.new(key: Settings.lockbox.master_key, encode: true)
- EE_DATA_SELECTED_KEYS =
%i[
application_date
enrollment_date
preferred_facility
effective_date
primary_eligibility
priority_group
can_submit_financial_info
].freeze
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
#override_parsed_form, #soap
#log_exception_to_sentry, #log_message_to_sentry, #non_nil_hash?, #normalize_level, #rails_logger
#parsed_form
descendants_using_encryption, lockbox_options, #timestamp_attributes_for_update_in_model, #valid?
Instance Attribute Details
#async_compatible ⇒ Object
Returns the value of attribute async_compatible.
20
21
22
|
# File 'app/models/health_care_application.rb', line 20
def async_compatible
@async_compatible
end
|
#google_analytics_client_id ⇒ Object
Returns the value of attribute google_analytics_client_id.
20
21
22
|
# File 'app/models/health_care_application.rb', line 20
def google_analytics_client_id
@google_analytics_client_id
end
|
#user ⇒ Object
Returns the value of attribute user.
20
21
22
|
# File 'app/models/health_care_application.rb', line 20
def user
@user
end
|
Class Method Details
.determine_active_duty(primary_eligibility, veteran) ⇒ Object
114
115
116
|
# File 'app/models/health_care_application.rb', line 114
def self.determine_active_duty(primary_eligibility, veteran)
primary_eligibility == ACTIVEDUTY_ELIGIBILITY && veteran == 'false'
end
|
.determine_non_military(primary_eligibility, veteran, parsed_status) ⇒ Object
118
119
120
121
122
123
124
125
|
# File 'app/models/health_care_application.rb', line 118
def self.determine_non_military(primary_eligibility, veteran, parsed_status)
if parsed_status == HCA::EnrollmentEligibility::Constants::ACTIVEDUTY &&
!determine_active_duty(primary_eligibility, veteran)
HCA::EnrollmentEligibility::Constants::NON_MILITARY
else
parsed_status
end
end
|
.enrollment_status(icn, loa3) ⇒ Object
.get_user_identifier(user) ⇒ Hash
37
38
39
40
41
42
43
44
|
# File 'app/models/health_care_application.rb', line 37
def self.get_user_identifier(user)
return if user.nil?
{
'icn' => user.icn,
'edipi' => user.edipi
}
end
|
.parsed_ee_data(ee_data, loa3) ⇒ Object
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
# File 'app/models/health_care_application.rb', line 137
def self.parsed_ee_data(ee_data, loa3)
if loa3
parsed_status = HCA::EnrollmentEligibility::StatusMatcher.parse(
ee_data[:enrollment_status], ee_data[:ineligibility_reason]
)
parsed_status = determine_non_military(
ee_data[:primary_eligibility], ee_data[:veteran],
parsed_status
)
ee_data.slice(*EE_DATA_SELECTED_KEYS).merge(parsed_status:)
else
{ parsed_status: if ee_data[:enrollment_status].present?
HCA::EnrollmentEligibility::Constants::LOGIN_REQUIRED
else
HCA::EnrollmentEligibility::Constants::NONE_OF_THE_ABOVE
end }
end
end
|
.user_attributes(form) ⇒ Object
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
|
# File 'app/models/health_care_application.rb', line 173
def self.user_attributes(form)
form ||= {}
full_name = form['veteranFullName'] || {}
return_val = HCA::UserAttributes.new(
first_name: full_name['first'],
middle_name: full_name['middle'],
last_name: full_name['last'],
birth_date: form['veteranDateOfBirth'],
ssn: form['veteranSocialSecurityNumber'],
gender: form['gender']
)
raise Common::Exceptions::ValidationErrors, return_val unless return_val.valid?
return_val
end
|
.user_icn(user_attributes) ⇒ Object
165
166
167
168
169
170
171
|
# File 'app/models/health_care_application.rb', line 165
def self.user_icn(user_attributes)
HCA::RateLimitedSearch.create_rate_limited_searches(user_attributes) unless Settings.mvi_hca.skip_rate_limit
MPI::Service.new.find_profile_by_attributes(first_name: user_attributes.first_name,
last_name: user_attributes.last_name,
birth_date: user_attributes.birth_date,
ssn: user_attributes.ssn)&.profile&.icn
end
|
Instance Method Details
#failed? ⇒ Boolean
54
55
56
|
# File 'app/models/health_care_application.rb', line 54
def failed?
state == 'failed'
end
|
46
47
48
|
# File 'app/models/health_care_application.rb', line 46
def form_id
self.class::FORM_ID.upcase
end
|
200
201
202
|
# File 'app/models/health_care_application.rb', line 200
def form_submission_id
form_submission_id_string&.to_i
end
|
#process! ⇒ Object
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
|
# File 'app/models/health_care_application.rb', line 84
def process!
prefill_fields
unless valid?
StatsD.increment("#{HCA::Service::STATSD_KEY_PREFIX}.validation_error")
StatsD.increment("#{HCA::Service::STATSD_KEY_PREFIX}.validation_error_short_form") if short_form?
Raven.(
user_loa: user&.loa
)
PersonalInformationLog.create(
data: parsed_form,
error_class: 'HealthCareApplication ValidationError'
)
raise(Common::Exceptions::ValidationErrors, self)
end
has_email = parsed_form['email'].present?
if has_email || async_compatible
save!
submit_async(has_email)
else
submit_sync
end
end
|
#set_result_on_success!(result) ⇒ Object
191
192
193
194
195
196
197
198
|
# File 'app/models/health_care_application.rb', line 191
def set_result_on_success!(result)
update!(
state: 'success',
form_submission_id_string: result[:formSubmissionId].to_s,
timestamp: result[:timestamp]
)
end
|
58
59
60
|
# File 'app/models/health_care_application.rb', line 58
def short_form?
form.present? && parsed_form['lastServiceBranch'].blank?
end
|
#submit_sync ⇒ Object
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
# File 'app/models/health_care_application.rb', line 62
def submit_sync
@parsed_form = override_parsed_form(parsed_form)
result = begin
HCA::Service.new(user).submit_form(parsed_form)
rescue Common::Client::Errors::ClientError => e
log_exception_to_sentry(e)
raise Common::Exceptions::BackendServiceException.new(
nil, detail: e.message
)
end
Rails.logger.info "SubmissionID=#{result[:formSubmissionId]}"
result
rescue
log_submission_failure
raise
end
|
#success? ⇒ Boolean
50
51
52
|
# File 'app/models/health_care_application.rb', line 50
def success?
state == 'success'
end
|