defmodule Plaid.Liabilities.Mortgage do @moduledoc """ [Plaid Liabilities Mortage Schema.](https://plaid.com/docs/api/products/#liabilities-get-response-mortgage) """ @behaviour Plaid.Castable alias Plaid.Address alias Plaid.Castable alias Plaid.Liabilities.Mortgage.InterestRate @type t :: %__MODULE__{ account_id: String.t() | nil, account_number: String.t(), current_late_fee: number() | nil, escrow_balance: number() | nil, has_pmi: boolean() | nil, has_prepayment_penalty: boolean() | nil, interest_rate: InterestRate.t(), last_payment_amount: number() | nil, last_payment_date: String.t() | nil, loan_type_description: String.t() | nil, loan_term: String.t() | nil, maturity_date: String.t() | nil, next_monthly_payment: number() | nil, next_payment_due_date: String.t() | nil, origination_date: String.t() | nil, origination_principal_amount: number() | nil, past_due_amount: number() | nil, property_address: Address.t(), ytd_interest_paid: number() | nil, ytd_principal_paid: number() | nil } defstruct [ :account_id, :account_number, :current_late_fee, :escrow_balance, :has_pmi, :has_prepayment_penalty, :interest_rate, :last_payment_amount, :last_payment_date, :loan_type_description, :loan_term, :maturity_date, :next_monthly_payment, :next_payment_due_date, :origination_date, :origination_principal_amount, :past_due_amount, :property_address, :ytd_interest_paid, :ytd_principal_paid ] @impl true def cast(generic_map) do %__MODULE__{ account_id: generic_map["account_id"], account_number: generic_map["account_number"], current_late_fee: generic_map["current_late_fee"], escrow_balance: generic_map["escrow_balance"], has_pmi: generic_map["has_pmi"], has_prepayment_penalty: generic_map["has_prepayment_penalty"], interest_rate: Castable.cast(InterestRate, generic_map["interest_rate"]), last_payment_amount: generic_map["last_payment_amount"], last_payment_date: generic_map["last_payment_date"], loan_type_description: generic_map["loan_type_description"], loan_term: generic_map["loan_term"], maturity_date: generic_map["maturity_date"], next_monthly_payment: generic_map["next_monthly_payment"], next_payment_due_date: generic_map["next_payment_due_date"], origination_date: generic_map["origination_date"], origination_principal_amount: generic_map["origination_principal_amount"], past_due_amount: generic_map["past_due_amount"], property_address: Castable.cast(Address, generic_map["property_address"]), ytd_interest_paid: generic_map["ytd_interest_paid"], ytd_principal_paid: generic_map["ytd_principal_paid"] } end end