moov_ruby 26.10.0.pre.dev.7 → 26.10.0.pre.dev.9

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 (153) hide show
  1. checksums.yaml +4 -4
  2. data/lib/moov/card_issuing.rb +538 -0
  3. data/lib/moov/files.rb +186 -0
  4. data/lib/moov/invoices.rb +180 -0
  5. data/lib/moov/issuing_transactions.rb +246 -0
  6. data/lib/moov/models/components/applicationscope.rb +1 -0
  7. data/lib/moov/models/components/authorizationsimulationasyncresponse.rb +32 -0
  8. data/lib/moov/models/components/authorizationsimulationasyncresponse.rbi +13 -0
  9. data/lib/moov/models/components/bankaccount.rb +7 -2
  10. data/lib/moov/models/components/bankaccount.rbi +2 -0
  11. data/lib/moov/models/components/bankaccountpayload.rb +7 -2
  12. data/lib/moov/models/components/bankaccountpayload.rbi +2 -0
  13. data/lib/moov/models/components/capturestatus.rb +1 -0
  14. data/lib/moov/models/components/cardpaymentrefundprocessingdetails.rb +6 -2
  15. data/lib/moov/models/components/cardpaymentrefundprocessingdetails.rbi +2 -0
  16. data/lib/moov/models/components/createauthorizationsimulation.rb +40 -0
  17. data/lib/moov/models/components/createauthorizationsimulation.rbi +17 -0
  18. data/lib/moov/models/components/{createcancellation.rb → createclearingsimulation.rb} +5 -7
  19. data/lib/moov/models/components/{createcancellation.rbi → createclearingsimulation.rbi} +2 -2
  20. data/lib/moov/models/components/createdtransfer.rb +2 -1
  21. data/lib/moov/models/components/createinvoice.rb +14 -2
  22. data/lib/moov/models/components/createinvoice.rbi +6 -0
  23. data/lib/moov/models/components/createinvoicenotification.rb +32 -0
  24. data/lib/moov/models/components/createinvoicenotification.rbi +13 -0
  25. data/lib/moov/models/components/createtransfer.rb +6 -2
  26. data/lib/moov/models/components/createtransfer.rbi +2 -0
  27. data/lib/moov/models/components/createtransferdestination.rb +2 -14
  28. data/lib/moov/models/components/createtransferdestination.rbi +0 -6
  29. data/lib/moov/models/components/createtransferrailoptions.rb +48 -0
  30. data/lib/moov/models/components/createtransferrailoptions.rbi +21 -0
  31. data/lib/moov/models/components/createtransferresponse.rb +27 -0
  32. data/lib/moov/models/components/createtransferresponse.rbi +11 -0
  33. data/lib/moov/models/components/createtransfersource.rb +2 -10
  34. data/lib/moov/models/components/createtransfersource.rbi +0 -4
  35. data/lib/moov/models/components/disbursementpaymentmethodtype.rb +1 -0
  36. data/lib/moov/models/components/incurredfee.rb +6 -2
  37. data/lib/moov/models/components/incurredfee.rbi +2 -0
  38. data/lib/moov/models/components/invoice.rb +6 -2
  39. data/lib/moov/models/components/invoice.rbi +2 -0
  40. data/lib/moov/models/components/invoicenotificationlimitedchannel.rb +36 -0
  41. data/lib/moov/models/components/invoicenotificationlimitedchannel.rbi +15 -0
  42. data/lib/moov/models/components/invoicepaymentoptions.rb +40 -0
  43. data/lib/moov/models/components/invoicepaymentoptions.rbi +17 -0
  44. data/lib/moov/models/components/invoicepaymentoptionserror.rb +40 -0
  45. data/lib/moov/models/components/invoicepaymentoptionserror.rbi +17 -0
  46. data/lib/moov/models/components/invoicepaymentoptionsupdate.rb +40 -0
  47. data/lib/moov/models/components/invoicepaymentoptionsupdate.rbi +17 -0
  48. data/lib/moov/models/components/issuedcardactivity.rb +78 -0
  49. data/lib/moov/models/components/issuedcardactivity.rbi +33 -0
  50. data/lib/moov/models/components/{wirecreditpaymentmethod_paymentmethodtype.rb → notificationchannel.rb} +2 -2
  51. data/lib/moov/models/components/{wirefailurecode.rbi → notificationchannel.rbi} +2 -2
  52. data/lib/moov/models/components/paymentmethodsbankaccount.rb +7 -2
  53. data/lib/moov/models/components/paymentmethodsbankaccount.rbi +2 -0
  54. data/lib/moov/models/components/paymentmethodtype.rb +0 -1
  55. data/lib/moov/models/components/product.rb +1 -1
  56. data/lib/moov/models/components/productrequest.rb +1 -1
  57. data/lib/moov/models/components/pushtocardoptions.rb +6 -2
  58. data/lib/moov/models/components/pushtocardoptions.rbi +2 -0
  59. data/lib/moov/models/components/riskverificationoutcome.rb +23 -0
  60. data/lib/moov/models/components/riskverificationoutcome.rbi +11 -0
  61. data/lib/moov/models/components/simulationissuingmerchantdata.rb +56 -0
  62. data/lib/moov/models/components/simulationissuingmerchantdata.rbi +25 -0
  63. data/lib/moov/models/components/simulationissuingmerchantdatavalidationerror.rb +56 -0
  64. data/lib/moov/models/components/simulationissuingmerchantdatavalidationerror.rbi +25 -0
  65. data/lib/moov/models/components/transfer.rb +2 -1
  66. data/lib/moov/models/components/transferauthorization.rb +9 -2
  67. data/lib/moov/models/components/transferauthorization.rbi +2 -0
  68. data/lib/moov/models/components/transferoptions.rb +3 -3
  69. data/lib/moov/models/components/transferpaymentmethodsbankaccount.rb +7 -2
  70. data/lib/moov/models/components/transferpaymentmethodsbankaccount.rbi +2 -0
  71. data/lib/moov/models/components/transferpaymentmethodtype.rb +0 -1
  72. data/lib/moov/models/components/transferprocessingdetails.rb +2 -6
  73. data/lib/moov/models/components/transferprocessingdetails.rbi +0 -2
  74. data/lib/moov/models/components/transferrailoptions.rb +2 -6
  75. data/lib/moov/models/components/transferrailoptions.rbi +0 -2
  76. data/lib/moov/models/components/transfertype.rb +0 -1
  77. data/lib/moov/models/components/updateinvoice.rb +6 -2
  78. data/lib/moov/models/components/updateinvoice.rbi +2 -0
  79. data/lib/moov/models/components/wallettransactiontype.rb +0 -1
  80. data/lib/moov/models/components/webhookdatatransferstatus.rb +1 -0
  81. data/lib/moov/models/components.rb +15 -10
  82. data/lib/moov/models/errors/authorizationsimulationvalidationerror.rb +44 -0
  83. data/lib/moov/models/errors/authorizationsimulationvalidationerror.rbi +19 -0
  84. data/lib/moov/models/errors/clearingsimulationvalidationerror.rb +36 -0
  85. data/lib/moov/models/errors/clearingsimulationvalidationerror.rbi +15 -0
  86. data/lib/moov/models/errors/createinvoiceerror.rb +14 -2
  87. data/lib/moov/models/errors/createinvoiceerror.rbi +6 -0
  88. data/lib/moov/models/errors/invoicenotificationerror.rb +36 -0
  89. data/lib/moov/models/errors/invoicenotificationerror.rbi +15 -0
  90. data/lib/moov/models/errors/invoicenotificationratelimitederror.rb +44 -0
  91. data/lib/moov/models/errors/invoicenotificationratelimitederror.rbi +19 -0
  92. data/lib/moov/models/errors/transfer_error.rb +2 -1
  93. data/lib/moov/models/errors/updateinvoiceerror.rb +6 -2
  94. data/lib/moov/models/errors/updateinvoiceerror.rbi +2 -0
  95. data/lib/moov/models/errors.rb +4 -0
  96. data/lib/moov/models/operations/createauthorizationsimulation_request.rb +36 -0
  97. data/lib/moov/models/operations/createauthorizationsimulation_request.rbi +15 -0
  98. data/lib/moov/models/operations/createauthorizationsimulation_response.rb +52 -0
  99. data/lib/moov/models/operations/createauthorizationsimulation_response.rbi +23 -0
  100. data/lib/moov/models/operations/createclearingsimulation_request.rb +40 -0
  101. data/lib/moov/models/operations/createclearingsimulation_request.rbi +17 -0
  102. data/lib/moov/models/operations/createclearingsimulation_response.rb +52 -0
  103. data/lib/moov/models/operations/createclearingsimulation_response.rbi +23 -0
  104. data/lib/moov/models/operations/createinvoicenotification_request.rb +40 -0
  105. data/lib/moov/models/operations/createinvoicenotification_request.rbi +17 -0
  106. data/lib/moov/models/operations/{createcancellation_response.rb → createinvoicenotification_response.rb} +3 -7
  107. data/lib/moov/models/operations/{createcancellation_response.rbi → createinvoicenotification_response.rbi} +2 -4
  108. data/lib/moov/models/operations/createreversalsimulation_request.rb +36 -0
  109. data/lib/moov/models/operations/createreversalsimulation_request.rbi +15 -0
  110. data/lib/moov/models/operations/createreversalsimulation_response.rb +52 -0
  111. data/lib/moov/models/operations/createreversalsimulation_response.rbi +23 -0
  112. data/lib/moov/models/operations/createtransfer_response.rb +5 -5
  113. data/lib/moov/models/operations/createtransfer_response.rbi +2 -2
  114. data/lib/moov/models/operations/downloadfile_request.rb +36 -0
  115. data/lib/moov/models/operations/downloadfile_request.rbi +15 -0
  116. data/lib/moov/models/operations/downloadfile_response.rb +64 -0
  117. data/lib/moov/models/operations/downloadfile_response.rbi +29 -0
  118. data/lib/moov/models/operations/getissuedcardactivity_request.rb +36 -0
  119. data/lib/moov/models/operations/getissuedcardactivity_request.rbi +15 -0
  120. data/lib/moov/models/operations/getissuedcardactivity_response.rb +48 -0
  121. data/lib/moov/models/operations/getissuedcardactivity_response.rbi +21 -0
  122. data/lib/moov/models/operations/getpaymentmethod_response.rb +2 -2
  123. data/lib/moov/models/operations/initiaterefund_request.rb +1 -1
  124. data/lib/moov/models/operations/listissuedcardactivity_request.rb +60 -0
  125. data/lib/moov/models/operations/listissuedcardactivity_request.rbi +27 -0
  126. data/lib/moov/models/operations/listissuedcardactivity_response.rb +48 -0
  127. data/lib/moov/models/operations/listissuedcardactivity_response.rbi +21 -0
  128. data/lib/moov/models/operations/listpaymentmethods_response.rb +2 -2
  129. data/lib/moov/models/operations/listtransfers_request.rb +6 -2
  130. data/lib/moov/models/operations/listtransfers_request.rbi +2 -0
  131. data/lib/moov/models/operations.rb +14 -2
  132. data/lib/moov/payment_methods.rb +2 -2
  133. data/lib/moov/sdkconfiguration.rb +3 -3
  134. data/lib/moov/transfers.rb +3 -156
  135. metadata +68 -26
  136. data/lib/moov/models/components/createtransferdestinationwire.rb +0 -32
  137. data/lib/moov/models/components/createtransferdestinationwire.rbi +0 -13
  138. data/lib/moov/models/components/wirecreditpaymentmethod.rb +0 -40
  139. data/lib/moov/models/components/wirecreditpaymentmethod.rbi +0 -17
  140. data/lib/moov/models/components/wirecreditpaymentmethod_paymentmethodtype.rbi +0 -11
  141. data/lib/moov/models/components/wirecredittransferpaymentmethod.rb +0 -40
  142. data/lib/moov/models/components/wirecredittransferpaymentmethod.rbi +0 -17
  143. data/lib/moov/models/components/wirecredittransferpaymentmethod_paymentmethodtype.rb +0 -18
  144. data/lib/moov/models/components/wirecredittransferpaymentmethod_paymentmethodtype.rbi +0 -11
  145. data/lib/moov/models/components/wirefailurecode.rb +0 -28
  146. data/lib/moov/models/components/wireoptions.rb +0 -32
  147. data/lib/moov/models/components/wireoptions.rbi +0 -13
  148. data/lib/moov/models/components/wiretransactionstatus.rb +0 -23
  149. data/lib/moov/models/components/wiretransactionstatus.rbi +0 -11
  150. data/lib/moov/models/components/wiretransferprocessingdetails.rb +0 -40
  151. data/lib/moov/models/components/wiretransferprocessingdetails.rbi +0 -17
  152. data/lib/moov/models/operations/createcancellation_request.rb +0 -40
  153. data/lib/moov/models/operations/createcancellation_request.rbi +0 -17
