change_health 0.14.0 → 1.0.3

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: a751b8350dfaa3dbb36d0777baf2375a6678c6061a4dee2492cbd1bdf94bd00c
4
- data.tar.gz: c4874a617233ec97a1818256ce96c68b720ed9c30dd560a8768c58e29c3c9944
3
+ metadata.gz: 69bacf8024e568af3c7dbbdfe638ede842f44392fc870128a7da9242ce7a7094
4
+ data.tar.gz: d1e9b4d07f32e0631b75820cfe31e0aa4a6f37f77ccebe8e63cdbf826a29ea90
5
5
  SHA512:
6
- metadata.gz: 13a2bc653d885961025918c443e1b8cd48e368f0c7a2588ac00625ddedb6c34df876450286aa850073bdbaa458b2559b6654fa3d446b55790c190863a1dc149f
7
- data.tar.gz: c01d4247267625c8fe0fdf20fe33bc2445dfb466c9036f64ea48ae89e11b46ccd6d529686b131333ceace9f4fc1b1a44e97447ebe3e36a0eb9e8cfd997ff9485
6
+ metadata.gz: aa7f24775ab4760c110a0b3977a51170c4d465651753b184c65be967a1d48708d3564b63357db110ea8d538be2bece70bb07282623c85c35dc5d789fa68c0703
7
+ data.tar.gz: 8307d1353765e881915c50ee02b3c280c5abb73e42f94f9f814f3089c004b6e7d0c4c70130070f964f9922f5496f5b46a8b582956d945cac2d4ddbb6a561cc0d
data/CHANGELOG.md CHANGED
@@ -4,6 +4,34 @@ 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
+ ## [1.0.3] - [2021-04-26]
8
+ ### Added
9
+ - Model::Error#represents_down? - adds ability to distinguish error representing down state
10
+ - Model::Error#retryable? - retryable when down
11
+ - EligibilityData#recommend_retry? - recommend retry when down
12
+
13
+ ## [1.0.2] - [2021-04-06]
14
+ ### Added
15
+ - EligibilityData#recommend_retry? - fix a bug in the search statement
16
+
17
+ ## [1.0.1] - [2021-03-24]
18
+ ### Added
19
+ - EligibilityData#plan_status - adds ability to select instead of find
20
+ - EligibilityData#inactive? active? - use new plan_status select
21
+
22
+ ## [1.0.0] - [2021-03-17]
23
+ ### Added
24
+ - Model::Error - help with error codes
25
+ - EligibilityData#recommend_retry? - if it looks like you can retry the exact same request
26
+ - EligibilityData#inactive? - looks for plan status 6
27
+
28
+ ## [0.15.0] - [2020-06-12]
29
+ ### Added
30
+ - Extensions - InNetworkMissing for plans that don't provide in network indicators.
31
+
32
+ ### Fixed
33
+ - Bug where active codes with no service codes cause exception.
34
+
7
35
  ## [0.14.0] - [2020-05-07]
8
36
  ### Added
9
37
  - Extensions - mixins for common overrides
@@ -104,6 +132,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
104
132
  - Authentication
105
133
  - Configuration
106
134
 
135
+ [1.0.3]: https://github.com/WeInfuse/change_health/compare/v1.0.2...v1.0.3
136
+ [1.0.2]: https://github.com/WeInfuse/change_health/compare/v1.0.1...v1.0.2
137
+ [1.0.1]: https://github.com/WeInfuse/change_health/compare/v1.0.0...v1.0.1
138
+ [1.0.0]: https://github.com/WeInfuse/change_health/compare/v0.15.0...v1.0.0
139
+ [0.15.0]: https://github.com/WeInfuse/change_health/compare/v0.14.0...v0.15.0
107
140
  [0.14.0]: https://github.com/WeInfuse/change_health/compare/v0.13.0...v0.14.0
108
141
  [0.13.0]: https://github.com/WeInfuse/change_health/compare/v0.12.0...v0.13.0
109
142
  [0.12.0]: https://github.com/WeInfuse/change_health/compare/v0.11.0...v0.12.0
@@ -6,6 +6,12 @@ module ChangeHealth
6
6
  end
7
7
  end
8
8
 
9
+ module InNetworkMissing
10
+ def in_network
11
+ self.where_not(inPlanNetworkIndicatorCode: 'N')
12
+ end
13
+ end
14
+
9
15
  module DeductiblesIgnoreSpecialistZero
10
16
  def deductibles
11
17
  super.where_not(serviceTypeCodes: '98', benefitAmount: '0')
@@ -18,6 +18,7 @@ module ChangeHealth
18
18
  EMPLOYEE_AND_SPOUSE = 'ESP'
19
19
 
20
20
  VISIT = '27'
21
+ SERVICE_YEAR = '22'
21
22
  YEAR = '23'
