change_health 0.15.0 → 1.0.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: 23b7246464a9cee50b55cda5e50f5f39360f12ab3185bead7d17d1138b7be6d6
4
- data.tar.gz: 4642b90b2cea31a84180093211abba8017fb690a53077e8b563f52fc153eeb00
3
+ metadata.gz: e3aefe8f92bcd2320ffd7cf26a436144b7a76b5e90d6d3f56377b37d0278a705
4
+ data.tar.gz: 25d4efc4c61e6356408d9df77fb9daecc93aadd10d687c0fcce530f51ea3fe30
5
5
  SHA512:
6
- metadata.gz: 0cdcd134c67d6e935da27de8db74a3371368477d2548cd9252ca5d6b1ee62d6469a6db473f0454cf457564513d6bb2570a4af1bc438d1ea0995a81b019d6ff5f
7
- data.tar.gz: 9bdbc8f2cc8373896c07c614ea954f43a7684ddfa9e95d13842055158b86c16bee6871111e212b400c5a9f8f65739f35c1a8d988cbc9c2dc960441fb5c6a3713
6
+ metadata.gz: 892a5e89e6204506c34eeb696ef52717441e3a15e9cc0c64461af2ec9fe5203ff884a8ff9919ebff0c4a4d13330d7ecbb9600d727514ab53a1f066f7f55204d6
7
+ data.tar.gz: 2b05c1ba8a94cf1d9a299476b8faf673ae3ab8f41337913159a068e724e3bbf37db57803e1e674b7fb065dc6fc7169f2d8abf2f72ef5348b4a7dffe7ad354b6a
data/CHANGELOG.md CHANGED
@@ -4,6 +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
+ ## [1.0.0] - [2021-03-17]
8
+ ### Added
9
+ - Model::Error - help with error codes
10
+ - EligibilityData#recommend_retry? - if it looks like you can retry the exact same request
11
+ - EligibilityData#inactive? - looks for plan status 6
12
+
7
13
  ## [0.15.0] - [2020-06-12]
8
14
  ### Added
9
15
  - Extensions - InNetworkMissing for plans that don't provide in network indicators.
@@ -1,8 +1,55 @@
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 = %w[
12
+ resubmission not allowed
13
+ do not resubmit
14
+ ].freeze
15
+
16
+ def initialize(data)
17
+ @data = data
18
+ end
19
+
20
+ def message
21
+ field_message || code_message
22
+ end
23
+
24
+ def field_message
25
+ "#{field}: #{description}" if field?
26
+ end
27
+
28
+ def code_message
29
+ "#{code}: #{description}" if code?
30
+ end
31
+
32
+ def retryable?
33
+ code? && SIMPLE_RETRY_CODES.include?(code) && followupAction? && NO_RESUBMIT_MESSAGES.none? {|msg| followupAction.downcase.include?(msg) }
34
+ end
35
+
36
+ %w[field description code followupAction location].each do |method_name|
37
+ define_method("#{method_name}?") do
38
+ false == send(method_name).nil?
39
+ end
40
+
41
+ define_method("#{method_name}") do
42
+ @data[method_name]
43
+ end
44
+ end
45
+ end
46
+
3
47
  class EligibilityData
4
48
  attr_reader :response, :raw
5
49
 
50
+ ACTIVE = '1'
51
+ INACTIVE = '6'
52
+
6
53
  PARSE_DATE = ->(d) {
7
54
  begin
8
55
  d = Date.strptime(d, ChangeHealth::Models::DATE_FORMAT)
@@ -25,18 +72,38 @@ module ChangeHealth
25
72
  end
26
73
 
27
74
  def active?(service_code: '30')
28
- return '1' == plan_status(service_code: service_code).dig('statusCode')
75
+ return ACTIVE == plan_status(service_code: service_code).dig('statusCode')
76
+ end
77
+
78
+ def inactive?(service_code: '30')
79
+ return INACTIVE == plan_status(service_code: service_code).dig('statusCode')
29
80
  end
30
81
 
31
82
  def errors?
32
83
  self.errors.is_a?(Array) && false == self.errors.empty?
33
84
  end
34
85
 
86
+ def errors
87
+ errors = @raw.dig('errors') || []
88
+
89
+ errors.flatten.map {|error| ChangeHealth::Models::Error.new(error) }
90
+ end
91
+
92
+ def recommend_retry?
93
+ return false if errors.empty?
94
+
95
+ error_codes = errors.select(&:code?)
96
+
97
+ return false if error_codes.empty?
98
+
99
+ return error_codes.all?(&:retryable?)
100
+ end
101
+
35
102
  def dependents?
36
103
  true == self.dependents&.any?
37
104
  end
38
105
 
39
- %w(planStatus benefitsInformation controlNumber planDateInformation dependents errors).each do |v|
106
+ %w(planStatus benefitsInformation controlNumber planDateInformation dependents).each do |v|
40
107
  define_method(v) do
41
108
  @raw.dig(v)
42
109
  end
@@ -1,3 +1,3 @@
1
1
  module ChangeHealth
2
- VERSION = '0.15.0'.freeze
2
+ VERSION = '1.0.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.15.0
4
+ version: 1.0.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-06-12 00:00:00.000000000 Z
11
+ date: 2021-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -180,8 +180,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
180
180
  - !ruby/object:Gem::Version
181
181
  version: '0'
182
182
  requirements: []
183
- rubyforge_project:
184
- rubygems_version: 2.7.6
183
+ rubygems_version: 3.1.4
185
184
  signing_key:
186
185
  specification_version: 4
187
186
  summary: Ruby wrapper for the ChangeHealth API