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.
Files changed (209) hide show
  1. checksums.yaml +7 -0
  2. data/.rubocop.yml +69 -0
  3. data/README.md +202 -0
  4. data/Rakefile +20 -0
  5. data/custom.gemspec.rb +16 -0
  6. data/lib/voltaria/accounts/client.rb +168 -0
  7. data/lib/voltaria/accounts/types/get_client_account_request.rb +12 -0
  8. data/lib/voltaria/accounts/types/list_client_account_fields_request.rb +11 -0
  9. data/lib/voltaria/accounts/types/list_client_accounts_request.rb +14 -0
  10. data/lib/voltaria/accounts/types/partner_client_account_create_request.rb +23 -0
  11. data/lib/voltaria/accounts/types/partner_client_account_create_request_status.rb +14 -0
  12. data/lib/voltaria/client.rb +74 -0
  13. data/lib/voltaria/clients/client.rb +557 -0
  14. data/lib/voltaria/clients/types/approve_onboarding_request.rb +11 -0
  15. data/lib/voltaria/clients/types/client_create_payload.rb +16 -0
  16. data/lib/voltaria/clients/types/client_data_create_payload.rb +12 -0
  17. data/lib/voltaria/clients/types/client_user_invite_request.rb +16 -0
  18. data/lib/voltaria/clients/types/delete_client_request.rb +11 -0
  19. data/lib/voltaria/clients/types/get_client_by_id_request.rb +11 -0
  20. data/lib/voltaria/clients/types/get_limit_request_request.rb +11 -0
  21. data/lib/voltaria/clients/types/limit_request_create_payload.rb +14 -0
  22. data/lib/voltaria/clients/types/limit_request_create_payload_requested_limit.rb +15 -0
  23. data/lib/voltaria/clients/types/list_client_checklist_summaries_request.rb +13 -0
  24. data/lib/voltaria/clients/types/list_client_waivers_request.rb +15 -0
  25. data/lib/voltaria/clients/types/list_clients_request.rb +14 -0
  26. data/lib/voltaria/clients/types/list_limit_requests_request.rb +15 -0
  27. data/lib/voltaria/clients/types/list_onboarding_clients_request.rb +12 -0
  28. data/lib/voltaria/clients/types/reject_onboarding_request.rb +11 -0
  29. data/lib/voltaria/documents/client.rb +221 -0
  30. data/lib/voltaria/documents/types/delete_document_request.rb +11 -0
  31. data/lib/voltaria/documents/types/document_create_payload.rb +14 -0
  32. data/lib/voltaria/documents/types/get_document_by_id_request.rb +11 -0
  33. data/lib/voltaria/documents/types/list_documents_request.rb +18 -0
  34. data/lib/voltaria/drawdowns/client.rb +141 -0
  35. data/lib/voltaria/drawdowns/types/drawdown_create_payload.rb +12 -0
  36. data/lib/voltaria/drawdowns/types/drawdown_create_payload_amount.rb +15 -0
  37. data/lib/voltaria/drawdowns/types/list_drawdown_checklists_request.rb +15 -0
  38. data/lib/voltaria/drawdowns/types/list_drawdowns_request.rb +14 -0
  39. data/lib/voltaria/environment.rb +8 -0
  40. data/lib/voltaria/errors/api_error.rb +8 -0
  41. data/lib/voltaria/errors/client_error.rb +17 -0
  42. data/lib/voltaria/errors/redirect_error.rb +8 -0
  43. data/lib/voltaria/errors/response_error.rb +42 -0
  44. data/lib/voltaria/errors/server_error.rb +11 -0
  45. data/lib/voltaria/errors/timeout_error.rb +8 -0
  46. data/lib/voltaria/installments/client.rb +292 -0
  47. data/lib/voltaria/installments/types/delete_installment_request.rb +11 -0
  48. data/lib/voltaria/installments/types/get_installment_by_id_request.rb +11 -0
  49. data/lib/voltaria/installments/types/installment_create_payload.rb +12 -0
  50. data/lib/voltaria/installments/types/installment_edit_payload.rb +13 -0
  51. data/lib/voltaria/installments/types/installment_edit_payload_amount.rb +15 -0
  52. data/lib/voltaria/installments/types/list_installments_request.rb +16 -0
  53. data/lib/voltaria/installments/types/list_payment_promises_request.rb +16 -0
  54. data/lib/voltaria/installments/types/payment_promise_create_payload.rb +14 -0
  55. data/lib/voltaria/installments/types/payment_promise_create_payload_amount.rb +15 -0
  56. data/lib/voltaria/internal/errors/constraint_error.rb +10 -0
  57. data/lib/voltaria/internal/errors/type_error.rb +10 -0
  58. data/lib/voltaria/internal/http/base_request.rb +51 -0
  59. data/lib/voltaria/internal/http/raw_client.rb +214 -0
  60. data/lib/voltaria/internal/iterators/cursor_item_iterator.rb +28 -0
  61. data/lib/voltaria/internal/iterators/cursor_page_iterator.rb +51 -0
  62. data/lib/voltaria/internal/iterators/item_iterator.rb +59 -0
  63. data/lib/voltaria/internal/iterators/offset_item_iterator.rb +30 -0
  64. data/lib/voltaria/internal/iterators/offset_page_iterator.rb +83 -0
  65. data/lib/voltaria/internal/json/request.rb +41 -0
  66. data/lib/voltaria/internal/json/serializable.rb +25 -0
  67. data/lib/voltaria/internal/multipart/multipart_encoder.rb +141 -0
  68. data/lib/voltaria/internal/multipart/multipart_form_data.rb +78 -0
  69. data/lib/voltaria/internal/multipart/multipart_form_data_part.rb +51 -0
  70. data/lib/voltaria/internal/multipart/multipart_request.rb +40 -0
  71. data/lib/voltaria/internal/types/array.rb +47 -0
  72. data/lib/voltaria/internal/types/boolean.rb +34 -0
  73. data/lib/voltaria/internal/types/enum.rb +56 -0
  74. data/lib/voltaria/internal/types/hash.rb +36 -0
  75. data/lib/voltaria/internal/types/model/field.rb +38 -0
  76. data/lib/voltaria/internal/types/model.rb +208 -0
  77. data/lib/voltaria/internal/types/type.rb +35 -0
  78. data/lib/voltaria/internal/types/union.rb +161 -0
  79. data/lib/voltaria/internal/types/unknown.rb +15 -0
  80. data/lib/voltaria/internal/types/utils.rb +116 -0
  81. data/lib/voltaria/investors/client.rb +312 -0
  82. data/lib/voltaria/investors/types/investor_get_client_request.rb +11 -0
  83. data/lib/voltaria/investors/types/investor_get_installment_request.rb +11 -0
  84. data/lib/voltaria/investors/types/investor_get_loan_request.rb +11 -0
  85. data/lib/voltaria/investors/types/investor_list_clients_request.rb +14 -0
  86. data/lib/voltaria/investors/types/investor_list_installments_request.rb +16 -0
  87. data/lib/voltaria/investors/types/investor_list_loans_request.rb +15 -0
  88. data/lib/voltaria/investors/types/investor_list_repayments_request.rb +17 -0
  89. data/lib/voltaria/loans/client.rb +271 -0
  90. data/lib/voltaria/loans/types/bulk_loan_create_payload.rb +11 -0
  91. data/lib/voltaria/loans/types/delete_loan_request.rb +11 -0
  92. data/lib/voltaria/loans/types/get_bulk_loan_status_request.rb +11 -0
  93. data/lib/voltaria/loans/types/get_loan_by_id_request.rb +11 -0
  94. data/lib/voltaria/loans/types/list_loans_request.rb +15 -0
  95. data/lib/voltaria/loans/types/loan_create_payload.rb +17 -0
  96. data/lib/voltaria/loans/types/loan_create_payload_amount.rb +15 -0
  97. data/lib/voltaria/loans/types/loan_default_payload.rb +13 -0
  98. data/lib/voltaria/loans/types/loan_default_payload_sold_amount.rb +15 -0
  99. data/lib/voltaria/partners/client.rb +129 -0
  100. data/lib/voltaria/partners/types/list_partner_waterfalls_request.rb +14 -0
  101. data/lib/voltaria/partners/types/partner_data_create_payload.rb +11 -0
  102. data/lib/voltaria/prefix_routing.rb +80 -0
  103. data/lib/voltaria/repayments/client.rb +183 -0
  104. data/lib/voltaria/repayments/types/bulk_repayment_create_payload.rb +11 -0
  105. data/lib/voltaria/repayments/types/get_bulk_repayment_status_request.rb +11 -0
  106. data/lib/voltaria/repayments/types/list_repayment_logs_request.rb +17 -0
  107. data/lib/voltaria/repayments/types/repayment_create_payload.rb +17 -0
  108. data/lib/voltaria/repayments/types/repayment_create_payload_amount.rb +15 -0
  109. data/lib/voltaria/sandbox/client.rb +124 -0
  110. data/lib/voltaria/sandbox/types/client_update_sandbox.rb +13 -0
  111. data/lib/voltaria/sandbox/types/client_update_sandbox_limit.rb +15 -0
  112. data/lib/voltaria/sandbox/types/loan_update_sandbox.rb +12 -0
  113. data/lib/voltaria/sandbox/types/webhook_test_sandbox.rb +12 -0
  114. data/lib/voltaria/types/account_address.rb +14 -0
  115. data/lib/voltaria/types/account_holder_type_enum.rb +12 -0
  116. data/lib/voltaria/types/account_status_enum.rb +13 -0
  117. data/lib/voltaria/types/available_document_categories_response.rb +9 -0
  118. data/lib/voltaria/types/available_funding.rb +15 -0
  119. data/lib/voltaria/types/bulk_loan_item_payload.rb +15 -0
  120. data/lib/voltaria/types/bulk_loan_item_payload_amount.rb +13 -0
  121. data/lib/voltaria/types/bulk_loan_item_result.rb +15 -0
  122. data/lib/voltaria/types/bulk_loan_result.rb +13 -0
  123. data/lib/voltaria/types/bulk_loan_task_response.rb +11 -0
  124. data/lib/voltaria/types/bulk_loan_task_status.rb +14 -0
  125. data/lib/voltaria/types/bulk_repayment_item_payload.rb +15 -0
  126. data/lib/voltaria/types/bulk_repayment_item_payload_amount.rb +13 -0
  127. data/lib/voltaria/types/bulk_repayment_item_result.rb +15 -0
  128. data/lib/voltaria/types/bulk_repayment_result.rb +13 -0
  129. data/lib/voltaria/types/bulk_repayment_task_response.rb +11 -0
  130. data/lib/voltaria/types/bulk_repayment_task_status.rb +14 -0
  131. data/lib/voltaria/types/checklist_summary_partner_response.rb +14 -0
  132. data/lib/voltaria/types/checklist_type_enum.rb +12 -0
  133. data/lib/voltaria/types/client_account_response.rb +21 -0
  134. data/lib/voltaria/types/client_base_info.rb +13 -0
  135. data/lib/voltaria/types/client_data_response.rb +12 -0
  136. data/lib/voltaria/types/client_investor_response.rb +17 -0
  137. data/lib/voltaria/types/client_limit_response.rb +16 -0
  138. data/lib/voltaria/types/client_response.rb +19 -0
  139. data/lib/voltaria/types/client_status_enum.rb +18 -0
  140. data/lib/voltaria/types/client_type_enum.rb +12 -0
  141. data/lib/voltaria/types/client_user_response.rb +24 -0
  142. data/lib/voltaria/types/client_user_status_enum.rb +13 -0
  143. data/lib/voltaria/types/currency_enum.rb +16 -0
  144. data/lib/voltaria/types/currency_field_spec.rb +10 -0
  145. data/lib/voltaria/types/document_response.rb +20 -0
  146. data/lib/voltaria/types/drawdown_checklist_response.rb +16 -0
  147. data/lib/voltaria/types/drawdown_response.rb +15 -0
  148. data/lib/voltaria/types/drawdown_status_enum.rb +13 -0
  149. data/lib/voltaria/types/http_validation_error.rb +9 -0
  150. data/lib/voltaria/types/installment_response.rb +24 -0
  151. data/lib/voltaria/types/installment_response_with_client_info.rb +25 -0
  152. data/lib/voltaria/types/installment_status_enum.rb +19 -0
  153. data/lib/voltaria/types/jurisdiction_enum.rb +13 -0
  154. data/lib/voltaria/types/kyc_status_enum.rb +14 -0
  155. data/lib/voltaria/types/limit_request_response.rb +16 -0
  156. data/lib/voltaria/types/limit_request_status_enum.rb +13 -0
  157. data/lib/voltaria/types/loan_installment_create_payload.rb +10 -0
  158. data/lib/voltaria/types/loan_installment_create_payload_amount.rb +13 -0
  159. data/lib/voltaria/types/loan_installment_response.rb +15 -0
  160. data/lib/voltaria/types/loan_investor_response.rb +27 -0
  161. data/lib/voltaria/types/loan_payment_status_enum.rb +12 -0
  162. data/lib/voltaria/types/loan_response_with_client_info.rb +26 -0
  163. data/lib/voltaria/types/loan_response_with_installments.rb +26 -0
  164. data/lib/voltaria/types/loan_status_enum.rb +21 -0
  165. data/lib/voltaria/types/paginated_response_checklist_summary_partner_response.rb +16 -0
  166. data/lib/voltaria/types/paginated_response_client_account_response.rb +16 -0
  167. data/lib/voltaria/types/paginated_response_client_investor_response.rb +16 -0
  168. data/lib/voltaria/types/paginated_response_client_response.rb +16 -0
  169. data/lib/voltaria/types/paginated_response_document_response.rb +16 -0
  170. data/lib/voltaria/types/paginated_response_drawdown_checklist_response.rb +16 -0
  171. data/lib/voltaria/types/paginated_response_drawdown_response.rb +16 -0
  172. data/lib/voltaria/types/paginated_response_installment_response_with_client_info.rb +16 -0
  173. data/lib/voltaria/types/paginated_response_limit_request_response.rb +16 -0
  174. data/lib/voltaria/types/paginated_response_loan_investor_response.rb +16 -0
  175. data/lib/voltaria/types/paginated_response_loan_response_with_client_info.rb +16 -0
  176. data/lib/voltaria/types/paginated_response_payment_promise_response.rb +16 -0
  177. data/lib/voltaria/types/paginated_response_repayment_response_with_client_info.rb +16 -0
  178. data/lib/voltaria/types/paginated_response_waiver_response.rb +16 -0
  179. data/lib/voltaria/types/paginated_response_waterfall_response.rb +16 -0
  180. data/lib/voltaria/types/paginated_response_webhook_log_response.rb +16 -0
  181. data/lib/voltaria/types/paginated_response_webhook_subscription_response.rb +16 -0
  182. data/lib/voltaria/types/partner_data_response.rb +11 -0
  183. data/lib/voltaria/types/payment_promise_response.rb +19 -0
  184. data/lib/voltaria/types/payment_promise_status_enum.rb +14 -0
  185. data/lib/voltaria/types/repayment_response.rb +21 -0
  186. data/lib/voltaria/types/repayment_response_with_client_info.rb +22 -0
  187. data/lib/voltaria/types/role_response.rb +11 -0
  188. data/lib/voltaria/types/validation_error.rb +13 -0
  189. data/lib/voltaria/types/validation_error_loc_item.rb +12 -0
  190. data/lib/voltaria/types/waiver_response.rb +18 -0
  191. data/lib/voltaria/types/waiver_status_enum.rb +14 -0
  192. data/lib/voltaria/types/waterfall_response.rb +19 -0
  193. data/lib/voltaria/types/waterfall_status_enum.rb +12 -0
  194. data/lib/voltaria/types/webhook_event_type_enum.rb +15 -0
  195. data/lib/voltaria/types/webhook_log_response.rb +19 -0
  196. data/lib/voltaria/types/webhook_log_response_request_body.rb +13 -0
  197. data/lib/voltaria/types/webhook_status_enum.rb +13 -0
  198. data/lib/voltaria/types/webhook_subscription_response.rb +17 -0
  199. data/lib/voltaria/version.rb +5 -0
  200. data/lib/voltaria/webhooks/client.rb +241 -0
  201. data/lib/voltaria/webhooks/types/delete_webhook_subscription_request.rb +11 -0
  202. data/lib/voltaria/webhooks/types/get_webhook_subscription_request.rb +11 -0
  203. data/lib/voltaria/webhooks/types/list_webhook_logs_request.rb +13 -0
  204. data/lib/voltaria/webhooks/types/list_webhook_subscriptions_request.rb +13 -0
  205. data/lib/voltaria/webhooks/types/webhook_create_payload.rb +16 -0
  206. data/lib/voltaria/webhooks/types/webhook_update_payload.rb +17 -0
  207. data/lib/voltaria.rb +205 -0
  208. data/reference.md +5135 -0
  209. metadata +250 -0
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Voltaria
4
+ module Clients
5
+ module Types
6
+ class ListClientChecklistSummariesRequest < Internal::Types::Model
7
+ field :client_id, -> { String }, optional: false, nullable: false
8
+ field :page, -> { Integer }, optional: true, nullable: false
9
+ field :page_size, -> { Integer }, optional: true, 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 Clients
5
+ module Types
6
+ class ListClientWaiversRequest < Internal::Types::Model
7
+ field :client_id, -> { String }, optional: false, nullable: false
8
+ field :page, -> { Integer }, optional: true, nullable: false
9
+ field :page_size, -> { Integer }, optional: true, nullable: false
10
+ field :order_by, -> { String }, optional: true, nullable: false
11
+ field :q, -> { String }, optional: true, nullable: false
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Voltaria
4
+ module Clients
5
+ module Types
6
+ class ListClientsRequest < 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
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Voltaria
4
+ module Clients
5
+ module Types
6
+ class ListLimitRequestsRequest < Internal::Types::Model
7
+ field :client_id, -> { String }, optional: true, nullable: false
8
+ field :page, -> { Integer }, optional: true, nullable: false
9
+ field :page_size, -> { Integer }, optional: true, nullable: false
10
+ field :order_by, -> { String }, optional: true, nullable: false
11
+ field :q, -> { String }, optional: true, nullable: false
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Voltaria
4
+ module Clients
5
+ module Types
6
+ class ListOnboardingClientsRequest < Internal::Types::Model
7
+ field :page, -> { Integer }, optional: true, nullable: false
8
+ field :page_size, -> { Integer }, optional: true, nullable: false
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Voltaria
4
+ module Clients
5
+ module Types
6
+ class RejectOnboardingRequest < Internal::Types::Model
7
+ field :client_id, -> { String }, optional: false, nullable: false
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,221 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Voltaria
4
+ module Documents
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 all documents linked to a client.
14
+ #
15
+ # @param request_options [Hash]
16
+ # @param params [Hash]
17
+ # @option request_options [String] :base_url
18
+ # @option request_options [Hash{String => Object}] :additional_headers
19
+ # @option request_options [Hash{String => Object}] :additional_query_parameters
20
+ # @option request_options [Hash{String => Object}] :additional_body_parameters
21
+ # @option request_options [Integer] :timeout_in_seconds
22
+ # @option params [String, nil] :client_id
23
+ # @option params [String, nil] :loan_id
24
+ # @option params [String, nil] :installment_id
25
+ # @option params [String, nil] :waterfall_id
26
+ # @option params [Integer, nil] :page
27
+ # @option params [Integer, nil] :page_size
28
+ # @option params [String, nil] :order_by
29
+ # @option params [String, nil] :q
30
+ #
31
+ # @return [Voltaria::Types::PaginatedResponseDocumentResponse]
32
+ def list_documents(request_options: {}, **params)
33
+ params = Voltaria::Internal::Types::Utils.normalize_keys(params)
34
+ query_param_names = %i[client_id loan_id installment_id waterfall_id page page_size order_by q]
35
+ query_params = {}
36
+ query_params["client_id"] = params[:client_id] if params.key?(:client_id)
37
+ query_params["loan_id"] = params[:loan_id] if params.key?(:loan_id)
38
+ query_params["installment_id"] = params[:installment_id] if params.key?(:installment_id)
39
+ query_params["waterfall_id"] = params[:waterfall_id] if params.key?(:waterfall_id)
40
+ query_params["page"] = params[:page] if params.key?(:page)
41
+ query_params["page_size"] = params[:page_size] if params.key?(:page_size)
42
+ query_params["order_by"] = params[:order_by] if params.key?(:order_by)
43
+ query_params["q"] = params[:q] if params.key?(:q)
44
+ params.except(*query_param_names)
45
+
46
+ request = Voltaria::Internal::JSON::Request.new(
47
+ base_url: request_options[:base_url],
48
+ method: "GET",
49
+ path: "v2/documents",
50
+ query: query_params,
51
+ request_options: request_options
52
+ )
53
+ begin
54
+ response = @client.send(request)
55
+ rescue Net::HTTPRequestTimeout
56
+ raise Voltaria::Errors::TimeoutError
57
+ end
58
+ code = response.code.to_i
59
+ if code.between?(200, 299)
60
+ Voltaria::Types::PaginatedResponseDocumentResponse.load(response.body)
61
+ else
62
+ error_class = Voltaria::Errors::ResponseError.subclass_for_code(code)
63
+ raise error_class.new(response.body, code: code)
64
+ end
65
+ end
66
+
67
+ # Upload a new document related to a client or loan, such as financial statements or KYC files.
68
+ #
69
+ # @param request_options [Hash]
70
+ # @param params [void]
71
+ # @option request_options [String] :base_url
72
+ # @option request_options [Hash{String => Object}] :additional_headers
73
+ # @option request_options [Hash{String => Object}] :additional_query_parameters
74
+ # @option request_options [Hash{String => Object}] :additional_body_parameters
75
+ # @option request_options [Integer] :timeout_in_seconds
76
+ # @option params [String, nil] :client_id
77
+ # @option params [String, nil] :loan_id
78
+ # @option params [String, nil] :installment_id
79
+ # @option params [String, nil] :waterfall_id
80
+ #
81
+ # @return [Voltaria::Types::DocumentResponse]
82
+ def upload_document(request_options: {}, **params)
83
+ params = Voltaria::Internal::Types::Utils.normalize_keys(params)
84
+ body = Internal::Multipart::FormData.new
85
+
86
+ if params[:category]
87
+ body.add(
88
+ name: "category",
89
+ value: params[:category]
90
+ )
91
+ end
92
+ if params[:file_name]
93
+ body.add(
94
+ name: "file_name",
95
+ value: params[:file_name]
96
+ )
97
+ end
98
+ body.add_part(params[:file].to_form_data_part(name: "file")) if params[:file]
99
+
100
+ request = Voltaria::Internal::Multipart::Request.new(
101
+ base_url: request_options[:base_url],
102
+ method: "POST",
103
+ path: "v2/documents",
104
+ body: body,
105
+ request_options: request_options
106
+ )
107
+ begin
108
+ response = @client.send(request)
109
+ rescue Net::HTTPRequestTimeout
110
+ raise Voltaria::Errors::TimeoutError
111
+ end
112
+ code = response.code.to_i
113
+ if code.between?(200, 299)
114
+ Voltaria::Types::DocumentResponse.load(response.body)
115
+ else
116
+ error_class = Voltaria::Errors::ResponseError.subclass_for_code(code)
117
+ raise error_class.new(response.body, code: code)
118
+ end
119
+ end
120
+
121
+ # Retrieve all available document categories.
122
+ #
123
+ # @param request_options [Hash]
124
+ # @param params [Hash]
125
+ # @option request_options [String] :base_url
126
+ # @option request_options [Hash{String => Object}] :additional_headers
127
+ # @option request_options [Hash{String => Object}] :additional_query_parameters
128
+ # @option request_options [Hash{String => Object}] :additional_body_parameters
129
+ # @option request_options [Integer] :timeout_in_seconds
130
+ #
131
+ # @return [Voltaria::Types::AvailableDocumentCategoriesResponse]
132
+ def get_available_document_categories(request_options: {}, **params)
133
+ Voltaria::Internal::Types::Utils.normalize_keys(params)
134
+ request = Voltaria::Internal::JSON::Request.new(
135
+ base_url: request_options[:base_url],
136
+ method: "GET",
137
+ path: "v2/documents/available-categories",
138
+ request_options: request_options
139
+ )
140
+ begin
141
+ response = @client.send(request)
142
+ rescue Net::HTTPRequestTimeout
143
+ raise Voltaria::Errors::TimeoutError
144
+ end
145
+ code = response.code.to_i
146
+ if code.between?(200, 299)
147
+ Voltaria::Types::AvailableDocumentCategoriesResponse.load(response.body)
148
+ else
149
+ error_class = Voltaria::Errors::ResponseError.subclass_for_code(code)
150
+ raise error_class.new(response.body, code: code)
151
+ end
152
+ end
153
+
154
+ # Retrieve details for a specific document using its document ID.
155
+ #
156
+ # @param request_options [Hash]
157
+ # @param params [Hash]
158
+ # @option request_options [String] :base_url
159
+ # @option request_options [Hash{String => Object}] :additional_headers
160
+ # @option request_options [Hash{String => Object}] :additional_query_parameters
161
+ # @option request_options [Hash{String => Object}] :additional_body_parameters
162
+ # @option request_options [Integer] :timeout_in_seconds
163
+ # @option params [String] :document_id
164
+ #
165
+ # @return [Voltaria::Types::DocumentResponse]
166
+ def get_document_by_id(request_options: {}, **params)
167
+ params = Voltaria::Internal::Types::Utils.normalize_keys(params)
168
+ request = Voltaria::Internal::JSON::Request.new(
169
+ base_url: request_options[:base_url],
170
+ method: "GET",
171
+ path: "v2/documents/#{URI.encode_uri_component(params[:document_id].to_s)}",
172
+ request_options: request_options
173
+ )
174
+ begin
175
+ response = @client.send(request)
176
+ rescue Net::HTTPRequestTimeout
177
+ raise Voltaria::Errors::TimeoutError
178
+ end
179
+ code = response.code.to_i
180
+ if code.between?(200, 299)
181
+ Voltaria::Types::DocumentResponse.load(response.body)
182
+ else
183
+ error_class = Voltaria::Errors::ResponseError.subclass_for_code(code)
184
+ raise error_class.new(response.body, code: code)
185
+ end
186
+ end
187
+
188
+ # Delete a specific document by using its document ID.
189
+ #
190
+ # @param request_options [Hash]
191
+ # @param params [Hash]
192
+ # @option request_options [String] :base_url
193
+ # @option request_options [Hash{String => Object}] :additional_headers
194
+ # @option request_options [Hash{String => Object}] :additional_query_parameters
195
+ # @option request_options [Hash{String => Object}] :additional_body_parameters
196
+ # @option request_options [Integer] :timeout_in_seconds
197
+ # @option params [String] :document_id
198
+ #
199
+ # @return [untyped]
200
+ def delete_document(request_options: {}, **params)
201
+ params = Voltaria::Internal::Types::Utils.normalize_keys(params)
202
+ request = Voltaria::Internal::JSON::Request.new(
203
+ base_url: request_options[:base_url],
204
+ method: "DELETE",
205
+ path: "v2/documents/#{URI.encode_uri_component(params[:document_id].to_s)}",
206
+ request_options: request_options
207
+ )
208
+ begin
209
+ response = @client.send(request)
210
+ rescue Net::HTTPRequestTimeout
211
+ raise Voltaria::Errors::TimeoutError
212
+ end
213
+ code = response.code.to_i
214
+ return if code.between?(200, 299)
215
+
216
+ error_class = Voltaria::Errors::ResponseError.subclass_for_code(code)
217
+ raise error_class.new(response.body, code: code)
218
+ end
219
+ end
220
+ end
221
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Voltaria
4
+ module Documents
5
+ module Types
6
+ class DeleteDocumentRequest < Internal::Types::Model
7
+ field :document_id, -> { String }, optional: false, nullable: false
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Voltaria
4
+ module Documents
5
+ module Types
6
+ class DocumentCreatePayload < Internal::Types::Model
7
+ field :client_id, -> { String }, optional: true, nullable: false
8
+ field :loan_id, -> { String }, optional: true, nullable: false
9
+ field :installment_id, -> { String }, optional: true, nullable: false
10
+ field :waterfall_id, -> { String }, optional: true, nullable: false
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Voltaria
4
+ module Documents
5
+ module Types
6
+ class GetDocumentByIDRequest < Internal::Types::Model
7
+ field :document_id, -> { String }, optional: false, nullable: false
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Voltaria
4
+ module Documents
5
+ module Types
6
+ class ListDocumentsRequest < Internal::Types::Model
7
+ field :client_id, -> { String }, optional: true, nullable: false
8
+ field :loan_id, -> { String }, optional: true, nullable: false
9
+ field :installment_id, -> { String }, optional: true, nullable: false
10
+ field :waterfall_id, -> { String }, optional: true, nullable: false
11
+ field :page, -> { Integer }, optional: true, nullable: false
12
+ field :page_size, -> { Integer }, optional: true, nullable: false
13
+ field :order_by, -> { String }, optional: true, nullable: false
14
+ field :q, -> { String }, optional: true, nullable: false
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,141 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Voltaria
4
+ module Drawdowns
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 drawdowns.
14
+ #
15
+ # @param request_options [Hash]
16
+ # @param params [Hash]
17
+ # @option request_options [String] :base_url
18
+ # @option request_options [Hash{String => Object}] :additional_headers
19
+ # @option request_options [Hash{String => Object}] :additional_query_parameters
20
+ # @option request_options [Hash{String => Object}] :additional_body_parameters
21
+ # @option request_options [Integer] :timeout_in_seconds
22
+ # @option params [Integer, nil] :page
23
+ # @option params [Integer, nil] :page_size
24
+ # @option params [String, nil] :order_by
25
+ # @option params [String, nil] :q
26
+ #
27
+ # @return [Voltaria::Types::PaginatedResponseDrawdownResponse]
28
+ def list_drawdowns(request_options: {}, **params)
29
+ params = Voltaria::Internal::Types::Utils.normalize_keys(params)
30
+ query_param_names = %i[page page_size order_by q]
31
+ query_params = {}
32
+ query_params["page"] = params[:page] if params.key?(:page)
33
+ query_params["page_size"] = params[:page_size] if params.key?(:page_size)
34
+ query_params["order_by"] = params[:order_by] if params.key?(:order_by)
35
+ query_params["q"] = params[:q] if params.key?(:q)
36
+ params.except(*query_param_names)
37
+
38
+ request = Voltaria::Internal::JSON::Request.new(
39
+ base_url: request_options[:base_url],
40
+ method: "GET",
41
+ path: "v2/drawdowns",
42
+ query: query_params,
43
+ request_options: request_options
44
+ )
45
+ begin
46
+ response = @client.send(request)
47
+ rescue Net::HTTPRequestTimeout
48
+ raise Voltaria::Errors::TimeoutError
49
+ end
50
+ code = response.code.to_i
51
+ if code.between?(200, 299)
52
+ Voltaria::Types::PaginatedResponseDrawdownResponse.load(response.body)
53
+ else
54
+ error_class = Voltaria::Errors::ResponseError.subclass_for_code(code)
55
+ raise error_class.new(response.body, code: code)
56
+ end
57
+ end
58
+
59
+ # Create a new drawdown request.
60
+ #
61
+ # @param request_options [Hash]
62
+ # @param params [Voltaria::Drawdowns::Types::DrawdownCreatePayload]
63
+ # @option request_options [String] :base_url
64
+ # @option request_options [Hash{String => Object}] :additional_headers
65
+ # @option request_options [Hash{String => Object}] :additional_query_parameters
66
+ # @option request_options [Hash{String => Object}] :additional_body_parameters
67
+ # @option request_options [Integer] :timeout_in_seconds
68
+ #
69
+ # @return [Voltaria::Types::DrawdownResponse]
70
+ def create_drawdown_request(request_options: {}, **params)
71
+ params = Voltaria::Internal::Types::Utils.normalize_keys(params)
72
+ request = Voltaria::Internal::JSON::Request.new(
73
+ base_url: request_options[:base_url],
74
+ method: "POST",
75
+ path: "v2/drawdowns",
76
+ body: Voltaria::Drawdowns::Types::DrawdownCreatePayload.new(params).to_h,
77
+ request_options: request_options
78
+ )
79
+ begin
80
+ response = @client.send(request)
81
+ rescue Net::HTTPRequestTimeout
82
+ raise Voltaria::Errors::TimeoutError
83
+ end
84
+ code = response.code.to_i
85
+ if code.between?(200, 299)
86
+ Voltaria::Types::DrawdownResponse.load(response.body)
87
+ else
88
+ error_class = Voltaria::Errors::ResponseError.subclass_for_code(code)
89
+ raise error_class.new(response.body, code: code)
90
+ end
91
+ end
92
+
93
+ # Retrieve all checklist items for a specific drawdown
94
+ #
95
+ # @param request_options [Hash]
96
+ # @param params [Hash]
97
+ # @option request_options [String] :base_url
98
+ # @option request_options [Hash{String => Object}] :additional_headers
99
+ # @option request_options [Hash{String => Object}] :additional_query_parameters
100
+ # @option request_options [Hash{String => Object}] :additional_body_parameters
101
+ # @option request_options [Integer] :timeout_in_seconds
102
+ # @option params [String] :drawdown_id
103
+ # @option params [Integer, nil] :page
104
+ # @option params [Integer, nil] :page_size
105
+ # @option params [String, nil] :order_by
106
+ # @option params [String, nil] :q
107
+ #
108
+ # @return [Voltaria::Types::PaginatedResponseDrawdownChecklistResponse]
109
+ def list_drawdown_checklists(request_options: {}, **params)
110
+ params = Voltaria::Internal::Types::Utils.normalize_keys(params)
111
+ query_param_names = %i[page page_size order_by q]
112
+ query_params = {}
113
+ query_params["page"] = params[:page] if params.key?(:page)
114
+ query_params["page_size"] = params[:page_size] if params.key?(:page_size)
115
+ query_params["order_by"] = params[:order_by] if params.key?(:order_by)
116
+ query_params["q"] = params[:q] if params.key?(:q)
117
+ params = params.except(*query_param_names)
118
+
119
+ request = Voltaria::Internal::JSON::Request.new(
120
+ base_url: request_options[:base_url],
121
+ method: "GET",
122
+ path: "v2/drawdowns/#{URI.encode_uri_component(params[:drawdown_id].to_s)}/checklists",
123
+ query: query_params,
124
+ request_options: request_options
125
+ )
126
+ begin
127
+ response = @client.send(request)
128
+ rescue Net::HTTPRequestTimeout
129
+ raise Voltaria::Errors::TimeoutError
130
+ end
131
+ code = response.code.to_i
132
+ if code.between?(200, 299)
133
+ Voltaria::Types::PaginatedResponseDrawdownChecklistResponse.load(response.body)
134
+ else
135
+ error_class = Voltaria::Errors::ResponseError.subclass_for_code(code)
136
+ raise error_class.new(response.body, code: code)
137
+ end
138
+ end
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Voltaria
4
+ module Drawdowns
5
+ module Types
6
+ class DrawdownCreatePayload < Internal::Types::Model
7
+ field :amount, -> { Voltaria::Drawdowns::Types::DrawdownCreatePayloadAmount }, optional: false, nullable: false
8
+ field :drawdown_date, -> { String }, optional: true, nullable: false
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Voltaria
4
+ module Drawdowns
5
+ module Types
6
+ # The amount for the drawdown.
7
+ class DrawdownCreatePayloadAmount < 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,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Voltaria
4
+ module Drawdowns
5
+ module Types
6
+ class ListDrawdownChecklistsRequest < Internal::Types::Model
7
+ field :drawdown_id, -> { String }, optional: false, nullable: false
8
+ field :page, -> { Integer }, optional: true, nullable: false
9
+ field :page_size, -> { Integer }, optional: true, nullable: false
10
+ field :order_by, -> { String }, optional: true, nullable: false
11
+ field :q, -> { String }, optional: true, nullable: false
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Voltaria
4
+ module Drawdowns
5
+ module Types
6
+ class ListDrawdownsRequest < 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
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Voltaria
4
+ class Environment
5
+ SANDBOX = "https://api.sandbox.voltaria.io"
6
+ PRODUCTION = "https://api.voltaria.io"
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Voltaria
4
+ module Errors
5
+ class ApiError < StandardError
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Voltaria
4
+ module Errors
5
+ class ClientError < ResponseError
6
+ end
7
+
8
+ class UnauthorizedError < ClientError
9
+ end
10
+
11
+ class ForbiddenError < ClientError
12
+ end
13
+
14
+ class NotFoundError < ClientError
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Voltaria
4
+ module Errors
5
+ class RedirectError < ResponseError
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Voltaria
4
+ module Errors
5
+ class ResponseError < ApiError
6
+ attr_reader :code
7
+
8
+ def initialize(msg, code:)
9
+ @code = code
10
+ super(msg)
11
+ end
12
+
13
+ def inspect
14
+ "#<#{self.class.name} @code=#{code} @body=#{message}>"
15
+ end
16
+
17
+ # Returns the most appropriate error class for the given code.
18
+ #
19
+ # @return [Class]
20
+ def self.subclass_for_code(code)
21
+ case code
22
+ when 300..399
23
+ RedirectError
24
+ when 401
25
+ UnauthorizedError
26
+ when 403
27
+ ForbiddenError
28
+ when 404
29
+ NotFoundError
30
+ when 400..499
31
+ ClientError
32
+ when 503
33
+ ServiceUnavailableError
34
+ when 500..599
35
+ ServerError
36
+ else
37
+ ResponseError
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Voltaria
4
+ module Errors
5
+ class ServerError < ResponseError
6
+ end
7
+
8
+ class ServiceUnavailableError < ApiError
9
+ end
10
+ end
11
+ end