> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dualentry.com/llms.txt
> Use this file to discover all available pages before exploring further.

# How to Create and Manage Bank Transfers

> Create bank transfers between a company's own accounts, and control whether DualEntry posts a realized gain or loss on currency conversions.

A Bank Transfer records the movement of funds between two of a company's own bank or credit card accounts, such as funding a payroll account from an operating account. It isn't a payment to a vendor or a receipt from a customer, and both accounts must belong to the same company: DualEntry doesn't support transfers between accounts in two different companies. This guide covers creating a bank transfer, choosing how DualEntry handles a cross-currency conversion, and reading the resulting GL impact.

## Before you start

* Both accounts already exist in DualEntry as Bank or Credit Card accounts on the same company. System-managed accounts can't be used. Add a new account through the [chart of accounts](./chart-of-accounts), or connect its live feed first through [Bank Connections](../bank-connections).
* If the two accounts use different currencies, decide whether you want DualEntry to value each leg independently at its system exchange rate (the default), or to enter the actual amount your bank credited and skip the resulting gain or loss.
* A role that can post to the accounts involved. Where an [approval workflow](../../platform-configuration/approval-workflows) covers bank transfers, the transfer is held in Draft and routed instead of posting on save.

## Create a bank transfer

1. Navigate to **Accounting → Transactions → Bank Transfers** and choose **New Bank Transfer**.
2. Set **Company**, then **Sending Account** and **Receiving Account**. Each list only shows Bank or Credit Card accounts that belong to the selected company, and excludes whatever account is already selected on the other side.
3. Enter **Sending amount**. If the two accounts share a currency, **Receiving amount** stays in sync automatically; if they don't, DualEntry auto-populates it from the exchange rate (see the next section).
4. Set **Posting Date** and, if your organization has it enabled, **Transaction Date**. Add a **Memo** if it's useful for reference.
5. Choose **Save as Draft** to hold the transfer with no GL impact, or **Send for Approval** to route it through your approval workflow. With no matching workflow, saving posts the transfer immediately.

An inactive Sending or Receiving Account still appears in its dropdown, but shows a warning prompting you to reactivate it or choose a different account.

## Same-currency vs. different-currency transfers

A same-currency transfer is straightforward: the amount debited to the Receiving Account always equals the amount credited from the Sending Account, with no exchange rate and no gain or loss.

A different-currency transfer needs an exchange rate. DualEntry auto-populates **Exchange Rate** based on the **Posting Date** and calculates **Receiving amount** from **Sending amount** and that rate. You can edit the rate directly, or type into **Receiving amount** to back-calculate it instead. Because the two legs are in different currencies, DualEntry also needs to decide how to value each one in the company's base currency for the GL, which is what **Calculate Gain/Loss** and **Bank Currency Anchor** control.

## Decide whether to calculate a realized gain or loss

By default, DualEntry values each leg of a cross-currency transfer independently at its own system exchange rate. For a same-day conversion between your own accounts, the residual between those two independent valuations is really just a mismatch between DualEntry's system rate and the rate your bank actually used, not a real economic gain or loss, since nothing was held in a foreign-currency position across periods. **Calculate Gain/Loss** controls whether DualEntry posts that residual.

### Turn Calculate Gain/Loss off for a same-day conversion

1. Enter **Sending Account** and **Sending amount** as usual, and select **Receiving Account**.
2. Turn **Calculate Gain/Loss** off.
3. If neither account is in your company's base currency, set **Bank Currency Anchor** to choose which account's exchange rate to trust; DualEntry derives the other leg's rate so both sides value to the same base-currency amount. It defaults to the Sending Account. If either account is already the base currency, DualEntry anchors to it automatically and doesn't show this choice.
4. Enter the actual amount your bank credited to the Receiving account, from your bank statement or transfer confirmation.
5. Save. The transfer posts using that actual amount on both legs, with no Realized Gain/Loss line.

### Leave Calculate Gain/Loss on

This is the default, and it matches how every cross-currency bank transfer worked before this control existed: each leg is valued independently at DualEntry's system rate, and any residual posts to Realized Gain/Loss automatically. Leave it on unless you have a specific reason, such as a same-day conversion, to anchor the transfer to one side instead.

<Warning>
  If you manually enter an exchange rate that differs from DualEntry's system rate, a callout flags the estimated FX difference before you save. This applies whether Calculate Gain/Loss is on or off, so treat it as your cue to double-check the rate against your bank statement before posting.
</Warning>

<Info>
  Once a transfer is saved, reopening it shows **Calculate Gain/Loss** and **Bank Currency Anchor** as read-only, reflecting the values it posted with. Editing a transfer doesn't let you retroactively change how its gain or loss was calculated.
</Info>

## Field reference

