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

# 精算額の計算を解説

> Waffo の精算額を 1 行ずつ再現するための解説：4 つのクリアリングステップ、小数 2 桁と 6 桁の精度設定、通貨の組み合わせごとに使われる通貨ペアと端数処理ルール、手数料の下限・上限の適用方法、Return Fee とは何か、そして精算期間がマイナスになると支払いが発生しない理由。

このページは、**精算額をご自身で再現しようとして**計算が当社のものと一致しない場合のためのものです。
ボトムアップで説明します：1 件の取引、4 つのステップ、そしてお客様の通貨の組み合わせに適用される端数処理と通貨ペアです。

レポートレベルの視点 — どの列がどこから来るのか、どうエクスポートするのか、ファイルが見当たらない理由 — については
[精算レポートとエクスポート](/docs/ja/support/settlement-reports-faq) を参照してください。資金が動く日付については
[精算サイクルとカレンダー](/docs/ja/support/settlement-cycle-faq) を、着金する残高については
[残高とアカウント履歴](/docs/ja/support/balance-and-account-history-faq) を参照してください。

## Waffo は注文金額から精算金額までどう計算するのですか？

すべての取引は、この順序で同じ 4 つのステップを通ります。

| ステップ | 何が起きるか | 結果 |
| - | - | - |
| 1 | **クリアリング金額** — 注文金額が精算通貨に換算されます | `Order Amount (Settlement Currency)` |
| 2 | **税の内税控除** — 取引税（VAT および/または源泉徴収税）が計算され、クリアリング金額から控除されます | `Tax Amount`（レポートの列名は、どの税であっても `Tax Amount` です） |
| 3 | **手数料の内税控除** — 処理手数料が計算され、クリアリング金額から控除されます | `Fee Amount` |
| 4 | **正味精算額** — 残った金額 | `Settlement Amount` |

```
Settlement Amount = Clearing amount − tax deducted − fee deducted
```

照合の際に重要になる、この順序の性質が 2 つあります。

* **税と手数料は内税（注文金額から控除）であり、上乗せではありません。** 税の計算と手数料の計算の基礎はいずれも
  取引された注文金額であり、もう一方を差し引いた後の金額ではありません。複利的に重ねられることはありません。
* **クリアリング金額が先に作られ、その後で税と手数料がそれぞれ独自の通貨ペアで計算されます。** そのため、第三の通貨で
  請求される手数料は、すでに換算された精算額から導かれるのではありません — 後述のケース表を参照してください。

## 私の精算はどの小数精度を使いますか？変更できますか？

`Settlement Decimal Place` は、契約開始時に加盟店プロファイルに設定されます。取りうる値は 2 つ — **小数 2 桁**または
**小数 6 桁** — で、**後から変更することはできません**。

| 値 | 明細レポートの手数料・税・クリアリング金額 | 手数料の端数処理 | Settlement Amount |
| - | - | - | - |
| 小数 2 桁 | 小数 2 桁 | **切り上げ**（`ROUNDUP2`） | 小数 2 桁 |
| 小数 6 桁 | 小数 6 桁、ゼロ埋め | 小数 6 桁で**四捨五入** | 明細ファイルでは小数 6 桁、バッチレベルでは小数 2 桁 |

設定にかかわらず：

* **為替レートは常に小数 8 桁**で、レートが短い場合はゼロ埋めされます。
* **精算サマリーの数値は常に小数 2 桁です。** 資金は小数 2 桁で動きます。

小数 6 桁の設定の場合、明細行の合計とバッチ金額はセント単位で一致します。6 桁の合計と 2 桁のバッチ金額の差分は、
黙って切り捨てられるのではなく、明示的に追跡されるためです。

```
6-decimal total = 2-decimal batch amount + residual
```

小数 2 桁の設定の場合、各行は合計される前にすでに小数 2 桁に丸められているため、少額取引で 6 桁計算との相対的な差が最も大きくなります —
これが 6 桁のオプションが存在する理由です。

## 私の取引にはどの通貨ペアとどの端数処理ルールが適用されますか？

3 つの通貨が関係します：**注文通貨**、契約で請求される**手数料通貨**、そして**精算通貨**です。どのペアが使われ、
何回の換算が発生するかは、この 3 つのうちどれが等しいかだけで決まります。

**小数 2 桁**のアカウントに適用される、顧客向けの端数処理ルールは以下のとおりです。

| ルール | 意味 |
| - | - |
| `ROUND2` | 小数 2 桁に四捨五入 |
| `ROUNDUP2` | 小数 2 桁に**切り上げ** |
| `ROUNDDOWN2` | 小数 2 桁に**切り捨て** |

