import { PRECHECK_MINUTES_BEFORE } from "@/lib/config";
import type { PrecheckItem } from "@/lib/types";
import { at } from "./_helpers";
// ★分数を直書きしないための別名(禁止事項3 / CLAUDE.md §7)★
// `PRECHECK_MINUTES_BEFORE`(`lib/config/index.ts`)は事前チェックの回次順(60分前 → 30分前)。
// 設定値が変われば fixtures のラベルも一緒に変わるのが正しい。
const [FIRST_ROUND_MINUTES, SECOND_ROUND_MINUTES] = PRECHECK_MINUTES_BEFORE;
/**
* アラート(事前チェック)のサンプルデータ
*
* docs/fixtures.md §3 のケースを網羅。
* - ★事前チェック異常(`severity: "precheck"`)だけ★(ユーザー判断 2026-10-29。アラートは出発失敗を出さない)。
* 旧 `launch_failed`(出発失敗)の id 4 / 8 は消した(★id は振り直さない★。4・8 は欠番)
* - 分数の3通り(60分前 / 30分前 / 20分前)
* - 3ステータスすべて(未解消 / 対応中 / 解消)
* - 解消済み: responded_at と resolved_at の両方あり
* - 対応中: responded_at のみ、resolved_at は null
* - 未解消: 両方 null
* - バッテリー低下(Pudu APIで取得可能と確認済み)
* - ★`main_run_succeeded`(親の本清掃が ◎○ か。D-171)は各行に明示する★ —
* ★true は id 6(「30分前までに充電完了、出発成功」)だけ★。id 7(完了率62% = △)・
* ほかは false。★対応状況・件数はこの値で変わらない★(画面がカードを控えめにするだけ)
*
* ★ responded_at / resolved_at の2カラム構成は D-013(TeamWorks回答待ち)★
* APIスキーマは2カラム前提で先行実装している。
*
* ★★`robot_status` は日本語のまま置いている(指示書S 2-4 の判断。D-105)★★
* 実DB経由では `robot_error_reports.error_type` の生値がそのまま入る(D-077 / D-098)ので、
* 英語識別子に寄せたほうが「実データに近い fixtures」にはなる。★それでも寄せない★:
* 1. ★`lib/fixtures/clean-logs.ts` の `status_1h` / `status_30m` が日本語のまま★で、
* `scripts/seed-local-db.ts` はその値を `error_type` に**そのまま**入れている。
* こちらだけ英語にすると、同じロボット状態が fixtures では英語・ローカルDBでは
* 日本語という ★逆向きの食い違い★ が生まれる(2ファイルを同時に変える話になり、
* それは `prechecks` 1本という本指示書の範囲を超える)。
* 2. ★`ROBOT_STATUS_TONES`(`lib/config/index.ts`)は日本語6値の完全一致で色を引く★ため、
* 英語に寄せると fixtures のデモがすべてグレーになる。指示書R(D-099 項2-2)も
* ★`Standby.` を `ROBOT_STATUS_TONES` に足さない★という同じ側の判断をしている。
* ★帰結★: `USE_FIXTURES` の true / false で `robot_status` の値が一部違う(★想定内★)。
* ★実データの `error_type` を受領したら(D-090 項18)まとめて寄せる★。
*/
export const prechecks: PrecheckItem[] = [
// --- 未解消(両方 null) ---
{
id: "1",
severity: "precheck",
precheck_minutes: FIRST_ROUND_MINUTES,
serial_number: "8111R5628060022",
facility_id: 2,
facility_name: "バリューマート北町店",
scheduled_at: at(0, "02:00"),
robot_status: "ハンドルアップ",
detected_at: at(0, "01:00"),
resolution_status: "unresolved",
responded_at: null,
resolved_at: null,
note: "30分前も未解消 → 出発失敗",
battery_level: 78,
main_run_succeeded: false,
},
{
id: "2",
severity: "precheck",
precheck_minutes: SECOND_ROUND_MINUTES,
serial_number: "8111R5628060077",
facility_id: 6,
facility_name: "バリューマート南丘駅前店",
scheduled_at: at(0, "02:30"),
robot_status: "オフライン",
detected_at: at(0, "02:00"),
resolution_status: "unresolved",
responded_at: null,
resolved_at: null,
note: "30分前もオフライン → 出発失敗",
battery_level: null,
main_run_succeeded: false,
},
{
// バッテリー低下のケース
id: "3",
severity: "precheck",
precheck_minutes: FIRST_ROUND_MINUTES,
serial_number: "8111R5628060133",
facility_id: 9,
facility_name: "メガバリューマート三ツ橋中央ショッピングセンター店",
scheduled_at: at(0, "02:30"),
robot_status: "充電中",
detected_at: at(0, "01:30"),
resolution_status: "unresolved",
responded_at: null,
resolved_at: null,
note: "バッテリー残量が低く、予定時刻までに充電完了しない可能性",
battery_level: 12,
main_run_succeeded: false,
},
{
// ★★境界値: 設定値(PRECHECK_MINUTES_BEFORE = 60 / 30)以外の任意の分数★★
// D-093 項2「20だったら20分前になります」を、型と画面が本当に表現できるかの検証。
// ★この1件だけは分数を設定値から取らない★ — 設定値と一致してしまうと
// 「設定値以外でも出るか」という確認そのものが成立しない(禁止事項3 の例外)。
id: "9",
severity: "precheck",
precheck_minutes: 20,
serial_number: "8111R5628060011",
facility_id: 1,
facility_name: "メガバリューマート中央本店",
scheduled_at: at(0, "02:00"),
robot_status: "オフライン",
detected_at: at(0, "01:40"),
resolution_status: "unresolved",
responded_at: null,
resolved_at: null,
note: null,
battery_level: null,
main_run_succeeded: false,
},
// --- 対応中(responded_at のみ) ---
// ★id 4(出発失敗)は 2026-10-29 に消した(アラートは出発失敗を出さない)★
{
id: "5",
severity: "precheck",
precheck_minutes: SECOND_ROUND_MINUTES,
serial_number: "8111R5628060011",
facility_id: 1,
facility_name: "メガバリューマート中央本店",
scheduled_at: at(1, "02:00"),
robot_status: "ハンドルアップ",
detected_at: at(1, "01:30"),
resolution_status: "in_progress",
responded_at: at(1, "09:02"),
resolved_at: null,
note: "店舗責任者にヒアリング中",
battery_level: 64,
main_run_succeeded: false,
},
// --- 解消(両方あり) ---
{
id: "6",
severity: "precheck",
precheck_minutes: FIRST_ROUND_MINUTES,
serial_number: "8111R5628060011",
facility_id: 1,
facility_name: "メガバリューマート中央本店",
scheduled_at: at(1, "02:00"),
robot_status: "充電中",
detected_at: at(1, "01:00"),
resolution_status: "resolved",
responded_at: at(1, "01:20"),
resolved_at: at(1, "01:45"),
note: "30分前までに充電完了、出発成功",
battery_level: 88,
// ★出発成功(親の本清掃は ◎○)→ true★(D-171)。画面ではカードが控えめになる
main_run_succeeded: true,
},
{
id: "7",
severity: "precheck",
precheck_minutes: FIRST_ROUND_MINUTES,
serial_number: "8111R5628060099",
facility_id: 7,
facility_name: "メガバリューマート緑野店",
scheduled_at: at(1, "01:30"),
robot_status: "緊急停止",
detected_at: at(1, "00:30"),
resolution_status: "resolved",
responded_at: at(1, "00:50"),
resolved_at: at(1, "01:10"),
note: "30分前に復旧、出発成功(完了率62%)",
battery_level: 71,
// ★出発はしたが完了率62% = △ → false★(D-171 の M3)
main_run_succeeded: false,
},
// ★id 8(出発失敗)は 2026-10-29 に消した(アラートは出発失敗を出さない)★
];
/**
* 該当0件の日(未解消が0件 = サマリカードが0表示になる)を確認したいときは、
* date_from / date_to に 2日前か3日前を指定してください(データは今日と昨日だけ。2日前の id 8 は 2026-10-29 に消した)。
*/