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 +4 -4
- data/CHANGELOG.md +6 -2
- data/lib/change_health/models/eligibility_benefit.rb +92 -74
- data/lib/change_health/models/eligibility_data.rb +18 -1
- data/lib/change_health/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b0b56067f1d8d9ab3e54a1918670934f56817700335fe0f5ba91ddd20909532a
|
4
|
+
data.tar.gz: 21f21c91f3e6cd84b3bad13f76f149f809a52b0cb3e9ff548e92617aa5fb28b0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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] - [
|
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...
|
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
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
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
|
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.
|
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-
|
11
|
+
date: 2020-03-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|