キャストの取り分の式は2回書いてある、と白状しておく

白状しておくと、キャストの取り分を出す式は、うちのシステムの中に2回書いてある。 1つはSQLで、売上集計のバッチと店側の売上画面が使う。もう1つはPHPで、キャスト本人のスマホの売上タブが使う。 同じ式を2か所に持つのは気持ちが悪いのだけれど、片方は数千件をまとめて足す集計、片方は1件ずつ「何にいくらの率が掛かったか」を説明する画面で、求められる形が違う。 だから式を1つにする代わりに、2つが必ず同じ額を返すことをテストで縛るほうを選んだ。この話は後半で書く。

コース・オプション・指名料の3本立て

取り分は7月27日から3本立てになっている。コース料金にはコース料金のバック率、オプション料にはオプション料の率、指名料には指名料の率を掛けて、3つを足したものが本人の取り分だ。 それまで「指名」はオプションマスタの1項目で、指名料もオプション料と同じ率で分けていた。 でも指名料は「そのキャストだから」頂くお金で、店によっては全額本人に渡す。 オプションもコスプレのように本人の負担が大きいものは率を高くしたい。 そこで指名をオプションから独立させ、指名料の率とオプション料の率を別々に設定できるようにした。100にすればフルバックで、全額がそのキャストのものになる。 オプション用・指名料用の率を入れていない店ではコース料金の率と同じ扱いになるので、この変更で既存の集計値は1円も動いていない。 率は完了した瞬間に予約へ3つとも焼き付けるから、翌月にランクが上がっても先月の取り分はそのままだ。

キャスト本人アプリの売上タブ(2026年8月・スマホ幅)。上部に「あなたのバック率(個別設定)」としてコース料金65%・オプション料70%・指名料100%満額の3枚、この月の対象売上¥895,400とあなたの取り分¥584,703、「この月の取り分の内訳」にコース料金¥883,400×65%=¥574,203・オプション料¥5,000×70%=¥3,500・指名料¥7,000×100%=¥7,000。8/22(土)の明細に本指名の90分(コース料金¥19,650×65%=¥12,772・オプション料¥5,000×70%=¥3,500・本指名料¥4,000×100%=¥4,000で取り分¥20,272)とパネル指名の60分が並ぶ
キャスト本人の売上タブ。1件ごとに「何に何%が掛かって、いくらになったか」を3行で見せる(画面はデモデータです)。

画面の8/22の90分の行を見てほしい。コース料金は本来21,650円なのに、式に入っているのは19,650円だ。 2,000円の合言葉値引きが入った予約で、値引きはコース料金ぶんから先に引くことにしている。 指名料とオプション料は「その人だから」「それをやったから」の対価なので、値引きで削るならまずコース料金からだろう、という判断だ。 もう1つ、うちのデリヘル管理アプリの月の内訳カードは、率を月内で1種類しか使っていないときだけ「× 65%」と表示する。 月の途中でランクが上がった月や、3Pの2人目として入った仕事が混ざる月は、明細ごとに率が違って「金額 × 率 = 取り分」が合わない行が出るからで、そのときは金額と取り分だけを見せる。

値引きが大きすぎると店が赤字になる

3本立てにした日の夜、その日の実装をまとめてレビューしたら不具合が8件出た。そのうちの1件がこの式の穴だ。 値引きはお客様への請求額を減らすだけで、指名料とオプション料の数字は減らない。 すると、値引きがコース料金を食い切るほど大きいとき、指名料とオプション料の取り分だけで実際に頂いた額を超えてしまい、店の取り分がマイナスになる。 直し方は、3本の基準額の合計が「実際に受け取ったサービス料金」を超えないように上限を掛けること。 値引きはコース料金ぶんから縮め、それでも足りなければオプション料ぶん、最後に指名料ぶんの順に縮める。 翌日には、この式を機械で照合するテストも足した。人数(1人・3P・4P)、税込か税別か、値引きの有無、指名かフリーか、通常オプションと複数人オプションの組み合わせを全部作って、SQL版とPHP版の取り分が一致すること、3本の基準額が受取額をちょうど分け切ること、取り分の合計が頂いた額を超えないことを確かめる。 再点検の結果、現行の式に新しいバグは無かった。代わりに、本番からはどこからも呼ばれていない古い計算式が1つ残っているのが見つかった。追加キャストぶんの控除が入っていない式で、誰かが再利用したら取り分を過大に出す。これは消した。

宿題も残っている。複数プレイで、クーポンが主担当の受取ぶんを丸ごと超えるような値引きだと、2人目の基準額は縮まないので店側が赤になり得る。 実運用の値引き額では起きないのと、直すには「その値引きを誰の取り分から引くか」という料金ポリシーの判断が要るので、そのときのコミットの記録に書き残したまま止めてある。 明日は、率がどこからも引けないキャストがいるときに売上画面へ出す警告の話。