# 業務ルール — 請求計算

これは現場担当者の頭の中にあった暗黙のルール集。
PL/SQL のコードから抽出して Markdown に出した。

これがある状態と無い状態で、保守性は雲泥の差になる。
SI ベンダーに「仕様書を出してくれ」と頼んでも、出てきたのは
画面遷移図だけで、計算ルールはコードを追わないと分からなかった。

## 1. 小計

```
小計 = 数量 × 単価
```

## 2. 送料

- 小計が **10,000 円以上** → 送料無料
- それ以外:
  - 北海道・沖縄 → **1,500 円**
  - その他 → **800 円**

## 3. 会員割引

- 会員 (`is_member=1`) → 小計の **5% 引き**(円未満切り捨て)
- 非会員 → ゼロ

## 4. 大口割引

会員割引を **適用したあとの小計** が **30,000 円以上** のとき、
さらに **3% 引き**(円未満切り捨て)。

> 注意: 会員割引適用前の小計ではない。
> ここを間違えると 1 円ズレる(実際にあった事故)。

## 5. 消費税

```
税前合計 = 小計 - 会員割引 - 大口割引 + 送料
税額    = 税前合計 × 10%(円未満切り捨て)
```

## 6. 最終請求

```
最終請求 = 税前合計 + 税額
```

## 並行稼働で発見した「コードに書かれていなかったこと」

実プロジェクトではここに 20〜50 件のルールが追加されていく:

- 「会員でも、初回注文は会員割引を適用しない」(コードには無く運用で対応)
- 「沖縄は離島判定によって送料がさらに +500 円のことがある」(担当者の暗黙知)
- 「30,000 円ちょうどは大口割引を適用しない、超えたら適用」(担当者は「以上」と言うが
  実装は「超」だった、という食い違い)
- 「税は税抜表示の場合と税込表示の場合で違う」(画面ごとに分岐)

並行稼働で出力差分を取ると、これらが**全部炙り出される**。机上では一つも
見えなかったルールが、データの差分として可視化される。
