starkinfra 0.1.0 → 0.2.0

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 (58) hide show
  1. checksums.yaml +4 -4
  2. data/lib/brcodepreview/brcodepreview.rb +121 -0
  3. data/lib/cardmethod/cardmethod.rb +56 -0
  4. data/lib/creditnote/creditnote.rb +37 -342
  5. data/lib/creditnote/invoice/description.rb +51 -0
  6. data/lib/creditnote/invoice/discount.rb +49 -0
  7. data/lib/creditnote/invoice/invoice.rb +123 -0
  8. data/lib/creditnote/log.rb +2 -2
  9. data/lib/creditnote/transfer.rb +90 -0
  10. data/lib/creditpreview/creditnotepreview.rb +85 -0
  11. data/lib/creditpreview/creditpreview.rb +83 -0
  12. data/lib/creditsigner/creditsigner.rb +57 -0
  13. data/lib/dynamicbrcode/dynamicbrcode.rb +350 -0
  14. data/lib/event/attempt.rb +4 -3
  15. data/lib/event/event.rb +10 -10
  16. data/lib/issuingbalance/issuingbalance.rb +4 -4
  17. data/lib/issuingcard/issuingcard.rb +32 -29
  18. data/lib/issuingcard/log.rb +2 -2
  19. data/lib/issuingholder/issuingholder.rb +13 -8
  20. data/lib/issuingholder/log.rb +2 -2
  21. data/lib/issuinginvoice/issuinginvoice.rb +23 -9
  22. data/lib/issuinginvoice/log.rb +2 -2
  23. data/lib/{issuingbin/issuingbin.rb → issuingproduct/issuingproduct.rb} +27 -30
  24. data/lib/issuingpurchase/issuingpurchase.rb +99 -23
  25. data/lib/issuingpurchase/log.rb +1 -1
  26. data/lib/issuingrule/issuingrule.rb +64 -18
  27. data/lib/issuingtransaction/issuingtransaction.rb +5 -7
  28. data/lib/issuingwithdrawal/issuingwithdrawal.rb +10 -6
  29. data/lib/merchantcategory/merchantcategory.rb +63 -0
  30. data/lib/merchantcountry/merchantcountry.rb +59 -0
  31. data/lib/pixbalance/pixbalance.rb +5 -5
  32. data/lib/pixchargeback/log.rb +3 -3
  33. data/lib/pixchargeback/pixchargeback.rb +32 -20
  34. data/lib/pixclaim/log.rb +8 -11
  35. data/lib/pixclaim/pixclaim.rb +42 -32
  36. data/lib/pixdirector/pixdirector.rb +9 -11
  37. data/lib/pixdomain/certificate.rb +1 -1
  38. data/lib/pixdomain/pixdomain.rb +4 -4
  39. data/lib/pixinfraction/log.rb +2 -2
  40. data/lib/pixinfraction/pixinfraction.rb +21 -13
  41. data/lib/pixkey/log.rb +5 -5
  42. data/lib/pixkey/pixkey.rb +10 -9
  43. data/lib/pixrequest/log.rb +2 -2
  44. data/lib/pixrequest/pixrequest.rb +51 -21
  45. data/lib/pixreversal/log.rb +2 -2
  46. data/lib/pixreversal/pixreversal.rb +48 -21
  47. data/lib/pixstatement/pixstatement.rb +12 -7
  48. data/lib/starkinfra.rb +27 -15
  49. data/lib/staticbrcode/staticbrcode.rb +164 -0
  50. data/lib/user/project.rb +1 -1
  51. data/lib/utils/api.rb +1 -0
  52. data/lib/utils/parse.rb +7 -3
  53. data/lib/utils/request.rb +1 -1
  54. data/lib/utils/resource.rb +1 -1
  55. data/lib/utils/sub_resource.rb +21 -22
  56. data/lib/webhook/webhook.rb +3 -3
  57. metadata +16 -4
  58. data/lib/issuingauthorization/issuingauthorization.rb +0 -141
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d851779a2ac175de1c7c25ec156ff8c9c011bd438dc863e5e99dc031be4540c3
4
- data.tar.gz: 6b0bce15d67fe07e569facaa3023152d865a0886cae0de131bf45ac0bd42916f
3
+ metadata.gz: 407cfd041d62916d22344d376a24ff392b4ef1fcf38cf3ae1c6ab38f01916e3a
4
+ data.tar.gz: 29d6b4e29af482ce49862a6e77eb72c570bad1844e66fcf1171f6148497179ec
5
5
  SHA512:
