# TeamWorks 様 確認事項（第11回）

**作成: 2026-10-02 / 作成者: DFA Robotics**

第10回へのご回答、ありがとうございました。いただいた内容をもとに実装を進めております。
本書は、その中で生じた確認事項とお願いをまとめたものです。**以前の確認事項を開かなくても、本書だけでご回答いただけます。**
各設問には選択肢（A / B / C …）を付けておりますので、**記号だけでご回答いただければ結構です**（補足が必要なものは設問の中に書いております）。
これまでの設問のうち、本書に載っていないものはご回答不要です。

特にお急ぎいただきたいのは **1章（完了率）** と **3章（制御盤・セキュリティのエラー）** です。

# 1. 清掃の完了率・清掃結果

### P-1. 訂正後の `clean_task_reports.clean_ratio` は、どの値になりますでしょうか

`clean_ratio` 列は「計算式が誤っているので、訂正後に回答する」と伺いました。
サマリの完了率は、清掃1回ごとに「`clean_area` ÷ `task_area` × 100（100を超えたら100、小数第2位以下切り捨て）」を求め、その平均を取ると伺っております。当方の当期（進行中の週・月）の集計も、いまはこの式で計算しております。

| 選択肢 | 内容 |
|---|---|
| A | 訂正後の `clean_ratio` は、上の1回ごとの式の値と一致する（サマリと同じ値） |
| B | 別の式になる（式をお教えください） |
| C | Pudu Cloud の値をそのまま入れる |

あわせて、**訂正の時期の目安**と、**すでに入っている行も直すか**をお教えください。

### P-2. 完了率の式について（ご相談）

`clean_area` は同じ場所を複数回清掃した面積の総和と伺いました。そのため面積の比は100を超えることがあり、上限の100で切られます。
受領したCSV（189行）では **129行（68.3%）が100%** になり、対象面積のうち実際に清掃できた割合より高く出ているおそれがございます。
当方は当面、サマリと数字をそろえるために貴社の式に合わせておりますが、将来の方針を伺えますでしょうか。

| 選択肢 | 内容 |
|---|---|
| A | 今の式（1回ごとの面積の比・上限100）のままとする |
| B | 訂正後の `clean_ratio` が「対象面積のうち清掃できた割合」を表すなら、サマリの完了率をそちらに切り替える |
| C | その他（ご見解をお教えください） |

B の場合は、サマリと当期の式がずれないよう、当方も同じ時期に切り替えます。

### P-3. 「正常終了」なのに清掃面積が0の行は、どう読めばよいでしょうか

CSV の `status = 4`（清掃正常終了）161行のうち **22行が `clean_area = 0` / `clean_ratio = 0` / `clean_time = 0`** でした。うち20行は `ended_at` が **01:00:00 ちょうど** です。ステージングの1行（`task_area = 1377.39502`）も同じ形です。

| 選択肢 | 内容 |
|---|---|
| A | 実際に清掃せずに終わった（完了率0%として扱ってよい） |
| B | 面積・時間がまだ書かれていない（後で更新される） |
| C | Pudu Cloud から値を取得できなかった（値を当てにしない） |
| D | その他 |

当方はいま A として扱い、完了率0%（判定 ×）を表示しております。

### P-4. `clean_task_reports.status = 6` は何を表しますでしょうか

0〜5 の意味は伺いましたが、CSV に **`status = 6` が22行** ございました。
うち20行は日中に開始から数秒〜数分で終わり、`clean_area = 0` です（残り2行は `clean_ratio = 100`）。

| 選択肢 | 内容 |
|---|---|
| A | Pudu Cloud の値をそのまま入れている（Pudu 側の項目名・意味をお教えください） |
| B | 貴社で付けている値（意味をお教えください） |

0〜6 以外に入りうる値があれば、あわせてお教えください。当方はいま、6 を数字のまま表示しております。

### P-5. `task_area = 0` の行は、サマリでどう扱われますでしょうか

CSV・ステージングには該当する行がございませんが、1回ごとの式で割り算ができなくなるため伺います。

| 選択肢 | 内容 |
|---|---|
| A | 集計から除く（完了率の分子にも分母にも入れない） |
| B | 0% として数える |
| C | 100% として数える |
| D | `task_area = 0` の行は入らない |

当方はいま A として扱っております。

# 2. サマリの数え方

### P-6. サマリの3つの率の分子・分母をお教えください

`launch_count` は「清掃タスクを開始できた回数（正常終了の回数ではない）」と伺いました。`task_count` は本清掃の予定の回数と理解しております。

| 列 | A | B | C |
|---|---|---|---|
| `operation_ratio`（稼働率） | 正常終了（`status = 4`）の回数 ÷ `task_count` | `clean_task_reports` の行がある回数 ÷ `task_count` | その他 |
| `launch_ratio`（出発成功率） | `launch_count` ÷ `task_count`（開始時刻の条件なし） | 予定時刻から一定時間内に開始したものだけを数える（何分以内か） | その他 |
| `error_ratio`（エラー発生率） | `error_count` ÷ `launch_count` | `error_count` ÷ `task_count` | その他 |

ご回答は「A / B / A」のように、上から順に3つの記号で結構です。

### P-7. `clean_timetable_histories` も読む必要がございますでしょうか

サマリの集計対象は「`clean_timetables` もしくは `clean_timetable_histories` の `precheck` が0のデータ」と伺いました。当方はいま `clean_timetables` だけを読んでおります。

| 選択肢 | 内容 |
|---|---|
| A | `clean_timetables` だけで足りる（同じ予定は必ず `clean_timetables` にもある） |
| B | 予定が `clean_timetable_histories` にだけ残る場合がある（どんなときかをお教えください） |
| C | その他 |

B の場合は、`clean_task_reports.clean_timetable_id` がどちらの表の `id` を指すかもお教えください。

# 3. 制御盤・セキュリティのエラー

### P-8. 制御盤・セキュリティのエラーの入れ方について

`robot_error_reports` をエラー全般の表にし、`robot_id` と `serial_number` を NULL 可にする（両方 NULL＝セキュリティエラー、`robot_id` だけ NULL＝D-S制御盤エラー）と伺いました。
ご回答の記号は「A（制御盤が属するエリアのロボットの `robot_id` を入れる）」でしたが、本文は DDL を変更する内容でしたので、確認させてください。

| # | お伺いしたいこと | 選択肢 |
|---|---|---|
| a | 入れ方 | A. `robot_id` を NULL 可にする（本文のとおり）/ B. エリアのロボットの `robot_id` を入れる（記号のとおり） |
| b | DDL の変更をステージングに反映する時期 | 目安をお教えください |
| c | D-S制御盤エラーの行の `serial_number` | A. 制御盤の `controls.serial_number` を入れる / B. その他。※ `controls.serial_number` は `varchar(100)`、`robot_error_reports.serial_number` は `varchar(20)` です。入りきるか（列を広げるご予定か）もお教えください |
| d | セキュリティエラー（`robot_id`・`serial_number` とも NULL）が、どの施設・どの制御盤のものかの見分け方 | A. `facility_id`・`section_id` で見分ける（制御盤はエリアから引く）/ B. 列を足す / C. その他 |

### P-9. 制御盤・セキュリティのエラーは、サマリの `error_count` に入りますでしょうか

「`clean_timetable_id` が NULL のエラー行は `error_count` に含まない」「制御盤のエラーは `error_count` に含む」と伺いました。
制御盤・セキュリティのエラー行の `clean_timetable_id` が NULL ですと、この2つが両立いたしません。

| 選択肢 | 内容 |
|---|---|
| A | 制御盤・セキュリティのエラー行にも `clean_timetable_id` を入れる（本清掃・事前確認のどちらの予定の `id` かもお教えください） |
| B | 制御盤・セキュリティのエラーは、`clean_timetable_id` が NULL でも数える |
| C | 制御盤・セキュリティのエラーは数えない |

### P-10. `control_error_histories` と `robot_error_reports` のどちらを正とすればよいでしょうか

`control_error_histories` は今後も書くと伺いました。同じ制御盤のエラーが `robot_error_reports` にも入りますと、画面に二重に出たり、対応状況（`status` / `comment` / `responded_at` / `resolved_at`）の更新先が2つになったりいたします。

| 選択肢 | 内容 |
|---|---|
| A | `robot_error_reports` を正とする（D-Security のアラートも対応状況の更新もこちら。`control_error_histories` は読まない） |
| B | `control_error_histories` を正とする（制御盤・セキュリティの行は `robot_error_reports` からは読まない） |
| C | 両方を使う（使い分けをお教えください） |

