change_health 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 885bb7a5c9be915a2c51cc63d4b45a5eb013cc3a17f78571d0570eda35e905a6
4
- data.tar.gz: b6b749cf7b8163c5a1dfd2e5342346bb5b8f3f80dc464c55c288cfcf394dc881
3
+ metadata.gz: b0b56067f1d8d9ab3e54a1918670934f56817700335fe0f5ba91ddd20909532a
4
+ data.tar.gz: 21f21c91f3e6cd84b3bad13f76f149f809a52b0cb3e9ff548e92617aa5fb28b0
5
5
  SHA512:
6
- metadata.gz: d58a5992be29a372fc36fb718339f8bb54110337e90aaf908ecff6ad33ace0cdb97c140b7e3d313f6f2acfd668887248df0a93da054a1bb566cc7715accd1fd2
7
- data.tar.gz: 14640d35e70012d1cb9ee8d5e7030d037e7fdae646b93be1cdf4a0610f701c7cbceaf5884aadc5f1ef4693ca2aff4802b5334a7c921ced6b12b568689c5ee96d
6
+ metadata.gz: 3720601af15b1053cb84df0eac6616dd594e02a62527f80e1650b4229ba26696fb5a34fd8b3f594d6b90e35350dc41c4924513b954386fceacd387f7020ce1f6
7
+ data.tar.gz: 0f687ea7cdd9a6b9d06ea5fd9f8543626ffc74e7d934e142711f6004cb68f94f5362ef51058be83129ee528df66d23927e0501b4880c33b74afde930aee7a31c
data/CHANGELOG.md CHANGED
@@ -4,8 +4,12 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
5
5
  and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
6
6
 
7
- ## [0.4.0] - [UNRELEASED]
7
+ ## [0.4.0] - [2020-03-10]
8
8
  ### Added
9
+ - EligibilityBenefit(s) Deductible information
10
+ - EligibilityBenefit(s) Employee information
11
+ - EligibilityData plan date information
12
+ - EligibilityData eligibility, plan and service date helpers on date info
9
13
 
10
14
  ## [0.3.0] - [2020-03-09]
11
15
  ### Added
@@ -29,7 +33,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
29
33
  - Authentication
30
34
  - Configuration
31
35
 
32
- [0.4.0]: https://github.com/WeInfuse/change_health/compare/v0.3.0...HEAD
36
+ [0.4.0]: https://github.com/WeInfuse/change_health/compare/v0.3.0...v0.4.0
33
37
  [0.3.0]: https://github.com/WeInfuse/change_health/compare/v0.2.0...v0.3.0
34
38
  [0.2.0]: https://github.com/WeInfuse/change_health/compare/v0.1.0...v0.2.0
35
39
  [0.1.0]: https://github.com/WeInfuse/change_health/compare/v0.1.0
@@ -1,5 +1,81 @@
1
1
  module ChangeHealth
2
2
  module Models