**小数 6 桁**のアカウントでは、手数料（および固定のチャージバック手数料・失敗手数料）は切り上げではなく
**小数 6 桁で四捨五入**されます — 切り上げのルールは、小数 2 桁の数値で徴収不足が生じるのを防ぐために存在し、
6 桁では代わりに差分が追跡されます。以下のケース表で `ROUNDUP2` と書かれている箇所は、小数 6 桁のアカウントでは
「小数 6 桁で四捨五入」と読み替えてください。

### ケース A — 注文通貨 = 手数料通貨 = 精算通貨

換算はありません。`Forex Currency Pair` と `Forex Rate` は空欄です。

| | 計算式 |
| - | - |
| `FeeAmount(SettlementCurrency)` | `ROUNDUP2(OrderAmount * feeRate)` |
| `FeeAmount` | `= FeeAmount(SettlementCurrency)` |
| `OrderAmount(SettlementCurrency)` | `= OrderAmount` |
| `PAYMENT` の Settlement Amount | `OrderAmount(SettlementCurrency) − FeeAmount(SettlementCurrency) − TaxAmount(SettlementCurrency)` |
| `REFUND` の Settlement Amount | `− OrderAmount(SettlementCurrency) − FeeAmount(SettlementCurrency) − TaxAmount(SettlementCurrency)` |
| `CHARGEBACK` の Settlement Amount | `− OrderAmount(SettlementCurrency) − FeeAmount(SettlementCurrency)` |

例示用の 2% のレート（提示レートではありません）を用いた計算例。すべての通貨は USD：

| 種別 | Order Amount | Fee Amount | Settlement Amount |
| - | - | - | - |
| `PAYMENT` | 100.00 | 2.00 = `ROUNDUP(100.00 × 2%, 2)` | 98.00 |
| `REFUND` | 50.00 | 1.00 = `ROUNDUP(50.00 × 2%, 2)` | −51.00 |
| `CHARGEBACK` | 50.00 | 10.00（当該案件について報告された金額） | −60.00 |

### ケース B — 注文通貨 = 手数料通貨、精算通貨が異なる

`Forex Currency Pair = SettlementCurrency/OrderCurrency`

| | 計算式 |
| - | - |
| `FeeAmount(SettlementCurrency)` | `ROUNDUP2(OrderAmount * feeRate / forexRate)` |
| `FeeAmount` | `ROUND2(OrderAmount * feeRate)` |
| `OrderAmount(SettlementCurrency)` | `ROUND2(OrderAmount / forexRate)` |
| `CHARGEBACK` の手数料換算 | `FeeAmount(SettlementCurrency) = ROUNDUP2(FeeAmount / forexRate)` |

例示用の 2% のレートを用いた計算例。注文と手数料は USD、精算は HKD、ペアは `HKD/USD` でレートは `0.12770000`：

| 種別 | Order Amount | Order Amount (Settlement Currency) | Fee Amount | Fee Amount (Settlement Currency) | Settlement Amount |
| - | - | - | - | - | - |
| `PAYMENT` | 100.00 | 783.09 = `ROUND(100 / 0.1277, 2)` | 2.00 | 15.67 = `ROUNDUP(100 × 2% / 0.1277, 2)` | 767.42 |
| `REFUND` | 50.00 | 391.54 | 1.00 | 7.84 | −399.38 |
| `CHARGEBACK` | 50.00 | 391.54 | 10.00 | 78.31 = `ROUNDUP(10 / 0.1277, 2)` | −469.85 |

### ケース C — 手数料通貨が異なり、注文通貨 = 精算通貨

`Forex Currency Pair = SettlementCurrency/FeeCurrency`

| | 計算式 |
| - | - |
| `FeeAmount(SettlementCurrency)` | `ROUNDUP2((OrderAmount * forexRate) * feeRate / forexRate)` |
| `FeeAmount` | `ROUND2((OrderAmount * forexRate) * feeRate)` |
| `OrderAmount(SettlementCurrency)` | `= OrderAmount` |

これが人を驚かせるケースです：注文通貨と精算通貨が等しいのに、`Forex Currency Pair` と `Forex Rate` に値が入ります。
**手数料**を換算する必要があったためです。ここでの `feeRate` には、最低額や固定の構成要素が含まれることもあります。

例示用の 2% のレートを用いた計算例。注文と精算は HKD、手数料は USD、ペアは `HKD/USD` でレートは `0.12770000`：

