import type { Schedule } from "@/lib/types";
/**
* スケジュールのサンプルデータ(Pudu Cloud由来。D-Watchは参照のみ)
*
* weekdays は「日月火水木金土」の7桁。清掃する曜日が 1。
* 毎日 = 1111111
* 月水金 = 0101010
* 平日のみ = 0111110
* 土日のみ = 1000001
*
* docs/fixtures.md §8 のケース
* - 曜日パターン(毎日 / 月水金 / 平日のみ / 土日のみ)
* - 有効・無効(active の true / false)
* - 日跨ぎ(23:30開始〜00:30終了)
*
* ★無効スケジュールは「連続日数カウント」の対象外★
* 判定ロジックの確認にも使うので、active=false のデータは消さないこと。
*
* ---------------------------------------------------------------------------
* ★D-050: 既定(当日)の schedule_progress を「正常」に保つための制約★
*
* `computeScheduleProgress`(lib/dashboard/aggregate.ts)の `planned` は
* 「その日の曜日に該当する active なスケジュールの総数」であり、**施設ごとの対応は見ない**
* (どの施設のログかは一切参照しない、フラットな件数カウント)。
*
* 一方 `lib/fixtures/clean-logs.ts` の当日分(daysBack=0 の boundaryCases 10施設10行 +
* ★結果待ちの pendingCases 1行(D-173)★)は実行日からの相対生成で、**曜日に関係なく毎日必ず11行**になる
* (_helpers.ts の `at()` 参照)。
*
* この2つを常に一致させる(=画面を開くたびに data.anomaly が出ないようにする)には、
* 「有効スケジュールの曜日該当件数」が**どの曜日であっても常に11件**になっている必要がある。
*
* 単純に全スケジュールを「毎日」にすると 月水金/平日のみ/土日のみ という
* パターンのバリエーション(§8で要求)が有効データとして残せなくなる。
* そこで、曜日パターンを持つ有効スケジュール同士を**互いに補完する組**にして
* 「どちらか片方は必ず1件該当する」形にしている。
*
* - id25(平日のみ = 0111110)+ id26(土日のみ = 1000001)
* 月〜金 と 土日 で全曜日を過不足なくカバーする補完ペア → 常に合計1件
* - id23(月水金 = 0101010)+ id30(日火木土 = 1010101、id23の反転)
* 月水金 と それ以外 で全曜日を過不足なくカバーする補完ペア → 常に合計1件
*
* 残りは「毎日(1111111)」の有効スケジュール9件(id21,22,27,28,29,31,32,33,34)。
* 補完ペア2組(各常に1件)+毎日9件 = どの曜日でも常に11件。
* ★id34 は D-173 で追加★(当日の結果待ちの行 施設11 を足して当日ログが11行になったため)。
*
* id24(施設6・無効)は元々の「無効スケジュール」デモとしてそのまま残している
* (active=false なのでこの合計には影響しない)。
*
* id31/32/33 は、当日ログ(施設9・10・12)に対応するスケジュールが元々
* 1件も存在しなかったため新規追加したもの(★制約:この件数調整のために
* lib/fixtures/clean-logs.ts 側は変更していない★)。
*
* 検証手順(docs/fixtures.md §12 参照):
* GET /api/dashboard (date省略・当日)→ planned=11, completed=9, anomaly無し
* (★D-173 で当日ログが11行になった。うち出発なし2行=施設12の出発失敗・施設11の結果待ち★)
* ---------------------------------------------------------------------------
*/
export const schedules: Schedule[] = [
{
id: 21,
serial_number: "8111R5628060011",
facility_id: 1,
facility_name: "メガバリューマート中央本店",
weekdays: "1111111",
weekdays_label: "毎日",
start_time: "02:00",
end_time: "03:00",
active: true,
},
{
id: 22,
serial_number: "8111R5628060022",
facility_id: 2,
facility_name: "バリューマート北町店",
weekdays: "1111111",
weekdays_label: "毎日",
start_time: "02:00",
end_time: "02:45",
active: true,
},
{
// ★エスカレーション判定の要のデータ★
// 月水金スケジュール。カレンダー日ではなくスケジュール存在日で連続を数える(D-026)
// ★D-050: id30 と曜日が補完し合うペア。id23 はそのまま「月水金」で変更していない★
id: 23,
serial_number: "8111R5628060044",
facility_id: 4,
facility_name: "バリューマート西通り店",
weekdays: "0101010",
weekdays_label: "月水金",
start_time: "03:00",
end_time: "03:45",
active: true,
},
{
// 無効スケジュール
id: 24,
serial_number: "8111R5628060077",
facility_id: 6,
facility_name: "バリューマート南丘駅前店",
weekdays: "1111111",
weekdays_label: "毎日",
start_time: "02:30",
end_time: "03:15",
active: false,
},
{
// 平日のみ
// ★D-050: id26(土日のみ)と補完ペア。月〜金+土日で全曜日を過不足なくカバー★
id: 25,
serial_number: "8111R5628060033",
facility_id: 3,
facility_name: "メガバリューマート東口店",
weekdays: "0111110",
weekdays_label: "平日のみ",
start_time: "01:30",
end_time: "02:15",
active: true,
},
{
// 土日のみ
// ★D-050: id25(平日のみ)と補完ペア★
id: 26,
serial_number: "8111R5628060122",
facility_id: 8,
facility_name: "メガバリューマート桜台店",
weekdays: "1000001",
weekdays_label: "土日のみ",
start_time: "02:00",
end_time: "02:40",
active: true,
},
{
// 日跨ぎ(23:30 → 00:30)
id: 27,
serial_number: "8111R5628060055",
facility_id: 5,
facility_name: "メガバリューマート港南総本店",
weekdays: "1111111",
weekdays_label: "毎日",
start_time: "23:30",
end_time: "00:30",
active: true,
},
{
// 1施設に複数ロボット(施設7は3台)
id: 28,
serial_number: "8111R5628060099",
facility_id: 7,
facility_name: "メガバリューマート緑野店",
weekdays: "1111111",
weekdays_label: "毎日",
start_time: "01:30",
end_time: "02:10",
active: true,
},
{
id: 29,
serial_number: "8111R5628060100",
facility_id: 7,
facility_name: "メガバリューマート緑野店",
weekdays: "1111111",
weekdays_label: "毎日",
start_time: "01:30",
end_time: "02:10",
active: true,
},
{
// 3台目は他の2台と違う曜日パターン、という「複数ロボットで別パターン」の
// デモを兼ねつつ、id23(月水金)の反転(日火木土)にして曜日補完ペアにしている
// (★D-050★。以前は id23 と同じ「月水金」だったが、それだと2つの
// 月水金スケジュールが同じ曜日に重複してカウントされ、曜日によって
// planned の合計が変動してしまうため変更した)
id: 30,
serial_number: "8111R5628060177",
facility_id: 7,
facility_name: "メガバリューマート緑野店",
weekdays: "1010101",
weekdays_label: "日火木土",
start_time: "02:00",
end_time: "02:50",
active: true,
},
{
// ★D-050で追加★ 当日ログ(boundaryCases)に施設9の行があるのに対応する
// スケジュールが1件も無かったため追加。毎日・有効。
id: 31,
serial_number: "8111R5628060133",
facility_id: 9,
facility_name: "メガバリューマート三ツ橋中央ショッピングセンター店",
weekdays: "1111111",
weekdays_label: "毎日",
start_time: "02:30",
end_time: "03:15",
active: true,
},
{
// ★D-050で追加★ 施設10も同様(対応するスケジュールが無かった)
id: 32,
serial_number: "8111R5628060144",
facility_id: 10,
facility_name: "フレッシュタウン大和店",
weekdays: "1111111",
weekdays_label: "毎日",
start_time: "03:00",
end_time: "03:40",
active: true,
},
{
// ★D-050で追加★ 施設12も同様(対応するスケジュールが無かった)
id: 33,
serial_number: "8111R5628060166",
facility_id: 12,
facility_name: "フレッシュタウン湖畔店",
weekdays: "1111111",
weekdays_label: "毎日",
start_time: "03:30",
end_time: "04:15",
active: true,
},
{
// ★D-173で追加★ 施設11(川下店)の今日の結果待ちの行(`lib/fixtures/clean-logs.ts` の `pendingCases`)に
// 対応するスケジュール。★当日の清掃ログが11行になったので、どの曜日でも11件にするため「毎日」で足した★(D-050 の不変条件)
id: 34,
serial_number: "8111R5628060155",
facility_id: 11,
facility_name: "バリューマート川下店",
weekdays: "1111111",
weekdays_label: "毎日",
start_time: "03:30",
end_time: "04:30",
active: true,
},
];