voltaria_sdk 2.34.5
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 +7 -0
- data/.rubocop.yml +69 -0
- data/README.md +202 -0
- data/Rakefile +20 -0
- data/custom.gemspec.rb +16 -0
- data/lib/voltaria/accounts/client.rb +168 -0
- data/lib/voltaria/accounts/types/get_client_account_request.rb +12 -0
- data/lib/voltaria/accounts/types/list_client_account_fields_request.rb +11 -0
- data/lib/voltaria/accounts/types/list_client_accounts_request.rb +14 -0
- data/lib/voltaria/accounts/types/partner_client_account_create_request.rb +23 -0
- data/lib/voltaria/accounts/types/partner_client_account_create_request_status.rb +14 -0
- data/lib/voltaria/client.rb +74 -0
- data/lib/voltaria/clients/client.rb +557 -0
- data/lib/voltaria/clients/types/approve_onboarding_request.rb +11 -0
- data/lib/voltaria/clients/types/client_create_payload.rb +16 -0
- data/lib/voltaria/clients/types/client_data_create_payload.rb +12 -0
- data/lib/voltaria/clients/types/client_user_invite_request.rb +16 -0
- data/lib/voltaria/clients/types/delete_client_request.rb +11 -0
- data/lib/voltaria/clients/types/get_client_by_id_request.rb +11 -0
- data/lib/voltaria/clients/types/get_limit_request_request.rb +11 -0
- data/lib/voltaria/clients/types/limit_request_create_payload.rb +14 -0
- data/lib/voltaria/clients/types/limit_request_create_payload_requested_limit.rb +15 -0
- data/lib/voltaria/clients/types/list_client_checklist_summaries_request.rb +13 -0
- data/lib/voltaria/clients/types/list_client_waivers_request.rb +15 -0
- data/lib/voltaria/clients/types/list_clients_request.rb +14 -0
- data/lib/voltaria/clients/types/list_limit_requests_request.rb +15 -0
- data/lib/voltaria/clients/types/list_onboarding_clients_request.rb +12 -0
- data/lib/voltaria/clients/types/reject_onboarding_request.rb +11 -0
- data/lib/voltaria/documents/client.rb +221 -0
- data/lib/voltaria/documents/types/delete_document_request.rb +11 -0
- data/lib/voltaria/documents/types/document_create_payload.rb +14 -0
- data/lib/voltaria/documents/types/get_document_by_id_request.rb +11 -0
- data/lib/voltaria/documents/types/list_documents_request.rb +18 -0
- data/lib/voltaria/drawdowns/client.rb +141 -0
- data/lib/voltaria/drawdowns/types/drawdown_create_payload.rb +12 -0
- data/lib/voltaria/drawdowns/types/drawdown_create_payload_amount.rb +15 -0
- data/lib/voltaria/drawdowns/types/list_drawdown_checklists_request.rb +15 -0
- data/lib/voltaria/drawdowns/types/list_drawdowns_request.rb +14 -0
- data/lib/voltaria/environment.rb +8 -0
- data/lib/voltaria/errors/api_error.rb +8 -0
- data/lib/voltaria/errors/client_error.rb +17 -0
- data/lib/voltaria/errors/redirect_error.rb +8 -0
- data/lib/voltaria/errors/response_error.rb +42 -0
- data/lib/voltaria/errors/server_error.rb +11 -0
- data/lib/voltaria/errors/timeout_error.rb +8 -0
- data/lib/voltaria/installments/client.rb +292 -0
- data/lib/voltaria/installments/types/delete_installment_request.rb +11 -0
- data/lib/voltaria/installments/types/get_installment_by_id_request.rb +11 -0
- data/lib/voltaria/installments/types/installment_create_payload.rb +12 -0
- data/lib/voltaria/installments/types/installment_edit_payload.rb +13 -0
- data/lib/voltaria/installments/types/installment_edit_payload_amount.rb +15 -0
- data/lib/voltaria/installments/types/list_installments_request.rb +16 -0
- data/lib/voltaria/installments/types/list_payment_promises_request.rb +16 -0
- data/lib/voltaria/installments/types/payment_promise_create_payload.rb +14 -0
- data/lib/voltaria/installments/types/payment_promise_create_payload_amount.rb +15 -0
- data/lib/voltaria/internal/errors/constraint_error.rb +10 -0
- data/lib/voltaria/internal/errors/type_error.rb +10 -0
- data/lib/voltaria/internal/http/base_request.rb +51 -0
- data/lib/voltaria/internal/http/raw_client.rb +214 -0
- data/lib/voltaria/internal/iterators/cursor_item_iterator.rb +28 -0
- data/lib/voltaria/internal/iterators/cursor_page_iterator.rb +51 -0
- data/lib/voltaria/internal/iterators/item_iterator.rb +59 -0
- data/lib/voltaria/internal/iterators/offset_item_iterator.rb +30 -0
- data/lib/voltaria/internal/iterators/offset_page_iterator.rb +83 -0
- data/lib/voltaria/internal/json/request.rb +41 -0
- data/lib/voltaria/internal/json/serializable.rb +25 -0
- data/lib/voltaria/internal/multipart/multipart_encoder.rb +141 -0
- data/lib/voltaria/internal/multipart/multipart_form_data.rb +78 -0
- data/lib/voltaria/internal/multipart/multipart_form_data_part.rb +51 -0
- data/lib/voltaria/internal/multipart/multipart_request.rb +40 -0
- data/lib/voltaria/internal/types/array.rb +47 -0
- data/lib/voltaria/internal/types/boolean.rb +34 -0
- data/lib/voltaria/internal/types/enum.rb +56 -0
- data/lib/voltaria/internal/types/hash.rb +36 -0
- data/lib/voltaria/internal/types/model/field.rb +38 -0
- data/lib/voltaria/internal/types/model.rb +208 -0
- data/lib/voltaria/internal/types/type.rb +35 -0
- data/lib/voltaria/internal/types/union.rb +161 -0
- data/lib/voltaria/internal/types/unknown.rb +15 -0
- data/lib/voltaria/internal/types/utils.rb +116 -0
- data/lib/voltaria/investors/client.rb +312 -0
- data/lib/voltaria/investors/types/investor_get_client_request.rb +11 -0
- data/lib/voltaria/investors/types/investor_get_installment_request.rb +11 -0
- data/lib/voltaria/investors/types/investor_get_loan_request.rb +11 -0
- data/lib/voltaria/investors/types/investor_list_clients_request.rb +14 -0
- data/lib/voltaria/investors/types/investor_list_installments_request.rb +16 -0
- data/lib/voltaria/investors/types/investor_list_loans_request.rb +15 -0
- data/lib/voltaria/investors/types/investor_list_repayments_request.rb +17 -0
- data/lib/voltaria/loans/client.rb +271 -0
- data/lib/voltaria/loans/types/bulk_loan_create_payload.rb +11 -0
- data/lib/voltaria/loans/types/delete_loan_request.rb +11 -0
- data/lib/voltaria/loans/types/get_bulk_loan_status_request.rb +11 -0
- data/lib/voltaria/loans/types/get_loan_by_id_request.rb +11 -0
- data/lib/voltaria/loans/types/list_loans_request.rb +15 -0
- data/lib/voltaria/loans/types/loan_create_payload.rb +17 -0
- data/lib/voltaria/loans/types/loan_create_payload_amount.rb +15 -0
- data/lib/voltaria/loans/types/loan_default_payload.rb +13 -0
- data/lib/voltaria/loans/types/loan_default_payload_sold_amount.rb +15 -0
- data/lib/voltaria/partners/client.rb +129 -0
- data/lib/voltaria/partners/types/list_partner_waterfalls_request.rb +14 -0
- data/lib/voltaria/partners/types/partner_data_create_payload.rb +11 -0
- data/lib/voltaria/prefix_routing.rb +80 -0
- data/lib/voltaria/repayments/client.rb +183 -0
- data/lib/voltaria/repayments/types/bulk_repayment_create_payload.rb +11 -0
- data/lib/voltaria/repayments/types/get_bulk_repayment_status_request.rb +11 -0
- data/lib/voltaria/repayments/types/list_repayment_logs_request.rb +17 -0
- data/lib/voltaria/repayments/types/repayment_create_payload.rb +17 -0
- data/lib/voltaria/repayments/types/repayment_create_payload_amount.rb +15 -0
- data/lib/voltaria/sandbox/client.rb +124 -0
- data/lib/voltaria/sandbox/types/client_update_sandbox.rb +13 -0
- data/lib/voltaria/sandbox/types/client_update_sandbox_limit.rb +15 -0
- data/lib/voltaria/sandbox/types/loan_update_sandbox.rb +12 -0
- data/lib/voltaria/sandbox/types/webhook_test_sandbox.rb +12 -0
- data/lib/voltaria/types/account_address.rb +14 -0
- data/lib/voltaria/types/account_holder_type_enum.rb +12 -0
- data/lib/voltaria/types/account_status_enum.rb +13 -0
- data/lib/voltaria/types/available_document_categories_response.rb +9 -0
- data/lib/voltaria/types/available_funding.rb +15 -0
- data/lib/voltaria/types/bulk_loan_item_payload.rb +15 -0
- data/lib/voltaria/types/bulk_loan_item_payload_amount.rb +13 -0
- data/lib/voltaria/types/bulk_loan_item_result.rb +15 -0
- data/lib/voltaria/types/bulk_loan_result.rb +13 -0
- data/lib/voltaria/types/bulk_loan_task_response.rb +11 -0
- data/lib/voltaria/types/bulk_loan_task_status.rb +14 -0
- data/lib/voltaria/types/bulk_repayment_item_payload.rb +15 -0
- data/lib/voltaria/types/bulk_repayment_item_payload_amount.rb +13 -0
- data/lib/voltaria/types/bulk_repayment_item_result.rb +15 -0
- data/lib/voltaria/types/bulk_repayment_result.rb +13 -0
- data/lib/voltaria/types/bulk_repayment_task_response.rb +11 -0
- data/lib/voltaria/types/bulk_repayment_task_status.rb +14 -0
- data/lib/voltaria/types/checklist_summary_partner_response.rb +14 -0
- data/lib/voltaria/types/checklist_type_enum.rb +12 -0
- data/lib/voltaria/types/client_account_response.rb +21 -0
- data/lib/voltaria/types/client_base_info.rb +13 -0
- data/lib/voltaria/types/client_data_response.rb +12 -0
- data/lib/voltaria/types/client_investor_response.rb +17 -0
- data/lib/voltaria/types/client_limit_response.rb +16 -0
- data/lib/voltaria/types/client_response.rb +19 -0
- data/lib/voltaria/types/client_status_enum.rb +18 -0
- data/lib/voltaria/types/client_type_enum.rb +12 -0
- data/lib/voltaria/types/client_user_response.rb +24 -0
- data/lib/voltaria/types/client_user_status_enum.rb +13 -0
- data/lib/voltaria/types/currency_enum.rb +16 -0
- data/lib/voltaria/types/currency_field_spec.rb +10 -0
- data/lib/voltaria/types/document_response.rb +20 -0
- data/lib/voltaria/types/drawdown_checklist_response.rb +16 -0
- data/lib/voltaria/types/drawdown_response.rb +15 -0
- data/lib/voltaria/types/drawdown_status_enum.rb +13 -0
- data/lib/voltaria/types/http_validation_error.rb +9 -0
- data/lib/voltaria/types/installment_response.rb +24 -0
- data/lib/voltaria/types/installment_response_with_client_info.rb +25 -0
- data/lib/voltaria/types/installment_status_enum.rb +19 -0
- data/lib/voltaria/types/jurisdiction_enum.rb +13 -0
- data/lib/voltaria/types/kyc_status_enum.rb +14 -0
- data/lib/voltaria/types/limit_request_response.rb +16 -0
- data/lib/voltaria/types/limit_request_status_enum.rb +13 -0
- data/lib/voltaria/types/loan_installment_create_payload.rb +10 -0
- data/lib/voltaria/types/loan_installment_create_payload_amount.rb +13 -0
- data/lib/voltaria/types/loan_installment_response.rb +15 -0
- data/lib/voltaria/types/loan_investor_response.rb +27 -0
- data/lib/voltaria/types/loan_payment_status_enum.rb +12 -0
- data/lib/voltaria/types/loan_response_with_client_info.rb +26 -0
- data/lib/voltaria/types/loan_response_with_installments.rb +26 -0
- data/lib/voltaria/types/loan_status_enum.rb +21 -0
- data/lib/voltaria/types/paginated_response_checklist_summary_partner_response.rb +16 -0
- data/lib/voltaria/types/paginated_response_client_account_response.rb +16 -0
- data/lib/voltaria/types/paginated_response_client_investor_response.rb +16 -0
- data/lib/voltaria/types/paginated_response_client_response.rb +16 -0
- data/lib/voltaria/types/paginated_response_document_response.rb +16 -0
- data/lib/voltaria/types/paginated_response_drawdown_checklist_response.rb +16 -0
- data/lib/voltaria/types/paginated_response_drawdown_response.rb +16 -0
- data/lib/voltaria/types/paginated_response_installment_response_with_client_info.rb +16 -0
- data/lib/voltaria/types/paginated_response_limit_request_response.rb +16 -0
- data/lib/voltaria/types/paginated_response_loan_investor_response.rb +16 -0
- data/lib/voltaria/types/paginated_response_loan_response_with_client_info.rb +16 -0
- data/lib/voltaria/types/paginated_response_payment_promise_response.rb +16 -0
- data/lib/voltaria/types/paginated_response_repayment_response_with_client_info.rb +16 -0
- data/lib/voltaria/types/paginated_response_waiver_response.rb +16 -0
- data/lib/voltaria/types/paginated_response_waterfall_response.rb +16 -0
- data/lib/voltaria/types/paginated_response_webhook_log_response.rb +16 -0
- data/lib/voltaria/types/paginated_response_webhook_subscription_response.rb +16 -0
- data/lib/voltaria/types/partner_data_response.rb +11 -0
- data/lib/voltaria/types/payment_promise_response.rb +19 -0
- data/lib/voltaria/types/payment_promise_status_enum.rb +14 -0
- data/lib/voltaria/types/repayment_response.rb +21 -0
- data/lib/voltaria/types/repayment_response_with_client_info.rb +22 -0
- data/lib/voltaria/types/role_response.rb +11 -0
- data/lib/voltaria/types/validation_error.rb +13 -0
- data/lib/voltaria/types/validation_error_loc_item.rb +12 -0
- data/lib/voltaria/types/waiver_response.rb +18 -0
- data/lib/voltaria/types/waiver_status_enum.rb +14 -0
- data/lib/voltaria/types/waterfall_response.rb +19 -0
- data/lib/voltaria/types/waterfall_status_enum.rb +12 -0
- data/lib/voltaria/types/webhook_event_type_enum.rb +15 -0
- data/lib/voltaria/types/webhook_log_response.rb +19 -0
- data/lib/voltaria/types/webhook_log_response_request_body.rb +13 -0
- data/lib/voltaria/types/webhook_status_enum.rb +13 -0
- data/lib/voltaria/types/webhook_subscription_response.rb +17 -0
- data/lib/voltaria/version.rb +5 -0
- data/lib/voltaria/webhooks/client.rb +241 -0
- data/lib/voltaria/webhooks/types/delete_webhook_subscription_request.rb +11 -0
- data/lib/voltaria/webhooks/types/get_webhook_subscription_request.rb +11 -0
- data/lib/voltaria/webhooks/types/list_webhook_logs_request.rb +13 -0
- data/lib/voltaria/webhooks/types/list_webhook_subscriptions_request.rb +13 -0
- data/lib/voltaria/webhooks/types/webhook_create_payload.rb +16 -0
- data/lib/voltaria/webhooks/types/webhook_update_payload.rb +17 -0
- data/lib/voltaria.rb +205 -0
- data/reference.md +5135 -0
- metadata +250 -0
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Voltaria
|
|
4
|
+
module Installments
|
|
5
|
+
class Client
|
|
6
|
+
# @param client [Voltaria::Internal::Http::RawClient]
|
|
7
|
+
#
|
|
8
|
+
# @return [void]
|
|
9
|
+
def initialize(client:)
|
|
10
|
+
@client = client
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Retrieve a list of all loan installments under your partner account. Supports optional filtering by loan or
|
|
14
|
+
# client.
|
|
15
|
+
#
|
|
16
|
+
# @param request_options [Hash]
|
|
17
|
+
# @param params [Hash]
|
|
18
|
+
# @option request_options [String] :base_url
|
|
19
|
+
# @option request_options [Hash{String => Object}] :additional_headers
|
|
20
|
+
# @option request_options [Hash{String => Object}] :additional_query_parameters
|
|
21
|
+
# @option request_options [Hash{String => Object}] :additional_body_parameters
|
|
22
|
+
# @option request_options [Integer] :timeout_in_seconds
|
|
23
|
+
# @option params [Integer, nil] :page
|
|
24
|
+
# @option params [Integer, nil] :page_size
|
|
25
|
+
# @option params [String, nil] :client_id
|
|
26
|
+
# @option params [String, nil] :loan_id
|
|
27
|
+
# @option params [String, nil] :order_by
|
|
28
|
+
# @option params [String, nil] :q
|
|
29
|
+
#
|
|
30
|
+
# @return [Voltaria::Types::PaginatedResponseInstallmentResponseWithClientInfo]
|
|
31
|
+
def list_installments(request_options: {}, **params)
|
|
32
|
+
params = Voltaria::Internal::Types::Utils.normalize_keys(params)
|
|
33
|
+
query_param_names = %i[page page_size client_id loan_id order_by q]
|
|
34
|
+
query_params = {}
|
|
35
|
+
query_params["page"] = params[:page] if params.key?(:page)
|
|
36
|
+
query_params["page_size"] = params[:page_size] if params.key?(:page_size)
|
|
37
|
+
query_params["client_id"] = params[:client_id] if params.key?(:client_id)
|
|
38
|
+
query_params["loan_id"] = params[:loan_id] if params.key?(:loan_id)
|
|
39
|
+
query_params["order_by"] = params[:order_by] if params.key?(:order_by)
|
|
40
|
+
query_params["q"] = params[:q] if params.key?(:q)
|
|
41
|
+
params.except(*query_param_names)
|
|
42
|
+
|
|
43
|
+
request = Voltaria::Internal::JSON::Request.new(
|
|
44
|
+
base_url: request_options[:base_url],
|
|
45
|
+
method: "GET",
|
|
46
|
+
path: "v2/installments",
|
|
47
|
+
query: query_params,
|
|
48
|
+
request_options: request_options
|
|
49
|
+
)
|
|
50
|
+
begin
|
|
51
|
+
response = @client.send(request)
|
|
52
|
+
rescue Net::HTTPRequestTimeout
|
|
53
|
+
raise Voltaria::Errors::TimeoutError
|
|
54
|
+
end
|
|
55
|
+
code = response.code.to_i
|
|
56
|
+
if code.between?(200, 299)
|
|
57
|
+
Voltaria::Types::PaginatedResponseInstallmentResponseWithClientInfo.load(response.body)
|
|
58
|
+
else
|
|
59
|
+
error_class = Voltaria::Errors::ResponseError.subclass_for_code(code)
|
|
60
|
+
raise error_class.new(response.body, code: code)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Add new installments to a loan with its specific loan ID. This endpoint is available to select partners and will
|
|
65
|
+
# trigger the recalculation of the IRR and interest amounts for all installments of the loan.
|
|
66
|
+
#
|
|
67
|
+
# @param request_options [Hash]
|
|
68
|
+
# @param params [Voltaria::Installments::Types::InstallmentCreatePayload]
|
|
69
|
+
# @option request_options [String] :base_url
|
|
70
|
+
# @option request_options [Hash{String => Object}] :additional_headers
|
|
71
|
+
# @option request_options [Hash{String => Object}] :additional_query_parameters
|
|
72
|
+
# @option request_options [Hash{String => Object}] :additional_body_parameters
|
|
73
|
+
# @option request_options [Integer] :timeout_in_seconds
|
|
74
|
+
#
|
|
75
|
+
# @return [Array[Voltaria::Types::InstallmentResponse]]
|
|
76
|
+
def add_installment(request_options: {}, **params)
|
|
77
|
+
params = Voltaria::Internal::Types::Utils.normalize_keys(params)
|
|
78
|
+
request = Voltaria::Internal::JSON::Request.new(
|
|
79
|
+
base_url: request_options[:base_url],
|
|
80
|
+
method: "POST",
|
|
81
|
+
path: "v2/installments",
|
|
82
|
+
body: Voltaria::Installments::Types::InstallmentCreatePayload.new(params).to_h,
|
|
83
|
+
request_options: request_options
|
|
84
|
+
)
|
|
85
|
+
begin
|
|
86
|
+
response = @client.send(request)
|
|
87
|
+
rescue Net::HTTPRequestTimeout
|
|
88
|
+
raise Voltaria::Errors::TimeoutError
|
|
89
|
+
end
|
|
90
|
+
code = response.code.to_i
|
|
91
|
+
return if code.between?(200, 299)
|
|
92
|
+
|
|
93
|
+
error_class = Voltaria::Errors::ResponseError.subclass_for_code(code)
|
|
94
|
+
raise error_class.new(response.body, code: code)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# Retrieve a list of payment promises recorded for installments under your partner account. Supports optional
|
|
98
|
+
# filtering by loan or client.
|
|
99
|
+
#
|
|
100
|
+
# @param request_options [Hash]
|
|
101
|
+
# @param params [Hash]
|
|
102
|
+
# @option request_options [String] :base_url
|
|
103
|
+
# @option request_options [Hash{String => Object}] :additional_headers
|
|
104
|
+
# @option request_options [Hash{String => Object}] :additional_query_parameters
|
|
105
|
+
# @option request_options [Hash{String => Object}] :additional_body_parameters
|
|
106
|
+
# @option request_options [Integer] :timeout_in_seconds
|
|
107
|
+
# @option params [Integer, nil] :page
|
|
108
|
+
# @option params [Integer, nil] :page_size
|
|
109
|
+
# @option params [String, nil] :order_by
|
|
110
|
+
# @option params [String, nil] :q
|
|
111
|
+
# @option params [String, nil] :loan_id
|
|
112
|
+
# @option params [String, nil] :client_id
|
|
113
|
+
#
|
|
114
|
+
# @return [Voltaria::Types::PaginatedResponsePaymentPromiseResponse]
|
|
115
|
+
def list_payment_promises(request_options: {}, **params)
|
|
116
|
+
params = Voltaria::Internal::Types::Utils.normalize_keys(params)
|
|
117
|
+
query_param_names = %i[page page_size order_by q loan_id client_id]
|
|
118
|
+
query_params = {}
|
|
119
|
+
query_params["page"] = params[:page] if params.key?(:page)
|
|
120
|
+
query_params["page_size"] = params[:page_size] if params.key?(:page_size)
|
|
121
|
+
query_params["order_by"] = params[:order_by] if params.key?(:order_by)
|
|
122
|
+
query_params["q"] = params[:q] if params.key?(:q)
|
|
123
|
+
query_params["loan_id"] = params[:loan_id] if params.key?(:loan_id)
|
|
124
|
+
query_params["client_id"] = params[:client_id] if params.key?(:client_id)
|
|
125
|
+
params.except(*query_param_names)
|
|
126
|
+
|
|
127
|
+
request = Voltaria::Internal::JSON::Request.new(
|
|
128
|
+
base_url: request_options[:base_url],
|
|
129
|
+
method: "GET",
|
|
130
|
+
path: "v2/installments/payment-promises",
|
|
131
|
+
query: query_params,
|
|
132
|
+
request_options: request_options
|
|
133
|
+
)
|
|
134
|
+
begin
|
|
135
|
+
response = @client.send(request)
|
|
136
|
+
rescue Net::HTTPRequestTimeout
|
|
137
|
+
raise Voltaria::Errors::TimeoutError
|
|
138
|
+
end
|
|
139
|
+
code = response.code.to_i
|
|
140
|
+
if code.between?(200, 299)
|
|
141
|
+
Voltaria::Types::PaginatedResponsePaymentPromiseResponse.load(response.body)
|
|
142
|
+
else
|
|
143
|
+
error_class = Voltaria::Errors::ResponseError.subclass_for_code(code)
|
|
144
|
+
raise error_class.new(response.body, code: code)
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
# Record a payment promise made by a client for one of their installments. The promised date must be today or in
|
|
149
|
+
# the future.
|
|
150
|
+
#
|
|
151
|
+
# @param request_options [Hash]
|
|
152
|
+
# @param params [Voltaria::Installments::Types::PaymentPromiseCreatePayload]
|
|
153
|
+
# @option request_options [String] :base_url
|
|
154
|
+
# @option request_options [Hash{String => Object}] :additional_headers
|
|
155
|
+
# @option request_options [Hash{String => Object}] :additional_query_parameters
|
|
156
|
+
# @option request_options [Hash{String => Object}] :additional_body_parameters
|
|
157
|
+
# @option request_options [Integer] :timeout_in_seconds
|
|
158
|
+
#
|
|
159
|
+
# @return [Voltaria::Types::PaymentPromiseResponse]
|
|
160
|
+
def create_payment_promise(request_options: {}, **params)
|
|
161
|
+
params = Voltaria::Internal::Types::Utils.normalize_keys(params)
|
|
162
|
+
request = Voltaria::Internal::JSON::Request.new(
|
|
163
|
+
base_url: request_options[:base_url],
|
|
164
|
+
method: "POST",
|
|
165
|
+
path: "v2/installments/payment-promises",
|
|
166
|
+
body: Voltaria::Installments::Types::PaymentPromiseCreatePayload.new(params).to_h,
|
|
167
|
+
request_options: request_options
|
|
168
|
+
)
|
|
169
|
+
begin
|
|
170
|
+
response = @client.send(request)
|
|
171
|
+
rescue Net::HTTPRequestTimeout
|
|
172
|
+
raise Voltaria::Errors::TimeoutError
|
|
173
|
+
end
|
|
174
|
+
code = response.code.to_i
|
|
175
|
+
if code.between?(200, 299)
|
|
176
|
+
Voltaria::Types::PaymentPromiseResponse.load(response.body)
|
|
177
|
+
else
|
|
178
|
+
error_class = Voltaria::Errors::ResponseError.subclass_for_code(code)
|
|
179
|
+
raise error_class.new(response.body, code: code)
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
# Retrieve detailed information for a specific installment using its installment ID.
|
|
184
|
+
#
|
|
185
|
+
# @param request_options [Hash]
|
|
186
|
+
# @param params [Hash]
|
|
187
|
+
# @option request_options [String] :base_url
|
|
188
|
+
# @option request_options [Hash{String => Object}] :additional_headers
|
|
189
|
+
# @option request_options [Hash{String => Object}] :additional_query_parameters
|
|
190
|
+
# @option request_options [Hash{String => Object}] :additional_body_parameters
|
|
191
|
+
# @option request_options [Integer] :timeout_in_seconds
|
|
192
|
+
# @option params [String] :installment_id
|
|
193
|
+
#
|
|
194
|
+
# @return [Voltaria::Types::InstallmentResponse]
|
|
195
|
+
def get_installment_by_id(request_options: {}, **params)
|
|
196
|
+
params = Voltaria::Internal::Types::Utils.normalize_keys(params)
|
|
197
|
+
request = Voltaria::Internal::JSON::Request.new(
|
|
198
|
+
base_url: request_options[:base_url],
|
|
199
|
+
method: "GET",
|
|
200
|
+
path: "v2/installments/#{URI.encode_uri_component(params[:installment_id].to_s)}",
|
|
201
|
+
request_options: request_options
|
|
202
|
+
)
|
|
203
|
+
begin
|
|
204
|
+
response = @client.send(request)
|
|
205
|
+
rescue Net::HTTPRequestTimeout
|
|
206
|
+
raise Voltaria::Errors::TimeoutError
|
|
207
|
+
end
|
|
208
|
+
code = response.code.to_i
|
|
209
|
+
if code.between?(200, 299)
|
|
210
|
+
Voltaria::Types::InstallmentResponse.load(response.body)
|
|
211
|
+
else
|
|
212
|
+
error_class = Voltaria::Errors::ResponseError.subclass_for_code(code)
|
|
213
|
+
raise error_class.new(response.body, code: code)
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
# Update an installment's amount and expected repayment date with its specific installment ID. This endpoint is
|
|
218
|
+
# available to select partners and will trigger the recalculation of the IRR and interest amounts for all
|
|
219
|
+
# installments of the loan.
|
|
220
|
+
#
|
|
221
|
+
# @param request_options [Hash]
|
|
222
|
+
# @param params [Voltaria::Installments::Types::InstallmentEditPayload]
|
|
223
|
+
# @option request_options [String] :base_url
|
|
224
|
+
# @option request_options [Hash{String => Object}] :additional_headers
|
|
225
|
+
# @option request_options [Hash{String => Object}] :additional_query_parameters
|
|
226
|
+
# @option request_options [Hash{String => Object}] :additional_body_parameters
|
|
227
|
+
# @option request_options [Integer] :timeout_in_seconds
|
|
228
|
+
# @option params [String] :installment_id
|
|
229
|
+
#
|
|
230
|
+
# @return [Voltaria::Types::InstallmentResponse]
|
|
231
|
+
def edit_installment(request_options: {}, **params)
|
|
232
|
+
params = Voltaria::Internal::Types::Utils.normalize_keys(params)
|
|
233
|
+
request_data = Voltaria::Installments::Types::InstallmentEditPayload.new(params).to_h
|
|
234
|
+
non_body_param_names = ["installment_id"]
|
|
235
|
+
body = request_data.except(*non_body_param_names)
|
|
236
|
+
|
|
237
|
+
request = Voltaria::Internal::JSON::Request.new(
|
|
238
|
+
base_url: request_options[:base_url],
|
|
239
|
+
method: "PUT",
|
|
240
|
+
path: "v2/installments/#{URI.encode_uri_component(params[:installment_id].to_s)}",
|
|
241
|
+
body: body,
|
|
242
|
+
request_options: request_options
|
|
243
|
+
)
|
|
244
|
+
begin
|
|
245
|
+
response = @client.send(request)
|
|
246
|
+
rescue Net::HTTPRequestTimeout
|
|
247
|
+
raise Voltaria::Errors::TimeoutError
|
|
248
|
+
end
|
|
249
|
+
code = response.code.to_i
|
|
250
|
+
if code.between?(200, 299)
|
|
251
|
+
Voltaria::Types::InstallmentResponse.load(response.body)
|
|
252
|
+
else
|
|
253
|
+
error_class = Voltaria::Errors::ResponseError.subclass_for_code(code)
|
|
254
|
+
raise error_class.new(response.body, code: code)
|
|
255
|
+
end
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
# Delete an installment with its specific installment ID. This endpoint is available to select partners and will
|
|
259
|
+
# trigger the recalculation of the IRR and interest amounts for all installments of the loan.
|
|
260
|
+
#
|
|
261
|
+
# @param request_options [Hash]
|
|
262
|
+
# @param params [Hash]
|
|
263
|
+
# @option request_options [String] :base_url
|
|
264
|
+
# @option request_options [Hash{String => Object}] :additional_headers
|
|
265
|
+
# @option request_options [Hash{String => Object}] :additional_query_parameters
|
|
266
|
+
# @option request_options [Hash{String => Object}] :additional_body_parameters
|
|
267
|
+
# @option request_options [Integer] :timeout_in_seconds
|
|
268
|
+
# @option params [String] :installment_id
|
|
269
|
+
#
|
|
270
|
+
# @return [Hash[String, Object]]
|
|
271
|
+
def delete_installment(request_options: {}, **params)
|
|
272
|
+
params = Voltaria::Internal::Types::Utils.normalize_keys(params)
|
|
273
|
+
request = Voltaria::Internal::JSON::Request.new(
|
|
274
|
+
base_url: request_options[:base_url],
|
|
275
|
+
method: "DELETE",
|
|
276
|
+
path: "v2/installments/#{URI.encode_uri_component(params[:installment_id].to_s)}",
|
|
277
|
+
request_options: request_options
|
|
278
|
+
)
|
|
279
|
+
begin
|
|
280
|
+
response = @client.send(request)
|
|
281
|
+
rescue Net::HTTPRequestTimeout
|
|
282
|
+
raise Voltaria::Errors::TimeoutError
|
|
283
|
+
end
|
|
284
|
+
code = response.code.to_i
|
|
285
|
+
return if code.between?(200, 299)
|
|
286
|
+
|
|
287
|
+
error_class = Voltaria::Errors::ResponseError.subclass_for_code(code)
|
|
288
|
+
raise error_class.new(response.body, code: code)
|
|
289
|
+
end
|
|
290
|
+
end
|
|
291
|
+
end
|
|
292
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Voltaria
|
|
4
|
+
module Installments
|
|
5
|
+
module Types
|
|
6
|
+
class InstallmentCreatePayload < Internal::Types::Model
|
|
7
|
+
field :loan_id, -> { String }, optional: false, nullable: false
|
|
8
|
+
field :installments, -> { Internal::Types::Array[Voltaria::Types::LoanInstallmentCreatePayload] }, optional: false, nullable: false
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Voltaria
|
|
4
|
+
module Installments
|
|
5
|
+
module Types
|
|
6
|
+
class InstallmentEditPayload < Internal::Types::Model
|
|
7
|
+
field :installment_id, -> { String }, optional: false, nullable: false
|
|
8
|
+
field :amount, -> { Voltaria::Installments::Types::InstallmentEditPayloadAmount }, optional: false, nullable: false
|
|
9
|
+
field :expected_repayment_at, -> { String }, optional: false, nullable: false
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Voltaria
|
|
4
|
+
module Installments
|
|
5
|
+
module Types
|
|
6
|
+
# The new amount for the installment
|
|
7
|
+
class InstallmentEditPayloadAmount < Internal::Types::Model
|
|
8
|
+
extend Voltaria::Internal::Types::Union
|
|
9
|
+
|
|
10
|
+
member -> { Integer }
|
|
11
|
+
member -> { String }
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Voltaria
|
|
4
|
+
module Installments
|
|
5
|
+
module Types
|
|
6
|
+
class ListInstallmentsRequest < Internal::Types::Model
|
|
7
|
+
field :page, -> { Integer }, optional: true, nullable: false
|
|
8
|
+
field :page_size, -> { Integer }, optional: true, nullable: false
|
|
9
|
+
field :client_id, -> { String }, optional: true, nullable: false
|
|
10
|
+
field :loan_id, -> { String }, optional: true, nullable: false
|
|
11
|
+
field :order_by, -> { String }, optional: true, nullable: false
|
|
12
|
+
field :q, -> { String }, optional: true, nullable: false
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Voltaria
|
|
4
|
+
module Installments
|
|
5
|
+
module Types
|
|
6
|
+
class ListPaymentPromisesRequest < Internal::Types::Model
|
|
7
|
+
field :page, -> { Integer }, optional: true, nullable: false
|
|
8
|
+
field :page_size, -> { Integer }, optional: true, nullable: false
|
|
9
|
+
field :order_by, -> { String }, optional: true, nullable: false
|
|
10
|
+
field :q, -> { String }, optional: true, nullable: false
|
|
11
|
+
field :loan_id, -> { String }, optional: true, nullable: false
|
|
12
|
+
field :client_id, -> { String }, optional: true, nullable: false
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Voltaria
|
|
4
|
+
module Installments
|
|
5
|
+
module Types
|
|
6
|
+
class PaymentPromiseCreatePayload < Internal::Types::Model
|
|
7
|
+
field :installment_id, -> { String }, optional: false, nullable: false
|
|
8
|
+
field :amount, -> { Voltaria::Installments::Types::PaymentPromiseCreatePayloadAmount }, optional: false, nullable: false
|
|
9
|
+
field :promised_date, -> { String }, optional: false, nullable: false
|
|
10
|
+
field :notes, -> { String }, optional: true, nullable: false
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Voltaria
|
|
4
|
+
module Installments
|
|
5
|
+
module Types
|
|
6
|
+
# The amount the client has promised to pay (must be > 0)
|
|
7
|
+
class PaymentPromiseCreatePayloadAmount < Internal::Types::Model
|
|
8
|
+
extend Voltaria::Internal::Types::Union
|
|
9
|
+
|
|
10
|
+
member -> { Integer }
|
|
11
|
+
member -> { String }
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Voltaria
|
|
4
|
+
module Internal
|
|
5
|
+
module Http
|
|
6
|
+
# @api private
|
|
7
|
+
class BaseRequest
|
|
8
|
+
attr_reader :base_url, :path, :method, :headers, :query, :request_options
|
|
9
|
+
|
|
10
|
+
# @param base_url [String] The base URL for the request
|
|
11
|
+
# @param path [String] The path for the request
|
|
12
|
+
# @param method [String] The HTTP method for the request (:get, :post, etc.)
|
|
13
|
+
# @param headers [Hash] Additional headers for the request (optional)
|
|
14
|
+
# @param query [Hash] Query parameters for the request (optional)
|
|
15
|
+
# @param request_options [Voltaria::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
16
|
+
def initialize(base_url:, path:, method:, headers: {}, query: {}, request_options: {})
|
|
17
|
+
@base_url = base_url
|
|
18
|
+
@path = path
|
|
19
|
+
@method = method
|
|
20
|
+
@headers = headers
|
|
21
|
+
@query = query
|
|
22
|
+
@request_options = request_options
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# @return [Hash] The query parameters merged with additional query parameters from request options.
|
|
26
|
+
def encode_query
|
|
27
|
+
additional_query = @request_options&.dig(:additional_query_parameters) || @request_options&.dig("additional_query_parameters") || {}
|
|
28
|
+
@query.merge(additional_query)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Child classes should implement:
|
|
32
|
+
# - encode_headers: Returns the encoded HTTP request headers.
|
|
33
|
+
# - encode_body: Returns the encoded HTTP request body.
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
# Merges additional_headers from request_options into sdk_headers, filtering out
|
|
38
|
+
# any keys that collide with SDK-set or client-protected headers (case-insensitive).
|
|
39
|
+
# @param sdk_headers [Hash] Headers set by the SDK for this request type.
|
|
40
|
+
# @param protected_keys [Array<String>] Additional header keys that must not be overridden.
|
|
41
|
+
# @return [Hash] The merged headers.
|
|
42
|
+
def merge_additional_headers(sdk_headers, protected_keys: [])
|
|
43
|
+
additional_headers = @request_options&.dig(:additional_headers) || @request_options&.dig("additional_headers") || {}
|
|
44
|
+
all_protected = (sdk_headers.keys + protected_keys).to_set { |k| k.to_s.downcase }
|
|
45
|
+
filtered = additional_headers.reject { |key, _| all_protected.include?(key.to_s.downcase) }
|
|
46
|
+
sdk_headers.merge(filtered)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|