3
+ class EligibilityBenefit < Hash
4
+ include Hashie::Extensions::MergeInitializer
5
+ include Hashie::Extensions::IndifferentAccess
6
+
7
+ OUT_OF_POCKET = 'G'
8
+ COPAYMENT = 'B'
9
+ COINSURANCE = 'A'
10
+ NON_COVERED = 'I'
11
+ DEDUCTIBLE = 'C'
12
+
13
+ INDIVIDUAL = 'IND'
14
+ CHILD = 'CHD'
15
+ EMPLOYEE = 'EMP'
16
+
17
+ VISIT = '27'
18
+ YEAR = '23'
19
+ REMAINING = '29'
20
+
21
+ CODES = {
22
+ out_of_pocket: OUT_OF_POCKET,
23
+ copayment: COPAYMENT,
24
+ coinsurance: COINSURANCE,
25
+ non_covered: NON_COVERED,
26
+ deductible: DEDUCTIBLE
27
+ }
28
+ COVERAGES = {
29
+ individual: INDIVIDUAL,
30
+ child: CHILD,
31
+ employee: EMPLOYEE
32
+ }
33
+ TIMEFRAMES = {
34
+ visit: VISIT,
35
+ year: YEAR,
36
+ remaining: REMAINING
37
+ }
38
+ HELPERS = {
39
+ timeQualifierCode: TIMEFRAMES,
40
+ coverageLevelCode: COVERAGES,
41
+ code: CODES
42
+ }
43
+
44
+ HELPERS.each do |key, types|
45
+ types.each do |method, value|
46
+ define_method("#{method}?") do
47
+ value == self[key]
48
+ end
49
+ end
50
+ end
51
+
52
+ %w(benefitAmount benefitPercent).each do |amount_method|
53
+ define_method("#{amount_method}") do
54
+ format_amount(amount_method)
55
+ end
56
+ end
57
+
58
+ def in_plan_network?
59
+ return 'Y' == self[:inPlanNetworkIndicatorCode]
60
+ end
61
+ alias_method :in_plan?, :in_plan_network?
62
+ alias_method :in_network?, :in_plan_network?
63
+
64
+ def amount
65
+ self.coinsurance? ? self.benefitPercent : self.benefitAmount
66
+ end
67
+
68
+ def services
69
+ self['serviceTypeCodes']&.each_with_index&.map {|stc, i| [stc, self['serviceTypes']&.at(i)]} || []
70
+ end
71
+
72
+ private
73
+ def format_amount(key)
74
+ amt = self[key]
75
+ amt = amt.to_f unless amt.nil?
76
+ end
77
+ end
78
+
3
79
  class EligibilityBenefits < Array
4
80
  def initialize(benefits)
5
81
  super(benefits.map {|benefit| ChangeHealth::Models::EligibilityBenefit.new(benefit) })
@@ -13,23 +89,15 @@ module ChangeHealth
13
89
  self.find {|benefit| kwargs.all? {|k,v| benefit[k].is_a?(Array) ? benefit[k].include?(v) : v == benefit[k] } }
14
90
  end
15
91
 
16
- def individual
17
- self.where(coverageLevelCode: ChangeHealth::Models::EligibilityBenefit::INDIVIDUAL)
18
- end
19
-
20
92
  def in_network
21
93
  self.where(inPlanNetworkIndicatorCode: 'Y')
22
94
  end
23
95
 
24
- %w(visit year remaining).each do |method|
25
- define_method("#{method}s") do
26
- self.where(timeQualifierCode: Object.const_get("ChangeHealth::Models::EligibilityBenefit::#{method.upcase}"))
27
- end
28
- end
29
-
30
- %w(out_of_pocket copayment coinsurance).each do |method|
31
- define_method("#{method}s") do
32
- self.where(code: Object.const_get("ChangeHealth::Models::EligibilityBenefit::#{method.upcase}"))
96
+ ChangeHealth::Models::EligibilityBenefit::HELPERS.each do |key, types|
97
+ types.each do |method, value|
98
+ define_method("#{method}s") do
99
+ self.where(key => value)
100
+ end
33
101
  end
34
102
  end
35
103
 
@@ -49,11 +117,22 @@ module ChangeHealth
49
117
  self.individual.out_of_pockets.years.where(kwargs).first
50
118
  end
51
119
 
120
+ def individual_deductible_remaining(**kwargs)
121
+ self.individual.deductibles.remainings.where(kwargs).first
122
+ end
123
+
124
+ def individual_deductible_total(**kwargs)
125
+ self.individual.deductibles.years.where(kwargs).first
126
+ end
127
+
52
128
  alias_method :oops, :out_of_pockets
53
129
  alias_method :copays, :copayments
54
130
  alias_method :individual_copay_visit, :individual_copayment_visit
55
131
  alias_method :individual_oop_remaining, :individual_out_of_pocket_remaining
56
132
  alias_method :individual_oop_total, :individual_out_of_pocket_total
133
+ alias_method :individual, :individuals
134
+ alias_method :employee, :employees
135
+ alias_method :child, :childs
57
136
 
58
137
  private
59
138
  def benefit_matches?(benefit, k, v)
@@ -72,66 +151,5 @@ module ChangeHealth
72
151
  end
73
152
  end
74
153
  end