@@ -28,13 +28,15 @@ module Moov
28
28
  field :generated_by, Crystalline::Nilable.new(Models::Components::GeneratedBy), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('generatedBy') } }
29
29
  # Describes the source of the fee, such as a Moov-set processing fee, a network pass-through fee, or an interchange or discount fee.
30
30
  field :fee_group, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('feeGroup') } }
31
+ # The program assigned by the card network that determines the interchange rate for the fee. Present only for interchange or discount fees.
32
+ field :fee_program, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('feeProgram') } }
31
33
  # Unique identifier for this residual payment calculation.
32
34
  field :residual_id, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('residualID') } }
33
35
  # Indicates which party to the money movement bore this fee.
34
36
  field :fee_paid_by, Crystalline::Nilable.new(Models::Components::FeePaidBy), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('feePaidBy'), 'decoder': ::Moov::Utils.open_enum_from_string(Models::Components::FeePaidBy, true) } }
35
37
 
36
- sig { params(fee_id: T.nilable(::String), account_id: T.nilable(::String), wallet_id: T.nilable(::String), created_on: T.nilable(::DateTime), fee_name: T.nilable(::String), amount: T.nilable(Models::Components::AmountDecimal), generated_by: T.nilable(Models::Components::GeneratedBy), fee_group: T.nilable(::String), residual_id: T.nilable(::String), fee_paid_by: T.nilable(Models::Components::FeePaidBy)).void }
37
- def initialize(fee_id: nil, account_id: nil, wallet_id: nil, created_on: nil, fee_name: nil, amount: nil, generated_by: nil, fee_group: nil, residual_id: nil, fee_paid_by: nil)
38
+ sig { params(fee_id: T.nilable(::String), account_id: T.nilable(::String), wallet_id: T.nilable(::String), created_on: T.nilable(::DateTime), fee_name: T.nilable(::String), amount: T.nilable(Models::Components::AmountDecimal), generated_by: T.nilable(Models::Components::GeneratedBy), fee_group: T.nilable(::String), fee_program: T.nilable(::String), residual_id: T.nilable(::String), fee_paid_by: T.nilable(Models::Components::FeePaidBy)).void }
39
+ def initialize(fee_id: nil, account_id: nil, wallet_id: nil, created_on: nil, fee_name: nil, amount: nil, generated_by: nil, fee_group: nil, fee_program: nil, residual_id: nil, fee_paid_by: nil)
38
40
  @fee_id = fee_id