6
- metadata.gz: e667c072faca5588ce99f991bd7f983849667281b0e11314444ed607b66cca7fd372c3a0a90ef33e2d0dbc8321e2ddc22941c6180710691472bc8eaa54cf33fe
7
- data.tar.gz: 7060cff52d7a3634b96e515b18988227b8f1b88696fdccccca1263c48a09a8f73812956c1eecd0e2b1c423d13df9f1135e4f6577f04c189c62620ed3efc29057
6
+ metadata.gz: d4a549b1f028df0b976c790587c5f7c3989a5290f356e93816aa6051537241f6a490617c5cd19fabf6755ec31ec9a085b1049907d2b6df35d342def6e0b065b8
7
+ data.tar.gz: 22556e362fb270328d57d12875797961ecb06bf87f2e19a15fa6a37b598c4d37fe76209f0a9be93289ce68c0e6c82f63fc6156745b93eb662403bb73671f618a
@@ -0,0 +1,121 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative('../utils/rest')
4
+ require_relative('../utils/parse')
5
+ require_relative('../utils/checks')
6
+ require_relative('../utils/resource')
7
+
8
+ module StarkInfra
9
+ # # BrcodePreview object
10
+ #
11
+ # A BrcodePreview is used to get information from a BR Code you received to check the information before paying it.
12
+ #
13
+ # When you initialize a BrcodePreview, the entity will not be automatically
14
+ # created in the Stark Infra API. The 'create' function sends the objects
15
+ # to the Stark Infra API and returns the list of created objects.
16
+ #
17
+ # ## Parameters (required):
18
+ # - id [string]: BR Code string for the Pix payment. This is also de information directly encoded in a QR Code. ex: '00020126580014br.gov.bcb.pix0136a629532e-7693-4846-852d-1bbff817b5a8520400005303986540510.005802BR5908T'Challa6009Sao Paulo62090505123456304B14A'
19
+ #
20
+ # Attributes (return-only):
21
+ # - account_number [string]: Payment receiver account number. ex: '1234567'
22
+ # - account_type [string]: Payment receiver account type. ex: 'checking'
23
+ # - amount [integer]: Value in cents that this payment is expecting to receive. If 0, any value is accepted. ex: 123 (= R$1,23)
24
+ # - amount_type [string]: amount type of the BR Code. If the amount type is 'custom' the BR Code's amount can be changed by the sender at the moment of payment. Options: 'fixed' or 'custom'
25
+ # - bank_code [string]: Payment receiver bank code. ex: '20018183'
26
+ # - branch_code [string]: Payment receiver branch code. ex: '0001'
27
+ # - cash_amount [integer]: Amount to be withdrawn from the cashier in cents. ex: 1000 (= R$ 10.00)
28
+ # - cashier_bank_code [string]: Cashier's bank code. ex: '20018183'
29
+ # - cashier_type [string]: Cashier's type. Options: 'merchant', 'participant' and 'other'
30
+ # - discount_amount [integer]: Discount value calculated over nominal_amount. ex: 3000
31
+ # - fine_amount [integer]: Fine value calculated over nominal_amount. ex: 20000
32
+ # - key_id [string]: Receiver's PixKey id. ex: '+5511989898989'
33
+ # - interest_amount [integer]: Interest value calculated over nominal_amount. ex: 10000
34
+ # - name [string]: Payment receiver name. ex: 'Tony Stark'
35
+ # - nominal_amount [integer]: BR Code emission amount, without fines, fees and discounts. ex: 1234 (= R$ 12.34)
36
+ # - reconciliation_id [string]: Reconciliation ID linked to this payment. If the BR Code is dynamic, the reconciliation_id will have from 26 to 35 alphanumeric characters, ex: 'cd65c78aeb6543eaaa0170f68bd741ee'. If the brcode is static, the reconciliation_id will have up to 25 alphanumeric characters 'ah27s53agj6493hjds6836v49'
37
+ # - reduction_amount [integer]: Reduction value to discount from nominal_amount. ex: 1000
38
+ # - scheduled [DateTime]: date of payment execution. ex: DateTime.new(2020, 3, 10, 10, 30, 0, 0).
39
+ # - status [string]: Payment status. ex: 'active', 'paid', 'canceled' or 'unknown'
40
+ # - tax_id [string]: Payment receiver tax ID. ex: '012.345.678-90'
41
+ class BrcodePreview < StarkInfra::Utils::Resource
42
+ attr_reader :id, :account_number, :account_type, :amount, :amount_type, :bank_code, :branch_code, :cash_amount,
43
+ :cashier_bank_code, :cashier_type, :discount_amount, :fine_amount, :key_id, :interest_amount, :name,
44
+ :nominal_amount, :reconciliation_id, :reduction_amount, :scheduled, :status, :tax_id
45
+ def initialize(
46
+ id:, account_number: nil, account_type: nil, amount: nil, amount_type: nil, bank_code: nil,
47
+ branch_code: nil, cash_amount: nil, cashier_bank_code:nil, cashier_type:nil, discount_amount: nil,
48
+ fine_amount: nil, key_id: nil, interest_amount: nil, name: nil, nominal_amount: nil,
49
+ reconciliation_id: nil, reduction_amount: nil, scheduled: nil, status: nil, tax_id: nil
50
+ )
51
+ super(id)
52
+ @account_number = account_number
53
+ @account_type = account_type
54
+ @amount = amount
55
+ @amount_type = amount_type
56
+ @bank_code = bank_code
57
+ @branch_code = branch_code
58
+ @cash_amount = cash_amount
59
+ @cashier_bank_code = cashier_bank_code
60
+ @cashier_type = cashier_type
61
+ @discount_amount = discount_amount
62
+ @fine_amount = fine_amount
63
+ @key_id = key_id
64
+ @interest_amount = interest_amount
65
+ @name = name
66
+ @nominal_amount = nominal_amount
67
+ @reconciliation_id = reconciliation_id
68
+ @reduction_amount = reduction_amount
69
+ @scheduled = scheduled
70
+ @status = status
71
+ @tax_id = tax_id
72
+ end
73
+
74
+ # # Retrieve BrcodePreviews
75
+ #
76
+ # Process BR Codes before paying them.
77
+ #
78
+ # ## Parameters (required):
79
+ # - previews [list of BrcodePreview objects]: List of BrcodePreview objects to preview. ex: [starkinfra.BrcodePreview('00020126580014br.gov.bcb.pix0136a629532e-7693-4846-852d-1bbff817b5a8520400005303986540510.005802BR5908T'Challa6009Sao Paulo62090505123456304B14A')]
80
+ #
81
+ # ## Parameters (optional):
82
+ # - user [Organization/Project object, default nil]: Organization or Project object. Not necessary if starkinfra.user was set before function call
83
+ #
84
+ # ## Return:
85
+ # - list of BrcodePreview objects with updated attributes
86
+ def self.create(previews, user: nil)
87
+ StarkInfra::Utils::Rest.post(entities: previews, user: user, **resource)
88
+ end
89
+
90
+ def self.resource
91
+ {
92
+ resource_name: 'BrcodePreview',
93
+ resource_maker: proc { |json|
94
+ BrcodePreview.new(
95
+ id: json['id'],
96
+ account_number: json['account_number'],
97
+ account_type: json['account_type'],
98
+ amount: json['amount'],
99
+ amount_type: json['amount_type'],
100
+ bank_code: json['bank_code'],
101
+ branch_code: json['branch_code'],
102
+ cash_amount: json['cash_amount'],
103
+ cashier_bank_code: json['cashier_bank_code'],
104
+ cashier_type: json['cashier_type'],
105
+ discount_amount: json['discount_amount'],
106
+ fine_amount: json['fine_amount'],
107
+ key_id: json['key_id'],
108
+ interest_amount: json['interest_amount'],
109
+ name: json['name'],
110
+ nominal_amount: json['nominal_amount'],
111
+ reconciliation_id: json['reconciliation_id'],
112
+ reduction_amount: json['reduction_amount'],
113
+ scheduled: json['scheduled'],
114
+ status: json['status'],
115
+ tax_id: json['tax_id']
116
+ )
117
+ }
118
+ }
119
+ end
120
+ end
121
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative('../utils/rest')
4
+ require_relative('../utils/sub_resource')
5
+
6
+ module StarkInfra
7
+ # # CardMethod object
8
+ #
9
+ # CardMethod's codes are used to define method filters in IssuingRules.
10
+ #
11
+ # ## Parameters (required):
12
+ # - code [string]: method's code. Options: 'chip', 'token', 'server', 'manual', 'magstripe', 'contactless'
13
+ #
14
+ # Attributes (return-only):
15
+ # - name [string]: method's name. ex: 'token'
16
+ # - number [string]: method's number. ex: '81'
17
+ class CardMethod < StarkInfra::Utils::SubResource
18
+ attr_reader :code, :name, :number
19
+ def initialize(code:, name: nil, number: nil)
20
+ @code = code
21
+ @name = name
22
+ @number = number
23
+ end
24
+
25
+ # # Retrieve CardMethods
26
+ #
27
+ # Receive a generator of CardMethod objects available in the Stark Infra API
28
+ #
29
+ # ## Parameters (optional):
30
+ # - search [string, default nil]: keyword to search for code, name, number or short_code. ex: 'token'
31
+ # - user [Organization/Project object, default nil]: Organization or Project object. Not necessary if starkinfra.user was set before function call
32
+ #
33
+ # ## Return:
34
+ # - generator of CardMethod objects with updated attributes
35
+ def self.query(search: nil, user: nil)
36
+ StarkInfra::Utils::Rest.get_stream(
37
+ search: search,
38
+ user: user,
39
+ **resource
40
+ )
41
+ end
42
+
43
+ def self.resource
44
+ {
45
+ resource_name: 'CardMethod',
46
+ resource_maker: proc { |json|
47
+ CardMethod.new(
48
+ code: json['code'],
49
+ name: json['name'],
50
+ number: json['number']
51
+ )
52
+ }
53
+ }
54
+ end
55
+ end
56
+ end
@@ -1,27 +1,32 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative('../utils/resource')
4
3
  require_relative('../utils/rest')
