> **【注記】** TeamWorks 提供のテーブル定義書（全29テーブル）を `prisma/schema.prisma` 手書き作成（D-056）のために転記した記録です。3分割の1つです。
> **当時の記録であり、現行方針ではありません。** 定義書には誤記・廃止済み項目が含まれることが実DDL照合で判明しており、以後は実DDLを正とします（D-059）。
> 現在のスキーマの正は `prisma/schema.prisma`、経緯は `docs/decisions.md` と `docs/handoff.md` を参照してください。

# 異常・セキュリティ・清掃系 10テーブル 転記（担当: 11〜20番目）

出典: TeamWorks テーブル定義書（fileContent, 763行）のうち 262〜528行目。

---

## robot_error_reports（清掃ロボット異常報告）
役割: エリア/タイムテーブル毎の清掃ロボットの異常情報 新規追加 UI: 要(Request)
備考: なし

| # | 論理カラム名 | 物理カラム名 | データ型 | サイズ | 必須 | 初期値 | キー | 備考 |
|---|---|---|---|---|---|---|---|---|
| 1 | 管理ID | id | varchar | 50 | ○ | | pk | 管理ID, エラーIDのいずれかで一意性を確保できるのであれば, いずれかを削除する |
| 2 | 障害ID | error_id | varchar | 50 | ○ | | | |
| 3 | 施設ID | facility_id | unsigned bigint | | ○ | | fk | |
| 4 | エリアID | section_id | unsigned bigint | | ○ | | fk | |
| 5 | ロボットID | robot_id | unsigned bigint | | ○ | | fk | |
| 6 | タイムテーブルID | clean_timetable_id | unsigned bigint | | | | | 要確認. 清掃タイムテーブルに該当する情報がない場合, 登録しないでよいのか. |
| 7 | 製品(管理)番号 | serial_number | varchar | 50 | ○ | | | |
| 8 | 製品コード | product_code | varchar | 50 | | | | |
| 9 | 機器バージョン | hardware_version | varchar | 50 | | | | |
| 10 | ソフトウェアバージョン | software_version | varchar | 50 | | | | |
| 11 | OSバージョン | os_version | varchar | 50 | | | | |
| 12 | 障害レベル | error_level | varchar | 20 | ○ | | | |
| 13 | 障害種別 | error_type | varchar | 100 | ○ | | | |
| 14 | 障害詳細 | error_detail | text | | ○ | | | |
| 15 | 状態 | status | unsigned tinyint | | ○ | 0 | | 0: 未対応, 1:対応中, 2:対応済 |
| 16 | 備考 | comment | text | | | | | |
| 17 | 発生日時 | errored_at | datetime | | ○ | | | |
| 18 | 対応開始日時 | responsed_at | datetime | | | | | 状態を対応中(1)に変更した日時を格納する |
| 19 | 対応完了日時 | resolved_at | datetime | | | | | 状態を対応済(2)に変更した日時を格納する |
| 20 | 登録日時 | created_at | timestamp | | ○ | システム日付 | | |
| 21 | 更新日時 | updated_at | timestamp | | ○ | システム日付 | | |

インデックス:
| 名称 | タイプ | 対象カラム | 備考 |
|---|---|---|---|
| pk_robot_error_reports_id | primary key | id | もしくはid, report_id の2カラムで主キーを定義する. |
| fk_robot_error_reports_facility_id | forigne key | facility_id | |
| fk_robot_error_reports_section_id | forigne key | section_id | |
| fk_robot_error_reports_robot_id | forigne key | robot_id | |

---

## robot_instruct_histories（清掃ロボット指示履歴）
役割: エリア毎の清掃ロボットへの指示回数(履歴)。 UI: 不要
備考: 補足として次の一文が記載されている。「※当初D-S制御盤-清掃ロボットの関係でシステムが構築されていた為, 物理名をcontrol_robot_instruct_historiesとしていた」

