Newer
Older
client_dwatch / lib / fixtures / facilities.ts
import type { Facility } from "@/lib/types";

/**
 * 施設ロボットマスタのサンプルデータ
 *
 * ★ 実在の店舗名・住所・電話番号・担当者名は一切含めないこと(docs/fixtures.md)★
 *   ドン・キホーテ / MEGAドンキ → バリューマート / メガバリューマート
 *   ユニー / アピタ             → フレッシュタウン
 *   住所                        → 「東京都○○区1-2-3」形式の架空住所
 *   電話                        → 03-0000-0001 形式の連番
 *   メール                      → store001@example.com
 *
 * 網羅しているケース(docs/fixtures.md §7)
 *   - 契約フラグ4パターン(未設定 / D-Securityのみ / D-Watchのみ / 両方)
 *   - ロボット0台 / 1台 / 3台
 *   - メーカー・機種は PUDU CC1 のみ(P1 の対象機種。CLAUDE.md §1)。未対応機種の
 *     表示は `lib/facilities/__tests__/query.test.ts` の合成データで担保する(指示書N)
 *   - 任意項目が null
 *   - 複数都道府県
 *   - 11件以上(「もっと表示」の発火確認)
 *   - ★所属(屋号・ホールディングス)の4パターン★(指示書AK 段階5)
 *
 * ★★所属(`customer_id` / `customer_name` / `group_id` / `group_name`)★★(指示書AK 段階5)
 *   段階1 では `lib/fixtures/customers.ts` の `customerIdByFacilityId` という暫定マップに
 *   置いていたが、★段階5 で `Facility` が所属の列を持ったのでこちらへ移した★
 *   (マップは削除済み。同じ割り当てを2箇所に持たないため)。
 *
 *   ★`lib/fixtures/customers.ts` の `customers` と `lib/fixtures/groups.ts` の `groups` と
 *   必ず整合させること★(不変条件は `lib/fixtures/__tests__/masters.test.ts` が固定している):
 *     顧客1 メガバリューマート(HD1) … 施設 1 / 3 / 5 / 7 / 8 / 9   (6件)
 *     顧客2 バリューマート(HD1)     … 施設 2 / 4 / 6 / 11          (4件)
 *     顧客3 フレッシュタウン(HD2)   … 施設 10                      (1件)
 *     顧客4 フレッシュタウン湖畔(★ホールディングスなし★) … 施設 12 (1件)
 *
 *   ★`group_id` は API の形(`null` = 所属なし)で持つ★ — ★`0` を書かないこと★
 *   (0 → null の変換を知っているのは `lib/format/group-id.ts` だけ。★落とし穴3★)。
 */
