Class: Candid::PreEncounter::Coverages::V1::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/candid/pre_encounter/coverages/v_1/client.rb

Instance Method Summary collapse

Constructor Details

#initialize(client:) ⇒ Candid::PreEncounter::Coverages::V1::Client



9
10
11
# File 'lib/candid/pre_encounter/coverages/v_1/client.rb', line 9

def initialize(client:)
  @client = client
end

Instance Method Details

#batch_update_ppg(request_options: {}, **params) ⇒ untyped

Finds all coverages associated with the given ppg_id and updates the ppg_fields for each coverage.

Returns:

  • (untyped)

Raises:

  • (error_class)


204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
# File 'lib/candid/pre_encounter/coverages/v_1/client.rb', line 204

def batch_update_ppg(request_options: {}, **params)
  _request = Candid::Internal::JSON::Request.new(
    base_url: request_options[:base_url] || Candid::Environment::PRODUCTION,
    method: "POST",
    path: "/coverages/v1/batch-update-ppg/#{params[:ppg_id]}",
    body: Candid::PreEncounter::Coverages::V1::Types::PayerPlanGroupFields.new(params).to_h
  )
  begin
    _response = @client.send(_request)
  rescue Net::HTTPRequestTimeout
    raise Candid::Errors::TimeoutError
  end
  code = _response.code.to_i
  return if code.between?(200, 299)

  error_class = Candid::Errors::ResponseError.subclass_for_code(code)
  raise error_class.new(_response.body, code: code)
end

#check_eligibility(request_options: {}, **params) ⇒ Candid::PreEncounter::EligibilityChecks::V1::Types::EligibilityCheckMetadata

Initiates an eligibility check. Returns the metadata of the check if successfully initiated.



226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
# File 'lib/candid/pre_encounter/coverages/v_1/client.rb', line 226

def check_eligibility(request_options: {}, **params)
  _path_param_names = ["id"]

  _request = Candid::Internal::JSON::Request.new(
    base_url: request_options[:base_url] || Candid::Environment::PRODUCTION,
    method: "POST",
    path: "/coverages/v1/#{params[:id]}/eligibility",
    body: params.except(*_path_param_names)
  )
  begin
    _response = @client.send(_request)
  rescue Net::HTTPRequestTimeout
    raise Candid::Errors::TimeoutError
  end
  code = _response.code.to_i
  if code.between?(200, 299)
    Candid::PreEncounter::EligibilityChecks::V1::Types::EligibilityCheckMetadata.load(_response.body)
  else
    error_class = Candid::Errors::ResponseError.subclass_for_code(code)
    raise error_class.new(_response.body, code: code)
  end
end

#create(request_options: {}, **params) ⇒ Candid::PreEncounter::Coverages::V1::Types::Coverage

Creates a new Coverage. A Coverage provides the high-level identifiers and descriptors of a specific insurance plan for a specific individual - typically the information you can find on an insurance card. Additionally a coverage will include detailed benefits information covered by the specific plan for the individual.



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/candid/pre_encounter/coverages/v_1/client.rb', line 16

def create(request_options: {}, **params)
  _request = Candid::Internal::JSON::Request.new(
    base_url: request_options[:base_url] || Candid::Environment::PRODUCTION,
    method: "POST",
    path: "/coverages/v1",
    body: Candid::PreEncounter::Coverages::V1::Types::MutableCoverage.new(params).to_h
  )
  begin
    _response = @client.send(_request)
  rescue Net::HTTPRequestTimeout
    raise Candid::Errors::TimeoutError
  end
  code = _response.code.to_i
  if code.between?(200, 299)
    Candid::PreEncounter::Coverages::V1::Types::Coverage.load(_response.body)
  else
    error_class = Candid::Errors::ResponseError.subclass_for_code(code)
    raise error_class.new(_response.body, code: code)
  end
end

#get(request_options: {}, **params) ⇒ Candid::PreEncounter::Coverages::V1::Types::Coverage

gets a specific Coverage



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/candid/pre_encounter/coverages/v_1/client.rb', line 93

