ランクを上げたら先月の取り分まで増えた日のこと

昨日の続き。ランクの率を月の途中で上げたら、先月ぶんの取り分まで一緒に増えてしまった話だ。 起きたことは単純で、7月26日までこのデリヘル管理システムは、取り分を集計するたびに「いまの率」を引いていた。 キャスト個別の率が無ければランクの率、という順で毎回見に行く。 だからランクを50%から70%に上げた瞬間、そのランクに居るキャストの完了済みの仕事は、何か月も前のものまで全部70%で計算され直す。 本人のスマホの売上タブも、店側の売上集計も、同じ式で同じように動く。 頑張ったから昇格させたのに、昇格させると過去の給与が変わる。これは率の設定を怖くて触れない仕組みだ。

完了の瞬間に、率を予約へ写しておく

直し方は、予約が「完了」になった瞬間の実効率を、その予約の行に書き込んでおくことにした。焼き付け、と自分では呼んでいる。 保存の直前に走る監視処理が、ステータスが完了で、まだ率が書かれていなければ、そのときの個別→ランクの順で引いた率を埋める。 以後の集計と表示は、予約に焼き付いた率をいちばん先に見る。ランクの率を変えても、完了済みの行には別の数字が書いてあるから届かない。 テストではこう確かめている。50%のときに完了した仕事と、70%へ上げた後に完了した仕事が1件ずつ。サービス料は両方2万900円。 昇格後に集計を回しても、取り分は1万450円と1万4,630円の合計で2万5,080円になる。全件が70%に化けていたら2万9,260円だ。

ランク管理画面。上部にランク名・表示順・バック率(%・空欄=未設定)を入れる追加フォーム、その下にランク A(バック率 60%)・B(55%)・C(50%)の3行が並び、各行のバック率は入力欄でそのまま書き換えられる
ランクの率はこの欄で直接書き換える。ここを変えても、変える前に完了した仕事の取り分は動かない(画面はデモデータです)。

細かいところで2つ決めたことがある。ひとつは、完了済みの予約を後から保存し直しても焼き付けを上書きしないこと。 部屋番号を直すだけで率が最新に化けたら意味が無い。もうひとつは、完了時に率がどこにも無ければ空のまま置くこと。 空の行は集計側が従来どおり現在の率へ落ちるので、率を後から入れれば計算に乗る。 昨日書いた「バック率未設定」の黄色い帯は、この空の行を数えている。

焼き付ける項目は、あとから3つ増えた

最初に焼き付けたのはコース料金の率だけだった。翌日にオプション料と指名料の率が独立したので、その2つも同じ扱いにした。 3人で入る予約の2人目・3人目は主担当とは別の表に居るので、そちらの行にも完了と同時に焼き付ける。 8月9日には「自走かどうか」も加えた。自走のキャストは交通費の実費が取り分に乗るのだけれど、本人が設定を切り替えたら確定済みの明細が動いてしまうからで、理屈は率と同じだ。 列を足すたびに「これも完了時点で固めるべきか」を考える癖がついた。答えはだいたい「固める」になる。

列を足した日より前に完了していた予約は、当然どれも空だった。そのまま置くと、その期間だけは昇格で過去が動く。 なので既存の完了予約に現在の率を一括で焼き付けてから、日次・週次・月次の集計行を作り直すコマンドを用意して1回流した。 何度実行しても焼き付け済みの行には触らないので、怖がらずに流せる。 キャストのスマホには「金額は完了時のバック率(未記録のお仕事は現在のバック率)で計算しています」という注記を1行入れてあって、これがこの仕組みの全部を説明している。

明日は集計そのものの話。完了もキャンセルも翌日以降に起きるので、日次集計を毎回3日ぶん巻き戻して作り直している件を書く。