| # | 論理カラム名 | 物理カラム名 | データ型 | サイズ | 必須 | 初期値 | キー | 備考 |
|---|---|---|---|---|---|---|---|---|
| 1 | 管理ID | id | unsigned bigint | | ○ | | pk | auto_increment |
| 2 | ロボットID | robot_id | unsigned bigint | | ○ | | fk | |
| 3 | 指示内容 | instruct | unsigned tinyint | | ○ | | idx | 1: 清掃開始, 3: 清掃一時停止, 4: 清掃キャンセル |
| 4 | 登録日時 | created_at | timestamp | | ○ | システム日付 | | |

インデックス:
| 名称 | タイプ | 対象カラム |
|---|---|---|
| pk_robot_instruct_histories_id | primary key | id |
| fk_robot_instruct_histories_robot_id | forigne key | robot_id |
| idx_robot_instruct_histories_instruct | index | instruct |

---

## control_reports（D-S制御盤正常稼働報告）
役割: D-S制御盤の正常稼働報告を管理する。 UI: 要(Request)
備考: なし

| # | 論理カラム名 | 物理カラム名 | データ型 | サイズ | 必須 | 初期値 | キー | 備考 |
|---|---|---|---|---|---|---|---|---|
| 1 | 管理ID | id | unsigned bigint | | ○ | | pk | auto_increment |
| 2 | 施設ID | facility_id | unsigned bigint | | ○ | | fk | 追加 |
| 3 | エリアID | section_id | unsigned bigint | | ○ | | fk | |
| 4 | 制御デバイスID | control_id | unsigned bigint | | ○ | | fk | |
| 5 | 製品(管理)番号 | sireal_number | varchar | 100 | ○ | | | |
| 6 | 報告日時 | reported_at | timestamp | | ○ | システム日付 | | |
| 7 | 登録日時 | created_at | timestamp | | ○ | システム日付 | | |
| 8 | 更新日時 | updated_at | timestamp | | ○ | システム日付 | | |

インデックス:
| 名称 | タイプ | 対象カラム |
|---|---|---|
| pk_control_reports_id | primary key | id |
| fk_control_reports_facility_id | forigne key | facility_id |
| fk_control_reports_section_id | forigne key | section_id |
| fk_control_reports_serial_number | forigne key | serial_number |

※定義書原文どおり。カラム5の物理名は「sireal_number」（serial ではなく sireal の綴り）で、インデックス4の対象カラムは「serial_number」と記載されており、綴りが一致していない（原文ママ）。

---

## control_error_histories（制御デバイス異常履歴）
役割: D-S制御盤の異常発生履歴を管理する。 UI: 不要 現時点では未使用. 清掃状態, 清掃状態履歴で確認できるため. テーブル名変更
備考: 上記の役割欄に「UI: 不要」「現時点では未使用」「テーブル名変更」の注記あり（原文ママ）。

| # | 論理カラム名 | 物理カラム名 | データ型 | サイズ | 必須 | 初期値 | キー | 備考 |
|---|---|---|---|---|---|---|---|---|
| 1 | 管理ID | id | unsigned bigint | | ○ | | pk | auto_increment |
| 2 | 施設ID | facility_id | unsigned bigint | | ○ | | fk | |
| 3 | エリアID | section_id | unsigned bigint | | ○ | | fk | |
| 4 | 制御デバイスID | control_id | unsigned bigint | | ○ | | fk | |
| 5 | 状態 | status | unsigned tinyint | | ○ | 0 | | 0: 未対応, 1: 対応中, 2:対応済 |
| 6 | 備考 | comment | text | | | | | |
| 7 | 発生日時 | occurred_at | datetime | | ○ | システム日付 | | |
| 8 | 対応開始日時 | responsed_at | datetime | | | | | 状態を対応中(1)に変更した日時を格納する |
| 9 | 対応完了日時 | resolved_at | datetime | | | | | 状態を対応済(2)に変更した日時を格納する |

インデックス:
| 名称 | タイプ | 対象カラム |
|---|---|---|
| pk_control_error_histories_id | primary key | id |
| fk_control_error_histories_facility_id | foreign key | facility_id |
| fk_control_error_histories_section_id | foreign key | section_id |
| fk_control_error_histories_control_id | foreign key | control_id |

---

## security_statuses（区画セキュリティ状態）
役割: エリアのセキュリティ状態を管理する. UI: 要
備考: なし