def get(request_options: {}, **params)
  _request = Candid::Internal::JSON::Request.new(
    base_url: request_options[:base_url] || Candid::Environment::PRODUCTION,
    method: "GET",
    path: "/coverages/v1/#{params[:id]}"
  )
  begin
    _response = @client.send(_request)
  rescue Net::HTTPRequestTimeout
    raise Candid::Errors::TimeoutError
  end
  code = _response.code.to_i
  if code.between?(200, 299)
    Candid::PreEncounter::Coverages::V1::Types::Coverage.load(_response.body)
  else
    error_class = Candid::Errors::ResponseError.subclass_for_code(code)
    raise error_class.new(_response.body, code: code)
  end
end

#get_eligibility(request_options: {}, **params) ⇒ Candid::PreEncounter::Coverages::V1::Types::CoverageEligibilityCheckResponse

Gets the eligibility of a patient for a specific coverage if successful.



252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
# File 'lib/candid/pre_encounter/coverages/v_1/client.rb', line 252

def get_eligibility(request_options: {}, **params)
  _request = Candid::Internal::JSON::Request.new(
    base_url: request_options[:base_url] || Candid::Environment::PRODUCTION,
    method: "GET",
    path: "/coverages/v1/#{params[:id]}/eligibility/#{params[:check_id]}"
  )
  begin
    _response = @client.send(_request)
  rescue Net::HTTPRequestTimeout
    raise Candid::Errors::TimeoutError
  end
  code = _response.code.to_i
  if code.between?(200, 299)
    Candid::PreEncounter::Coverages::V1::Types::CoverageEligibilityCheckResponse.load(_response.body)
  else
    error_class = Candid::Errors::ResponseError.subclass_for_code(code)
    raise error_class.new(_response.body, code: code)
  end
end

#get_history(request_options: {}, **params) ⇒ Array[Candid::PreEncounter::Coverages::V1::Types::Coverage]

Gets a coverage along with it’s full history. The return list is ordered by version ascending.

Returns:

Raises:

  • (error_class)


116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/candid/pre_encounter/coverages/v_1/client.rb', line 116

def get_history(request_options: {}, **params)
  _request = Candid::Internal::JSON::Request.new(
    base_url: request_options[:base_url] || Candid::Environment::PRODUCTION,
    method: "GET",
    path: "/coverages/v1/#{params[:id]}/history"
  )
  begin
    _response = @client.send(_request)
  rescue Net::HTTPRequestTimeout
    raise Candid::Errors::TimeoutError
  end
  code = _response.code.to_i
  return if code.between?(200, 299)

  error_class = Candid::Errors::ResponseError.subclass_for_code(code)
  raise error_class.new(_response.body, code: code)
end

#get_multi(request_options: {}, **params) ⇒ Array[Candid::PreEncounter::Coverages::V1::Types::Coverage]

Returns a list of Coverages based on the search criteria.

Returns:

Raises:

  • (error_class)


137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# File 'lib/candid/pre_encounter/coverages/v_1/client.rb', line 137

def get_multi(request_options: {}, **params)
  params = Candid::Internal::Types::Utils.symbolize_keys(params)
  _query_param_names = %i[patient_id]
  _query = params.slice(*_query_param_names)
  params.except(*_query_param_names)

  _request = Candid::Internal::JSON::Request.new(
    base_url: request_options[:base_url] || Candid::Environment::PRODUCTION,
    method: "GET",
    path: "/coverages/v1",
    query: _query
  )
  begin
    _response = @client.send(_request)
  rescue Net::HTTPRequestTimeout
    raise Candid::Errors::TimeoutError
  end
  code = _response.code.to_i
  return if code.between?(200, 299)

  error_class = Candid::Errors::ResponseError.subclass_for_code(code)
  raise error_class.new(_response.body, code: code)
end

#get_multi_paginated(request_options: {}, **params) ⇒ Candid::PreEncounter::Coverages::V1::Types::CoveragesPage

Returns a page of Coverages based on the search criteria.



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/candid/pre_encounter/coverages/v_1/client.rb', line 64

