Packages

HBCI/FinTS client library for Elixir.

Current section

Files

Jump to
fintex lib model transaction.ex
Raw

lib/model/transaction.ex

defmodule FinTex.Model.Transaction do
@moduledoc """
The following fields are public:
* `name` - Name of originator or recipient
* `account_number` - Account number of originator or recipient. This field might be empty if the transaction has no account number, e.g. interest transactions.
* `bank_code` - Bank code of originator or recipient. This field might be empty if the transaction has no bank code, e.g. interest transactions.
* `amount` - Transaction amount
* `booking_date` - Booking date
* `value_date` - Value date
* `purpose` - Purpose text. This field might be empty if the transaction has no purpose
* `code` - Business transaction code
* `booking_text` - Booking text. This field might be empty if the transaction has no booking text
"""
defstruct [
:name,
:account_number,
:bank_code,
:amount,
:booking_date,
:value_date,
:purpose,
:code,
:booking_text
]
@type t :: %__MODULE__{}
@doc false
def from_statement(%MT940.StatementLineBundle{
account_holder: account_holder,
account_number: account_number,
amount: amount,
bank_code: bank_code,
code: code,
details: details,
entry_date: entry_date,
funds_code: funds_code,
transaction_description: transaction_description,
value_date: value_date
}) do
sign = case funds_code do
:credit -> +1
:debit -> -1
:return_credit -> -1
:return_debit -> +1
end
%__MODULE__{
name: account_holder |> Enum.join(" "),
account_number: account_number,
bank_code: bank_code,
amount: amount |> Decimal.mult(sign |> Decimal.new),
booking_date: entry_date,
value_date: value_date,
purpose: details |> Enum.join(" "),
code: code,
booking_text: transaction_description
}
end
end