change_health 0.4.0 → 0.5.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 +13 -1
- data/lib/change_health.rb +1 -0
- data/lib/change_health/models/eligibility_benefit.rb +24 -77
- data/lib/change_health/models/eligibility_benefits.rb +75 -0
- data/lib/change_health/models/eligibility_data.rb +10 -8
- data/lib/change_health/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b245586b8b7f366d621983f271c11cceee11701edf47860ef6288aeee33051e7
|
4
|
+
data.tar.gz: be5d5ebc67cbd031859e5ff7b1b5b473e150bdc94c73090f3147e515c51821d1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3bc331e1e0fd50a4c2e9b372b6a679ee25d277b77c94f8aa4155d065be76797f0b86c1259e255eca95b5a6e4aa3c5e8b3e174583161b1c0c74c8de19ff9385aa
|
7
|
+
data.tar.gz: 83b1c0e1ec97e2b565cdf10a69ceb0bf90db494a6a8ae97d2ee6dba43a1a399cca5e4e3819de36e3b4eb9398917cc7c895b9bfc3102d23556ebeeda9e5130a7f
|
data/CHANGELOG.md
CHANGED
@@ -4,9 +4,20 @@ 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.5.0] - [2020-03-11]
|
8
|
+
### Added
|
9
|
+
- EligibilityBenefit Deductible information
|
10
|
+
- EligibilityBenefit benefits date information
|
11
|
+
- EligibilityBenefit(s) child
|
12
|
+
- EligibilityBenefit(s) employee
|
13
|
+
- EligibilityBenefit(s) family
|
14
|
+
- EligibilityBenefit(s) employee and child
|
15
|
+
|
16
|
+
### Changed
|
17
|
+
- Broke EligibilityBenefit and EligibilityBenefits into separate files
|
18
|
+
|
7
19
|
## [0.4.0] - [2020-03-10]
|
8
20
|
### Added
|
9
|
-
- EligibilityBenefit(s) Deductible information
|
10
21
|
- EligibilityBenefit(s) Employee information
|
11
22
|
- EligibilityData plan date information
|
12
23
|
- EligibilityData eligibility, plan and service date helpers on date info
|
@@ -33,6 +44,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
33
44
|
- Authentication
|
34
45
|
- Configuration
|
35
46
|
|
47
|
+
[0.5.0]: https://github.com/WeInfuse/change_health/compare/v0.4.0...v0.5.0
|
36
48
|
[0.4.0]: https://github.com/WeInfuse/change_health/compare/v0.3.0...v0.4.0
|
37
49
|
[0.3.0]: https://github.com/WeInfuse/change_health/compare/v0.2.0...v0.3.0
|
38
50
|
[0.2.0]: https://github.com/WeInfuse/change_health/compare/v0.1.0...v0.2.0
|
data/lib/change_health.rb
CHANGED
@@ -7,6 +7,7 @@ require 'change_health/authentication'
|
|
7
7
|
require 'change_health/models/eligibility'
|
8
8
|
require 'change_health/models/eligibility_data'
|
9
9
|
require 'change_health/models/eligibility_benefit'
|
10
|
+
require 'change_health/models/eligibility_benefits'
|
10
11
|
require 'change_health/models/encounter'
|
11
12
|
require 'change_health/models/provider'
|
12
13
|
require 'change_health/models/subscriber'
|
@@ -13,6 +13,8 @@ module ChangeHealth
|
|
13
13
|
INDIVIDUAL = 'IND'
|
14
14
|
CHILD = 'CHD'
|
15
15
|
EMPLOYEE = 'EMP'
|
16
|
+
FAMILY = 'FAM'
|
17
|
+
EMPLOYEE_AND_CHILD = 'ECH'
|
16
18
|
|
17
19
|
VISIT = '27'
|
18
20
|
YEAR = '23'
|
@@ -28,7 +30,9 @@ module ChangeHealth
|
|
28
30
|
COVERAGES = {
|
29
31
|
individual: INDIVIDUAL,
|
30
32
|
child: CHILD,
|
31
|
-
employee: EMPLOYEE
|
33
|
+
employee: EMPLOYEE,
|
34
|
+
family: FAMILY,
|
35
|
+
employee_and_child: EMPLOYEE_AND_CHILD
|
32
36
|
}
|
33
37
|
TIMEFRAMES = {
|
34
38
|
visit: VISIT,
|
@@ -55,6 +59,14 @@ module ChangeHealth
|
|
55
59
|
end
|
56
60
|
end
|
57
61
|
|
62
|
+
%w(insuranceType benefitsDateInformation).each do |method|
|
63
|
+
define_method("#{method}") do
|
64
|
+
self[method]
|
65
|
+
end
|
66
|
+
end
|
67
|
+
alias_method :date_info, :benefitsDateInformation
|
68
|
+
alias_method :insurance_type, :insuranceType
|
69
|
+
|
58
70
|
def in_plan_network?
|
59
71
|
return 'Y' == self[:inPlanNetworkIndicatorCode]
|
60
72
|
end
|
@@ -69,86 +81,21 @@ module ChangeHealth
|
|
69
81
|
self['serviceTypeCodes']&.each_with_index&.map {|stc, i| [stc, self['serviceTypes']&.at(i)]} || []
|
70
82
|
end
|
71
83
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
amt = amt.to_f unless amt.nil?
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
class EligibilityBenefits < Array
|
80
|
-
def initialize(benefits)
|
81
|
-
super(benefits.map {|benefit| ChangeHealth::Models::EligibilityBenefit.new(benefit) })
|
82
|
-
end
|
83
|
-
|
84
|
-
def where(**kwargs)
|
85
|
-
EligibilityBenefits.new(self.select {|benefit| kwargs.all? {|k,v| benefit_matches?(benefit, k, v) } })
|
86
|
-
end
|
87
|
-
|
88
|
-
def find_by(**kwargs)
|
89
|
-
self.find {|benefit| kwargs.all? {|k,v| benefit[k].is_a?(Array) ? benefit[k].include?(v) : v == benefit[k] } }
|
90
|
-
end
|
91
|
-
|
92
|
-
def in_network
|
93
|
-
self.where(inPlanNetworkIndicatorCode: 'Y')
|
94
|
-
end
|
95
|
-
|
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
|
84
|
+
%w(eligibilityBegin eligibilityEnd planBegin planEnd service).each do |f|
|
85
|
+
define_method(f) do
|
86
|
+
return ChangeHealth::Models::EligibilityData::PARSE_DATE.call(self.date_info&.dig(f))
|
101
87
|
end
|
102
88
|
end
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
def individual_copayment_visit(**kwargs)
|
109
|
-
self.individual.copayments.visits.where(kwargs).first
|
110
|
-
end
|
111
|
-
|
112
|
-
def individual_out_of_pocket_remaining(**kwargs)
|
113
|
-
self.individual.out_of_pockets.remainings.where(kwargs).first
|
114
|
-
end
|
115
|
-
|
116
|
-
def individual_out_of_pocket_total(**kwargs)
|
117
|
-
self.individual.out_of_pockets.years.where(kwargs).first
|
118
|
-
end
|
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
|
-
|
128
|
-
alias_method :oops, :out_of_pockets
|
129
|
-
alias_method :copays, :copayments
|
130
|
-
alias_method :individual_copay_visit, :individual_copayment_visit
|
131
|
-
alias_method :individual_oop_remaining, :individual_out_of_pocket_remaining
|
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
|
89
|
+
alias_method :eligibility_begin_date, :eligibilityBegin
|
90
|
+
alias_method :eligibility_end_date, :eligibilityEnd
|
91
|
+
alias_method :plan_begin_date, :planBegin
|
92
|
+
alias_method :plan_end_date, :planEnd
|
93
|
+
alias_method :service_date, :service
|
136
94
|
|
137
95
|
private
|
138
|
-
def
|
139
|
-
|
140
|
-
|
141
|
-
return v.any? {|possible_v| benefit[k].include?(possible_v) }
|
142
|
-
else
|
143
|
-
return benefit[k].include?(v)
|
144
|
-
end
|
145
|
-
else
|
146
|
-
if v.is_a?(Array)
|
147
|
-
return v.include?(benefit[k])
|
148
|
-
else
|
149
|
-
return v == benefit[k]
|
150
|
-
end
|
151
|
-
end
|
96
|
+
def format_amount(key)
|
97
|
+
amt = self[key]
|
98
|
+
amt = amt.to_f unless amt.nil?
|
152
99
|
end
|
153
100
|
end
|
154
101
|
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
module ChangeHealth
|
2
|
+
module Models
|
3
|
+
class EligibilityBenefits < Array
|
4
|
+
def initialize(benefits)
|
5
|
+
super(benefits.map {|benefit| ChangeHealth::Models::EligibilityBenefit.new(benefit) })
|
6
|
+
end
|
7
|
+
|
8
|
+
def where(**kwargs)
|
9
|
+
EligibilityBenefits.new(self.select {|benefit| kwargs.all? {|k,v| benefit_matches?(benefit, k, v) } })
|
10
|
+
end
|
11
|
+
|
12
|
+
def find_by(**kwargs)
|
13
|
+
self.find {|benefit| kwargs.all? {|k,v| benefit[k].is_a?(Array) ? benefit[k].include?(v) : v == benefit[k] } }
|
14
|
+
end
|
15
|
+
|
16
|
+
def in_network
|
17
|
+
self.where(inPlanNetworkIndicatorCode: 'Y')
|
18
|
+
end
|
19
|
+
|
20
|
+
ChangeHealth::Models::EligibilityBenefit::HELPERS.each do |key, types|
|
21
|
+
types.each do |method, value|
|
22
|
+
define_method("#{method}s") do
|
23
|
+
self.where(key => value)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def individual_coinsurance_visit(**kwargs)
|
29
|
+
self.individual.coinsurances.visits.where(kwargs).first
|
30
|
+
end
|
31
|
+
|
32
|
+
%w(family individual employee child employee_and_child).each do |method|
|
33
|
+
alias_method method, "#{method}s"
|
34
|
+
|
35
|
+
%w(copayment deductible out_of_pocket).each do |type_mod|
|
36
|
+
%w(year remaining visit).each do |time_mod|
|
37
|
+
method_name = "#{method}_#{type_mod}_#{time_mod}"
|
38
|
+
alias_name = method_name.gsub('copayment', 'copay').gsub('out_of_pocket', 'oop')
|
39
|
+
|
40
|
+
define_method(method_name) do |**kwargs|
|
41
|
+
self.send(method).send("#{type_mod}s").send("#{time_mod}s").where(kwargs).first || self.send(method).send("#{type_mod}s").where(kwargs).first
|
42
|
+
end
|
43
|
+
|
44
|
+
alias_method alias_name, method_name if alias_name != method_name
|
45
|
+
|
46
|
+
if method_name.include?('year')
|
47
|
+
alias_method method_name.gsub('year', 'total'), method_name
|
48
|
+
alias_method alias_name.gsub('year', 'total'), method_name
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
alias_method :oops, :out_of_pockets
|
55
|
+
alias_method :copays, :copayments
|
56
|
+
|
57
|
+
private
|
58
|
+
def benefit_matches?(benefit, k, v)
|
59
|
+
if benefit[k].is_a?(Array)
|
60
|
+
if v.is_a?(Array)
|
61
|
+
return v.any? {|possible_v| benefit[k].include?(possible_v) }
|
62
|
+
else
|
63
|
+
return benefit[k].include?(v)
|
64
|
+
end
|
65
|
+
else
|
66
|
+
if v.is_a?(Array)
|
67
|
+
return v.include?(benefit[k])
|
68
|
+
else
|
69
|
+
return v == benefit[k]
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -3,6 +3,15 @@ module ChangeHealth
|
|
3
3
|
class EligibilityData
|
4
4
|
attr_reader :response, :raw
|
5
5
|
|
6
|
+
PARSE_DATE = ->(d) {
|
7
|
+
begin
|
8
|
+
d = Date.strptime(d, ChangeHealth::Models::DATE_FORMAT)
|
9
|
+
rescue
|
10
|
+
end
|
11
|
+
|
12
|
+
d
|
13
|
+
}
|
14
|
+
|
6
15
|
def initialize(data: nil, response: nil)
|
7
16
|
@response = response
|
8
17
|
@raw = data
|
@@ -27,14 +36,7 @@ module ChangeHealth
|
|
27
36
|
|
28
37
|
%w(eligibilityBegin planBegin service).each do |f|
|
29
38
|
define_method(f) do
|
30
|
-
|
31
|
-
|
32
|
-
begin
|
33
|
-
d = Date.strptime(d, ChangeHealth::Models::DATE_FORMAT)
|
34
|
-
rescue
|
35
|
-
end
|
36
|
-
|
37
|
-
return d
|
39
|
+
return PARSE_DATE.call(self.date_info&.dig(f))
|
38
40
|
end
|
39
41
|
end
|
40
42
|
|
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.5.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-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -148,6 +148,7 @@ files:
|
|
148
148
|
- lib/change_health/connection.rb
|
149
149
|
- lib/change_health/models/eligibility.rb
|
150
150
|
- lib/change_health/models/eligibility_benefit.rb
|
151
|
+
- lib/change_health/models/eligibility_benefits.rb
|
151
152
|
- lib/change_health/models/eligibility_data.rb
|
152
153
|
- lib/change_health/models/encounter.rb
|
153
154
|
- lib/change_health/models/provider.rb
|