39
41
  @account_id = account_id
40
42
  @wallet_id = wallet_id
@@ -43,6 +45,7 @@ module Moov
43
45
  @amount = amount
44
46
  @generated_by = generated_by
45
47
  @fee_group = fee_group
48
+ @fee_program = fee_program
46
49
  @residual_id = residual_id
47
50
  @fee_paid_by = fee_paid_by
48
51
  end
@@ -58,6 +61,7 @@ module Moov
58
61
  return false unless @amount == other.amount
59
62
  return false unless @generated_by == other.generated_by
60
63
  return false unless @fee_group == other.fee_group
64
+ return false unless @fee_program == other.fee_program
61
65
  return false unless @residual_id == other.residual_id
62
66
  return false unless @fee_paid_by == other.fee_paid_by
63
67
  true
@@ -24,6 +24,8 @@ class Moov::Models::Components::IncurredFee
24
24
  def generated_by=(str_); end
25
25
  def fee_group(); end
26
26
  def fee_group=(str_); end
27
+ def fee_program(); end
28
+ def fee_program=(str_); end
27
29
  def residual_id(); end
28
30
  def residual_id=(str_); end
29
31
  def fee_paid_by(); end
@@ -50,6 +50,8 @@ module Moov
50
50
  field :payment_link_code, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('paymentLinkCode') } }
51
51
  # URL to the hosted payment link for the invoice.
52
52
  field :payment_link_url, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('paymentLinkURL') } }
53
+ # Payment options for the invoice.
54
+ field :payment, Crystalline::Nilable.new(Models::Components::InvoicePaymentOptions), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('payment') } }
53
55
  # Payment made towards an invoice, will be either a transfer or an external payment.
54
56
  field :invoice_payments, Crystalline::Nilable.new(Crystalline::Array.new(Models::Components::InvoicePayment)), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('invoicePayments') } }
55
57
 
@@ -65,8 +67,8 @@ module Moov
65
67
 
66
68
  field :disabled_on, Crystalline::Nilable.new(::DateTime), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('disabledOn'), 'decoder': ::Moov::Utils.datetime_from_iso_format(true) } }
67
69
 
68
- sig { params(invoice_id: ::String, invoice_number: ::String, customer_account_id: ::String, customer_display_name: ::String, customer_email: ::String, partner_account_id: ::String, status: Models::Components::InvoiceStatus, line_items: Models::Components::InvoiceLineItems, subtotal_amount: Models::Components::AmountDecimal, total_amount: Models::Components::AmountDecimal, pending_amount: Models::Components::AmountDecimal, paid_amount: Models::Components::AmountDecimal, refunded_amount: Models::Components::AmountDecimal, disputed_amount: Models::Components::AmountDecimal, created_on: ::DateTime, description: T.nilable(::String), amount_details: T.nilable(Models::Components::AmountDetails), payment_link_code: T.nilable(::String), payment_link_url: T.nilable(::String), invoice_payments: T.nilable(T::Array[Models::Components::InvoicePayment]), invoice_date: T.nilable(::DateTime), due_date: T.nilable(::DateTime), sent_on: T.nilable(::DateTime), paid_on: T.nilable(::DateTime), canceled_on: T.nilable(::DateTime), disabled_on: T.nilable(::DateTime)).void }
69
- def initialize(invoice_id:, invoice_number:, customer_account_id:, customer_display_name:, customer_email:, partner_account_id:, status:, line_items:, subtotal_amount:, total_amount:, pending_amount:, paid_amount:, refunded_amount:, disputed_amount:, created_on:, description: nil, amount_details: nil, payment_link_code: nil, payment_link_url: nil, invoice_payments: nil, invoice_date: nil, due_date: nil, sent_on: nil, paid_on: nil, canceled_on: nil, disabled_on: nil)
70
+ sig { params(invoice_id: ::String, invoice_number: ::String, customer_account_id: ::String, customer_display_name: ::String, customer_email: ::String, partner_account_id: ::String, status: Models::Components::InvoiceStatus, line_items: Models::Components::InvoiceLineItems, subtotal_amount: Models::Components::AmountDecimal, total_amount: Models::Components::AmountDecimal, pending_amount: Models::Components::AmountDecimal, paid_amount: Models::Components::AmountDecimal, refunded_amount: Models::Components::AmountDecimal, disputed_amount: Models::Components::AmountDecimal, created_on: ::DateTime, description: T.nilable(::String), amount_details: T.nilable(Models::Components::AmountDetails), payment_link_code: T.nilable(::String), payment_link_url: T.nilable(::String), payment: T.nilable(Models::Components::InvoicePaymentOptions), invoice_payments: T.nilable(T::Array[Models::Components::InvoicePayment]), invoice_date: T.nilable(::DateTime), due_date: T.nilable(::DateTime), sent_on: T.nilable(::DateTime), paid_on: T.nilable(::DateTime), canceled_on: T.nilable(::DateTime), disabled_on: T.nilable(::DateTime)).void }
71
+ def initialize(invoice_id:, invoice_number:, customer_account_id:, customer_display_name:, customer_email:, partner_account_id:, status:, line_items:, subtotal_amount:, total_amount:, pending_amount:, paid_amount:, refunded_amount:, disputed_amount:, created_on:, description: nil, amount_details: nil, payment_link_code: nil, payment_link_url: nil, payment: nil, invoice_payments: nil, invoice_date: nil, due_date: nil, sent_on: nil, paid_on: nil, canceled_on: nil, disabled_on: nil)
70
72
  @invoice_id = invoice_id
71
73
  @invoice_number = invoice_number
72
74
  @customer_account_id = customer_account_id
@@ -86,6 +88,7 @@ module Moov
86
88
  @amount_details = amount_details
87
89
  @payment_link_code = payment_link_code
88
90
  @payment_link_url = payment_link_url
91
+ @payment = payment
89
92
  @invoice_payments = invoice_payments
90
93
  @invoice_date = invoice_date
91
94
  @due_date = due_date
@@ -117,6 +120,7 @@ module Moov
117
120
  return false unless @amount_details == other.amount_details
118
121
  return false unless @payment_link_code == other.payment_link_code
119
122
  return false unless @payment_link_url == other.payment_link_url
123
+ return false unless @payment == other.payment
120
124
  return false unless @invoice_payments == other.invoice_payments
121
125
  return false unless @invoice_date == other.invoice_date
122
126
  return false unless @due_date == other.due_date
@@ -46,6 +46,8 @@ class Moov::Models::Components::Invoice
46
46
  def payment_link_code=(str_); end
47
47
  def payment_link_url(); end
48
48
  def payment_link_url=(str_); end
49
+ def payment(); end
50
+ def payment=(str_); end
49
51
  def invoice_payments(); end
50
52
  def invoice_payments=(str_); end
51
53
  def invoice_date(); end
@@ -0,0 +1,36 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+
7
+ module Moov
8
+ module Models
9
+ module Components
10
+
11
+ class InvoiceNotificationLimitedChannel
12
+ extend T::Sig
13
+ include Crystalline::MetadataFields
14
+
15
+
16
+ field :channel, Models::Components::NotificationChannel, { 'format_json': { 'letter_case': ::Moov::Utils.field_name('channel'), required: true, 'decoder': ::Moov::Utils.enum_from_string(Models::Components::NotificationChannel, false) } }
17
+ # When a notification to the channel can be sent again.
18
+ field :available_on, ::DateTime, { 'format_json': { 'letter_case': ::Moov::Utils.field_name('availableOn'), required: true, 'decoder': ::Moov::Utils.datetime_from_iso_format(false) } }
19
+
20
+ sig { params(channel: Models::Components::NotificationChannel, available_on: ::DateTime).void }
21
+ def initialize(channel:, available_on:)
22
+ @channel = channel
23
+ @available_on = available_on
24
+ end
25
+
26
+ sig { params(other: T.untyped).returns(T::Boolean) }
27
+ def ==(other)
28
+ return false unless other.is_a? self.class
29
+ return false unless @channel == other.channel
30
+ return false unless @available_on == other.available_on
31
+ true
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,15 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+
5
+ class Moov::Models::Components::InvoiceNotificationLimitedChannel
6
+ extend ::Crystalline::MetadataFields::ClassMethods
7
+ end
8
+
9
+
10
+ class Moov::Models::Components::InvoiceNotificationLimitedChannel
11
+ def channel(); end
12
+ def channel=(str_); end
13
+ def available_on(); end
14
+ def available_on=(str_); end
15
+ end
@@ -0,0 +1,40 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+
7
+ module Moov
8
+ module Models
9
+ module Components
10
+ # Payment options for an invoice.
11
+ class InvoicePaymentOptions
12
+ extend T::Sig
13
+ include Crystalline::MetadataFields
14
+
15
+ # Payment methods the customer can use to pay the invoice. If omitted, all methods the merchant supports are allowed. The request is rejected if a listed method is not supported by the merchant.
16
+ field :allowed_methods, Crystalline::Nilable.new(Crystalline::Array.new(Models::Components::CollectionPaymentMethodType)), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('allowedMethods') } }
17
+ # Options for payment links used to collect a card payment.
18
+ field :card_details, Crystalline::Nilable.new(Models::Components::CardPaymentDetails), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('cardDetails') } }
19
+ # Options for payment links used to collect an ACH payment.
20
+ field :ach_details, Crystalline::Nilable.new(Models::Components::ACHPaymentDetails), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('achDetails') } }
21
+
22
+ sig { params(allowed_methods: T.nilable(T::Array[Models::Components::CollectionPaymentMethodType]), card_details: T.nilable(Models::Components::CardPaymentDetails), ach_details: T.nilable(Models::Components::ACHPaymentDetails)).void }
23
+ def initialize(allowed_methods: nil, card_details: nil, ach_details: nil)
24
+ @allowed_methods = allowed_methods
25
+ @card_details = card_details
26
+ @ach_details = ach_details
27
+ end
28
+
29
+ sig { params(other: T.untyped).returns(T::Boolean) }
30
+ def ==(other)
31
+ return false unless other.is_a? self.class
32
+ return false unless @allowed_methods == other.allowed_methods
33
+ return false unless @card_details == other.card_details
34
+ return false unless @ach_details == other.ach_details
35
+ true
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,17 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+
5
+ class Moov::Models::Components::InvoicePaymentOptions
6
+ extend ::Crystalline::MetadataFields::ClassMethods
7
+ end
8
+
9
+
10
+ class Moov::Models::Components::InvoicePaymentOptions
11
+ def allowed_methods(); end
12
+ def allowed_methods=(str_); end
13
+ def card_details(); end
14
+ def card_details=(str_); end
15
+ def ach_details(); end
16
+ def ach_details=(str_); end
17
+ end
@@ -0,0 +1,40 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+
7
+ module Moov
8
+ module Models
9
+ module Components
10
+
11
+ class InvoicePaymentOptionsError
12
+ extend T::Sig
13
+ include Crystalline::MetadataFields
14
+
15
+
16
+ field :allowed_methods, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('allowedMethods') } }
17
+
18
+ field :card_details, Crystalline::Nilable.new(Models::Components::CardPaymentDetailsError), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('cardDetails') } }
19
+
20
+ field :ach_details, Crystalline::Nilable.new(Models::Components::ACHPaymentDetailsError), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('achDetails') } }
21
+
22
+ sig { params(allowed_methods: T.nilable(::String), card_details: T.nilable(Models::Components::CardPaymentDetailsError), ach_details: T.nilable(Models::Components::ACHPaymentDetailsError)).void }
23
+ def initialize(allowed_methods: nil, card_details: nil, ach_details: nil)
24
+ @allowed_methods = allowed_methods
25
+ @card_details = card_details
26
+ @ach_details = ach_details
27
+ end
28
+
29
+ sig { params(other: T.untyped).returns(T::Boolean) }
30
+ def ==(other)
31
+ return false unless other.is_a? self.class
32
+ return false unless @allowed_methods == other.allowed_methods
33
+ return false unless @card_details == other.card_details
34
+ return false unless @ach_details == other.ach_details
35
+ true
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,17 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+
5
+ class Moov::Models::Components::InvoicePaymentOptionsError
6
+ extend ::Crystalline::MetadataFields::ClassMethods
7
+ end
8
+
9
+
10
+ class Moov::Models::Components::InvoicePaymentOptionsError
11
+ def allowed_methods(); end
12
+ def allowed_methods=(str_); end
13
+ def card_details(); end
14
+ def card_details=(str_); end
15
+ def ach_details(); end
16
+ def ach_details=(str_); end
17
+ end
@@ -0,0 +1,40 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+
7
+ module Moov
8
+ module Models
9
+ module Components
10
+ # Payment options to update on an invoice.
11
+ class InvoicePaymentOptionsUpdate
12
+ extend T::Sig
13
+ include Crystalline::MetadataFields
14
+
15
+ # Options for payment links used to collect a card payment.
16
+ field :card_details, Crystalline::Nilable.new(Models::Components::CardPaymentDetails), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('cardDetails') } }
17
+ # Options for payment links used to collect an ACH payment.
18
+ field :ach_details, Crystalline::Nilable.new(Models::Components::ACHPaymentDetails), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('achDetails') } }
19
+ # Payment methods the customer can use to pay the invoice. Omit to leave unchanged. Set to null to allow all methods the merchant supports. The request is rejected if a listed method is not supported by the merchant.
20
+ field :allowed_methods, Crystalline::Nilable.new(Crystalline::Array.new(Models::Components::CollectionPaymentMethodType)), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('allowedMethods') } }
21
+
22
+ sig { params(card_details: T.nilable(Models::Components::CardPaymentDetails), ach_details: T.nilable(Models::Components::ACHPaymentDetails), allowed_methods: T.nilable(T::Array[Models::Components::CollectionPaymentMethodType])).void }
23
+ def initialize(card_details: nil, ach_details: nil, allowed_methods: nil)
24
+ @card_details = card_details
25
+ @ach_details = ach_details
26
+ @allowed_methods = allowed_methods
27
+ end
28
+
29
+ sig { params(other: T.untyped).returns(T::Boolean) }
30
+ def ==(other)
31
+ return false unless other.is_a? self.class
32
+ return false unless @card_details == other.card_details
33
+ return false unless @ach_details == other.ach_details
34
+ return false unless @allowed_methods == other.allowed_methods
35
+ true
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,17 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+
5
+ class Moov::Models::Components::InvoicePaymentOptionsUpdate
6
+ extend ::Crystalline::MetadataFields::ClassMethods
7
+ end
8
+
9
+
10
+ class Moov::Models::Components::InvoicePaymentOptionsUpdate
11
+ def card_details(); end
12
+ def card_details=(str_); end
13
+ def ach_details(); end
14
+ def ach_details=(str_); end
15
+ def allowed_methods(); end
16
+ def allowed_methods=(str_); end
17
+ end
@@ -0,0 +1,78 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+
7
+ module Moov
8
+ module Models
9
+ module Components
10
+ # An issued card activity record. Each record represents the use of an issued card.
11
+ #
12
+ # Exactly one of `authorizationID` or `cardTransactionID` is present:
13
+ # - Activity that has an authorization request includes `authorizationID`. `cardTransactionID` is omitted.
14
+ # - Activity that does not have a corresponding authorization request includes `cardTransactionID` and omits `authorizationID` and
15
+ # `authorizedAmount`.
16
+ class IssuedCardActivity
17
+ extend T::Sig
18
+ include Crystalline::MetadataFields
19
+
20
+ # Status of a card issuing authorization.
21
+ field :status, Models::Components::IssuingAuthorizationStatus, { 'format_json': { 'letter_case': ::Moov::Utils.field_name('status'), required: true, 'decoder': ::Moov::Utils.open_enum_from_string(Models::Components::IssuingAuthorizationStatus, false) } }
22
+
23
+ field :issued_card_id, ::String, { 'format_json': { 'letter_case': ::Moov::Utils.field_name('issuedCardID'), required: true } }
24
+
25
+ field :created_on, ::DateTime, { 'format_json': { 'letter_case': ::Moov::Utils.field_name('createdOn'), required: true, 'decoder': ::Moov::Utils.datetime_from_iso_format(false) } }
26
+
27
+ field :merchant_data, Models::Components::IssuingMerchantData, { 'format_json': { 'letter_case': ::Moov::Utils.field_name('merchantData'), required: true } }
28
+ # Identifier for the authorization. Present for all activity except cleared card transactions without a corresponding authorization.
29
+ field :authorization_id, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('authorizationID') } }
30
+ # Identifier for the settlement card transaction. Present for cleared card transactions without a corresponding authorization.
31
+ field :card_transaction_id, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('cardTransactionID') } }
32
+ # Last four digits of the card number.
33
+ field :last_four_card_number, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('lastFourCardNumber') } }
34
+ # Identifier for the account of the card's authorized user.
35
+ field :authorized_user_account_id, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('authorizedUserAccountID') } }
36
+ # Amount authorized on the card. Omitted for cleared card transactions without a corresponding authorization.
37
+ field :authorized_amount, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('authorizedAmount') } }
38
+ # Amount cleared or settled for the activity.
39
+ field :cleared_amount, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('clearedAmount') } }
40
+ # The reason an authorization or authorization event was declined. Only present if the
41
+ # authorization or event has been declined.
42
+ field :decline_reason, Crystalline::Nilable.new(Models::Components::IssuingDeclineReason), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('declineReason'), 'decoder': ::Moov::Utils.open_enum_from_string(Models::Components::IssuingDeclineReason, true) } }
43
+
44
+ sig { params(status: Models::Components::IssuingAuthorizationStatus, issued_card_id: ::String, created_on: ::DateTime, merchant_data: Models::Components::IssuingMerchantData, authorization_id: T.nilable(::String), card_transaction_id: T.nilable(::String), last_four_card_number: T.nilable(::String), authorized_user_account_id: T.nilable(::String), authorized_amount: T.nilable(::String), cleared_amount: T.nilable(::String), decline_reason: T.nilable(Models::Components::IssuingDeclineReason)).void }
45
+ def initialize(status:, issued_card_id:, created_on:, merchant_data:, authorization_id: nil, card_transaction_id: nil, last_four_card_number: nil, authorized_user_account_id: nil, authorized_amount: nil, cleared_amount: nil, decline_reason: nil)
46
+ @status = status
47
+ @issued_card_id = issued_card_id
48
+ @created_on = created_on
49
+ @merchant_data = merchant_data
50
+ @authorization_id = authorization_id
51
+ @card_transaction_id = card_transaction_id
52
+ @last_four_card_number = last_four_card_number
53
+ @authorized_user_account_id = authorized_user_account_id
54
+ @authorized_amount = authorized_amount
55
+ @cleared_amount = cleared_amount
56
+ @decline_reason = decline_reason
57
+ end
58
+
59
+ sig { params(other: T.untyped).returns(T::Boolean) }
60
+ def ==(other)
61
+ return false unless other.is_a? self.class
62
+ return false unless @status == other.status
63
+ return false unless @issued_card_id == other.issued_card_id
64
+ return false unless @created_on == other.created_on
65
+ return false unless @merchant_data == other.merchant_data
66
+ return false unless @authorization_id == other.authorization_id
67
+ return false unless @card_transaction_id == other.card_transaction_id
68
+ return false unless @last_four_card_number == other.last_four_card_number
69
+ return false unless @authorized_user_account_id == other.authorized_user_account_id
70
+ return false unless @authorized_amount == other.authorized_amount
71
+ return false unless @cleared_amount == other.cleared_amount
72
+ return false unless @decline_reason == other.decline_reason
73
+ true
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,33 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+
5
+ class Moov::Models::Components::IssuedCardActivity
6
+ extend ::Crystalline::MetadataFields::ClassMethods
7
+ end
8
+
9
+
10
+ class Moov::Models::Components::IssuedCardActivity
11
+ def status(); end
12
+ def status=(str_); end
13
+ def issued_card_id(); end
14
+ def issued_card_id=(str_); end
15
+ def created_on(); end
16
+ def created_on=(str_); end
17
+ def merchant_data(); end
18
+ def merchant_data=(str_); end
19
+ def authorization_id(); end
20
+ def authorization_id=(str_); end
21
+ def card_transaction_id(); end
22
+ def card_transaction_id=(str_); end
23
+ def last_four_card_number(); end
24
+ def last_four_card_number=(str_); end
25
+ def authorized_user_account_id(); end
26
+ def authorized_user_account_id=(str_); end
27
+ def authorized_amount(); end
28
+ def authorized_amount=(str_); end
29
+ def cleared_amount(); end
30
+ def cleared_amount=(str_); end
31
+ def decline_reason(); end
32
+ def decline_reason=(str_); end
33
+ end
@@ -8,9 +8,9 @@ module Moov
8
8
  module Models
9
9
  module Components
10
10
 
11
- class WireCreditPaymentMethodPaymentMethodType < T::Enum
11
+ class NotificationChannel < T::Enum
12
12
  enums do
13
- WIRE_CREDIT = new('wire-credit')
13
+ EMAIL = new('email')
14
14
  end
15
15
  end
16
16
  end
@@ -2,10 +2,10 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
 
5
- class Moov::Models::Components::WireFailureCode
5
+ class Moov::Models::Components::NotificationChannel
6
6
  extend ::Crystalline::MetadataFields::ClassMethods
7
7
  end
8
8
 
9
9
 
10
- class Moov::Models::Components::WireFailureCode
10
+ class Moov::Models::Components::NotificationChannel
11
11
  end
@@ -34,9 +34,12 @@ module Moov
34
34
  field :last_four_account_number, ::String, { 'format_json': { 'letter_case': ::Moov::Utils.field_name('lastFourAccountNumber'), required: true } }
35
35
 
36
36
  field :updated_on, ::DateTime, { 'format_json': { 'letter_case': ::Moov::Utils.field_name('updatedOn'), required: true, 'decoder': ::Moov::Utils.datetime_from_iso_format(false) } }
37
+ # The outcome of a requested risk-verification attempt. `notAttempted` when
38
+ # `requestRiskVerification` was not set, or the calling account was not allowlisted.
39
+ field :risk_verification_outcome, Crystalline::Nilable.new(Models::Components::RiskVerificationOutcome), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('riskVerificationOutcome'), 'decoder': ::Moov::Utils.open_enum_from_string(Models::Components::RiskVerificationOutcome, true) } }
37
40
 
38
- sig { params(bank_account_id: ::String, fingerprint: ::String, status: Models::Components::BankAccountStatus, holder_name: ::String, holder_type: Models::Components::BankAccountHolderType, bank_name: ::String, bank_account_type: Models::Components::BankAccountType, routing_number: ::String, last_four_account_number: ::String, updated_on: ::DateTime).void }
39
- def initialize(bank_account_id:, fingerprint:, status:, holder_name:, holder_type:, bank_name:, bank_account_type:, routing_number:, last_four_account_number:, updated_on:)
41
+ sig { params(bank_account_id: ::String, fingerprint: ::String, status: Models::Components::BankAccountStatus, holder_name: ::String, holder_type: Models::Components::BankAccountHolderType, bank_name: ::String, bank_account_type: Models::Components::BankAccountType, routing_number: ::String, last_four_account_number: ::String, updated_on: ::DateTime, risk_verification_outcome: T.nilable(Models::Components::RiskVerificationOutcome)).void }
42
+ def initialize(bank_account_id:, fingerprint:, status:, holder_name:, holder_type:, bank_name:, bank_account_type:, routing_number:, last_four_account_number:, updated_on:, risk_verification_outcome: nil)
40
43
  @bank_account_id = bank_account_id
41
44
  @fingerprint = fingerprint
42
45
  @status = status
@@ -47,6 +50,7 @@ module Moov
47
50
  @routing_number = routing_number
48
51
  @last_four_account_number = last_four_account_number
49
52
  @updated_on = updated_on
53
+ @risk_verification_outcome = risk_verification_outcome
50
54
  end
51
55
 
52
56
  sig { params(other: T.untyped).returns(T::Boolean) }
@@ -62,6 +66,7 @@ module Moov
62
66
  return false unless @routing_number == other.routing_number
63
67
  return false unless @last_four_account_number == other.last_four_account_number
64
68
  return false unless @updated_on == other.updated_on
69
+ return false unless @risk_verification_outcome == other.risk_verification_outcome
65
70
  true
66
71
  end
67
72
  end
@@ -28,4 +28,6 @@ class Moov::Models::Components::PaymentMethodsBankAccount
28
28
  def last_four_account_number=(str_); end
29
29
  def updated_on(); end
30
30
  def updated_on=(str_); end
31
+ def risk_verification_outcome(); end
32
+ def risk_verification_outcome=(str_); end
31
33
  end
@@ -28,7 +28,6 @@ module Moov
28
28
  GOOGLE_PAY = new('google-pay')
29
29
  PUSH_TO_GOOGLE_PAY = new('push-to-google-pay')
30
30
  PULL_FROM_GOOGLE_PAY = new('pull-from-google-pay')
31
- WIRE_CREDIT = new('wire-credit')
32
31
  end
33
32
  open!
34
33
  end
@@ -18,7 +18,7 @@ module Moov
18
18
  field :title, ::String, { 'format_json': { 'letter_case': ::Moov::Utils.field_name('title'), required: true } }
19
19
  # A product's starting price, before applying modifiers.
20
20
  field :base_price, Models::Components::AmountDecimal, { 'format_json': { 'letter_case': ::Moov::Utils.field_name('basePrice'), required: true } }
21
- # Whether applicable tax rules may be applied to this product. True does not guarantee tax is charged; false excludes the product from tax calculation. This setting does not determine jurisdiction-specific taxability.
21
+ # Whether applicable tax rules may be applied to this product. The value can be used to determine how to populate the tax amount on a transfer (Moov does not compute or assess tax). true means a tax amount can be included; false means it should not. Omitted values default to true on creation and preserve the existing setting on update. This setting does not determine jurisdiction-specific taxability.
22
22
  field :is_taxable, Crystalline::Boolean.new, { 'format_json': { 'letter_case': ::Moov::Utils.field_name('isTaxable'), required: true } }
23
23
  # The date and time when the product was added.
24
24
  field :created_on, ::DateTime, { 'format_json': { 'letter_case': ::Moov::Utils.field_name('createdOn'), required: true, 'decoder': ::Moov::Utils.datetime_from_iso_format(false) } }
@@ -22,7 +22,7 @@ module Moov
22
22
  # - Supports Markdown for formatting
23
23
  # - HTML is not permitted and will be rejected
24
24
  field :description, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('description') } }
25
- # Whether applicable tax rules may be applied to this product. True does not guarantee tax is charged; false excludes the product from tax calculation. Omitted values default to true on creation and preserve the existing setting on update.
25
+ # Whether applicable tax rules may be applied to this product. The value can be used to determine how to populate the tax amount on a transfer (Moov does not compute or assess tax). true means a tax amount can be included; false means it should not. Omitted values default to true on creation and preserve the existing setting on update. This setting does not determine jurisdiction-specific taxability.
26
26
  field :is_taxable, Crystalline::Nilable.new(Crystalline::Boolean.new), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('isTaxable') } }
27
27
  # Assign previously uploaded images to a product or option.
28
28
  field :images, Crystalline::Nilable.new(Crystalline::Array.new(Models::Components::AssignProductImage)), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('images') } }
@@ -14,16 +14,20 @@ module Moov
14
14
 
15
15
  # An optional override of the default card statement descriptor for a transfer. Accounts must be enabled by Moov to set this field.
16
16
  field :dynamic_descriptor, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('dynamicDescriptor') } }
17
+ # The scheduled date and time for the push-to-card transfer to be delivered, as set when the transfer was created.
18
+ field :scheduled_delivery_on, Crystalline::Nilable.new(::DateTime), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('scheduledDeliveryOn'), 'decoder': ::Moov::Utils.datetime_from_iso_format(true) } }
17
19
 
18
- sig { params(dynamic_descriptor: T.nilable(::String)).void }
19
- def initialize(dynamic_descriptor: nil)
20
+ sig { params(dynamic_descriptor: T.nilable(::String), scheduled_delivery_on: T.nilable(::DateTime)).void }
21
+ def initialize(dynamic_descriptor: nil, scheduled_delivery_on: nil)
20
22
  @dynamic_descriptor = dynamic_descriptor
23
+ @scheduled_delivery_on = scheduled_delivery_on
21
24
  end
22
25
 
23
26
  sig { params(other: T.untyped).returns(T::Boolean) }
24
27
  def ==(other)
25
28
  return false unless other.is_a? self.class
26
29
  return false unless @dynamic_descriptor == other.dynamic_descriptor
30
+ return false unless @scheduled_delivery_on == other.scheduled_delivery_on
27
31
  true
28
32
  end
29
33
  end
@@ -10,4 +10,6 @@ end
10
10
  class Moov::Models::Components::PushToCardOptions
11
11
  def dynamic_descriptor(); end
12
12
  def dynamic_descriptor=(str_); end
13
+ def scheduled_delivery_on(); end
14
+ def scheduled_delivery_on=(str_); end
13
15
  end
@@ -0,0 +1,23 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+
7
+ module Moov
8
+ module Models
9
+ module Components
10
+ # RiskVerificationOutcome - The outcome of a bank account risk-verification attempt.
11
+ class RiskVerificationOutcome
12
+ include ::Crystalline::Enum
13
+ enums do
14
+ NOT_ATTEMPTED = new('notAttempted')
15
+ SUCCESS = new('success')
16
+ INCONCLUSIVE = new('inconclusive')
17
+ DECLINE = new('decline')
18
+ end
19
+ open!
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,11 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+
5
+ class Moov::Models::Components::RiskVerificationOutcome
6
+ extend ::Crystalline::MetadataFields::ClassMethods
7
+ end
8
+
9
+
10
+ class Moov::Models::Components::RiskVerificationOutcome
11
+ end