export const facilities: Facility[] = [
  // --- 契約: 両方(D-Watch + D-Security) ---
  {
    id: 1,
    facility_name: "メガバリューマート中央本店",
    customer_id: 1,
    customer_name: "メガバリューマート",
    group_id: 1,
    group_name: "バリューホールディングス",
    prefecture: "東京都",
    address: "東京都○○区1-2-3",
    phone: "03-0000-0001",
    manager_name: "田中 一郎",
    charger_name: "小林 美咲",
    email: "store001@example.com",
    monitoring_enabled: true,
    d_security_enabled: true,
    robots: [
      { id: 101, maker: "PUDU", model: "CC1", serial_number: "8111R5628060011" },
    ],
  },
  {
    id: 3,
    facility_name: "メガバリューマート東口店",
    customer_id: 1,
    customer_name: "メガバリューマート",
    group_id: 1,
    group_name: "バリューホールディングス",
    prefecture: "東京都",
    address: "東京都○○区3-1-8",
    phone: "03-0000-0003",
    manager_name: "伊藤 大輔",
    charger_name: "中村 拓也",
    email: "store003@example.com",
    monitoring_enabled: true,
    d_security_enabled: true,
    robots: [
      { id: 103, maker: "PUDU", model: "CC1", serial_number: "8111R5628060033" },
    ],
  },
  {
    id: 4,
    facility_name: "バリューマート西通り店",
    customer_id: 2,
    customer_name: "バリューマート",
    group_id: 1,
    group_name: "バリューホールディングス",
    prefecture: "東京都",
    address: "東京都○○区4-5-6",
    phone: "03-0000-0004",
    manager_name: "加藤 隆",
    charger_name: "佐々木 優",
    email: "store004@example.com",
    monitoring_enabled: true,
    d_security_enabled: true,
    robots: [
      { id: 104, maker: "PUDU", model: "CC1", serial_number: "8111R5628060044" },
    ],
  },
  {
    id: 5,
    facility_name: "メガバリューマート港南総本店",
    customer_id: 1,
    customer_name: "メガバリューマート",
    group_id: 1,
    group_name: "バリューホールディングス",
    prefecture: "神奈川県",
    address: "神奈川県○○市○○区5-1-1",
    phone: "045-000-0005",
    manager_name: "松本 洋介",
    charger_name: "井上 真央",
    email: "store005@example.com",
    monitoring_enabled: true,
    d_security_enabled: true,
    robots: [
      { id: 105, maker: "PUDU", model: "CC1", serial_number: "8111R5628060055" },
      { id: 106, maker: "PUDU", model: "CC1", serial_number: "8111R5628060088" },
    ],
  },
  {
    // ロボット3台のケース
    id: 7,
    facility_name: "メガバリューマート緑野店",
    customer_id: 1,
    customer_name: "メガバリューマート",
    group_id: 1,
    group_name: "バリューホールディングス",
    prefecture: "東京都",
    address: "東京都○○市○○町7-2-1",
    phone: "042-000-0007",
    manager_name: "清水 健",
    charger_name: "森田 翼",
    email: "store007@example.com",
    monitoring_enabled: true,
    d_security_enabled: true,
    robots: [
      { id: 107, maker: "PUDU", model: "CC1", serial_number: "8111R5628060099" },
      { id: 108, maker: "PUDU", model: "CC1", serial_number: "8111R5628060100" },
      { id: 109, maker: "PUDU", model: "CC1", serial_number: "8111R5628060177" },
    ],
  },

  // --- 契約: D-Watchのみ(D-Securityメニューが出ないこと) ---
  {
    id: 2,
    facility_name: "バリューマート北町店",
    customer_id: 2,
    customer_name: "バリューマート",
    group_id: 1,
    group_name: "バリューホールディングス",
    prefecture: "東京都",
    address: "東京都○○区2-3-4",
    phone: "03-0000-0002",
    manager_name: "高橋 誠",
    charger_name: "渡辺 翔",
    email: "store002@example.com",
    monitoring_enabled: true,
    d_security_enabled: false,
    robots: [
      { id: 102, maker: "PUDU", model: "CC1", serial_number: "8111R5628060022" },
    ],
  },
  {
    id: 6,
    facility_name: "バリューマート南丘駅前店",
    customer_id: 2,
    customer_name: "バリューマート",
    group_id: 1,
    group_name: "バリューホールディングス",
    prefecture: "東京都",
    address: "東京都○○市○○町6-7-8",
    phone: "042-000-0006",
    manager_name: "木村 達也",
    charger_name: "斎藤 愛",
    email: "store006@example.com",
    monitoring_enabled: true,
    d_security_enabled: false,
    robots: [
      { id: 110, maker: "PUDU", model: "CC1", serial_number: "8111R5628060077" },
    ],
  },
  {
    id: 8,
    facility_name: "メガバリューマート桜台店",
    customer_id: 1,
    customer_name: "メガバリューマート",
    group_id: 1,
    group_name: "バリューホールディングス",
    prefecture: "東京都",
    address: "東京都○○市○○町8-1-2",
    phone: "0422-00-0008",
    manager_name: "岡田 修",
    charger_name: "藤井 彩",
    email: "store008@example.com",
    monitoring_enabled: true,
    d_security_enabled: false,
    robots: [
      { id: 111, maker: "PUDU", model: "CC1", serial_number: "8111R5628060122" },
    ],
  },
  {
    // 施設名が長いケース(30文字程度)— 表示崩れ確認用
    id: 9,
    facility_name: "メガバリューマート三ツ橋中央ショッピングセンター店",
    customer_id: 1,
    customer_name: "メガバリューマート",
    group_id: 1,
    group_name: "バリューホールディングス",
    prefecture: "東京都",
    address: "東京都○○区9-9-9",
    phone: "03-0000-0009",
    manager_name: "池田 正",
    charger_name: "西村 舞",
    email: "store009@example.com",
    monitoring_enabled: true,
    d_security_enabled: false,
    robots: [
      { id: 112, maker: "PUDU", model: "CC1", serial_number: "8111R5628060133" },
    ],
  },
  {
    // 任意項目が null のケース(電話・メール・担当者なし)
    id: 10,
    facility_name: "フレッシュタウン大和店",
    customer_id: 3,
    customer_name: "フレッシュタウン",
    group_id: 2,
    group_name: "フレッシュリテイリング",
    prefecture: "奈良県",
    address: "奈良県○○市○○町10-1",
    phone: null,
    manager_name: null,
    charger_name: null,
    email: null,
    monitoring_enabled: true,
    d_security_enabled: false,
    robots: [
      { id: 113, maker: "PUDU", model: "CC1", serial_number: "8111R5628060144" },
    ],
  },

  // --- 契約: D-Securityのみ(D-Watchメニューが出ないこと) ---
  {
    id: 11,
    facility_name: "バリューマート川下店",
    customer_id: 2,
    customer_name: "バリューマート",
    group_id: 1,
    group_name: "バリューホールディングス",
    prefecture: "神奈川県",
    address: "神奈川県○○市○○区11-2-3",
    phone: "045-000-0011",
    manager_name: "村上 大地",
    charger_name: "原田 千秋",
    email: "store011@example.com",
    monitoring_enabled: false,
    d_security_enabled: true,
    robots: [
      { id: 114, maker: "PUDU", model: "CC1", serial_number: "8111R5628060155" },
    ],
  },

  // --- 契約: 未設定(どちらのメニューも出ないこと) ---
  {
    // ロボット0台のケース(施設は登録済みだが未設置)
    id: 12,
    facility_name: "フレッシュタウン湖畔店",
    customer_id: 4,
    customer_name: "フレッシュタウン湖畔",
    // ★ホールディングスなし★(DB の `customers.group_id = 0` に対応する API の形)
    group_id: null,
    group_name: null,
    prefecture: "三重県",
    address: "三重県○○市○○町12-4",
    phone: "059-000-0012",
    manager_name: "長谷川 亮",
    charger_name: null,
    email: "store012@example.com",
    monitoring_enabled: false,
    d_security_enabled: false,
    robots: [],
  },
];

/** 施設IDから施設名を引く(他fixtureからの参照用) */
export const facilityNameById = new Map(
  facilities.map((f) => [f.id, f.facility_name])
);