| 種別 | Order Amount | Fee Amount | Fee Amount (Settlement Currency) | Settlement Amount |
| - | - | - | - | - |
| `PAYMENT` | 100.00 | 0.26 = `ROUND(100 × 0.1277 × 2%, 2)` | 2.00 | 98.00 |
| `REFUND` | 50.00 | 0.13 | 1.00 | −51.00 |
| `CHARGEBACK` | 50.00 | 10.00 | 78.31 = `ROUNDUP(10.00 / 0.1277, 2)` | −128.31 |

### ケース D — 注文通貨が異なり、手数料通貨 = 精算通貨

`Forex Currency Pair = SettlementCurrency/OrderCurrency`

| | 計算式 |
| - | - |
| `FeeAmount(SettlementCurrency)` | `ROUNDUP2(OrderAmount / forexRate * feeRate)` |
| `FeeAmount` | `= FeeAmount(SettlementCurrency)` |
| `OrderAmount(SettlementCurrency)` | `ROUND2(OrderAmount / forexRate)` |
| `CHARGEBACK` の手数料換算 | なし — `FeeAmount(SettlementCurrency) = FeeAmount` |

例示用の 2% のレートを用いた計算例。注文は HKD、手数料と精算は USD、ペアは `USD/HKD` でレートは `7.83010000`：

| 種別 | Order Amount | Order Amount (Settlement Currency) | Fee Amount | Settlement Amount |
| - | - | - | - | - |
| `PAYMENT` | 100.00 | 12.77 = `ROUND(100 / 7.8301, 2)` | 0.26 | 12.51 |
| `REFUND` | 50.00 | 6.39 | 0.13 | −6.52 |
| `CHARGEBACK` | 50.00 | 6.39 | 10.00 | −16.39 |

### ケース E — 注文通貨、手数料通貨、精算通貨がすべて異なる

2 つのペアが必要です：クリアリング金額を作るための `SettlementCurrency/OrderCurrency` と、手数料を作るための
`SettlementCurrency/FeeCurrency` です。どちらも他方から導かれるものではありません。

```
Fee Amount (fee currency)        = round[ (OrderAmount / rateOrder * rateFee) * feeRate ]
Fee Amount (settlement currency) = round[ (OrderAmount / rateOrder * rateFee) * feeRate / rateFee ]
```

手数料通貨のレートが精算通貨の数値の分子と分母の両方に現れるため、**クリアリング金額に対する実効手数料率は契約上の料率と
等しいまま**になります — 二重換算によって目減りすることはありません。3 通貨のアカウントを照合するときに確認する価値があります：
`Fee Amount (Settlement Currency)` を `Order Amount (Settlement Currency)` で割ると、端数処理の影響を除いて契約上の料率になるはずです。

## 手数料が「料率 × 金額」と異なるのはなぜですか？（手数料の下限と上限）

契約には `minFee` と、`maxFee`（絶対額の上限）または `maxFeeRatio`（率による上限）のいずれかが含まれる場合があります。
**`maxFee` と `maxFeeRatio` が同じ手数料項目に同時に適用されることはありません。** チェックは決まった順序で実行され、
条件に該当したチェックは計算済みの手数料を調整するのではなく*置き換え*ます。

1. **まず `minFee` がチェックされます。** 手数料通貨での計算済み手数料が `minFee` を下回る場合、手数料通貨と精算通貨の両方の
   数値が `minFee` から**切り上げ**で再計算されます。再計算の入力には、すでに丸められた計算済み手数料ではなく、
   `minFee` の生の値が使われます。
2. **次に上限がチェックされます** — 契約に含まれているほうです。
   * `maxFee`：手数料通貨での計算済み手数料が `maxFee` を超える場合、両方の数値が `maxFee` から**切り捨て**で再計算されます。
   * `maxFeeRatio`：`控除される手数料（精算通貨） / クリアリング金額（精算通貨）` が `maxFeeRatio` を超える場合、
     両方の数値が注文金額 × `maxFeeRatio` として**切り捨て**で再計算されます。

つまり、下限に達した手数料は切り上げられ、上限に達した手数料は切り捨てられます。`minFee` は常に小数 2 桁以下で契約されるため、
適用時にそれ自体の端数処理は不要です。

少額取引における実務的な帰結：ある注文金額を下回ると、手数料は比例しなくなり `minFee` で一定になり、
取引額が小さくなるほど実効率が上がります。これが「この取引の手数料がおかしい」の最も多い原因です。

## Return Fee とは何ですか？どう計算されますか？

**Return Fee** は、返金時に*元の決済手数料*の一部をお客様に返還するものです。契約に含まれている場合にのみ存在し —
デフォルトは手数料の返還が**ない**返金です。[返金 FAQ](/docs/ja/support/refund-faq) で説明しています。

