Module: HCA::EnrollmentEligibility::StatusMatcher
- Defined in:
- lib/hca/enrollment_eligibility/status_matcher.rb
Constant Summary collapse
- ELIGIBLE_STATUS_CATEGORIES =
Defines the collection of eligible HCA enrollment statuses.
To add a new status, it **must also be added** to the /app/models/notification#status enum values hash.
[ HCA::EnrollmentEligibility::Constants::ACTIVEDUTY, HCA::EnrollmentEligibility::Constants::CANCELED_DECLINED, HCA::EnrollmentEligibility::Constants::CLOSED, HCA::EnrollmentEligibility::Constants::DECEASED, HCA::EnrollmentEligibility::Constants::ENROLLED, HCA::EnrollmentEligibility::Constants::INELIG_CHAMPVA, HCA::EnrollmentEligibility::Constants::INELIG_CHARACTER_OF_DISCHARGE, HCA::EnrollmentEligibility::Constants::INELIG_CITIZENS, HCA::EnrollmentEligibility::Constants::INELIG_FILIPINOSCOUTS, HCA::EnrollmentEligibility::Constants::INELIG_FUGITIVEFELON, HCA::EnrollmentEligibility::Constants::INELIG_GUARD_RESERVE, HCA::EnrollmentEligibility::Constants::INELIG_MEDICARE, HCA::EnrollmentEligibility::Constants::INELIG_NOT_ENOUGH_TIME, HCA::EnrollmentEligibility::Constants::INELIG_NOT_VERIFIED, HCA::EnrollmentEligibility::Constants::INELIG_OTHER, HCA::EnrollmentEligibility::Constants::INELIG_OVER65, HCA::EnrollmentEligibility::Constants::INELIG_REFUSEDCOPAY, HCA::EnrollmentEligibility::Constants::INELIG_TRAINING_ONLY, HCA::EnrollmentEligibility::Constants::LOGIN_REQUIRED, HCA::EnrollmentEligibility::Constants::NONE_OF_THE_ABOVE, HCA::EnrollmentEligibility::Constants::PENDING_MT, HCA::EnrollmentEligibility::Constants::PENDING_OTHER, HCA::EnrollmentEligibility::Constants::PENDING_PURPLEHEART, HCA::EnrollmentEligibility::Constants::PENDING_UNVERIFIED, HCA::EnrollmentEligibility::Constants::REJECTED_INC_WRONGENTRY, HCA::EnrollmentEligibility::Constants::REJECTED_RIGHTENTRY, HCA::EnrollmentEligibility::Constants::REJECTED_SC_WRONGENTRY, HCA::EnrollmentEligibility::Constants::NON_MILITARY ].freeze
- CATCHALL_CATEGORIES =
[ { enrollment_status: 'rejected', category: HCA::EnrollmentEligibility::Constants::REJECTED_RIGHTENTRY }, { enrollment_status: 'not eligible', category: HCA::EnrollmentEligibility::Constants::INELIG_OTHER } ].freeze
- CATEGORIES =
{ enrollment_status: 'verified', category: HCA::EnrollmentEligibility::Constants::ENROLLED }, { enrollment_status: ['not eligible', 'not eligible; ineligible date'], text_matches: [ { category: HCA::EnrollmentEligibility::Constants::INELIG_NOT_ENOUGH_TIME, strings: ['24 months', 'less than', '24 mos', '24months', 'two years'] }, { category: HCA::EnrollmentEligibility::Constants::INELIG_TRAINING_ONLY, strings: ['training only', 'trng only'], acronyms: %w[ADT ACDUTRA ADUTRA] }, { category: HCA::EnrollmentEligibility::Constants::INELIG_CHARACTER_OF_DISCHARGE, strings: [ 'other than honorable', 'dishonorable', 'bad conduct', 'dis for va pur' ], acronyms: %w[OTH DVA] }, { category: HCA::EnrollmentEligibility::Constants::INELIG_NOT_VERIFIED, strings: ['no proof', 'no record', 'non-vet', 'non vet', 'unable to verify', 'not a veteran', '214'] }, { category: HCA::EnrollmentEligibility::Constants::INELIG_GUARD_RESERVE, strings: %w[guard reserve reservist] }, { category: HCA::EnrollmentEligibility::Constants::INELIG_CHAMPVA, strings: ['champva'] }, { category: HCA::EnrollmentEligibility::Constants::INELIG_FUGITIVEFELON, strings: ['felon'] }, { category: HCA::EnrollmentEligibility::Constants::INELIG_MEDICARE, strings: ['medicare'] }, { category: HCA::EnrollmentEligibility::Constants::INELIG_OVER65, strings: ['over 65'] }, { category: HCA::EnrollmentEligibility::Constants::INELIG_CITIZENS, strings: ['citizen'] }, { category: HCA::EnrollmentEligibility::Constants::INELIG_FILIPINOSCOUTS, strings: ['filipino'] }, { category: HCA::EnrollmentEligibility::Constants::REJECTED_SC_WRONGENTRY, strings: ['disability'] }, { category: HCA::EnrollmentEligibility::Constants::REJECTED_INC_WRONGENTRY, strings: ['income'] } ] }, { enrollment_status: 'not applicable', category: HCA::EnrollmentEligibility::Constants::ACTIVEDUTY }, { enrollment_status: 'deceased', category: HCA::EnrollmentEligibility::Constants::DECEASED }, { enrollment_status: 'closed application', category: HCA::EnrollmentEligibility::Constants::CLOSED }, { enrollment_status: 'not eligible; refused to pay copay', category: HCA::EnrollmentEligibility::Constants::INELIG_REFUSEDCOPAY }, { enrollment_status: 'pending; means test required', category: HCA::EnrollmentEligibility::Constants::PENDING_MT }, { enrollment_status: 'pending; eligibility status is unverified', category: HCA::EnrollmentEligibility::Constants::PENDING_UNVERIFIED }, { enrollment_status: 'pending; other', category: HCA::EnrollmentEligibility::Constants::PENDING_OTHER }, { enrollment_status: 'pending; purple heart unconfirmed', category: HCA::EnrollmentEligibility::Constants::PENDING_PURPLEHEART }, { enrollment_status: 'cancelled/declined', category: HCA::EnrollmentEligibility::Constants::CANCELED_DECLINED } ].freeze
Class Method Summary collapse
- .category_matcher(statuses, enroll_status) ⇒ Object
- .parse(enrollment_status, ineligibility_reason = '') ⇒ Object
- .parse_catchall_categories(enrollment_status) ⇒ Object
- .process_text_match(text_matches, ineligibility_reason) ⇒ Object
Instance Method Summary collapse
- #category_matcher(statuses, enroll_status) ⇒ Object private
- #parse(enrollment_status, ineligibility_reason = '') ⇒ Object private
- #parse_catchall_categories(enrollment_status) ⇒ Object private
- #process_text_match(text_matches, ineligibility_reason) ⇒ Object private
Class Method Details
.category_matcher(statuses, enroll_status) ⇒ Object
183 184 185 186 187 |
# File 'lib/hca/enrollment_eligibility/status_matcher.rb', line 183 def category_matcher(statuses, enroll_status) return statuses.include?(enroll_status) if statuses.is_a?(Array) enroll_status == statuses end |
.parse(enrollment_status, ineligibility_reason = '') ⇒ Object
197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 |
# File 'lib/hca/enrollment_eligibility/status_matcher.rb', line 197 def parse(enrollment_status, ineligibility_reason = '') return HCA::EnrollmentEligibility::Constants::NONE_OF_THE_ABOVE if enrollment_status.blank? enrollment_status = enrollment_status.downcase.strip CATEGORIES.find { |c| category_matcher(c[:enrollment_status], enrollment_status) }.tap do |category_data| next unless category_data if category_data[:text_matches] process_text_match(category_data[:text_matches], ineligibility_reason).tap do |category| return category if category.present? end else return category_data[:category] end end parse_catchall_categories(enrollment_status).tap { |c| return c if c.present? } HCA::EnrollmentEligibility::Constants::NONE_OF_THE_ABOVE end |
.parse_catchall_categories(enrollment_status) ⇒ Object
189 190 191 192 193 194 195 |
# File 'lib/hca/enrollment_eligibility/status_matcher.rb', line 189 def parse_catchall_categories(enrollment_status) CATCHALL_CATEGORIES.each do |category_data| return category_data[:category] if enrollment_status.include?(category_data[:enrollment_status]) end nil end |
.process_text_match(text_matches, ineligibility_reason) ⇒ Object
163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
# File 'lib/hca/enrollment_eligibility/status_matcher.rb', line 163 def process_text_match(text_matches, ineligibility_reason) text_matches.each do |text_match_data| category = text_match_data[:category] text_match_data[:strings].each do |string| return category if ineligibility_reason.downcase.include?(string) end text_match_data[:acronyms].tap do |acronyms| next if acronyms.blank? acronyms.each do |acronym| return category if ineligibility_reason.include?(acronym) end end end nil end |
Instance Method Details
#category_matcher(statuses, enroll_status) ⇒ Object (private)
183 184 185 186 187 |
# File 'lib/hca/enrollment_eligibility/status_matcher.rb', line 183 def category_matcher(statuses, enroll_status) return statuses.include?(enroll_status) if statuses.is_a?(Array) enroll_status == statuses end |
#parse(enrollment_status, ineligibility_reason = '') ⇒ Object (private)
197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 |
# File 'lib/hca/enrollment_eligibility/status_matcher.rb', line 197 def parse(enrollment_status, ineligibility_reason = '') return HCA::EnrollmentEligibility::Constants::NONE_OF_THE_ABOVE if enrollment_status.blank? enrollment_status = enrollment_status.downcase.strip CATEGORIES.find { |c| category_matcher(c[:enrollment_status], enrollment_status) }.tap do |category_data| next unless category_data if category_data[:text_matches] process_text_match(category_data[:text_matches], ineligibility_reason).tap do |category| return category if category.present? end else return category_data[:category] end end parse_catchall_categories(enrollment_status).tap { |c| return c if c.present? } HCA::EnrollmentEligibility::Constants::NONE_OF_THE_ABOVE end |
#parse_catchall_categories(enrollment_status) ⇒ Object (private)
189 190 191 192 193 194 195 |
# File 'lib/hca/enrollment_eligibility/status_matcher.rb', line 189 def parse_catchall_categories(enrollment_status) CATCHALL_CATEGORIES.each do |category_data| return category_data[:category] if enrollment_status.include?(category_data[:enrollment_status]) end nil end |
#process_text_match(text_matches, ineligibility_reason) ⇒ Object (private)
163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
# File 'lib/hca/enrollment_eligibility/status_matcher.rb', line 163 def process_text_match(text_matches, ineligibility_reason) text_matches.each do |text_match_data| category = text_match_data[:category] text_match_data[:strings].each do |string| return category if ineligibility_reason.downcase.include?(string) end text_match_data[:acronyms].tap do |acronyms| next if acronyms.blank? acronyms.each do |acronym| return category if ineligibility_reason.include?(acronym) end end end nil end |