| # | 論理カラム名 | 物理カラム名 | データ型 | サイズ | 必須 | 初期値 | キー | 備考 |
|---|---|---|---|---|---|---|---|---|
| 1 | 管理ID | id | unsigned bigint | | ○ | | pk | auto_increment |
| 2 | 施設ID | facility_id | unsigned bigint | | ○ | | fk | |
| 3 | エリアID | section_id | unsigned bigint | | ○ | | fk | |
| 4 | 状態 | status | unsigned tinyint | | ○ | 1 | | 0: 無効(セキュリティOFF/ブレーク), 1: 有効(セキュリティON/メーク) |
| 5 | 報告日時 | reported_at | timestamp | | ○ | システム日付 | | テーブル更新時にシステム日付で更新する |
| 6 | 登録日時 | created_at | timestamp | | ○ | システム日付 | | |
| 7 | 更新日時 | updated_at | timestamp | | ○ | システム日付 | | テーブル更新時にシステム日付で更新する |

インデックス:
| 名称 | タイプ | 対象カラム |
|---|---|---|
| pk_security_statuses_id | primary key | id |
| fk_security_statuses_facility_id | forigne key | facility_id |
| fk_security_statuses_section_id | forigne key | section_id |

---

## security_status_histories（区画セキュリティ状態履歴）
役割: 制御デバイスの正常稼働報告を管理する。 UI: 不要.
備考: なし（ただし役割欄の文言について【矛盾・不明瞭】に記載）

| # | 論理カラム名 | 物理カラム名 | データ型 | サイズ | 必須 | 初期値 | キー | 備考 |
|---|---|---|---|---|---|---|---|---|
| 1 | 管理ID | id | unsigned bigint | | ○ | | pk | auto_increment |
| 2 | 施設ID | facility_id | unsigned bigint | | ○ | | fk | |
| 3 | エリアID | section_id | unsigned bigint | | ○ | | fk | |
| 4 | 状態 | status | unsigned tinyint | | ○ | | | 0: 無効(セキュリティOFF/ブレーク), 1: 有効(セキュリティON/メーク) |
| 5 | 報告日時 | reported_at | timestamp | | ○ | システム日付 | | |
| 6 | 登録日時 | created_at | timestamp | | ○ | システム日付 | | |

インデックス:
| 名称 | タイプ | 対象カラム |
|---|---|---|
| pk_2s_histories_id | primary key | id |
| fk_2s_facility_id | forigne key | facility_id |
| fk_2s_section_id | forigne key | section_id |

※インデックス名が他テーブルの命名規則（テーブル名を含む）と異なり「2s」という略称になっている（原文ママ）。

---

## clean_statuses（清掃状態）
役割: 清掃状態を管理する。 UI: 要(Request)
備考: なし

| # | 論理カラム名 | 物理カラム名 | データ型 | サイズ | 必須 | 初期値 | キー | 備考 |
|---|---|---|---|---|---|---|---|---|
| 1 | 管理ID | id | unsigned bigint | | ○ | | pk | auto_increment |
| 2 | 施設ID | facility_id | unsigned bigint | | ○ | | fk | 追加 |
| 3 | エリアID | section_id | unsigned bigint | | ○ | | fk | |
| 4 | タイムテーブルID | clean_timetable_id | unsigned bigint | | ○ | | fk | 追加 |
| 5 | 状態 | clean_status | unsigned tinyint | | ○ | 0 | | 0: 清掃前, 1: 清掃中, 2: 清掃終了(セキュリティ有効), -1: 清掃完了(セキュリティ無効) |
| 6 | 状態推移 | clean_status_trans | unsigned tinyint | | ○ | 0 | | 0: 清掃開始前, 1: 清掃指示, 2: 清掃中. 3: 清掃一時停止指示, 4: 清掃キャンセル指示, 8:清掃完了(正常), 9: 清掃完了(異常) |
| 7 | エラー | clean_error | unsigned tinyint | | ○ | 0 | | 0: 正常, 1: 異常(清掃未実施), 2: 異常(セキュリティ有効), 3: 異常(D-S制御盤異常), 4: 異常(清掃ロボット異常) |
| 8 | 清掃対象面積 | task_area | unsigned decimal | (12, 6) | ○ | 0 | | PUDU Cloud のclean task logから取得する(task_area), 追加 |
| 9 | 清掃実施面積 | clean_area | unsigned decimal | (12, 6) | ○ | 0 | | PUDU Cloud のclean task logから取得する(clean_area), 追加 |
| 10 | 清掃実施面積(百分率) | clean_ratio | unsigned tinyint | | ○ | 0 | | 清掃実施面積 / 清掃対象面積 で計算する. 100を超過する値が生成される場合もある. 小数点以下は四捨五入とする. |
| 11 | 清掃開始日時 | started_at | datetime | | | | | |
| 12 | 清掃終了日時 | ended_at | datetime | | | | | |
| 13 | 登録日時 | created_at | timestamp | | ○ | システム日付 | | |
| 14 | 更新日時 | updated_at | timestamp | | ○ | システム日付 | | |
| 15 | 削除日時 | deleted_at | timestamp | | | | | 不要 |