75
-
76
- class EligibilityBenefit < Hash
77
- include Hashie::Extensions::MergeInitializer
78
- include Hashie::Extensions::IndifferentAccess
79
-
80
- OUT_OF_POCKET = 'G'
81
- COPAYMENT = 'B'
82
- COINSURANCE = 'A'
83
- NON_COVERED = 'I'
84
-
85
- INDIVIDUAL = 'IND'
86
- CHILD = 'CHD'
87
-
88
- VISIT = '27'
89
- YEAR = '23'
90
- REMAINING = '29'
91
-
92
- %w(individual child).each do |coverage_level|
93
- define_method("#{coverage_level}?") do
94
- Object.const_get("ChangeHealth::Models::EligibilityBenefit::#{coverage_level.upcase}") == self['coverageLevelCode']
95
- end
96
- end
97
-
98
- %w(visit year remaining).each do |time_qualifier|
99
- define_method("#{time_qualifier}?") do
100
- Object.const_get("ChangeHealth::Models::EligibilityBenefit::#{time_qualifier.upcase}") == self['timeQualifier']
101
- end
102
- end
103
-
104
- %w(out_of_pocket copayment coinsurance non_covered).each do |type|
105
- define_method("#{type}?") do
106
- Object.const_get("ChangeHealth::Models::EligibilityBenefit::#{type.upcase}") == self['code']
107
- end
108
- end
109
-
110
- %w(benefitAmount benefitPercent).each do |amount_method|
111
- define_method("#{amount_method}") do
112
- format_amount(amount_method)
113
- end
114
- end
115
-
116
- def in_plan_network?
117
- return 'Y' == self[:inPlanNetworkIndicatorCode]
118
- end
119
- alias_method :in_plan?, :in_plan_network?
120
- alias_method :in_network?, :in_plan_network?
121
-
122
- def amount
123
- self.coinsurance? ? self.benefitPercent : self.benefitAmount
124
- end
125
-
126
- def services
127
- self['serviceTypeCodes']&.each_with_index&.map {|stc, i| [stc, self['serviceTypes']&.at(i)]} || []
128
- end
129
-
130
- private
131
- def format_amount(key)
132
- amt = self[key]
133
- amt = amt.to_f unless amt.nil?
134
- end
135
- end
136
154
  end
137
155
  end
@@ -19,12 +19,25 @@ module ChangeHealth
19
19
  return '1' == plan_status(service_code: service_code).dig('statusCode')
20
20
  end
21
21
 
22
- %w(planStatus benefitsInformation controlNumber).each do |v|
22
+ %w(planStatus benefitsInformation controlNumber planDateInformation).each do |v|
23
23
  define_method(v) do
24
24
  @raw.dig(v)
25
25
  end
26
26
  end
27
27
 
28
+ %w(eligibilityBegin planBegin service).each do |f|
29
+ define_method(f) do
30
+ d = self.date_info&.dig(f)
31
+
32
+ begin
33
+ d = Date.strptime(d, ChangeHealth::Models::DATE_FORMAT)
34
+ rescue
35
+ end
36
+
37
+ return d
38
+ end
39
+ end
40
+
28
41
  def plan_status(service_code: )
29
42
  self.planStatus&.find {|plan| plan.dig('serviceTypeCodes').include?(service_code) } || {}
30
43
  end
@@ -36,6 +49,10 @@ module ChangeHealth
36
49
  alias_method :control_number, :controlNumber
37
50
  alias_method :benefits_information, :benefitsInformation
38
51
  alias_method :plan_statuses, :planStatus
52
+ alias_method :date_info, :planDateInformation
53
+ alias_method :eligibility_begin_date, :eligibilityBegin
54
+ alias_method :plan_begin_date, :planBegin
55
+ alias_method :service_date, :service
39
56
  end
40
57
  end
41
58
  end
@@ -1,3 +1,3 @@
1
1
  module ChangeHealth
2
- VERSION = '0.3.0'.freeze
2
+ VERSION = '0.4.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: change_health
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Crockett
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-03-09 00:00:00.000000000 Z
11
+ date: 2020-03-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty