Class: ChangeHealth::Response::EligibilityBenefit

Inherits:
Hash
  • Object
show all
Includes:
Hashie::Extensions::IndifferentAccess, Hashie::Extensions::MergeInitializer
Defined in:
lib/change_health/response/eligibility/eligibility_benefit.rb

Constant Summary collapse

OUT_OF_POCKET =
'G'
COPAYMENT =
'B'
COINSURANCE =
'A'
NON_COVERED =
'I'
DEDUCTIBLE =
'C'
INDIVIDUAL =
'IND'
CHILD =
'CHD'
EMPLOYEE =
'EMP'
FAMILY =
'FAM'
EMPLOYEE_AND_CHILD =
'ECH'
EMPLOYEE_AND_SPOUSE =
'ESP'
VISIT =
'27'
SERVICE_YEAR =
'22'
YEAR =
'23'
YTD =
'24'
DAY =
'7'
REMAINING =
'29'
CODES =
{
  out_of_pocket: OUT_OF_POCKET,
  copayment: COPAYMENT,
  coinsurance: COINSURANCE,
  non_covered: NON_COVERED,
  deductible: DEDUCTIBLE
}.freeze
COVERAGES =
{
  individual: INDIVIDUAL,
  child: CHILD,
  employee: EMPLOYEE,
  family: FAMILY,
  employee_and_child: EMPLOYEE_AND_CHILD,
  employee_and_spouse: EMPLOYEE_AND_SPOUSE
}.freeze
TIMEFRAMES =
{
  visit: VISIT,
  year: YEAR,
  remaining: REMAINING
}.freeze
MEDICARE =
{
  part_a: 'MA',
  part_b: 'MB',
  primary: 'MP'
}.freeze
HELPERS =
{
  timeQualifierCode: TIMEFRAMES,
  coverageLevelCode: COVERAGES,
  code: CODES
}.freeze

Instance Method Summary collapse

Instance Method Details

#amountObject



100
101
102
# File 'lib/change_health/response/eligibility/eligibility_benefit.rb', line 100

def amount
  coinsurance? ? benefitPercent : benefitAmount
end

#descriptionsObject



88
89
90
91
92
# File 'lib/change_health/response/eligibility/eligibility_benefit.rb', line 88

def descriptions
  data = additionalInformation || []

  data.filter_map { |info| info['description'] }
end

#in_plan_network?Boolean Also known as: in_plan?, in_network?

Returns:

  • (Boolean)


94
95
96
# File 'lib/change_health/response/eligibility/eligibility_benefit.rb', line 94

def in_plan_network?
  'Y' == self[:inPlanNetworkIndicatorCode] || (self[:inPlanNetworkIndicatorCode].nil? && medicare?)
end

#medicare?Boolean

Returns:

  • (Boolean)


68
69
70
# File 'lib/change_health/response/eligibility/eligibility_benefit.rb', line 68

def medicare?
  MEDICARE.value?(insuranceTypeCode)
end

#plan_date_rangeObject



119
120
121
122
# File 'lib/change_health/response/eligibility/eligibility_benefit.rb', line 119

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

#plan_date_range_endObject



128
129
130
# File 'lib/change_health/response/eligibility/eligibility_benefit.rb', line 128

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

#plan_date_range_startObject



124
125
126
# File 'lib/change_health/response/eligibility/eligibility_benefit.rb', line 124

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

#servicesObject



104
105
106
# File 'lib/change_health/response/eligibility/eligibility_benefit.rb', line 104

def services
  self['serviceTypeCodes']&.each_with_index&.map { |stc, i| [stc, self['serviceTypes']&.at(i)] } || []
end