インデックス:
| 名称 | タイプ | 対象カラム |
|---|---|---|
| pk_clean_statuses_id | primary key | id |
| fk_clean_statuses_facility_id | foreign key | facility_id |
| fk_clean_statuses_section_id | foreign key | section_id |

※カラム5「状態(clean_status)」の型は unsigned tinyint だが、備考に -1（清掃完了(セキュリティ無効)）という負の値が記載されており、型と値の整合性が取れていない（原文ママ）。

---

## clean_status_histories（清掃状態履歴）
役割: 清掃結果履歴を管理する。 UI: 不要
備考: なし

| # | 論理カラム名 | 物理カラム名 | データ型 | サイズ | 必須 | 初期値 | キー | 備考 |
|---|---|---|---|---|---|---|---|---|
| 1 | 管理ID | id | unsigned bigint | | ○ | | uk | |
| 2 | 施設ID | facility_id | unsigned bigint | | ○ | | fk | |
| 3 | エリアID | section_id | unsigned bigint | | ○ | | fk | |
| 4 | タイムテーブルID | clean_timetable_id | unsigned bigint | | ○ | | fk | |
| 5 | 状態 | clean_status | unsigned tinyint | | ○ | 0 | | 2: 清掃終了(セキュリティ有効), -1: 清掃完了(セキュリティ無効) |
| 6 | 結果 | clean_error | unsigned tinyint | | ○ | 0 | | 0: 正常, 1: 異常(清掃未実施), 2: 異常(セキュリティ有効), 3: 異常(D-S制御盤異常), 4: 異常(清掃ロボット異常) |
| 7 | 清掃対象面積 | task_area | decimal | (12, 6) | ○ | 0 | | PUDU Cloud のclean task logから取得する(task_area), |
| 8 | 清掃実施面積 | clean_area | decimal | (12, 6) | ○ | 0 | | PUDU Cloud のclean task logから取得する(clean_area), |
| 9 | 清掃実施面積(百分率) | clean_ratio | unsigned tinyint | | ○ | 0 | | 清掃実施面積 / 清掃対象面積 で計算する. 100を超過する値が生成される場合もある. 小数点以下は四捨五入とする. |
| 10 | 清掃開始日時 | started_at | datetime | | ○ | | | 清掃スケジュールの清掃開始日時を格納する |
| 11 | 清掃終了日時 | ended_at | datetime | | ○ | | | 清掃スケジュールの清掃終了日時を格納する |
| 12 | 登録日時 | created_at | timestamp | | ○ | システム日付 | | |

インデックス:
| 名称 | タイプ | 対象カラム |
|---|---|---|
| uk_clean_status_histories_id | unique key | id |
| fk_clean_status_histories_facility_id | foreign key | facility_id |
| fk_clean_status_histories_section_id | foreign key | section_id |

※カラム1「id」のキー種別は他テーブルの「pk」ではなく「uk」（unique key）と記載されている（原文ママ）。カラム5の備考も clean_statuses と異なり「0/1」の説明がなく「2」「-1」のみが列挙されている（原文ママ）。

---

## clean_task_reports（清掃タスク報告）
役割: ロボット毎の清掃タスク報告情報を管理する。この情報を元に清掃状態情報を定期的に更新する. UI: 不要
備考: なし

| # | 論理カラム名 | 物理カラム名 | データ型 | サイズ | 必須 | 初期値 | キー | 備考 |
|---|---|---|---|---|---|---|---|---|
| 1 | レポートID | report_id | varchar | 20 | ○ | | pk | |
| 2 | 施設ID | facility_id | unsigned bigint | | ○ | | fk | |
| 3 | エリアID | section_id | unsigned bigint | | ○ | | fk | |
| 4 | ロボットID | robot_id | unsigned bigint | | ○ | | fk | 該当する清掃ロボットがあれば記録する, 無ければ記録しない. |
| 5 | タイムテーブルID | clean_timetable_id | unsigned bigint | | | | | 該当するロボットID, 情報の取得日時から該当する清掃タイムテーブル情報を引き当てる. |
| 6 | 製品(管理)番号 | serial_number | varchar | 20 | ○ | | | |
| 7 | 清掃結果 | status | unsigned tinyint | | ○ | 0 | | （備考欄の記載なし） |
| 8 | 清掃対象面積 | task_area | decimal | (12, 6) | ○ | 0 | | PUDU Cloud のclean task logから取得する(task_area), 追加 |
| 9 | 清掃実施面積 | clean_area | decimal | (12, 6) | ○ | 0 | | PUDU Cloud のclean task logから取得する(clean_area), 追加 |
| 10 | 清掃実施面積(百分率) | clean_ratio | unsigned tinyint | | ○ | 0 | | 清掃実施面積 / 清掃対象面積 で計算する. 100を超過する値が生成される場合もある. 小数点以下は四捨五入とする. |
| 11 | 清掃開始日時 | started_at | datetime | | ○ | | | |
| 12 | 清掃終了日時 | ended_at | datetime | | | | | |
| 13 | 清掃時間 | clean_time | unsigned int | | ○ | 0 | | |
| 14 | 登録日時 | created_at | timestamp | | ○ | システム日付 | | 清掃日を設定(Y-m-d 23:59:59) |
| 15 | 更新日時 | updated_at | timestamp | | ○ | システム日付 | | |

インデックス:
| 名称 | タイプ | 対象カラム |
|---|---|---|
| pk_clean_task_reports_report_id | primary key | report_id |
| fk_clean_task_reports_facility_id | foreign key | facility_id |
| fk_clean_task_reports_section_id | foreign key | section_id |
| fk_clean_task_reports_robot_id | foreign key | robot_id |

※カラム7「清掃結果(status)」は unsigned tinyint だが、他の status/state 系カラム（例: robot_error_reports.status 等）と異なり、備考欄に取りうる値の説明が一切記載されていない（原文ママ、「読み取れず」ではなく「定義書に記載なし」）。

---

## clean_schedules（清掃スケジュール）
役割: 区画毎の清掃スケジュールを管理する UI: 要
備考: なし

| # | 論理カラム名 | 物理カラム名 | データ型 | サイズ | 必須 | 初期値 | キー | 備考 |
|---|---|---|---|---|---|---|---|---|
| 1 | 管理ID | id | unsigned bigint | | ○ | | pk | auto increment |
| 2 | 施設ID | facility_id | unsigned bigint | | ○ | | fk | |
| 3 | エリアID | section_id | unsigned bigint | | ○ | | fk | |
| 4 | 曜日 | weeks | varchar | 7 | ○ | | | 清掃を行う曜日を1, 行わない曜日を0とする。日月火水木金土で設定する。 例) 日火木土に清掃を行う場合 1010101 |
| 5 | 開始時間 | start_time | varchar | 4 | ○ | | | 時分を格納する。0930や1245等 範囲は0000～2359 |
| 6 | 終了時間 | end_time | varchar | 4 | ○ | | | 時分を格納する。0930や1245等, 範囲は0000～2959(日跨ぎを想定) |
| 7 | 清掃開始日時 | started_at | datetime | | | | idx | 曜日, 開始時間から直近の清掃開始日時を生成し格納する |
| 8 | 清掃終了日時 | ended_at | datetime | | | | idx | 曜日, 開始時間から直近の清掃終了日時を生成し格納する |
| 9 | 契約 | contract | varchar | 10 | ○ | 0000000000 | | 各サービス毎にフラグとして機能する. D-Securityを1桁目, D-Watchを2桁目とし, 契約済(有効)なサービスを1とする. 例えばD-Security, D-Watchを契約している場合は次のように表現される. 例) 1100000000 |
| 10 | 無効フラグ | inactive | unsigned tinyint | | ○ | 0 | | 0: 有効, 1: 無効 |
| 11 | 登録日時 | created_at | timestamp | | ○ | システム日付 | | |
| 12 | 更新日時 | updated_at | timestamp | | ○ | システム日付 | | |
| 13 | 削除日時 | deleted_at | timestamp | | | | | |

