change_health 0.4.0 → 0.5.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: b0b56067f1d8d9ab3e54a1918670934f56817700335fe0f5ba91ddd20909532a
4
- data.tar.gz: 21f21c91f3e6cd84b3bad13f76f149f809a52b0cb3e9ff548e92617aa5fb28b0
3
+ metadata.gz: b245586b8b7f366d621983f271c11cceee11701edf47860ef6288aeee33051e7
4
+ data.tar.gz: be5d5ebc67cbd031859e5ff7b1b5b473e150bdc94c73090f3147e515c51821d1
5
5
  SHA512:
6
- metadata.gz: 3720601af15b1053cb84df0eac6616dd594e02a62527f80e1650b4229ba26696fb5a34fd8b3f594d6b90e35350dc41c4924513b954386fceacd387f7020ce1f6
7
- data.tar.gz: 0f687ea7cdd9a6b9d06ea5fd9f8543626ffc74e7d934e142711f6004cb68f94f5362ef51058be83129ee528df66d23927e0501b4880c33b74afde930aee7a31c
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
- private
73
- def format_amount(key)
74
- amt = self[key]
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
- def individual_coinsurance_visit(**kwargs)
105
- self.individual.coinsurances.visits.where(kwargs).first
106
- end
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 benefit_matches?(benefit, k, v)
139
- if benefit[k].is_a?(Array)
140
- if v.is_a?(Array)
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
- 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
39
+ return PARSE_DATE.call(self.date_info&.dig(f))
38
40
  end
39
41
  end
40
42
 
@@ -1,3 +1,3 @@
1
1
  module ChangeHealth
2
- VERSION = '0.4.0'.freeze
2
+ VERSION = '0.5.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.4.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-10 00:00:00.000000000 Z
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