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 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