Class: ChangeHealth::Response::EligibilityData

Inherits:
ResponseData
  • Object
show all
Defined in:
lib/change_health/response/eligibility/eligibility_data.rb

Constant Summary collapse

ACTIVE =
'1'
INACTIVE =
'6'

Instance Attribute Summary

Attributes inherited from ResponseData

#raw, #response

Instance Method Summary collapse

Methods inherited from ResponseData

#errors, #errors?, #initialize, #recommend_retry?, #request_body, #server_error

Constructor Details

This class inherits a constructor from ChangeHealth::Response::ResponseData

Instance Method Details

#active?(service_code: '30') ⇒ Boolean

Returns:

  • (Boolean)


9
10
11
# File 'lib/change_health/response/eligibility/eligibility_data.rb', line 9

def active?(service_code: '30')
  plan_status(service_code: service_code, single: false).any? { |status| ACTIVE == status['statusCode'] }
end

#benefitsObject

rubocop:enable Metrics/CyclomaticComplexity rubocop:enable Metrics/PerceivedComplexity



61
62
63
64
65
66
67
68
69
# File 'lib/change_health/response/eligibility/eligibility_data.rb', line 61

def benefits
  kname   = "ChangeHealth::Response::EligibilityBenefits#{trading_partner_id&.upcase}"
  klazz   = Object.const_get(kname) if Module.const_defined?(kname)
  klazz ||= ChangeHealth::Response::EligibilityBenefits

  klazz = klazz.factory(self) if klazz.respond_to?(:factory)

  klazz.new(benefitsInformation || [])
end

#dependents?Boolean

Returns:

  • (Boolean)


17
18
19
# File 'lib/change_health/response/eligibility/eligibility_data.rb', line 17

def dependents?
  true == dependents&.any?
end

#inactive?(service_code: '30') ⇒ Boolean

Returns:

  • (Boolean)


13
14
15
# File 'lib/change_health/response/eligibility/eligibility_data.rb', line 13

def inactive?(service_code: '30')
  plan_status(service_code: service_code, single: false).any? { |status| INACTIVE == status['statusCode'] }
end

#medicare?(**kwargs) ⇒ Boolean

Returns:

  • (Boolean)


71
72
73
# File 'lib/change_health/response/eligibility/eligibility_data.rb', line 71

def medicare?(**kwargs)
  false == benefits.empty? && benefits.where(**kwargs).all?(&:medicare?)
end

#plan?(name) ⇒ Boolean

Returns:

  • (Boolean)


75
76
77
# File 'lib/change_health/response/eligibility/eligibility_data.rb', line 75

def plan?(name)
  plan_names.any?(name)
end

#plan_date_rangeObject



36
37
38
39
# File 'lib/change_health/response/eligibility/eligibility_data.rb', line 36

def plan_date_range
  pd = date_info&.dig('plan') || ''
  pd.split('-')
end

#plan_date_range_endObject



45
46
47
# File 'lib/change_health/response/eligibility/eligibility_data.rb', line 45

def plan_date_range_end
  ChangeHealth::Models::PARSE_DATE.call(plan_date_range[1])
end

#plan_date_range_startObject



41
42
43
# File 'lib/change_health/response/eligibility/eligibility_data.rb', line 41

def plan_date_range_start
  ChangeHealth::Models::PARSE_DATE.call(plan_date_range[0])
end

#plan_namesObject



79
80
81
# File 'lib/change_health/response/eligibility/eligibility_data.rb', line 79

def plan_names
  planStatus&.filter_map { |plan_status| plan_status['planDetails'] } || []
end

#plan_status(service_code:, single: true) ⇒ Object

rubocop:disable Metrics/CyclomaticComplexity rubocop:disable Metrics/PerceivedComplexity



51
52
53
54
55
56
57
# File 'lib/change_health/response/eligibility/eligibility_data.rb', line 51

def plan_status(service_code:, single: true)
  if true == single
    planStatus&.find { |plan| plan['serviceTypeCodes']&.include?(service_code) } || {}
  else
    planStatus&.select { |plan| plan['serviceTypeCodes']&.include?(service_code) } || []
  end
end

#trading_partner?(name) ⇒ Boolean

Returns:

  • (Boolean)


83
84
85
# File 'lib/change_health/response/eligibility/eligibility_data.rb', line 83

def trading_partner?(name)
  trading_partner_id == name
end

#trading_partner_idObject



87
88
89
# File 'lib/change_health/response/eligibility/eligibility_data.rb', line 87

def trading_partner_id
  @raw['tradingPartnerServiceId']
end