5
- require_relative('../utils/checks')
6
4
  require_relative('../utils/parse')
5
+ require_relative('../utils/checks')
6
+ require_relative('invoice/invoice')
7
+ require_relative('invoice/discount')
8
+ require_relative('../utils/resource')
9
+ require_relative('invoice/description')
10
+ require_relative('../creditnote/transfer')
7
11
 
8
12
  module StarkInfra
9
13
  # # CreditNote object
10
14
  #
11
15
  # CreditNotes are used to generate CCB contracts between you and your customers.
16
+ #
12
17
  # When you initialize a CreditNote, the entity will not be automatically
13
18
  # created in the Stark Infra API. The 'create' function sends the objects
14
19
  # to the Stark Infra API and returns the list of created objects.
15
20
  #
16
21
  # ## 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'
22
+ # - template_id [string]: ID of the contract template on which the credit note will be based. ex: '0123456789101112'
23
+ # - name [string]: credit receiver's full name. ex: 'Edward Stark'
19
24
  # - 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
+ # - nominal_amount [integer]: amount in cents transferred to the credit receiver, before deductions. ex: 11234 (= R$ 112.34)
26
+ # - scheduled [DateTime, Date or string]: date of transfer execution. ex: DateTime.new(2020, 3, 10, 10, 30, 0, 0)
27
+ # - invoices [list of CreditNote::Invoice objects]: list of Invoice objects to be created and sent to the credit receiver. ex: [Invoice.new(), Invoice.new()]
28
+ # - payment [CreditNote::Transfer object]: payment entity to be created and sent to the credit receiver. ex: Transfer.new()
29
+ # - signers [list of CreditSigner objects]: signer's name, contact and delivery method for the signature request. ex: [CreditSigner.new(), CreditSigner.new()]
25
30
  # - external_id [string]: a string that must be unique among all your CreditNotes, used to avoid resource duplication. ex: 'my-internal-id-123456'