インデックス:
| 名称 | タイプ | 対象カラム |
|---|---|---|
| pk_clean_schedules_id | primary key | id |
| fk_clean_schedules_facility_id | foreign key | facility_id |
| fk_clean_schedules_section_id | foreign key | section_id |

※カラム6「終了時間(end_time)」の備考は「範囲は0000～2959(日跨ぎを想定)」となっており、カラム5「開始時間」の範囲(0000～2359)と桁の意味が異なるように見える（原文ママ、意図不明）。

---

## 矛盾・不明瞭に見えた箇所（原文ママ、修正せず列挙）

1. **robot_error_reports** のインデックス1の備考「もしくはid, report_id の2カラムで主キーを定義する.」に出てくる `report_id` は、robot_error_reports のカラム一覧には存在しない（存在するのは `error_id` 等で、`report_id` は clean_task_reports のカラム名）。テーブルをまたいだ記述の可能性。
2. **control_reports** のカラム5の物理名は `sireal_number`（serial の綴りが sireal になっている）だが、インデックス4「fk_control_reports_serial_number」の対象カラムは `serial_number` と記載されており、両者の綴りが一致していない。
3. **control_error_histories** の役割欄に「現時点では未使用. 清掃状態, 清掃状態履歴で確認できるため. テーブル名変更」という注記があり、このテーブル自体が使われていない可能性を示唆している。
4. **security_status_histories** の役割欄の文章「制御デバイスの正常稼働報告を管理する。」は、論理テーブル名「区画セキュリティ状態履歴」（＝セキュリティ状態に関するテーブル）の内容と一致しておらず、control_reports の役割文言と酷似している（コピー&ペーストの可能性）。ユーザー指示の担当表でも16番は「制御デバイスの正常稼働報告」と記載されており、定義書の役割欄の文言と一致している。
5. **security_status_histories** のインデックス名が `pk_2s_histories_id` / `fk_2s_facility_id` / `fk_2s_section_id` となっており、他の全テーブルの命名規則（`pk_<table>_id` 等、テーブル名をフルで含む）と異なり `2s` という略称になっている。
6. **clean_statuses** / **clean_status_histories** のカラム「状態(clean_status)」は型が `unsigned tinyint` だが、備考に `-1: 清掃完了(セキュリティ無効)` という負の値が記載されており、unsigned 型と矛盾している。
7. 清掃対象面積(`task_area`)・清掃実施面積(`clean_area`) の型が、clean_statuses では `unsigned decimal`（unsigned 付き）、clean_status_histories と clean_task_reports では `decimal`（unsigned なし）と、同じ論理カラムでもテーブルによって型表記が異なる。
8. **clean_status_histories** のカラム1「id」のキー種別は `uk`（unique key）で、他テーブルの `pk`（primary key）と異なる。
9. **clean_task_reports** のカラム7「清掃結果(status)」には、他の状態系カラムと異なり備考欄に値の意味の説明が一切ない。
10. **clean_schedules** のカラム6「終了時間(end_time)」の備考「範囲は0000～2959(日跨ぎを想定)」は、カラム5「開始時間」の範囲(0000～2359)と数値の意味が揃っておらず、2959という値の根拠が不明瞭。
11. **robot_error_reports** と **control_error_histories** の「対応開始日時」カラムの物理名はいずれも `responsed_at` と記載されている（英単語としては respond の過去分詞は responded であり、綴りの誤りの可能性があるが、原文ママ転記）。

（型・サイズ・必須・初期値等で「読み取れず」に該当する箇所はありませんでした。全セルが判読可能でした。）
