eligible 3.0.0 → 3.1.0.beta1

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.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +1 -0
  3. data/.gitignore +1 -0
  4. data/CHANGELOG.md +101 -11
  5. data/Gemfile +4 -0
  6. data/Gemfile.lock +13 -6
  7. data/README.md +51 -54
  8. data/eligible.gemspec +2 -1
  9. data/lib/eligible/api_resource.rb +27 -6
  10. data/lib/eligible/calculator_deploy_url.rb +2 -2
  11. data/lib/eligible/claim.rb +10 -10
  12. data/lib/eligible/coverage.rb +8 -4
  13. data/lib/eligible/coverage_resource.rb +4 -4
  14. data/lib/eligible/customer.rb +8 -8
  15. data/lib/eligible/encryptor.rb +1 -1
  16. data/lib/eligible/enrollment.rb +8 -8
  17. data/lib/eligible/errors/eligible_error.rb +2 -1
  18. data/lib/eligible/icd.rb +6 -6
  19. data/lib/eligible/lockbox.rb +6 -6
  20. data/lib/eligible/oauth_token.rb +9 -0
  21. data/lib/eligible/ocr.rb +2 -2
  22. data/lib/eligible/original_signature_pdf.rb +12 -10
  23. data/lib/eligible/payer.rb +6 -6
  24. data/lib/eligible/payer_mapping.rb +37 -0
  25. data/lib/eligible/payment.rb +4 -4
  26. data/lib/eligible/preauth_resource.rb +4 -4
  27. data/lib/eligible/precert.rb +2 -2
  28. data/lib/eligible/provider_model.rb +2 -2
  29. data/lib/eligible/public_key.rb +8 -8
  30. data/lib/eligible/received_pdf.rb +6 -4
  31. data/lib/eligible/risk_assessment.rb +6 -6
  32. data/lib/eligible/session_token.rb +4 -4
  33. data/lib/eligible/ticket.rb +12 -12
  34. data/lib/eligible/util.rb +2 -2
  35. data/lib/eligible/v1_0/action.rb +9 -0
  36. data/lib/eligible/v1_0/attribute.rb +9 -0
  37. data/lib/eligible/v1_0/balance_capture.rb +21 -0
  38. data/lib/eligible/v1_0/charge.rb +13 -0
  39. data/lib/eligible/v1_0/claim.rb +25 -0
  40. data/lib/eligible/v1_0/claim_service_line.rb +9 -0
  41. data/lib/eligible/v1_0/contract.rb +9 -0
  42. data/lib/eligible/v1_0/device.rb +9 -0
  43. data/lib/eligible/v1_0/discount.rb +9 -0
  44. data/lib/eligible/v1_0/enrollment.rb +17 -0
  45. data/lib/eligible/v1_0/estimate.rb +29 -0
  46. data/lib/eligible/v1_0/estimate_service_line.rb +17 -0
  47. data/lib/eligible/v1_0/fee.rb +21 -0
  48. data/lib/eligible/v1_0/fee_refund.rb +29 -0
  49. data/lib/eligible/v1_0/file.rb +17 -0
  50. data/lib/eligible/v1_0/file_link.rb +13 -0
  51. data/lib/eligible/v1_0/insurance_company.rb +21 -0
  52. data/lib/eligible/v1_0/insurance_company_alias.rb +9 -0
  53. data/lib/eligible/v1_0/insurance_policy.rb +9 -0
  54. data/lib/eligible/v1_0/patient_question.rb +9 -0
  55. data/lib/eligible/v1_0/patient_questionnaire.rb +9 -0
  56. data/lib/eligible/v1_0/patient_record.rb +9 -0
  57. data/lib/eligible/v1_0/patient_statement.rb +59 -0
  58. data/lib/eligible/v1_0/patient_statement_service_line.rb +13 -0
  59. data/lib/eligible/v1_0/payment_report.rb +21 -0
  60. data/lib/eligible/v1_0/product.rb +9 -0
  61. data/lib/eligible/v1_0/provider.rb +9 -0
  62. data/lib/eligible/v1_0/refund.rb +21 -0
  63. data/lib/eligible/v1_0/remark.rb +21 -0
  64. data/lib/eligible/v1_0/rest_api_base.rb +44 -0
  65. data/lib/eligible/v1_0/rule.rb +13 -0
  66. data/lib/eligible/v1_0/session.rb +21 -0
  67. data/lib/eligible/v1_0/transaction.rb +21 -0
  68. data/lib/eligible/v1_0/treatment.rb +9 -0
  69. data/lib/eligible/v1_0/value_list.rb +9 -0
  70. data/lib/eligible/v1_0/value_list_item.rb +9 -0
  71. data/lib/eligible/v1_0/verification.rb +17 -0
  72. data/lib/eligible/version.rb +1 -1
  73. data/lib/eligible/visit_type.rb +4 -4
  74. data/lib/eligible/x12.rb +2 -2
  75. data/lib/eligible.rb +150 -38
  76. metadata +47 -8
data/lib/eligible.rb CHANGED
@@ -25,8 +25,10 @@ require 'eligible/ticket'
25
25
  require 'eligible/customer'
26
26
  require 'eligible/ocr'
27
27
  require 'eligible/original_signature_pdf'
28
+ require 'eligible/oauth_token'
28
29
  require 'eligible/received_pdf'
29
30
  require 'eligible/payer'
31
+ require 'eligible/payer_mapping'
30
32
  require 'eligible/preauth_resource'
31
33
  require 'eligible/precert'
32
34
  require 'eligible/referral'
@@ -39,6 +41,45 @@ require 'eligible/calculator_deploy_url'
39
41
  require 'eligible/risk_assessment'
40
42
  require 'eligible/icd'
41
43
 
44
+ # New REST API Endpoints
45
+ require 'eligible/v1_0/rest_api_base'
46
+ require 'eligible/v1_0/action'
47
+ require 'eligible/v1_0/attribute'
48
+ require 'eligible/v1_0/balance_capture'
49
+ require 'eligible/v1_0/charge'
50
+ require 'eligible/v1_0/claim'
51
+ require 'eligible/v1_0/claim_service_line'
52
+ require 'eligible/v1_0/contract'
53
+ require 'eligible/v1_0/device'
54
+ require 'eligible/v1_0/discount'
55
+ require 'eligible/v1_0/enrollment'
56
+ require 'eligible/v1_0/estimate'
57
+ require 'eligible/v1_0/estimate_service_line'
58
+ require 'eligible/v1_0/fee'
59
+ require 'eligible/v1_0/fee_refund'
60
+ require 'eligible/v1_0/file'
61
+ require 'eligible/v1_0/file_link'
62
+ require 'eligible/v1_0/insurance_company'
63
+ require 'eligible/v1_0/insurance_company_alias'
64
+ require 'eligible/v1_0/insurance_policy'
65
+ require 'eligible/v1_0/patient_record'
66
+ require 'eligible/v1_0/patient_statement'
67
+ require 'eligible/v1_0/patient_statement_service_line'
68
+ require 'eligible/v1_0/payment_report'
69
+ require 'eligible/v1_0/patient_question'
70
+ require 'eligible/v1_0/patient_questionnaire'
71
+ require 'eligible/v1_0/product'
72
+ require 'eligible/v1_0/provider'
73
+ require 'eligible/v1_0/refund'
74
+ require 'eligible/v1_0/remark'
75
+ require 'eligible/v1_0/rule'
76
+ require 'eligible/v1_0/session'
77
+ require 'eligible/v1_0/transaction'
78
+ require 'eligible/v1_0/treatment'
79
+ require 'eligible/v1_0/value_list'
80
+ require 'eligible/v1_0/value_list_item'
81
+ require 'eligible/v1_0/verification'
82
+
42
83
  # Errors
43
84
  require 'eligible/errors/eligible_error'
44
85
  require 'eligible/errors/api_connection_error'
@@ -51,14 +92,35 @@ module Eligible
51
92
  @@test = false
52
93
  @@api_version = '1.5'
53
94
  @@api_base = "https://gds.eligibleapi.com/v#{@@api_version}"
