change_health 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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