26
31
  # - street_line_1 [string]: credit receiver main address. ex: 'Av. Paulista, 200'
27
32
  # - street_line_2 [string]: credit receiver address complement. ex: 'Apto. 123'
@@ -33,33 +38,34 @@ module StarkInfra
33
38
  # ## Parameters (conditionally required):
34
39
  # - payment_type [string]: payment type, inferred from the payment parameter if it is not a hash. ex: 'transfer'
35
40
  #
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']
41
+ # ## Parameters (optional):
42
+ # - rebate_amount [integer, default nil]: credit analysis fee deducted from lent amount. ex: 11234 (= R$ 112.34)
43
+ # - tags [list of strings, default nil]: list of strings for reference when searching for CreditNotes. ex: ['employees', 'monthly']
44
+ # - expiration [integer, default 604800]: time interval in seconds between scheduled date and expiration date. ex: 123456789
39
45
  #
40
- # Attributes (return-only):
46
+ # ## Attributes (return-only):
41
47
  # - id [string]: unique id returned when the CreditNote is created. ex: '5656565656565656'
42
48
  # - 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
49
  # - document_id [string]: ID of the signed document to execute this CreditNote. ex: '4545454545454545'
45
50
  # - status [string]: current status of the CreditNote. ex: 'canceled', 'created', 'expired', 'failed', 'processing', 'signed', 'success'
46
51
  # - transaction_ids [list of strings]: ledger transaction ids linked to this CreditNote. ex: ['19827356981273']
47
52
  # - workspace_id [string]: ID of the Workspace that generated this CreditNote. ex: '4545454545454545'
48
53
  # - tax_amount [integer]: tax amount included in the CreditNote. ex: 100