あわせて、同じ1件のエラーが両方の表に1行ずつ入るのかをお教えください。

# 4. 時刻・ステージング・アカウント

### P-11. 本番DBのタイムゾーンも、ステージングと同じ設定になりますでしょうか

ステージングは、既定のタイムゾーンを Asia/Tokyo（`@@system_time_zone = JST`）に直し、時刻の列に JST の値を書いていると伺いました。

| 選択肢 | 内容 |
|---|---|
| A | 本番DBも同じ |
| B | 違う（どう違うかをお教えください） |
| C | 未定 |

### P-12. タイムゾーン変更後の「データの再登録」の範囲をお教えください

ずれていたのは `control_reports.reported_at` と `robot_error_reports.created_at`（いずれも UTC で書かれていた）と理解しております。
当方はアプリ側で時刻を補正しておりませんので、UTC のまま残る行があるかを確認させてください。

| 選択肢 | 内容 |
|---|---|
| A | 全テーブルの既存の行を JST に直した |
| B | 一部のテーブルだけ直した（どのテーブルかをお教えください） |
| C | これから書く行だけ JST になる（既存の行はそのまま） |

### P-13. 4カラムの更新に使うアカウントについて

`robot_error_reports` / `control_error_histories` の4カラム（`status` / `comment` / `responded_at` / `resolved_at`）を画面から更新する機能を作っております。4カラム以外には書き込みません。
当方が接続に使っているアカウントで `SHOW GRANTS` を実行したところ、2テーブルの UPDATE 権限も表示されました。更新では `WHERE error_id = ?` で行を指定しますので、その列の SELECT 権限も必要になります。

| 選択肢 | 内容 |
|---|---|
| A | 今のアカウント（全テーブルの SELECT ＋ 2テーブルの UPDATE）で更新してよい |
| B | 更新は別のアカウントで行ってほしい（そのアカウントに `error_id`、`control_error_histories` は `id` の SELECT 権限があるかもお教えください） |

### P-14. お願い: ステージングの入れ替えの事前のご連絡

ステージングはデータの入れ替えがありうると伺いました。当方はステージングで上記4カラムの更新を検証いたします。
**データの入れ替え、接続先・アカウントの変更の際は、前日までにお知らせいただけますと助かります。** その間は検証を控えます。
あわせて、10/5 中に投入いただく予定の0行のテーブル（`clean_schedules` / `clean_timetables` など）も、投入が終わりましたら一言いただけますと幸いです。

ご回答: **承知 / 難しい**

# 5. 軽い確認

### P-15. `customers` は、屋号と法人のどちらの単位になりますでしょうか

画面には「グループ → 顧客 → 店舗」の絞り込みがございます。`customers` はいま法人名（株式会社ドン・キホーテ）で入っており、当方はこの単位のまま表示しております。

| 選択肢 | 内容 |
|---|---|
| A | 屋号の単位に変える（ドン・キホーテ / MEGAドン・キホーテ / アピタ / ピアゴ …） |
| B | 法人の単位で確定 |
| C | 未定（結論の時期の目安をお教えください） |

A の場合は、屋号を持たない店舗が `customers` にどう入るか（`customer_name` に何を入れるか）もお教えください。

### P-16. 区域別の内訳は、どこから読めますでしょうか

「1回の清掃の中の区域別（売り場・通路・レジ前など）の内訳」について「できる。sections 単位」とご回答いただきました。
当方は「清掃エリア（`sections` の1行）＝ロボット1台」とし、すでに清掃エリアごとの完了率を出しております。

| 選択肢 | 内容 |
|---|---|
| A | `sections` 単位の結果（＝今の清掃エリアごとの結果）のこと。それより細かい内訳は無い |
| B | 1つの清掃エリアの中の、さらに細かい内訳が取れる（テーブル名・列名をお教えください） |

### P-17. 制御盤の報告間隔の「0」は何を表しますでしょうか

報告間隔は「0〜3599（秒）で、制御盤ごとに変える」と伺いました。テーブル定義書の `link_schedules.intervals` は「1〜3599」です。通信が途絶えたかどうかの判断に関わるため伺います。

| 選択肢 | 内容 |
|---|---|
| A | 0 は「その時間帯は報告しない」 |
| B | 0 は入らない（1〜3599 が正しい） |
| C | その他 |

**以上です。ご確認のほど、よろしくお願いいたします。**