def get_multi_paginated(request_options: {}, **params)
  params = Candid::Internal::Types::Utils.symbolize_keys(params)
  _query_param_names = %i[patient_id payer_plan_group_id page_token limit]
  _query = params.slice(*_query_param_names)
  params.except(*_query_param_names)

  _request = Candid::Internal::JSON::Request.new(
    base_url: request_options[:base_url] || Candid::Environment::PRODUCTION,
    method: "GET",
    path: "/coverages/v1/get-multi-paginated",
    query: _query
  )
  begin
    _response = @client.send(_request)
  rescue Net::HTTPRequestTimeout
    raise Candid::Errors::TimeoutError
  end
  code = _response.code.to_i
  if code.between?(200, 299)
    Candid::PreEncounter::Coverages::V1::Types::CoveragesPage.load(_response.body)
  else
    error_class = Candid::Errors::ResponseError.subclass_for_code(code)
    raise error_class.new(_response.body, code: code)
  end
end

#scan(request_options: {}, **params) ⇒ Array[Candid::PreEncounter::Coverages::V1::Types::Coverage]

Scans up to 100 coverage updates. The since query parameter is inclusive, and the result list is ordered by updatedAt ascending.

**Polling Pattern:** To continuously poll for updates without gaps:

  1. Make your initial request with a ‘since` timestamp (e.g., `since=2020-01-01T13:00:00.000Z`)

  2. The API returns up to 100 coverage records, sorted by ‘updated_at` ascending

  3. Find the ‘updated_at` value from the last record in the response

  4. Use that ‘updated_at` value as the `since` parameter in your next request

  5. Repeat steps 2-4 to ingest updates until you receive an empty list

**Important Notes:**

  • The ‘since` parameter is inclusive, so you may receive the last record from the previous batch again (you can deduplicate by ID and version)

  • All coverage records include ‘updated_at`, `id`, `version`, `deactivated`, and `updating_user` fields for tracking changes

  • Timestamps have millisecond resolution for precise ordering

Returns:

Raises:

  • (error_class)


177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
# File 'lib/candid/pre_encounter/coverages/v_1/client.rb', line 177

def scan(request_options: {}, **params)
  params = Candid::Internal::Types::Utils.symbolize_keys(params)
  _query_param_names = %i[since]
  _query = params.slice(*_query_param_names)
  params.except(*_query_param_names)

  _request = Candid::Internal::JSON::Request.new(
    base_url: request_options[:base_url] || Candid::Environment::PRODUCTION,
    method: "GET",
    path: "/coverages/v1/updates/scan",
    query: _query
  )
  begin
    _response = @client.send(_request)
  rescue Net::HTTPRequestTimeout
    raise Candid::Errors::TimeoutError
  end
  code = _response.code.to_i
  return if code.between?(200, 299)

  error_class = Candid::Errors::ResponseError.subclass_for_code(code)
  raise error_class.new(_response.body, code: code)
end

#update(request_options: {}, **params) ⇒ Candid::PreEncounter::Coverages::V1::Types::Coverage

Updates a Coverage. The path must contain the next version number to prevent race conditions. For example, if the current version of the coverage is n, you will need to send a request to this endpoint with ‘/id/n+1` to update the coverage. Updating historic versions is not supported.



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/candid/pre_encounter/coverages/v_1/client.rb', line 40

def update(request_options: {}, **params)
  _request = Candid::Internal::JSON::Request.new(
    base_url: request_options[:base_url] || Candid::Environment::PRODUCTION,
    method: "PUT",
    path: "/coverages/v1/#{params[:id]}/#{params[:version]}",
    body: Candid::PreEncounter::Coverages::V1::Types::MutableCoverage.new(params).to_h
  )
  begin
    _response = @client.send(_request)
  rescue Net::HTTPRequestTimeout
    raise Candid::Errors::TimeoutError
  end
  code = _response.code.to_i
  if code.between?(200, 299)
    Candid::PreEncounter::Coverages::V1::Types::Coverage.load(_response.body)
  else
    error_class = Candid::Errors::ResponseError.subclass_for_code(code)
    raise error_class.new(_response.body, code: code)
  end
end