54
+ # - nominal_interest [float]: yearly nominal interest rate of the CreditNote, in percentage. ex: 11.5
49
55
  # - interest [float]: yearly effective interest rate of the credit note, in percentage. ex: 12.5
50
56
  # - created [DateTime]: creation datetime for the CreditNote. ex: DateTime.new(2020, 3, 10, 10, 30, 0, 0)
51
57
  # - updated [DateTime]: latest update datetime for the CreditNote. ex: DateTime.new(2020, 3, 10, 10, 30, 0, 0)
52
58
  class CreditNote < StarkInfra::Utils::Resource
53
59
  attr_reader :template_id, :name, :tax_id, :nominal_amount, :scheduled, :invoices, :payment, :signers, :external_id,
54
60
  :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
61
+ :tags, :expiration, :id, :amount, :document_id, :status, :transaction_ids, :workspace_id, :tax_amount,
62
+ :nominal_interest, :interest, :created, :updated
57
63
  def initialize(
58
64
  template_id:, name:, tax_id:, nominal_amount:, scheduled:, invoices:, payment:,
59
65
  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
66
+ payment_type: nil, rebate_amount: nil, tags: nil, expiration: nil, id: nil, amount: nil,
67
+ document_id: nil, status: nil, transaction_ids: nil, workspace_id: nil, tax_amount: nil,
68
+ nominal_interest: nil, interest: nil, created: nil, updated: nil
63
69
  )
64
70
  super(id)
65
71
  @template_id = template_id
@@ -67,8 +73,8 @@ module StarkInfra
67
73
  @tax_id = tax_id
68
74
  @nominal_amount = nominal_amount
69
75
  @scheduled = scheduled
70
- @invoices = CreditNote::Invoice.parse_invoices(invoices)
71
- @signers = CreditNote::Signer.parse_signers(signers)
76
+ @invoices = Invoice.parse_invoices(invoices)
77
+ @signers = CreditSigner.parse_signers(signers)
72
78
  @external_id = external_id
73
79
  @street_line_1 = street_line_1
74
80
  @street_line_2 = street_line_2
@@ -85,6 +91,7 @@ module StarkInfra
85
91
  @transaction_ids = transaction_ids
86
92
  @workspace_id = workspace_id
87
93
  @tax_amount = tax_amount
94
+ @nominal_interest = nominal_interest
88
95
  @interest = interest
89
96
  @created = StarkInfra::Utils::Checks.check_datetime(created)
90
97
  @updated = StarkInfra::Utils::Checks.check_datetime(updated)
@@ -207,20 +214,24 @@ module StarkInfra
207
214
  end
208
215
 
209
216
  def self.parse_payment(payment, payment_type)
210
- resource_map = { 'transfer' => Transfer.resource[:resource_maker] }
217
+ resource_maker = { 'transfer' => Transfer.resource[:resource_maker] }
211
218
  if payment.is_a?(Hash)
212
219
  begin
213
- parsed_payment = StarkInfra::Utils::API.from_api_json(resource_map[payment_type], payment)
220
+ parsed_payment = StarkInfra::Utils::API.from_api_json(resource_maker[payment_type], payment)
214
221
  return { 'payment' => parsed_payment, 'payment_type' => payment_type }
222
+
215
223
  rescue StandardError
216
224
  return { 'payment' => payment, 'payment_type' => payment_type }
225
+
217
226
  end
218
227
  end
219
228
 
220
- return { 'payment' => payment, 'payment_type' => payment_type} if payment_type
229
+ return { 'payment' => payment, 'payment_type' => payment_type } if payment_type
230
+
221
231
  if payment.class == StarkInfra::Transfer
222
- return { 'payment' => payment, 'payment_type' => 'transfer'}
232
+ return { 'payment' => payment, 'payment_type' => 'transfer' }
223
233
  end
234
+
224
235
  raise 'payment must be either ' + 'a dictionary, ' \
225
236
  'a CreditNote.Transfer, but not a ' + payment.class.to_s
226
237
  end
@@ -249,8 +260,8 @@ module StarkInfra
249
260
  payment_type: json['payment_type'],
250
261
  rebate_amount: json['rebate_amount'],
251
262
  tags: json['tags'],
252
- amount: json['amount'],
253
263
  expiration: json['expiration'],
264
+ amount: json['amount'],
254
265
  document_id: json['document_id'],
255
266
  status: json['status'],
256
267
  transaction_ids: json['transaction_ids'],
@@ -263,321 +274,5 @@ module StarkInfra
263
274
  }
264
275
  }
265
276
  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
277
  end
583
278
  end