Appearance
機種台数変化バッチ
目的
新台入れ替えなどで、同一ホール・同一機種の台数が前日からどう変わったかを保存し、公開画面や管理画面から参照できるようにする。
テーブル定義の正本は custom-tables.dbml の db_daily_article_kishu_count_delta を参照する。この文書には DB スキーマ詳細を書かず、トリガーと処理内容を記載する。
トリガー
| トリガー | 実行内容 |
|---|---|
slot_kouryaku_daily_data_imported | 台別データのインポート・削除後に対象 hall×日付の台数変化を再計算する |
| 保守用バックフィル CLI | 必要性が確認できた場合だけ、指定期間の hall×日付を手動再計算する |
日次 Cron は機種別サマリを再計算するが、台数変化は更新しない。
処理内容
DailyArticleKishuSingleDaySummaryComputer が、機種別サマリ再計算と同じ流れで台数変化を算出する。
- 対象 hall×日付の機種別サマリを再計算する。
- 対象日の機種台数と、カレンダー前日の機種台数を比較する。
- 対象 hall×日付の台数変化行を全削除する。
- 台数に変化がある機種だけを登録する。
前後同数の機種は行を持たない。前日に当該 hall のサマリが存在しない場合は、比較母体が不完全なため台数変化を作らない。
判定ルール
| 状況 | 登録内容 |
|---|---|
| 既存機種の増減 | 当日台数 - 前日台数 |
| 新台 | 当日台数を正の値で登録 |
| 撤去 | 前日台数を負の値で登録 |
| 前後同数 | 登録しない |
| 前日ホール欠損 | 登録しない |
比較キーは hall と正規化後の機種名キーを使う。機種名の正規化は KishuNormalizer の処理に従う。
整合性ログ
再計算後、計算自体は中断せず、必要に応じてログを出す。
| reason | 意味 |
|---|---|
incomplete_data | 前日 hall のサマリが存在せず、台数変化を作らない |
hall_total_changed | 当日総台数と前日総台数が異なる |
delta_sum_mismatch | 総台数が不変なのに台数変化合計が 0 ではない |
invariant_break | 台数変化合計が総台数差分と一致しない |
管理画面
誤検知の修正用に、管理画面「設定 → 機種台数変化(前日比)」を用意している。
| 操作 | 内容 |
|---|---|
| 一覧 | hall / period_key / kishu / count_delta を確認する |
| 編集 | 台数変化の値を整数で修正する |
| 削除 | 変化なしに戻したい行や誤検知行を削除する |
台別データインポートまたは保守用バックフィル CLI で再計算すると、対象 hall×日付の手動修正は再計算結果で置き換わる。
保守用バックフィル CLI
現状、本番で過去期間バックフィルを定常的に実行する前提はない。集計ロジック修正やデータ不整合調査で必要性が確認できた場合だけ、機種別サマリバックフィル CLI を使って対象期間を再計算する。
下流
- 公開 UI: SC-015 機種台数変化一覧ショートコード
- 公開 UI: PUB-002 ヒートマップ詳細モーダル(台番セルの増台・減台背景色、Issue #2774)
- 管理画面:
core_src/Admin/kishu_count_delta/KishuCountDeltaAdminPage.php
参照ファイル
core_src/Service/daily_article_kishu_single_day_summary/DailyArticleKishuSingleDaySummaryComputer.phpcore_src/Model/Repository/daily_article_kishu_count_delta_repository/DailyArticleKishuCountDeltaRepository.phpcore_src/Admin/kishu_count_delta/KishuCountDeltaAdminPage.phpdocs/design/テーブル定義/custom-tables.dbml