適用される場合、返金行の精算金額に**プラス**の構成要素として加わります。

```
Settlement Amount = − OrderAmount(SettlementCurrency)
                    − FeeAmount(SettlementCurrency)
                    − TaxAmount(SettlementCurrency)
                    + ReturnFeeAmount(SettlementCurrency)
```

どちらの数値も按分され、**異なる端数処理ルール**を使います。

```
ReturnFeeAmount                     = ROUNDDOWN2( RefundOrderAmount / OriginalOrderAmount × OriginalFeeAmount )
ReturnFeeAmount(SettlementCurrency) = ROUND2( ReturnFeeAmount / OriginalFeeAmount × OriginalFeeAmount(SettlementCurrency) )
```

2 つ目の式は注意して読んでください：精算通貨の返還額は、返金比率から再計算されるのではなく、**すでに切り捨てられた**
手数料通貨の返還額に対して按分されます。手数料が第三の通貨で請求された場合に、2 つの数値の整合性を保つのはこのためです。

例示用のレートを用いた計算例 — すべての通貨は USD、決済手数料 2%、返金手数料 0%、Return Fee は按分：

| 種別 | Order Amount | Fee Amount | Settlement Amount |
| - | - | - | - |
| `PAYMENT` | 100.00 | 2.00 | 98.00 |
| `REFUND` | 50.00 | **−1.00** = `ROUNDDOWN((50.00 / 100.00) × 2.00, 2)` | **−49.00** = `−50.00 + 1.00` |

注意すべき点が 2 つあります。

* 返金行の `Fee Amount` は**マイナス**です。これは請求ではなく Return Fee です — 返金行のマイナスの手数料は想定どおりであり、
  データの誤りではありません。
* 返金自体の手数料（`refund fee rate`）と Return Fee は別の契約項目です。返金には返金手数料が課され、*かつ*決済手数料の
  一部が返還されることがあります。

切り捨てであるため、返還額は単純な按分計算より 1 セント低くなることがあります。全額返金では比率が 1 になり、元の手数料が全額戻ります。

## 返金すると VAT は戻ってきますか？

**いいえ。** 返金で VAT が返還されることはありません。上記のクリアリングステップでは、返金取引について税のステップは
単純にスキップされます — 逆方向のレグには VAT の計算がないため、返還するものがありません。

これは決済手数料の話とは別です：決済手数料は契約に Return Fee が含まれていれば戻ることが*あります*が、税はどの契約設定でも戻りません。

## 手数料通貨は変更できますか？何を設定できますか？

手数料通貨は**精算通貨か注文通貨のいずれか**でなければならず、**同日中に変更することはできません** — リクエストは
検証で拒否されます。これが、上記の 5 つのケースが 1 件の取引について実務上網羅的である理由です。

## 精算期間の差引がマイナスになりました。どうなりますか？

その日は何も動かず、何も償却されません。

* 精算が開始されるのは、正味の精算金額が**ゼロより大きい**場合のみです。返金とチャージバックが決済を上回る期間では、
  支払いも資金移動も発生しません。
* マイナスの金額は**繰り越され、累積します**。次の期間、そのまた次の期間へと加算され、累計がプラスに転じた時点で、
  累積した金額全体が**1 回**の送金として精算されます。
* 期間をマイナスに押しやったのがチャージバックであっても、同じルールが適用されます：そのチャージバックが他のアカウントに
  請求されることはなく、単に後続の取引を待ちます。

具体的な形：連続する 4 回のマイナスの精算日とそれに続く 1 回のプラスの精算日は、4 回の送金と 1 回の修正を生むのではありません。
合計がプラスに転じた日に、5 回分の差引に対する 1 回の送金を生みます。5 つの精算レコードはすべてその 1 回の送金を指すため、
その送金をカバーするすべての期間へ遡って照合できます。

このため、**精算日に支払いがないことは必ずしもエラーではありません**。資金が届かないまま精算日が過ぎる他の理由については
[精算サイクルとカレンダー](/docs/ja/support/settlement-cycle-faq) を参照してください。

## バッチ合計が明細行の合計と一致しないのはなぜですか？

一致するはずです — ただし、正しいレベルで正しい端数処理を行った場合に限ります。サマリーは明細行を合計し、
**最後に 1 回だけ**丸めたものです。

```
Summary Settlement Amount = ROUND2( Σ Settlement Amount in the settlement details report )
```

先に各明細行を小数 2 桁に丸めてから合計すると、1 行あたり最大で半セント分、当社の数値からずれます。
完全な精度で合計し、最後に丸めてください。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.