22
23
  YTD = '24'
23
24
  DAY = '7'
@@ -1,8 +1,64 @@
1
1
  module ChangeHealth
2
2
  module Models
3
+ class Error
4
+ attr_reader :data
5
+
6
+ SIMPLE_RETRY_CODES = %w[
7
+ 42
8
+ 80
9
+ ].freeze
10
+
11
+ NO_RESUBMIT_MESSAGES = [
12
+ 'resubmission not allowed',
13
+ 'do not resubmit'
14
+ ].freeze
15
+
16
+ DOWN_FIELD = 'Http Header'.freeze
17
+
18
+ DOWN_MESSAGE = 'Please review http headers for this API, please contact support if you are unsure how to resolve.'.freeze
19
+
20
+ def initialize(data)
21
+ @data = data
22
+ end
23
+
24
+ def message
25
+ field_message || code_message
26
+ end
27
+
28
+ def field_message
29
+ "#{field}: #{description}" if field?
30
+ end
31
+
32
+ def code_message
33
+ "#{code}: #{description}" if code?
34
+ end
35
+
36
+ def represents_down?
37
+ field == DOWN_FIELD && description == DOWN_MESSAGE
38
+ end
39
+
40
+ def retryable?
41
+ represents_down? ||
42
+ (code? && SIMPLE_RETRY_CODES.include?(code) && followupAction? && NO_RESUBMIT_MESSAGES.none? {|msg| followupAction.downcase.include?(msg) })
43
+ end
44
+
45
+ %w[field description code followupAction location].each do |method_name|
46
+ define_method("#{method_name}?") do
47
+ false == send(method_name).nil?
48
+ end
49
+
50
+ define_method("#{method_name}") do
51
+ @data[method_name]
52
+ end
53
+ end
54
+ end
55
+
3
56
  class EligibilityData
4
57
  attr_reader :response, :raw
5
58
 
59
+ ACTIVE = '1'
60
+ INACTIVE = '6'
61
+
6
62
  PARSE_DATE = ->(d) {
7
63
  begin
8
64
  d = Date.strptime(d, ChangeHealth::Models::DATE_FORMAT)
@@ -25,18 +81,40 @@ module ChangeHealth
25
81
  end
26
82
 
27
83
  def active?(service_code: '30')
28
- return '1' == plan_status(service_code: service_code).dig('statusCode')
84
+ plan_status(service_code: service_code, single: false).any? {|status| ACTIVE == status['statusCode'] }
85
+ end
86
+
87
+ def inactive?(service_code: '30')
88
+ plan_status(service_code: service_code, single: false).any? {|status| INACTIVE == status['statusCode'] }
29
89
  end
30
90
 
31
91
  def errors?
32
92
  self.errors.is_a?(Array) && false == self.errors.empty?
33
93
  end
34
94
 
95
+ def errors
96
+ errors = @raw.dig('errors') || []
97
+
98
+ errors.flatten.map {|error| ChangeHealth::Models::Error.new(error) }
99
+ end
100
+
101
+ def recommend_retry?
102
+ return false unless errors?
103
+
104
+ return true if errors.any?(&:represents_down?)
105
+
106
+ error_codes = errors.select(&:code?)
107
+
108
+ return false if error_codes.empty?
109
+
110
+ return error_codes.all?(&:retryable?)
111
+ end
112
+
35
113
  def dependents?
36
114
  true == self.dependents&.any?
37
115
  end
38
116
 
39
- %w(planStatus benefitsInformation controlNumber planDateInformation dependents errors).each do |v|
117
+ %w(planStatus benefitsInformation controlNumber planDateInformation dependents).each do |v|
40
118
  define_method(v) do
41
119
  @raw.dig(v)
42
120
  end
@@ -64,8 +142,12 @@ module ChangeHealth
64
142
  ChangeHealth::Models::EligibilityData::PARSE_DATE.call(self.plan_date_range[1])
65
143
  end
66
144
 
67
- def plan_status(service_code: )
68
- self.planStatus&.find {|plan| plan.dig('serviceTypeCodes').include?(service_code) } || {}
145
+ def plan_status(service_code: , single: true)
146
+ if true == single
147
+ self.planStatus&.find {|plan| plan.dig('serviceTypeCodes')&.include?(service_code) } || {}
148
+ else
149
+ self.planStatus&.select {|plan| plan.dig('serviceTypeCodes')&.include?(service_code) } || []
150
+ end
69
151
  end
70
152
 
71
153
  def benefits
@@ -1,3 +1,3 @@
1
1
  module ChangeHealth
2
- VERSION = '0.14.0'.freeze
2
+ VERSION = '1.0.3'.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.14.0
4
+ version: 1.0.3
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-05-07 00:00:00.000000000 Z
11
+ date: 2021-04-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty