lib/lithic/models/external_payment.rb



# frozen_string_literal: true

module Lithic
  module Models
    class ExternalPayment < Lithic::BaseModel
      # @!attribute token
      #
      #   @return [String]
      required :token, String

      # @!attribute category
      #
      #   @return [Symbol, Lithic::Models::ExternalPayment::Category]
      required :category, enum: -> { Lithic::Models::ExternalPayment::Category }

      # @!attribute created
      #
      #   @return [Time]
      required :created, Time

      # @!attribute currency
      #
      #   @return [String]
      required :currency, String

      # @!attribute events
      #
      #   @return [Array<Lithic::Models::ExternalPayment::Event>]
      required :events, -> { Lithic::ArrayOf[Lithic::Models::ExternalPayment::Event] }

      # @!attribute financial_account_token
      #
      #   @return [String]
      required :financial_account_token, String

      # @!attribute payment_type
      #
      #   @return [Symbol, Lithic::Models::ExternalPayment::PaymentType]
      required :payment_type, enum: -> { Lithic::Models::ExternalPayment::PaymentType }

      # @!attribute pending_amount
      #
      #   @return [Integer]
      required :pending_amount, Integer

      # @!attribute result
      #
      #   @return [Symbol, Lithic::Models::ExternalPayment::Result]
      required :result, enum: -> { Lithic::Models::ExternalPayment::Result }

      # @!attribute settled_amount
      #
      #   @return [Integer]
      required :settled_amount, Integer

      # @!attribute status
      #
      #   @return [Symbol, Lithic::Models::ExternalPayment::Status]
      required :status, enum: -> { Lithic::Models::ExternalPayment::Status }

      # @!attribute updated
      #
      #   @return [Time]
      required :updated, Time

      # @!attribute [r] user_defined_id
      #
      #   @return [String, nil]
      optional :user_defined_id, String

      # @!parse
      #   # @return [String]
      #   attr_writer :user_defined_id

      # @!parse
      #   # @param token [String]
      #   # @param category [Symbol, Lithic::Models::ExternalPayment::Category]
      #   # @param created [Time]
      #   # @param currency [String]
      #   # @param events [Array<Lithic::Models::ExternalPayment::Event>]
      #   # @param financial_account_token [String]
      #   # @param payment_type [Symbol, Lithic::Models::ExternalPayment::PaymentType]
      #   # @param pending_amount [Integer]
      #   # @param result [Symbol, Lithic::Models::ExternalPayment::Result]
      #   # @param settled_amount [Integer]
      #   # @param status [Symbol, Lithic::Models::ExternalPayment::Status]
      #   # @param updated [Time]
      #   # @param user_defined_id [String]
      #   #
      #   def initialize(
      #     token:,
      #     category:,
      #     created:,
      #     currency:,
      #     events:,
      #     financial_account_token:,
      #     payment_type:,
      #     pending_amount:,
      #     result:,
      #     settled_amount:,
      #     status:,
      #     updated:,
      #     user_defined_id: nil,
      #     **
      #   )
      #     super
      #   end

      # def initialize: (Hash | Lithic::BaseModel) -> void

      module Category
        extend Lithic::Enum

        EXTERNAL_WIRE = :EXTERNAL_WIRE
        EXTERNAL_ACH = :EXTERNAL_ACH
        EXTERNAL_CHECK = :EXTERNAL_CHECK
        EXTERNAL_TRANSFER = :EXTERNAL_TRANSFER

        finalize!

        # @!parse
        #   # @return [Array<Symbol>]
        #   def self.values; end
      end

      class Event < Lithic::BaseModel
        # @!attribute token
        #
        #   @return [String]
        required :token, String

        # @!attribute amount
        #
        #   @return [Integer]
        required :amount, Integer

        # @!attribute created
        #
        #   @return [Time]
        required :created, Time

        # @!attribute detailed_results
        #
        #   @return [Array<Symbol, Lithic::Models::ExternalPayment::Event::DetailedResult>]
        required :detailed_results,
                 -> { Lithic::ArrayOf[enum: Lithic::Models::ExternalPayment::Event::DetailedResult] }

        # @!attribute effective_date
        #
        #   @return [Date]
        required :effective_date, Date

        # @!attribute memo
        #
        #   @return [String]
        required :memo, String

        # @!attribute result
        #
        #   @return [Symbol, Lithic::Models::ExternalPayment::Event::Result]
        required :result, enum: -> { Lithic::Models::ExternalPayment::Event::Result }

        # @!attribute type
        #
        #   @return [Symbol, Lithic::Models::ExternalPayment::Event::Type]
        required :type, enum: -> { Lithic::Models::ExternalPayment::Event::Type }

        # @!parse
        #   # @param token [String]
        #   # @param amount [Integer]
        #   # @param created [Time]
        #   # @param detailed_results [Array<Symbol, Lithic::Models::ExternalPayment::Event::DetailedResult>]
        #   # @param effective_date [Date]
        #   # @param memo [String]
        #   # @param result [Symbol, Lithic::Models::ExternalPayment::Event::Result]
        #   # @param type [Symbol, Lithic::Models::ExternalPayment::Event::Type]
        #   #
        #   def initialize(token:, amount:, created:, detailed_results:, effective_date:, memo:, result:, type:, **) = super

        # def initialize: (Hash | Lithic::BaseModel) -> void

        module DetailedResult
          extend Lithic::Enum

          APPROVED = :APPROVED

          finalize!

          # @!parse
          #   # @return [Array<Symbol>]
          #   def self.values; end
        end

        module Result
          extend Lithic::Enum

          APPROVED = :APPROVED
          DECLINED = :DECLINED

          finalize!

          # @!parse
          #   # @return [Array<Symbol>]
          #   def self.values; end
        end

        module Type
          extend Lithic::Enum

          EXTERNAL_WIRE_INITIATED = :EXTERNAL_WIRE_INITIATED
          EXTERNAL_WIRE_CANCELED = :EXTERNAL_WIRE_CANCELED
          EXTERNAL_WIRE_SETTLED = :EXTERNAL_WIRE_SETTLED
          EXTERNAL_WIRE_REVERSED = :EXTERNAL_WIRE_REVERSED
          EXTERNAL_WIRE_RELEASED = :EXTERNAL_WIRE_RELEASED
          EXTERNAL_ACH_INITIATED = :EXTERNAL_ACH_INITIATED
          EXTERNAL_ACH_CANCELED = :EXTERNAL_ACH_CANCELED
          EXTERNAL_ACH_SETTLED = :EXTERNAL_ACH_SETTLED
          EXTERNAL_ACH_REVERSED = :EXTERNAL_ACH_REVERSED
          EXTERNAL_ACH_RELEASED = :EXTERNAL_ACH_RELEASED
          EXTERNAL_TRANSFER_INITIATED = :EXTERNAL_TRANSFER_INITIATED
          EXTERNAL_TRANSFER_CANCELED = :EXTERNAL_TRANSFER_CANCELED
          EXTERNAL_TRANSFER_SETTLED = :EXTERNAL_TRANSFER_SETTLED
          EXTERNAL_TRANSFER_REVERSED = :EXTERNAL_TRANSFER_REVERSED
          EXTERNAL_TRANSFER_RELEASED = :EXTERNAL_TRANSFER_RELEASED
          EXTERNAL_CHECK_INITIATED = :EXTERNAL_CHECK_INITIATED
          EXTERNAL_CHECK_CANCELED = :EXTERNAL_CHECK_CANCELED
          EXTERNAL_CHECK_SETTLED = :EXTERNAL_CHECK_SETTLED
          EXTERNAL_CHECK_REVERSED = :EXTERNAL_CHECK_REVERSED
          EXTERNAL_CHECK_RELEASED = :EXTERNAL_CHECK_RELEASED

          finalize!

          # @!parse
          #   # @return [Array<Symbol>]
          #   def self.values; end
        end
      end

      module PaymentType
        extend Lithic::Enum

        DEPOSIT = :DEPOSIT
        WITHDRAWAL = :WITHDRAWAL

        finalize!

        # @!parse
        #   # @return [Array<Symbol>]
        #   def self.values; end
      end

      module Result
        extend Lithic::Enum

        APPROVED = :APPROVED
        DECLINED = :DECLINED

        finalize!

        # @!parse
        #   # @return [Array<Symbol>]
        #   def self.values; end
      end

      module Status
        extend Lithic::Enum

        PENDING = :PENDING
        SETTLED = :SETTLED
        DECLINED = :DECLINED
        REVERSED = :REVERSED
        CANCELED = :CANCELED

        finalize!

        # @!parse
        #   # @return [Array<Symbol>]
        #   def self.values; end
      end
    end
  end
end