手数料は、料金の外に置く
設定画面にしては、注意書きが長いと思う。「カード決済そのものは店舗の決済端末で行ってください」まで書いてある。 カードを扱わないシステムに、なぜカードの設定があるのか。今日はその話を書いておく。
扱うのは決済ではなく、上乗せの計算
9月17日に足したのは、事務所設定の「お支払い方法(カード払い)」だ。受け付けるかどうかのチェックと、手数料の率が1つ。率は0から50%の整数で、既定は15%。 ONにすると、予約ごとに現金かカードかを選べるようになる。選ぶのはオペレーターでもいいし、お会計の前にキャストが自分の画面で切り替えてもいい。 カード決済の端末をつなぐ機能はない。このデリヘル管理システムがやるのは、店が決めた率で手数料を計算して、予約に記録することだけだ。
迷ったのは、その手数料を予約の金額に足してしまうかどうかだった。足せば一番簡単で、画面の合計もそのまま請求額になる。 でも予約の金額は、売上を数える元であり、キャストの取り分を計算する基準でもある。手数料を混ぜると、売上も取り分も手数料のぶんだけ膨らむ。 カードを承ったからといって、キャストに渡す額が増えるのはおかしい。 だから手数料は予約の中に別の欄で持つことにした。お客様に案内する支払総額は「金額 + 手数料」で、これを返す関数を1つ置き、案内も集金額の表示もそこを通す。 売上の集計では手数料だけを別に足し上げ、売上の画面には「ほかにカード手数料 ¥◯◯(売上・取り分には含めません)」と出す。
手数料の欄を自分で書きに行く処理は作らなかった。予約の金額が書き換わる経路が多すぎるからだ。確定、編集、延長の承認、交通費の引き直し、他の媒体から取り込んだ予約の変換。 どれか1つで足し忘れれば、その予約だけ手数料が古いまま残る。なので予約を保存するたびに、支払い方法と金額から手数料を引き直す仕掛けをモデルの中に1つ置いた。 現金なら手数料は0で率も空、カードなら金額に率を掛けて切り捨て。金額を触る側は、手数料のことを何も知らなくていい。
率は、カードに切り替えた時点の店の設定を予約に書き込む。店が後で率を変えても、電話で15%と案内した予約が翌日16%になったりはしない。 現金に戻したときはその率を消し、次にカードへ変えたらそのときの率を使う。 完了した予約の支払い方法を変えられるのは管理者だけにしてある。お会計が済んだあとに数字が動く操作は、誰でもできる形にしたくなかった。
カード払いの予約は現金の集金にも数えない。キャストが預かるのは現金だけだからだ。ただ、途中でカードから現金に戻ったときに台帳をどう追いかけるかは、これだけで一段落あるので、日を改めて書く。