starkinfra 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/creditnote/creditnote.rb +583 -0
- data/lib/creditnote/log.rb +126 -0
- data/lib/event/attempt.rb +126 -0
- data/lib/event/event.rb +125 -7
- data/lib/issuingauthorization/issuingauthorization.rb +141 -0
- data/lib/issuingbalance/issuingbalance.rb +55 -0
- data/lib/issuingbin/issuingbin.rb +89 -0
- data/lib/issuingcard/issuingcard.rb +261 -0
- data/lib/issuingcard/log.rb +123 -0
- data/lib/issuingholder/issuingholder.rb +206 -0
- data/lib/issuingholder/log.rb +123 -0
- data/lib/issuinginvoice/issuinginvoice.rb +152 -0
- data/lib/issuinginvoice/log.rb +120 -0
- data/lib/issuingpurchase/issuingpurchase.rb +209 -0
- data/lib/issuingpurchase/log.rb +131 -0
- data/lib/issuingrule/issuingrule.rb +79 -0
- data/lib/issuingtransaction/issuingtransaction.rb +136 -0
- data/lib/issuingwithdrawal/issuingwithdrawal.rb +153 -0
- data/lib/pixbalance/pixbalance.rb +15 -15
- data/lib/pixchargeback/log.rb +129 -0
- data/lib/pixchargeback/pixchargeback.rb +225 -0
- data/lib/pixclaim/log.rb +135 -0
- data/lib/pixclaim/pixclaim.rb +226 -0
- data/lib/pixdirector/pixdirector.rb +76 -0
- data/lib/pixdomain/certificate.rb +30 -0
- data/lib/pixdomain/pixdomain.rb +58 -0
- data/lib/pixinfraction/log.rb +129 -0
- data/lib/pixinfraction/pixinfraction.rb +212 -0
- data/lib/pixkey/log.rb +128 -0
- data/lib/pixkey/pixkey.rb +240 -0
- data/lib/pixrequest/log.rb +16 -16
- data/lib/pixrequest/pixrequest.rb +66 -67
- data/lib/pixreversal/log.rb +13 -12
- data/lib/pixreversal/pixreversal.rb +74 -72
- data/lib/pixstatement/pixstatement.rb +24 -25
- data/lib/starkinfra.rb +32 -3
- data/lib/user/organization.rb +54 -0
- data/lib/user/project.rb +37 -0
- data/lib/user/user.rb +20 -0
- data/lib/utils/api.rb +10 -2
- data/lib/utils/bacenid.rb +19 -0
- data/lib/utils/checks.rb +2 -3
- data/lib/utils/endtoendid.rb +11 -0
- data/lib/utils/parse.rb +13 -13
- data/lib/utils/request.rb +2 -2
- data/lib/utils/rest.rb +6 -5
- data/lib/utils/returnid.rb +11 -0
- data/lib/webhook/webhook.rb +124 -0
- metadata +45 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d851779a2ac175de1c7c25ec156ff8c9c011bd438dc863e5e99dc031be4540c3
|
4
|
+
data.tar.gz: 6b0bce15d67fe07e569facaa3023152d865a0886cae0de131bf45ac0bd42916f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e667c072faca5588ce99f991bd7f983849667281b0e11314444ed607b66cca7fd372c3a0a90ef33e2d0dbc8321e2ddc22941c6180710691472bc8eaa54cf33fe
|
7
|
+
data.tar.gz: 7060cff52d7a3634b96e515b18988227b8f1b88696fdccccca1263c48a09a8f73812956c1eecd0e2b1c423d13df9f1135e4f6577f04c189c62620ed3efc29057
|
@@ -0,0 +1,583 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative('../utils/resource')
|
4
|
+
require_relative('../utils/rest')
|
5
|
+
require_relative('../utils/checks')
|
6
|
+
require_relative('../utils/parse')
|
7
|
+
|
8
|
+
module StarkInfra
|
9
|
+
# # CreditNote object
|
10
|
+
#
|
11
|
+
# CreditNotes are used to generate CCB contracts between you and your customers.
|
12
|
+
# When you initialize a CreditNote, the entity will not be automatically
|
13
|
+
# created in the Stark Infra API. The 'create' function sends the objects
|
14
|
+
# to the Stark Infra API and returns the list of created objects.
|
15
|
+
#
|
16
|
+
# ## Parameters (required):
|
17
|
+
# - template_id [string]: ID of the contract template on which the credit note will be based. ex: template_id='0123456789101112'
|
18
|
+
# - name [string]: credit receiver's full name. ex: name='Edward Stark'
|
19
|
+
# - tax_id [string]: credit receiver's tax ID (CPF or CNPJ). ex: '20.018.183/0001-80'
|
20
|
+
# - nominal_amount [integer]: amount in cents transferred to the credit receiver, before deductions. ex: nominal_amount=11234 (= R$ 112.34)
|
21
|
+
# - scheduled [DateTime, Date or string, default now]: date of transfer execution. ex: scheduled=DateTime.new(2020, 3, 10, 10, 30, 0, 0)
|
22
|
+
# - invoices [list of CreditNote::Invoice objects]: list of Invoice objects to be created and sent to the credit receiver. ex: invoices=[CreditNote::Invoice.new(), CreditNote::Invoice.new()]
|
23
|
+
# - payment [CreditNote::Transfer object]: payment entity to be created and sent to the credit receiver. ex: payment=CreditNote::Transfer.new()
|
24
|
+
# - signers [list of CreditNote::Signer objects]: signer's name, contact and delivery method for the signature request. ex: signers=[CreditNote::Signer.new(), CreditNote::Signer.new()]
|
25
|
+
# - external_id [string]: a string that must be unique among all your CreditNotes, used to avoid resource duplication. ex: 'my-internal-id-123456'
|
26
|
+
# - street_line_1 [string]: credit receiver main address. ex: 'Av. Paulista, 200'
|
27
|
+
# - street_line_2 [string]: credit receiver address complement. ex: 'Apto. 123'
|
28
|
+
# - district [string]: credit receiver address district / neighbourhood. ex: 'Bela Vista'
|
29
|
+
# - city [string]: credit receiver address city. ex: 'Rio de Janeiro'
|
30
|
+
# - state_code [string]: credit receiver address state. ex: 'GO'
|
31
|
+
# - zip_code [string]: credit receiver address zip code. ex: '01311-200'
|
32
|
+
#
|
33
|
+
# ## Parameters (conditionally required):
|
34
|
+
# - payment_type [string]: payment type, inferred from the payment parameter if it is not a hash. ex: 'transfer'
|
35
|
+
#
|
36
|
+
# Parameters (optional):
|
37
|
+
# - rebate_amount [integer, default nil]: credit analysis fee deducted from lent amount. ex: rebate_amount=11234 (= R$ 112.34)
|
38
|
+
# - tags [list of strings, default nil]: list of strings for reference when searching for CreditNotes. ex: tags=['employees', 'monthly']
|
39
|
+
#
|
40
|
+
# Attributes (return-only):
|
41
|
+
# - id [string]: unique id returned when the CreditNote is created. ex: '5656565656565656'
|
42
|
+
# - amount [integer]: CreditNote value in cents. ex: 1234 (= R$ 12.34)
|
43
|
+
# - expiration [integer]: time interval in seconds between due date and expiration date. ex: 123456789
|
44
|
+
# - document_id [string]: ID of the signed document to execute this CreditNote. ex: '4545454545454545'
|
45
|
+
# - status [string]: current status of the CreditNote. ex: 'canceled', 'created', 'expired', 'failed', 'processing', 'signed', 'success'
|
46
|
+
# - transaction_ids [list of strings]: ledger transaction ids linked to this CreditNote. ex: ['19827356981273']
|
47
|
+
# - workspace_id [string]: ID of the Workspace that generated this CreditNote. ex: '4545454545454545'
|
48
|
+
# - tax_amount [integer]: tax amount included in the CreditNote. ex: 100
|
49
|
+
# - interest [float]: yearly effective interest rate of the credit note, in percentage. ex: 12.5
|
50
|
+
# - created [DateTime]: creation datetime for the CreditNote. ex: DateTime.new(2020, 3, 10, 10, 30, 0, 0)
|
51
|
+
# - updated [DateTime]: latest update datetime for the CreditNote. ex: DateTime.new(2020, 3, 10, 10, 30, 0, 0)
|
52
|
+
class CreditNote < StarkInfra::Utils::Resource
|
53
|
+
attr_reader :template_id, :name, :tax_id, :nominal_amount, :scheduled, :invoices, :payment, :signers, :external_id,
|
54
|
+
:street_line_1, :street_line_2, :district, :city, :state_code, :zip_code, :payment_type, :rebate_amount,
|
55
|
+
:tags, :id, :amount, :expiration, :document_id, :status, :transaction_ids, :workspace_id, :tax_amount,
|
56
|
+
:interest, :created, :updated
|
57
|
+
def initialize(
|
58
|
+
template_id:, name:, tax_id:, nominal_amount:, scheduled:, invoices:, payment:,
|
59
|
+
signers:, external_id:, street_line_1:, street_line_2:, district:, city:, state_code:, zip_code:,
|
60
|
+
payment_type: nil, rebate_amount: nil, tags: nil, id: nil, amount: nil, expiration: nil,
|
61
|
+
document_id: nil, status: nil, transaction_ids: nil, workspace_id: nil, tax_amount: nil, interest: nil,
|
62
|
+
created: nil, updated: nil
|
63
|
+
)
|
64
|
+
super(id)
|
65
|
+
@template_id = template_id
|
66
|
+
@name = name
|
67
|
+
@tax_id = tax_id
|
68
|
+
@nominal_amount = nominal_amount
|
69
|
+
@scheduled = scheduled
|
70
|
+
@invoices = CreditNote::Invoice.parse_invoices(invoices)
|
71
|
+
@signers = CreditNote::Signer.parse_signers(signers)
|
72
|
+
@external_id = external_id
|
73
|
+
@street_line_1 = street_line_1
|
74
|
+
@street_line_2 = street_line_2
|
75
|
+
@district = district
|
76
|
+
@city = city
|
77
|
+
@state_code = state_code
|
78
|
+
@zip_code = zip_code
|
79
|
+
@rebate_amount = rebate_amount
|
80
|
+
@tags = tags
|
81
|
+
@amount = amount
|
82
|
+
@expiration = expiration
|
83
|
+
@document_id = document_id
|
84
|
+
@status = status
|
85
|
+
@transaction_ids = transaction_ids
|
86
|
+
@workspace_id = workspace_id
|
87
|
+
@tax_amount = tax_amount
|
88
|
+
@interest = interest
|
89
|
+
@created = StarkInfra::Utils::Checks.check_datetime(created)
|
90
|
+
@updated = StarkInfra::Utils::Checks.check_datetime(updated)
|
91
|
+
|
92
|
+
payment_info = CreditNote.parse_payment(payment, payment_type)
|
93
|
+
@payment = payment_info['payment']
|
94
|
+
@payment_type = payment_info['payment_type']
|
95
|
+
end
|
96
|
+
|
97
|
+
# # Create CreditNotes
|
98
|
+
#
|
99
|
+
# Send a list of CreditNote objects for creation in the Stark Infra API
|
100
|
+
#
|
101
|
+
# ## Parameters (required):
|
102
|
+
# - notes [list of CreditNote objects]: list of CreditNote objects to be created in the API
|
103
|
+
#
|
104
|
+
# ## Parameters (optional):
|
105
|
+
# - user [Organization/Project object, default nil]: Organization or Project object. Not necessary if StarkInfra.user was set before function call
|
106
|
+
#
|
107
|
+
# ## Return:
|
108
|
+
# - list of CreditNote objects with updated attributes
|
109
|
+
def self.create(notes, user: nil)
|
110
|
+
StarkInfra::Utils::Rest.post(entities: notes, user: user, **resource)
|
111
|
+
end
|
112
|
+
|
113
|
+
# # Retrieve a specific CreditNote
|
114
|
+
#
|
115
|
+
# Receive a single CreditNote object previously created in the Stark Infra API by passing its id
|
116
|
+
#
|
117
|
+
# ## Parameters (required):
|
118
|
+
# - id [string]: object unique id. ex: '5656565656565656'
|
119
|
+
#
|
120
|
+
# ## Parameters (optional):
|
121
|
+
# - user [Organization/Project object, default nil]: Organization or Project object. Not necessary if StarkInfra.user was set before function call
|
122
|
+
#
|
123
|
+
# ## Return:
|
124
|
+
# - CreditNote object with updated attributes
|
125
|
+
def self.get(id, user: nil)
|
126
|
+
StarkInfra::Utils::Rest.get_id(id: id, user: user, **resource)
|
127
|
+
end
|
128
|
+
|
129
|
+
# # Retrieve CreditNotes
|
130
|
+
#
|
131
|
+
# Receive a generator of CreditNote objects previously created in the Stark Infra API
|
132
|
+
#
|
133
|
+
# ## Parameters (optional):
|
134
|
+
# - limit [integer, default nil]: maximum number of objects to be retrieved. Unlimited if nil. ex: 35
|
135
|
+
# - after [Date or string, default nil]: date filter for objects created only after specified date. ex: Date.new(2020, 3, 10)
|
136
|
+
# - before [Date or string, default nil]: date filter for objects created only before specified date. ex: Date.new(2020, 3, 10)
|
137
|
+
# - status [string, default nil]: filter for status of retrieved objects. ex: 'success' or 'failed'
|
138
|
+
# - tags [list of strings, default nil]: tags to filter retrieved objects. ex: ['tony', 'stark']
|
139
|
+
# - ids [list of strings, default nil]: list of ids to filter retrieved objects. ex: ['5656565656565656', '4545454545454545']
|
140
|
+
# - user [Organization/Project object, default nil]: Organization or Project object. Not necessary if StarkInfra.user was set before function call
|
141
|
+
#
|
142
|
+
# ## Return:
|
143
|
+
# - generator of CreditNote objects with updated attributes
|
144
|
+
def self.query(limit: nil, after: nil, before: nil, status: nil, tags: nil, ids: nil, user: nil)
|
145
|
+
after = StarkInfra::Utils::Checks.check_date(after)
|
146
|
+
before = StarkInfra::Utils::Checks.check_date(before)
|
147
|
+
StarkInfra::Utils::Rest.get_stream(
|
148
|
+
limit: limit,
|
149
|
+
after: after,
|
150
|
+
before: before,
|
151
|
+
status: status,
|
152
|
+
tags: tags,
|
153
|
+
ids: ids,
|
154
|
+
user: user,
|
155
|
+
**resource
|
156
|
+
)
|
157
|
+
end
|
158
|
+
|
159
|
+
# # Retrieve paged CreditNotes
|
160
|
+
#
|
161
|
+
# Receive a list of up to 100 CreditNote objects previously created in the Stark infra API and the cursor to the next page.
|
162
|
+
# Use this function instead of query if you want to manually page your notes.
|
163
|
+
#
|
164
|
+
# ## Parameters (optional):
|
165
|
+
# - cursor [string, default nil]: cursor returned on the previous page function call
|
166
|
+
# - limit [integer, default 100]: maximum number of objects to be retrieved. Max = 100. ex: 35
|
167
|
+
# - after [Date or string, default nil]: date filter for objects created only after specified date. ex: Date.new(2020, 3, 10)
|
168
|
+
# - before [Date or string, default nil]: date filter for objects created only before specified date. ex: Date.new(2020, 3, 10)
|
169
|
+
# - status [string, default nil]: filter for status of retrieved objects. ex: 'paid' or 'registered'
|
170
|
+
# - tags [list of strings, default nil]: tags to filter retrieved objects. ex: ['tony', 'stark']
|
171
|
+
# - ids [list of strings, default nil]: list of ids to filter retrieved objects. ex: ['5656565656565656', '4545454545454545']
|
172
|
+
# - user [Organization/Project object, default nil]: Organization or Project object. Not necessary if StarkInfra.user was set before function call
|
173
|
+
#
|
174
|
+
# ## Return:
|
175
|
+
# - list of CreditNote objects with updated attributes
|
176
|
+
# - cursor to retrieve the next page of CreditNote objects
|
177
|
+
def self.page(cursor: nil, limit: nil, after: nil, before: nil, status: nil, tags: nil, ids: nil, user: nil)
|
178
|
+
after = StarkInfra::Utils::Checks.check_date(after)
|
179
|
+
before = StarkInfra::Utils::Checks.check_date(before)
|
180
|
+
StarkInfra::Utils::Rest.get_page(
|
181
|
+
cursor: cursor,
|
182
|
+
limit: limit,
|
183
|
+
after: after,
|
184
|
+
before: before,
|
185
|
+
status: status,
|
186
|
+
tags: tags,
|
187
|
+
ids: ids,
|
188
|
+
user: user,
|
189
|
+
**resource
|
190
|
+
)
|
191
|
+
end
|
192
|
+
|
193
|
+
# # Cancel a specific CreditNote
|
194
|
+
#
|
195
|
+
# Cancel a single CreditNote object previously created in the Stark Infra API by passing its id
|
196
|
+
#
|
197
|
+
# ## Parameters (required):
|
198
|
+
# - id [string]: object unique id. ex: '5656565656565656'
|
199
|
+
#
|
200
|
+
# ## Parameters (optional):
|
201
|
+
# - user [Organization/Project object, default nil]: Organization or Project object. Not necessary if StarkInfra.user was set before function call
|
202
|
+
#
|
203
|
+
# ## Return:
|
204
|
+
# - canceled CreditNote object with updated attributes
|
205
|
+
def self.cancel(id, user: nil)
|
206
|
+
StarkInfra::Utils::Rest.delete_id(id: id, user: user, **resource)
|
207
|
+
end
|
208
|
+
|
209
|
+
def self.parse_payment(payment, payment_type)
|
210
|
+
resource_map = { 'transfer' => Transfer.resource[:resource_maker] }
|
211
|
+
if payment.is_a?(Hash)
|
212
|
+
begin
|
213
|
+
parsed_payment = StarkInfra::Utils::API.from_api_json(resource_map[payment_type], payment)
|
214
|
+
return { 'payment' => parsed_payment, 'payment_type' => payment_type }
|
215
|
+
rescue StandardError
|
216
|
+
return { 'payment' => payment, 'payment_type' => payment_type }
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
220
|
+
return { 'payment' => payment, 'payment_type' => payment_type} if payment_type
|
221
|
+
if payment.class == StarkInfra::Transfer
|
222
|
+
return { 'payment' => payment, 'payment_type' => 'transfer'}
|
223
|
+
end
|
224
|
+
raise 'payment must be either ' + 'a dictionary, ' \
|
225
|
+
'a CreditNote.Transfer, but not a ' + payment.class.to_s
|
226
|
+
end
|
227
|
+
|
228
|
+
def self.resource
|
229
|
+
{
|
230
|
+
resource_name: 'CreditNote',
|
231
|
+
resource_maker: proc { |json|
|
232
|
+
CreditNote.new(
|
233
|
+
id: json['id'],
|
234
|
+
template_id: json['template_id'],
|
235
|
+
name: json['name'],
|
236
|
+
tax_id: json['tax_id'],
|
237
|
+
nominal_amount: json['nominal_amount'],
|
238
|
+
scheduled: json['scheduled'],
|
239
|
+
invoices: json['invoices'],
|
240
|
+
payment: json['payment'],
|
241
|
+
signers: json['signers'],
|
242
|
+
external_id: json['external_id'],
|
243
|
+
street_line_1: json['street_line_1'],
|
244
|
+
street_line_2: json['street_line_2'],
|
245
|
+
district: json['district'],
|
246
|
+
city: json['city'],
|
247
|
+
state_code: json['state_code'],
|
248
|
+
zip_code: json['zip_code'],
|
249
|
+
payment_type: json['payment_type'],
|
250
|
+
rebate_amount: json['rebate_amount'],
|
251
|
+
tags: json['tags'],
|
252
|
+
amount: json['amount'],
|
253
|
+
expiration: json['expiration'],
|
254
|
+
document_id: json['document_id'],
|
255
|
+
status: json['status'],
|
256
|
+
transaction_ids: json['transaction_ids'],
|
257
|
+
workspace_id: json['workspace_id'],
|
258
|
+
tax_amount: json['tax_amount'],
|
259
|
+
interest: json['interest'],
|
260
|
+
created: json['created'],
|
261
|
+
updated: json['updated']
|
262
|
+
)
|
263
|
+
}
|
264
|
+
}
|
265
|
+
end
|
266
|
+
|
267
|
+
# # CreditNote::Transfer object
|
268
|
+
#
|
269
|
+
# Transfer sent to the credit receiver after the contract is signed.
|
270
|
+
#
|
271
|
+
# ## Parameters (required):
|
272
|
+
# - name [string]: receiver full name. ex: 'Anthony Edward Stark'
|
273
|
+
# - tax_id [string]: receiver tax ID (CPF or CNPJ) with or without formatting. ex: '01234567890' or '20.018.183/0001-80'
|
274
|
+
# - bank_code [string]: code of the receiver bank institution in Brazil. ex: '20018183'
|
275
|
+
# - branch_code [string]: receiver bank account branch. Use '-' in case there is a verifier digit. ex: '1357-9'
|
276
|
+
# - account_number [string]: receiver bank account number. Use '-' before the verifier digit. ex: '876543-2'
|
277
|
+
#
|
278
|
+
# ## Parameters (optional):
|
279
|
+
# - account_type [string, default 'checking']: Receiver bank account type. This parameter only has effect on Pix Transfers. ex: 'checking', 'savings', 'salary' or 'payment'
|
280
|
+
# - tags [list of strings, default nil]: list of strings for reference when searching for transfers. ex: ['employees', 'monthly']
|
281
|
+
#
|
282
|
+
# ## Attributes (return-only):
|
283
|
+
# - amount [integer]: amount in cents to be transferred. ex: 1234 (= R$ 12.34)
|
284
|
+
# - external_id [string]: url safe string that must be unique among all your transfers. Duplicated external_ids will cause failures. By default, this parameter will block any transfer that repeats amount and receiver information on the same date. ex: 'my-internal-id-123456'
|
285
|
+
# - scheduled [DateTime, Date or string]: date or datetime when the transfer will be processed. May be pushed to next business day if necessary. ex: DateTime.new(2020, 3, 10, 10, 30, 0, 0)
|
286
|
+
# - description [string]: optional description to override default description to be shown in the bank statement. ex: 'Payment for service #1234'
|
287
|
+
# - id [string]: unique id returned when the transfer is created. ex: '5656565656565656'
|
288
|
+
# - fee [integer]: fee charged when the Transfer is processed. ex: 200 (= R$ 2.00)
|
289
|
+
# - status [string]: current transfer status. ex: 'success' or 'failed'
|
290
|
+
# - transaction_ids [list of strings]: ledger Transaction IDs linked to this Transfer (if there are two, the second is the chargeback). ex: ['19827356981273']
|
291
|
+
# - created [DateTime]: creation datetime for the transfer. ex: DateTime.new(2020, 3, 10, 10, 30, 0, 0)
|
292
|
+
# - updated [DateTime]: latest update datetime for the transfer. ex: DateTime.new(2020, 3, 10, 10, 30, 0, 0)
|
293
|
+
class Transfer < StarkInfra::Utils::Resource
|
294
|
+
attr_reader :tax_id, :name, :bank_code, :branch_code, :account_number, :amount, :account_type, :external_id, :scheduled, :description, :tags, :fee, :status, :created, :updated, :transaction_ids
|
295
|
+
def initialize(
|
296
|
+
name:, tax_id:, bank_code:, branch_code:, account_number:, account_type: nil,
|
297
|
+
tags: nil, id: nil, amount: nil, external_id: nil, scheduled: nil,
|
298
|
+
description: nil, fee: nil, status: nil, created: nil, updated: nil,
|
299
|
+
transaction_ids: nil
|
300
|
+
)
|
301
|
+
super(id)
|
302
|
+
@name = name
|
303
|
+
@tax_id = tax_id
|
304
|
+
@bank_code = bank_code
|
305
|
+
@branch_code = branch_code
|
306
|
+
@account_number = account_number
|
307
|
+
@account_type = account_type
|
308
|
+
@tags = tags
|
309
|
+
@amount = amount
|
310
|
+
@external_id = external_id
|
311
|
+
@scheduled = scheduled
|
312
|
+
@description = description
|
313
|
+
@fee = fee
|
314
|
+
@status = status
|
315
|
+
@transaction_ids = transaction_ids
|
316
|
+
@created = StarkInfra::Utils::Checks.check_datetime(created)
|
317
|
+
@updated = StarkInfra::Utils::Checks.check_datetime(updated)
|
318
|
+
end
|
319
|
+
|
320
|
+
def self.resource
|
321
|
+
{
|
322
|
+
resource_name: 'Transfer',
|
323
|
+
resource_maker: proc { |json|
|
324
|
+
Transfer.new(
|
325
|
+
id: json['id'],
|
326
|
+
tax_id: json['tax_id'],
|
327
|
+
name: json['name'],
|
328
|
+
bank_code: json['bank_code'],
|
329
|
+
branch_code: json['branch_code'],
|
330
|
+
account_number: json['account_number'],
|
331
|
+
amount: json['amount'],
|
332
|
+
account_type: json['account_type'],
|
333
|
+
external_id: json['external_id'],
|
334
|
+
scheduled: json['scheduled'],
|
335
|
+
description: json['description'],
|
336
|
+
tags: json['tags'],
|
337
|
+
fee: json['fee'],
|
338
|
+
status: json['status'],
|
339
|
+
created: json['created'],
|
340
|
+
updated: json['updated'],
|
341
|
+
transaction_ids: json['transaction_ids']
|
342
|
+
)
|
343
|
+
}
|
344
|
+
}
|
345
|
+
end
|
346
|
+
end
|
347
|
+
|
348
|
+
# # CreditNote::Signer object
|
349
|
+
#
|
350
|
+
# The Signer object stores the CreditNote signer's information.
|
351
|
+
#
|
352
|
+
# ## Parameters (required):
|
353
|
+
# - name [string]: signer's name. ex: 'Tony Stark'
|
354
|
+
# - contact [string]: signer's contact information. ex: 'tony@starkindustries.com'
|
355
|
+
# - method [string]: delivery method for the contract. ex: 'link'
|
356
|
+
class Signer < StarkInfra::Utils::SubResource
|
357
|
+
attr_reader :name, :contact, :method
|
358
|
+
def initialize(name:, contact:, method:)
|
359
|
+
@name = name
|
360
|
+
@contact = contact
|
361
|
+
@method = method
|
362
|
+
end
|
363
|
+
|
364
|
+
def self.parse_signers(signers)
|
365
|
+
return signers if signers.nil?
|
366
|
+
|
367
|
+
parsed_signers = []
|
368
|
+
signers.each do |signer|
|
369
|
+
unless signer.is_a? Signer
|
370
|
+
signer = StarkInfra::Utils::API.from_api_json(resource[:resource_maker], signer)
|
371
|
+
end
|
372
|
+
parsed_signers << signer
|
373
|
+
end
|
374
|
+
parsed_signers
|
375
|
+
end
|
376
|
+
|
377
|
+
def self.resource
|
378
|
+
{
|
379
|
+
resource_name: 'Signer',
|
380
|
+
resource_maker: proc { |json|
|
381
|
+
Signer.new(
|
382
|
+
name: json['name'],
|
383
|
+
contact: json['contact'],
|
384
|
+
method: json['method']
|
385
|
+
)
|
386
|
+
}
|
387
|
+
}
|
388
|
+
end
|
389
|
+
end
|
390
|
+
|
391
|
+
# CreditNote::Invoice object
|
392
|
+
# Invoice object to be issued after contract signature and paid by the credit receiver.
|
393
|
+
#
|
394
|
+
# ## Parameters (required):
|
395
|
+
# - amount [integer]: Invoice value in cents. Minimum = 1 (any value will be accepted). ex: 1234 (= R$ 12.34)
|
396
|
+
#
|
397
|
+
# ## Parameters (optional):
|
398
|
+
# - due [DateTime, Date or string, default now + 2 days]: Invoice due date in UTC ISO format. ex: '2020-10-28T17:59:26.249976+00:00' for immediate invoices and '2020-10-28' for scheduled invoices
|
399
|
+
# - expiration [integer, default 5097600 (59 days)]: time interval in seconds between due date and expiration date. ex: 123456789
|
400
|
+
# - fine [float, default 2.0]: Invoice fine for overdue payment in %. ex: 2.5
|
401
|
+
# - interest [float, default 1.0]: Invoice monthly interest in overdue payment in %. ex: 5.2
|
402
|
+
# - tags [list of strings, default nil]: list of strings for tagging
|
403
|
+
# - descriptions [list of CreditNote::Invoice::Description objects, default nil]: list Description objects. ex: [CreditNote::Invoice::Description.new()]
|
404
|
+
#
|
405
|
+
# ## Attributes (return-only):
|
406
|
+
# - id [string]: unique id returned when Invoice is created. ex: '5656565656565656'
|
407
|
+
# - name [string]: payer name. ex: 'Iron Bank S.A.'
|
408
|
+
# - tax_id [string]: payer tax ID (CPF or CNPJ) with or without formatting. ex: '01234567890' or '20.018.183/0001-80'
|
409
|
+
# - pdf [string]: public Invoice PDF URL. ex: 'https://invoice.starkbank.com/pdf/d454fa4e524441c1b0c1a729457ed9d8'
|
410
|
+
# - link [string]: public Invoice webpage URL. ex: 'https://my-workspace.sandbox.starkbank.com/invoicelink/d454fa4e524441c1b0c1a729457ed9d8'
|
411
|
+
# - nominal_amount [integer]: Invoice emission value in cents (will change if invoice is updated, but not if it's paid). ex: 400000
|
412
|
+
# - fine_amount [integer]: Invoice fine value calculated over nominal_amount. ex: 20000
|
413
|
+
# - interest_amount [integer]: Invoice interest value calculated over nominal_amount. ex: 10000
|
414
|
+
# - discount_amount [integer]: Invoice discount value calculated over nominal_amount. ex: 3000
|
415
|
+
# - discounts [list of CreditNote::Invoice::Discount objects]: list of Discount objects. ex: [CreditNote::Invoice::Discount.new()]
|
416
|
+
# - brcode [string]: BR Code for the Invoice payment. ex: '00020101021226800014br.gov.bcb.pix2558invoice.starkbank.com/f5333103-3279-4db2-8389-5efe335ba93d5204000053039865802BR5913Arya Stark6009Sao Paulo6220051656565656565656566304A9A0'
|
417
|
+
# - status [string]: current Invoice status. ex: 'registered' or 'paid'
|
418
|
+
# - fee [integer]: fee charged by this Invoice. ex: 200 (= R$ 2.00)
|
419
|
+
# - transaction_ids [list of strings]: ledger transaction ids linked to this Invoice (if there are more than one, all but the first are reversals or failed reversal chargebacks). ex: ['19827356981273']
|
420
|
+
# - created [DateTime]: creation datetime for the Invoice. ex: DateTime.new(2020, 3, 10, 10, 30, 0, 0)
|
421
|
+
# - updated [DateTime]: latest update datetime for the Invoice. ex: DateTime.new(2020, 3, 10, 10, 30, 0, 0)
|
422
|
+
class Invoice < StarkInfra::Utils::Resource
|
423
|
+
attr_reader :id, :amount, :due, :expiration, :fine, :interest, :tags, :descriptions, :name, :tax_id, :pdf, :link, :nominal_amount, :fine_amount, :interest_amount, :discount_amount, :discounts, :brcode, :status, :fee, :transaction_ids, :created, :updated
|
424
|
+
def initialize(
|
425
|
+
amount:, due: nil, expiration: nil, fine: nil, interest: nil, tags: nil, descriptions: nil,
|
426
|
+
id: nil, name: nil, tax_id: nil, pdf: nil, link: nil, nominal_amount: nil, fine_amount: nil,
|
427
|
+
interest_amount: nil, discount_amount: nil, discounts: nil, brcode: nil, status: nil, fee: nil,
|
428
|
+
transaction_ids: nil, created: nil, updated: nil
|
429
|
+
)
|
430
|
+
super(id)
|
431
|
+
@tax_id = tax_id
|
432
|
+
@amount = amount
|
433
|
+
@due = due
|
434
|
+
@expiration = expiration
|
435
|
+
@fine = fine
|
436
|
+
@interest = interest
|
437
|
+
@tags = tags
|
438
|
+
@descriptions = Description.parse_descriptions(descriptions)
|
439
|
+
@name = name
|
440
|
+
@tax_id = tax_id
|
441
|
+
@pdf = pdf
|
442
|
+
@link = link
|
443
|
+
@nominal_amount = nominal_amount
|
444
|
+
@fine_amount = fine_amount
|
445
|
+
@interest_amount = interest_amount
|
446
|
+
@discount_amount = discount_amount
|
447
|
+
@discounts = Discount.parse_discounts(discounts)
|
448
|
+
@brcode = brcode
|
449
|
+
@status = status
|
450
|
+
@fee = fee
|
451
|
+
@transaction_ids = transaction_ids
|
452
|
+
@created = StarkInfra::Utils::Checks.check_datetime(created)
|
453
|
+
@updated = StarkInfra::Utils::Checks.check_datetime(updated)
|
454
|
+
end
|
455
|
+
|
456
|
+
def self.parse_invoices(invoices)
|
457
|
+
return invoices if invoices.nil?
|
458
|
+
parsed_invoices = []
|
459
|
+
invoices.each do |invoice|
|
460
|
+
unless invoice.is_a? Invoice
|
461
|
+
invoice = StarkInfra::Utils::API.from_api_json(resource[:resource_maker], invoice)
|
462
|
+
end
|
463
|
+
parsed_invoices << invoice
|
464
|
+
end
|
465
|
+
parsed_invoices
|
466
|
+
end
|
467
|
+
|
468
|
+
def self.resource
|
469
|
+
{
|
470
|
+
resource_name: 'Invoice',
|
471
|
+
resource_maker: proc { |json|
|
472
|
+
Invoice.new(
|
473
|
+
id: json['id'],
|
474
|
+
amount: json['amount'],
|
475
|
+
due: json['due'],
|
476
|
+
expiration: json['expiration'],
|
477
|
+
fine: json['fine'],
|
478
|
+
interest: json['interest'],
|
479
|
+
tags: json['tags'],
|
480
|
+
descriptions: json['descriptions'],
|
481
|
+
name: json['name'],
|
482
|
+
tax_id: json['tax_id'],
|
483
|
+
pdf: json['pdf'],
|
484
|
+
link: json['link'],
|
485
|
+
nominal_amount: json['nominal_amount'],
|
486
|
+
fine_amount: json['fine_amount'],
|
487
|
+
interest_amount: json['interest_amount'],
|
488
|
+
discount_amount: json['discount_amount'],
|
489
|
+
discounts: json['discounts'],
|
490
|
+
brcode: json['brcode'],
|
491
|
+
status: json['status'],
|
492
|
+
fee: json['fee'],
|
493
|
+
transaction_ids: json['transaction_ids'],
|
494
|
+
created: json['created'],
|
495
|
+
updated: json['updated']
|
496
|
+
)
|
497
|
+
}
|
498
|
+
}
|
499
|
+
end
|
500
|
+
|
501
|
+
# # CreditNote::Invoice::Discount object
|
502
|
+
#
|
503
|
+
# Invoice discount information.
|
504
|
+
#
|
505
|
+
# ## Parameters (required):
|
506
|
+
# - percentage [float]: percentage of discount applied until specified due date
|
507
|
+
# - due [DateTime or string]: due datetime for the discount
|
508
|
+
class Discount < StarkInfra::Utils::SubResource
|
509
|
+
attr_reader :percentage, :due
|
510
|
+
def initialize(percentage:, due:)
|
511
|
+
@percentage = percentage
|
512
|
+
@due = due
|
513
|
+
end
|
514
|
+
|
515
|
+
def self.parse_discounts(discounts)
|
516
|
+
return discounts if discounts.nil?
|
517
|
+
|
518
|
+
parsed_discounts = []
|
519
|
+
discounts.each do |discount|
|
520
|
+
unless discount.is_a? Discount
|
521
|
+
discount = StarkInfra::Utils::API.from_api_json(resource[:resource_maker], discount)
|
522
|
+
end
|
523
|
+
parsed_discounts << discount
|
524
|
+
end
|
525
|
+
parsed_discounts
|
526
|
+
end
|
527
|
+
|
528
|
+
def self.resource
|
529
|
+
{
|
530
|
+
resource_name: 'Discount',
|
531
|
+
resource_maker: proc { |json|
|
532
|
+
Discount.new(
|
533
|
+
percentage: json['percentage'],
|
534
|
+
due: json['due']
|
535
|
+
)
|
536
|
+
}
|
537
|
+
}
|
538
|
+
end
|
539
|
+
end
|
540
|
+
|
541
|
+
# # CreditNote::Invoice::Description object
|
542
|
+
#
|
543
|
+
# Invoice description information.
|
544
|
+
#
|
545
|
+
# ## Parameters (required):
|
546
|
+
# - key [string]: Description for the value. ex: 'Taxes'
|
547
|
+
#
|
548
|
+
# ## Parameters (optional):
|
549
|
+
# - value [string]: amount related to the described key. ex: 'R$100,00'
|
550
|
+
class Description < StarkInfra::Utils::SubResource
|
551
|
+
attr_reader :percentage, :due
|
552
|
+
def initialize(key:, value:)
|
553
|
+
@key = key
|
554
|
+
@value = value
|
555
|
+
end
|
556
|
+
|
557
|
+
def self.parse_descriptions(descriptions)
|
558
|
+
return descriptions if descriptions.nil?
|
559
|
+
parsed_descriptions = []
|
560
|
+
descriptions.each do |description|
|
561
|
+
unless description.is_a? Description
|
562
|
+
description = StarkInfra::Utils::API.from_api_json(resource[:resource_maker], description)
|
563
|
+
end
|
564
|
+
parsed_descriptions << description
|
565
|
+
end
|
566
|
+
parsed_descriptions
|
567
|
+
end
|
568
|
+
|
569
|
+
def self.resource
|
570
|
+
{
|
571
|
+
resource_name: 'Description',
|
572
|
+
resource_maker: proc { |json|
|
573
|
+
Description.new(
|
574
|
+
key: json['key'],
|
575
|
+
value: json['value']
|
576
|
+
)
|
577
|
+
}
|
578
|
+
}
|
579
|
+
end
|
580
|
+
end
|
581
|
+
end
|
582
|
+
end
|
583
|
+
end
|