54
- @@fingerprints = %w(1fe04161ed657b55ac29a0c48da4cf246f8e657b
55
- 1a1b7d4faa43ecdeab40cc8d203583624d5917f4
56
- b4225ee59dc7ede4d68e7b2c75c6e6ac79649416
95
+ @@fingerprints = %w(b4225ee59dc7ede4d68e7b2c75c6e6ac79649416
57
96
  75132c1ab844500c6ad1f26b49c11d36933ce868
58
- a1cd762a9f4be0f3b6bdd6300e52c6ce8d7d67f5)
97
+ 1c3fe254bded256ea30d0a235bb9881b82701082
98
+ a1cd762a9f4be0f3b6bdd6300e52c6ce8d7d67f5
99
+ 36d6b6f98a2b9bcdf4321d1978553e23cf044b53
100
+ d93b7697100fe978ae0f78fbf2a2443cc1958ca3
101
+ 896ce24f7a83eb656c040985fdb50ce39f90b813)
102
+ @@eligible_account = nil
103
+ @@eligible_account_id = nil
104
+
105
+ def self.api_url(url = '', rest_api_version = nil)
106
+ api_base = rest_api_version ? @@api_base.gsub(/v(\d).(\d)/, "v#{rest_api_version}") : @@api_base
107
+ api_base + url.to_s
108
+ end
59
109
 
60
- def self.api_url(url = '')
61
- @@api_base + url.to_s
110
+ def self.eligible_account
111
+ @@eligible_account
112
+ end
113
+
114
+ def self.eligible_account_id
115
+ @@eligible_account_id
116
+ end
117
+
118
+ def self.eligible_account=(eligible_account)
119
+ @@eligible_account = eligible_account
120
+ end
121
+
122
+ def self.eligible_account_id=(eligible_account_id)
123
+ @@eligible_account_id = eligible_account_id
62
124
  end
63
125
 
64
126
  def self.api_key
@@ -114,12 +176,18 @@ module Eligible
114
176
  Util.key?(params, :api_key)
115
177
  end
116
178
 
179
+ def self.rest_api_version?(params)
180
+ Util.key?(params, :rest_api_version)
181
+ end
182
+
117
183
  def self.request(method, url, api_key, params = {}, headers = {})
118
184
  session_token = Util.value(params, :session_token)
119
185
  api_key ||= @@api_key unless session_token
120
186
  test = self.test
121
187
  api_key = Util.value(params, :api_key) if api_key?(params)
122
188
  test = Util.value(params, :test) if test_key?(params)
189
+ rest_api_version = Util.value(params, :rest_api_version) if rest_api_version?(params)
190
+ basic_auth = true if rest_api_version?(params)
123
191
 
124
192
  fail AuthenticationError, 'No API key provided. (HINT: set your API key using "Eligible.api_key = <API-KEY>".' unless api_key || session_token
125
193
 
@@ -133,39 +201,13 @@ module Eligible
133
201
  uname: uname
134
202
  }
135
203
 
136
- # GET requests, parameters on the query string
137
- # POST requests, parameters as json in the body
138
- url = api_url(url)
139
- case method.to_s.downcase.to_sym
140
- when :get, :head, :delete
141
- url += "?api_key=#{api_key}"
142
- if params && params.count > 0
143
- query_string = Util.flatten_params(params).collect { |key, value| "#{key}=#{Util.url_encode(value)}" }.join('&')
144
- url += "&#{query_string}"
145
- end
146
- url += "&test=#{test}"
147
- payload = nil
148
- else
149
- params.merge!('api_key' => api_key, 'test' => test)
150
- payload = Util.key?(params, :file) ? params : Eligible::JSON.dump(params)
151
- end
152
-
153
- begin
154
- headers = { x_eligible_debuginfo: Eligible::JSON.dump(debug_info) }.merge(headers)
155
- rescue => e
156
- headers = {
157
- x_eligible_client_raw_user_agent: debug_info.inspect,
158
- error: "#{e} (#{e.class})"
159
- }.merge(headers)
160
- end
161
-
162
- headers = {
163
- user_agent: "eligible-ruby/#{Eligible::VERSION}",
164
- authorization: "Bearer #{api_key}",
165
- content_type: 'application/json'
166
- }.merge(headers)
204
+ # Set request URL and Payload based on new and old endpoints version
205
+ url, payload = generate_request_url_and_payload(
206
+ method, url, params, **{ test: test, rest_api_version: rest_api_version, api_key: api_key, basic_auth: basic_auth },
207
+ )
167
208
 