| Field                | Type    | Required                                                                        | Description                                                                                                                                                      |
| -------------------- | ------- | ------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Posting Date         | date    | Yes                                                                             | The date the transfer's GL impact is recorded. Checked against the company's Other GL period lock.                                                               |
| Transaction Date     | date    | Conditional                                                                     | The actual date the bank executed the transfer. Only shown when your organization has this field enabled.                                                        |
| Company              | string  | Yes                                                                             | The legal entity the transfer belongs to. Both accounts must belong to this company.                                                                             |
| Sending Account      | string  | Yes                                                                             | The Bank or Credit Card account funds leave. Must differ from the Receiving Account.                                                                             |
| Sending Currency     | string  | Read-only                                                                       | Populated automatically from the selected Sending Account.                                                                                                       |
| Sending amount       | decimal | Yes                                                                             | Amount leaving the Sending Account. Must be greater than zero (except when archiving).                                                                           |
| Receiving Account    | string  | Yes                                                                             | The Bank or Credit Card account funds arrive in. Must differ from the Sending Account.                                                                           |
| Receiving Currency   | string  | Read-only                                                                       | Populated automatically from the selected Receiving Account.                                                                                                     |
| Receiving amount     | decimal | Yes                                                                             | Equals Sending amount on a same-currency transfer. Otherwise auto-calculated from Exchange Rate, or entered directly to back-calculate it.                       |
| Exchange Rate        | decimal | Auto-populated, editable                                                        | Fetched based on the two account currencies and the Posting Date. Locked to 1 when both accounts share a currency.                                               |
| Calculate Gain/Loss  | boolean | Shown only when currencies differ                                               | On (default) posts the residual between each leg's independent system-rate valuation as Realized Gain/Loss. Off anchors the transfer to one side's rate instead. |
| Bank Currency Anchor | enum    | Shown only when Calculate Gain/Loss is off and neither account is base currency | Chooses which account's exchange rate to trust; the other leg's rate is derived so both sides match. Defaults to Sending Account.                                |
| Memo                 | string  | No                                                                              | Free-text note for reference.                                                                                                                                    |

## Understand the GL impact

A same-currency transfer debits the Receiving Account and credits the Sending Account for the same amount, with no gain or loss line.

A different-currency transfer with Calculate Gain/Loss on values each leg independently. For example, with a USD base currency, a EUR sending account, a CAD receiving account, an EUR:USD rate of 1.1, and a CAD:USD rate of 0.72: sending €1,000 debits the CAD receiving account for CAD 1,500 (base $1,080) and credits the EUR sending account for €1,000 (base $1,100). DualEntry debits Realized Gain/Loss for the \$20 residual so the entry balances.

A different-currency transfer with Calculate Gain/Loss off anchors both legs to the same base-currency amount instead of two independent system-rate lookups, so no gain or loss line is created. For example, sending $730,000 from a USD account to an AUD account that actually receives A$1,038,433.53, with Bank Currency Anchor set to the Receiving Account, debits the AUD account and credits the USD account for \$730,000 (base) each, with no residual line.

## Verify

Open the transfer from the list; its detail view has its own **Overview**, **GL Impact**, and **Activity** tabs. A bank transfer is complete once it shows a status of Posted, its **GL Impact** tab shows the expected debit to the Receiving Account and credit to the Sending Account, and, on a cross-currency transfer, whether a Realized Gain/Loss line appears matches what you chose under **Calculate Gain/Loss**. Its **Activity** tab records the save and any approval events against the person who took them.

## Good to know

* **Finding a transfer**: the list splits into **Overview**, **Draft**, **Archived**, and **For Approval** tabs by status. A transfer you saved as a draft or sent for approval won't appear on Overview until it posts.
* **Wire fees**: if your bank deducts a fee from the amount received, still enter the full amount sent and received in the transfer, and record the fee as a separate transaction, such as a Direct Expense. This keeps the transfer reconcilable against your bank statement.
* **Multi-day transfers**: when Posting Date differs from Transaction Date, the funds sat in a currency position across a rate change, so confirm the entered rate matches what your bank actually used before turning Calculate Gain/Loss off. That control is meant for atomic, same-day conversions.
* **Matched transfers**: once a transfer has been matched to an imported bank-feed transaction in [Bank Match](../close-management/bank-match/index), its company and its Sending or Receiving Account can no longer be changed.
* **Approval routing**: an approval policy for bank transfers can be configured to trigger based on the transfer's amount, currency, memo, or date, the same condition types available on other approval-routed records.
* **Period locks**: bank transfers are governed by the company's Other GL period lock. Saving or editing one is blocked once the posting date falls on or before that lock date, except for archiving a transfer that's still in Draft.

## Troubleshooting

| What you see                                                  | What to do                                                                                                                                                                                        |
| ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Sending or Receiving Account is missing from the dropdown     | Only Bank or Credit Card accounts on the selected company appear, and each side excludes whatever account is already selected on the other. Add or reactivate the account first if it's inactive. |
| Save is blocked with a locked-period error                    | The transfer's Posting Date falls on or before the company's Other GL lock date. Change the date to an open period, or unlock the period first.                                                   |
| Editing the account or amount is rejected on a saved transfer | The transfer has been matched to an imported bank-feed transaction. Unmatch it in Bank Match before changing its company or accounts.                                                             |
| The transfer posted immediately when you expected a review    | No active approval policy matched it. Check the conditions on your bank transfer approval policy.                                                                                                 |

## Related reading

* [Journal Entries: Reference](./journal-entries)
* [How to Connect Bank Accounts](../bank-connections)
* [How to Reconcile Balance-Sheet Accounts](../close-management/reconciliation)
* [How to Configure Approval Workflows](../../platform-configuration/approval-workflows)
* [How to Lock and Unlock Accounting Periods](../close-management/period-locking)
* [Multi-Currency Reporting](../../reporting-analytics/multi-currency-reporting)
