# `ISO20022.Camt053.TransactionDetails`
[🔗](https://github.com/ARTARNA/ex_iso20022/blob/main/lib/iso_20022/camt/053/transaction_details.ex#L1)

Individual transaction details from `<TxDtls>` within an entry details block.

## Remittance information

`remittance_info` is one of:
- `{:unstructured, text}` — free-text string (max 140 chars, from `<Ustrd>`)
- `{:structured, %{ref: ..., ref_type: ..., creditor_ref: ...}}` — from `<Strd>`
- `nil` — no remittance info present

## Related parties

`related_parties` is a map with optional keys:
`:debtor`, `:debtor_account`, `:creditor`, `:creditor_account`,
`:ultimate_debtor`, `:ultimate_creditor`, each being a `%{name, iban, other_id}` map.

## Related agents

`related_agents` is a map with optional keys:
`:debtor_agent`, `:creditor_agent`, each being a `%{bic, name}` map.

# `agent`

```elixir
@type agent() :: %{bic: String.t() | nil, name: String.t() | nil}
```

# `party`

```elixir
@type party() :: %{
  name: String.t() | nil,
  iban: String.t() | nil,
  other_id: String.t() | nil
}
```

# `refs`

```elixir
@type refs() :: %{
  message_id: String.t() | nil,
  account_servicer_ref: String.t() | nil,
  payment_info_id: String.t() | nil,
  instruction_id: String.t() | nil,
  end_to_end_id: String.t() | nil,
  tx_id: String.t() | nil,
  mandate_id: String.t() | nil,
  uetr: String.t() | nil
}
```

# `remittance_info`

```elixir
@type remittance_info() ::
  {:unstructured, String.t()}
  | {:structured,
     %{
       ref: String.t() | nil,
       ref_type: String.t() | nil,
       creditor_ref: String.t() | nil
     }}
  | nil
```

# `t`

```elixir
@type t() :: %ISO20022.Camt053.TransactionDetails{
  amount: Decimal.t() | nil,
  credit_debit: :credit | :debit | nil,
  currency: String.t() | nil,
  purpose: String.t() | nil,
  refs: refs() | nil,
  related_agents: map() | nil,
  related_parties: map() | nil,
  remittance_info: remittance_info()
}
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