168
- headers[:eligible_version] = api_version if api_version
209
+ # Set request Headers and Authorization based on new and old endpoints version
210
+ headers = generate_request_headers(headers, debug_info, basic_auth, **{ api_key: api_key, session_token: session_token })
169
211
 
170
212
  opts = {
171
213
  method: method,
@@ -220,6 +262,76 @@ module Eligible
220
262
  return [ resp, api_key ]
221
263
  end
222
264
 
265
+ def self.generate_request_url_and_payload(method, url, params, options)
266
+ # GET requests, parameters on the query string
267
+ # POST requests, parameters as json in the body
268
+ url = api_url(url, options[:rest_api_version])
269
+ # Used rest_api_version param only to identify new REST API version, and is not required to make calls for new REST api endpoints
270
+ params.delete(:rest_api_version)
271
+ case method.to_s.downcase.to_sym
272
+ when :get, :head, :delete
273
+ url = fetch_url_with_query_string(params, url, **options)
274
+ payload = nil
275
+ else
276
+ payload = request_payload(options, **params)
277
+ end
278
+
279
+ [url, payload]
280
+ end
281
+
282
+ def self.fetch_url_with_query_string(params, url, options)
283
+ url += options_query_string(options)
284
+ return url unless params || params.count == 0
285
+
286
+ query_string = params_query_string(params)
287
+ url += options[:basic_auth] ? "?#{query_string}" : "&#{query_string}"
288
+ url
289
+ end
290
+
291
+ def self.options_query_string(options)
292
+ options[:basic_auth] ? '' : "?test=#{options[:test]}&api_key=#{options[:api_key]}"
293
+ end
294
+
295
+ def self.params_query_string(params)
296
+ Util.flatten_params(params).collect { |key, value| "#{key}=#{Util.url_encode(value)}" }.join('&')
297
+ end
298
+
299
+ def self.request_payload(options, params)
300
+ params.merge!('test' => options[:test], 'api_key' => options[:api_key]) unless options[:basic_auth]
301
+ Util.key?(params, :file) ? params : Eligible::JSON.dump(params)
302
+ end
303
+
304
+ def self.generate_request_headers(headers, debug_info, basic_auth, auth_options)
305
+ begin
306
+ headers = { x_eligible_debuginfo: Eligible::JSON.dump(debug_info) }.merge(headers)
307
+ rescue => e
308
+ headers = {
309
+ x_eligible_client_raw_user_agent: debug_info.inspect,
310
+ error: "#{e} (#{e.class})"
311
+ }.merge(headers)
312
+ end
313
+
314
+ headers = {
315
+ user_agent: "eligible-ruby/#{Eligible::VERSION}",
316
+ content_type: 'application/json'
317
+ }.merge(headers)
318
+
319
+ headers[:authorization] = authorization_header(basic_auth, **auth_options)
320
+ headers[:eligible_version] = api_version if api_version
321
+ headers[:eligible_account] = eligible_account if eligible_account
322
+ headers[:eligible_account_id] = eligible_account_id if eligible_account_id
323
+ headers
324
+ end
325
+
326
+ def self.authorization_header(basic_auth, auth_options)
327
+ # Using Bearer scheme for Session Token Auth for new REST API endpoints (v1.0)
328
+ return "Bearer #{auth_options[:session_token]}" if basic_auth && auth_options[:session_token]
329
+
330
+ # Using Basic Auth for new REST API endpoints (v1.0)
331
+ basic_auth_token = Base64.strict_encode64("#{auth_options[:api_key]}:")
332
+ "Basic #{basic_auth_token}" if basic_auth
333
+ end
334
+
223
335
  def self.verify_certificate
224
336
  lambda do |preverify_ok, certificate_store|
225
337
  return true if test == 'true'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eligible
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.1.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katelyn Gleaon
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2024-01-18 00:00:00.000000000 Z
13
+ date: 2022-09-12 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rest-client
@@ -74,14 +74,14 @@ dependencies:
74
74
  requirements:
75
75
  - - "~>"
76
76
  - !ruby/object:Gem::Version
77
- version: 0.5.1x
77
+ version: 0.5.1
78
78
  type: :development
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
82
  - - "~>"
83
83
  - !ruby/object:Gem::Version
84
- version: 0.5.1x
84
+ version: 0.5.1
85
85
  - !ruby/object:Gem::Dependency
86
86
  name: simplecov
87
87
  requirement: !ruby/object:Gem::Requirement
@@ -139,9 +139,11 @@ files:
139
139
  - lib/eligible/json.rb
140
140
  - lib/eligible/lockbox.rb
141
141
  - lib/eligible/medicare.rb
142
+ - lib/eligible/oauth_token.rb
142
143
  - lib/eligible/ocr.rb
143
144
  - lib/eligible/original_signature_pdf.rb
144
145
  - lib/eligible/payer.rb
146
+ - lib/eligible/payer_mapping.rb
145
147
  - lib/eligible/payment.rb
146
148
  - lib/eligible/preauth_resource.rb
147
149
  - lib/eligible/precert.rb
@@ -153,6 +155,43 @@ files:
153
155
  - lib/eligible/session_token.rb
154
156
  - lib/eligible/ticket.rb
155
157
  - lib/eligible/util.rb
158
+ - lib/eligible/v1_0/action.rb
159
+ - lib/eligible/v1_0/attribute.rb
160
+ - lib/eligible/v1_0/balance_capture.rb
161
+ - lib/eligible/v1_0/charge.rb
162
+ - lib/eligible/v1_0/claim.rb
163
+ - lib/eligible/v1_0/claim_service_line.rb
164
+ - lib/eligible/v1_0/contract.rb
165
+ - lib/eligible/v1_0/device.rb
166
+ - lib/eligible/v1_0/discount.rb
167
+ - lib/eligible/v1_0/enrollment.rb
168
+ - lib/eligible/v1_0/estimate.rb
169
+ - lib/eligible/v1_0/estimate_service_line.rb
170
+ - lib/eligible/v1_0/fee.rb
171
+ - lib/eligible/v1_0/fee_refund.rb
172
+ - lib/eligible/v1_0/file.rb
173
+ - lib/eligible/v1_0/file_link.rb
174
+ - lib/eligible/v1_0/insurance_company.rb
175
+ - lib/eligible/v1_0/insurance_company_alias.rb
176
+ - lib/eligible/v1_0/insurance_policy.rb
177
+ - lib/eligible/v1_0/patient_question.rb
178
+ - lib/eligible/v1_0/patient_questionnaire.rb
179
+ - lib/eligible/v1_0/patient_record.rb
180
+ - lib/eligible/v1_0/patient_statement.rb
181
+ - lib/eligible/v1_0/patient_statement_service_line.rb
182
+ - lib/eligible/v1_0/payment_report.rb
183
+ - lib/eligible/v1_0/product.rb
184
+ - lib/eligible/v1_0/provider.rb
185
+ - lib/eligible/v1_0/refund.rb
186
+ - lib/eligible/v1_0/remark.rb
187
+ - lib/eligible/v1_0/rest_api_base.rb
188
+ - lib/eligible/v1_0/rule.rb
189
+ - lib/eligible/v1_0/session.rb
190
+ - lib/eligible/v1_0/transaction.rb
191
+ - lib/eligible/v1_0/treatment.rb
192
+ - lib/eligible/v1_0/value_list.rb
193
+ - lib/eligible/v1_0/value_list_item.rb
194
+ - lib/eligible/v1_0/verification.rb
156
195
  - lib/eligible/version.rb
157
196
  - lib/eligible/visit_type.rb
158
197
  - lib/eligible/x12.rb
@@ -168,14 +207,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
168
207
  requirements:
169
208
  - - ">="
170
209
  - !ruby/object:Gem::Version
171
- version: '0'
210
+ version: 3.1.0
172
211
  required_rubygems_version: !ruby/object:Gem::Requirement
173
212
  requirements:
174
- - - ">="
213
+ - - ">"
175
214
  - !ruby/object:Gem::Version
176
- version: '0'
215
+ version: 1.3.1
177
216
  requirements: []
178
- rubygems_version: 3.3.3
217
+ rubygems_version: 3.3.8
179
218
  signing_key:
180
219
  specification_version: 4
181
220
  summary: Ruby wrapper for the Eligible API