commit cf58824 病院：職員の動き方を持ち場ごとの型と用事の表にした・ほかの階の職員を3つに分けた・清掃と警備の人を足した（依頼157 の前）

diff --git a/tools/hospital_sim/README.md b/tools/hospital_sim/README.md
index ec540a5..7c26407 100644
--- a/tools/hospital_sim/README.md
+++ b/tools/hospital_sim/README.md
@@ -70,3 +70,11 @@ Unity 依頼134 で、外来の混む時間は裏口の道で廊下の問題が
 
 エイイチの指摘（搬送ロボットは部屋の中にも入っていく前提）で、フロアの形を h1（`../hospital_layouts/hospital_h1.json`）に替えた。積む所・届け先は扉の前ではなく、部屋の中の台の前になり、道は部屋の中の分だけ延びる（緑 21→29m・青 86→100m・青の裏口 153→177m・赤 109→119m）。人が歩いて運ぶときも同じ台から台まで歩く。h1 は裏口の道（blue_back）も同じファイルに持つので、h0b は使わない。
 `export_unity_params.py` は、4つの道（`routes_all`）と、1台が全部の道を回すときの便の時刻表（`day_schedule.trips_all`）も書き出す。
+
+## 職員の動き方を持ち場ごとの型にした（2026-11-12）
+
+依頼155 の記録で、職員が全員同じ決まり（1人が1時間に1回、同じ役割の持ち場からくじ引きで行き先を選ぶ）で科をまたいで動き、ロボットの問題の相手の約6割が職員だった。エイイチと決めて、`people_flow.staff_moves` を持ち場ごとの型（1 持ち場の中だけ／2 決まった相手先と行き来／3 患者に付いて動く／4 フロアを回る）と用事の表に替えた。型2 の頻度は新しく決めず、試算の便と人が運ぶ回につなぐ。
+- `hospital_sim.py` は人が歩いて運んだ回を `walk_log` に記録する（記録だけで、結果は変わらない）。`export_unity_params.py` はロボット1台のときの時刻表を `day_schedule.staff_walks_all` に書き出す
+- `people_flow.elevator_traffic` のほかの階の職員を、運ぶ人・通り抜ける人・用事で来る医師に分けた（3：5：2。仮置き）
+- `people_flow.cleaning_security` を足した（清掃の人2人・警備の人2人。仮置き）
+- 分け方と用事の台帳は iCloud の `hospital/staff_classification.md`
diff --git a/tools/hospital_sim/assumptions.json b/tools/hospital_sim/assumptions.json
index c95627c..03cfe4e 100644
--- a/tools/hospital_sim/assumptions.json
+++ b/tools/hospital_sim/assumptions.json
@@ -1052,23 +1052,169 @@
     "basis": "仮置き",
     "source": "hospital_staff（病院全体）× 日中にいる割合 0.75 のうち、この階の仕事の分を持ち場に割り当てた。医師は診察室1つに1人と、救急・内視鏡・化学療法・生理検査。看護師は医療法の外来の標準（外来患者30人に1人。この階の外来・化学療法・救急で約430人→15人以上）を下回らないように持ち場に置いた（33人。病院全体の日中約500人の約7%）。薬剤師は薬剤部が病院全体の調剤をするので多く置いた（日中約36人のうち、病棟に出ている分を除いた20人。医療法の外来の処方せん75枚に1人も満たす）。臨床検査技師は日中約43人のうち、病理・細菌など別の階を除いた27人。事務職員は日中約115人のうち、受付・会計・医事の38人。外来化学療法は施設基準『専任の医師・看護師または薬剤師が常時1人以上』を満たす",
     "n": null,
-    "updated": "2026-11-10",
+    "updated": "2026-11-12",
     "range": [
      0.7,
      1.3
     ],
-    "note": "合計 141人。役割の当てはめ：看護業務補助者は看護師、診療放射線技師は検査技師、事務職員は事務の access を使う"
+    "note": "合計 141人。役割の当てはめ：看護業務補助者は看護師、診療放射線技師は検査技師、事務職員は事務の access を使う。2026-11-12：動き方は持ち場ごとに staff_moves の型で決める。診療放射線技師は、入れる所は検査技師の access を使うが、動き方は別（X線室の中だけ）"
    },
    "staff_moves": {
     "value": {
-     "持ち場の中": "いつも",
-     "職員の廊下を通る（1人あたり）": "1時間に1回",
-     "中待合へ患者を呼びに出る（看護師）": "診察1回ごと",
-     "ふだんの行き先": "持ち場の所だけ。付き添い・通り抜けのために『入る』にした所（化学療法・生理検査・救急の処置の場所・X線室など）へは、ふだんの行き来では行かない"
+     "型": {
+      "1": "持ち場の中だけ（部屋から出ない）",
+      "2": "決まった相手先と行き来（用事と行き先が決まっている）",
+      "3": "患者に付いて動く（中待合へ呼びに出る・検査へ付き添う。依頼154 までの動きのまま）",
+      "4": "フロアを回る・通り抜ける"
+     },
+     "持ち場ごと": [
+      {
+       "no": 1,
+       "role": "医師",
+       "post": "内科の診察室・ほかの外来の診察室",
+       "n": 13,
+       "type": 1
+      },
+      {
+       "no": 2,
+       "role": "医師",
+       "post": "内視鏡室・外来化学療法室・生理検査の検査室",
+       "n": 4,
+       "type": 1
+      },
+      {
+       "no": 3,
+       "role": "医師",
+       "post": "救急室",
+       "n": 2,
+       "type": 1
+      },
+      {
+       "no": 4,
+       "role": "看護師",
+       "post": "内科（中待合・診察室）・ほかの外来（中待合・診察室）",
+       "n": 14,
+       "type": 3,
+       "errand": "診察1回ごとに中待合へ患者を呼びに出る。処置・検査室、内視鏡室へ付き添う（案A）"
+      },
+      {
+       "no": 5,
+       "role": "看護師",
+       "post": "ほかの外来の処置・検査室、内視鏡室・回復室",
+       "n": 6,
+       "type": 1
+      },
+      {
+       "no": 6,
+       "role": "看護師",
+       "post": "内科の処置室",
+       "n": 4,
+       "type": 2,
+       "errand": "青の便ごとに1人が処置室の中の台でロボットに積む（load_s）。部屋から出ない"
+      },
+      {
+       "no": 7,
+       "role": "看護師",
+       "post": "外来化学療法室",
+       "n": 5,
+       "type": 2,
+       "errand": "赤の便が着くたびに1人が受付の台で受け取る（pickup_wait_s のあと unload_s）。部屋から出ない"
+      },
+      {
+       "no": 8,
+       "role": "看護師",
+       "post": "救急室",
+       "n": 4,
+       "type": 2,
+       "errand": "緑の便ごとに1人が救急室の中の台でロボットに積む（load_s）。部屋から出ない"
+      },
+      {
+       "no": 9,
+       "role": "看護業務補助者",
+       "post": "内科の処置室・器材室、救急室",
+       "n": 2,
+       "type": 2,
+       "errand": "ロボットが運ばない依頼を歩いて運ぶ。時刻と道は staff_walks_all（試算の決まり：至急の依頼が出たとき、その出発地に空いているロボットがいなければ人が運ぶ）。積む所で受け取り、届け先で渡し（staff_handoff_s）、持ち場へ戻る。薬剤部と中央検査室には入らず、払い出し口・検体受付の扉の所で受け渡す。2人のうち手の空いている方が行く"
+      },
+      {
+       "no": 10,
+       "role": "薬剤師",
+       "post": "薬剤部",
+       "n": 14,
+       "type": 1,
+       "errand": "赤の便ごとに1人が払い出し台でロボットに積む（load_s）。人が運ぶ回は払い出し口で渡す"
+      },
+      {
+       "no": 11,
+       "role": "薬剤師",
+       "post": "薬剤部の無菌調製室",
+       "n": 4,
+       "type": 1
+      },
+      {
+       "no": 12,
+       "role": "薬剤師",
+       "post": "お薬の窓口の内側",
+       "n": 2,
+       "type": 1
+      },
+      {
+       "no": 13,
+       "role": "臨床検査技師",
+       "post": "中央検査室",
+       "n": 15,
+       "type": 1,
+       "errand": "緑・青の便が着くたびに1人が検体受付の台で受け取る（pickup_wait_s のあと unload_s）。人が運ぶ回は検体受付で受け取る"
+      },
+      {
+       "no": 14,
+       "role": "臨床検査技師",
+       "post": "生理検査の検査室",
+       "n": 8,
+       "type": 1
+      },
+      {
+       "no": 15,
+       "role": "臨床検査技師",
+       "post": "内科の処置室（採血）",
+       "n": 4,
+       "type": 1
+      },
+      {
+       "no": 16,
+       "role": "診療放射線技師",
+       "post": "X線室",
+       "n": 2,
+       "type": 1
+      },
+      {
+       "no": 17,
+       "role": "事務職員",
+       "post": "総合受付・会計・各科の受付",
+       "n": 16,
+       "type": 1
+      },
+      {
+       "no": 18,
+       "role": "事務職員",
+       "post": "医事・事務",
+       "n": 20,
+       "type": 1
+      },
+      {
+       "no": 19,
+       "role": "事務職員",
+       "post": "正面玄関の案内",
+       "n": 2,
+       "type": 4,
+       "errand": "正面玄関と総合受付の間を歩く（1人あたり1時間に2回・仮置き）。ふだんは正面玄関に立つ"
+      }
+     ],
+     "やめたこと": "依頼147〜155 の『持ち場から動く』（1人が1時間に1回、同じ役割の持ち場からくじ引きで行き先を選ぶ）は全部やめる"
     },
-    "what": "職員が持ち場から動く頻度と、ふだんの行き先",
+    "what": "職員の動き方：持ち場ごとの型と用事",
     "basis": "仮置き",
-    "source": "根拠なし。職員の廊下の人の数は、これと依頼134 の職員通路の間隔（平均60秒）が近くなるか見て確かめる",
+    "source": "2026-11-12 エイイチ了承（分け方の表と用事の表。台帳は iCloud の hospital/staff_classification.md）。依頼155 の記録で、職員が全員同じ決まり（1時間に1回・くじ引き）で科をまたいで動き、ロボットの問題の相手の約6割が職員だったため。型2 の頻度は新しく決めず、試算の便と人が運ぶ回につないだ。慈恵医大柏病院の発表（DFA Robotics。https://prtimes.jp/main/html/rd/p/000000111.000028572.html）：導入前は看護師・看護補助者が運び、看護師は補助者に電話で頼んでいた。薬剤部→外来化学療法室は補助員。外来の看護師・補助者が1日に何回運ぶかの公開の数字は見つからなかった",
     "n": null,
     "updated": "2026-11-12"
    },
@@ -1150,19 +1296,56 @@
       "per_hour": 30
      },
      "ほかの階の職員（エレベーター⇔職員の持ち場。大廊下を通る）": {
-      "per_hour": 20
+      "per_hour": 20,
+      "split": {
+       "運ぶ人": {
+        "share": 0.3,
+        "what": "病棟の検体を検査部へ出す・薬剤部へ薬を取りに来る。エレベーター⇔検査部の検体受付／薬剤部の払い出し口（半々）。部屋には入らず扉の所で受け渡す（1〜2分）"
+       },
+       "通り抜ける人": {
+        "share": 0.5,
+        "what": "出勤・昼・帰り・ほかの棟へ。エレベーター⇔正面玄関（大廊下を通る）"
+       },
+       "用事で来る医師": {
+        "share": 0.2,
+        "what": "救急・内視鏡・検査へ呼ばれて来る。エレベーター⇔救急の処置の場所／内視鏡室／生理検査の検査室。5〜15分いて戻る"
+       }
+      }
      }
     },
     "what": "エレベーターからこの階を通る人（1時間あたり。日中）",
     "basis": "仮置き",
-    "source": "根拠なし。ほかの階との行き来がなく、大廊下を通る人がいなかったため足した。面会の時間帯は多くの病院の『13時から』に合わせた",
+    "source": "根拠なし。ほかの階との行き来がなく、大廊下を通る人がいなかったため足した。面会の時間帯は多くの病院の『13時から』に合わせた。2026-11-12：ほかの階の職員を3つに分けた（割合 3：5：2 は根拠なしの仮置き。エイイチ了承）。依頼155 までは全員が持ち場に2〜3分立って戻るだけだった",
     "n": null,
-    "updated": "2026-11-11",
+    "updated": "2026-11-12",
     "range": [
      0.5,
      1.5
     ]
    },
+   "cleaning_security": {
+    "value": {
+     "清掃の人": {
+      "n": 2,
+      "what": "7:30〜8:00 に外来の大廊下と待合を清掃する（清掃のカートを押して歩く。人が歩く速さの半分）。8:00 までに終える。日中はトイレ3か所（西・東・化学療法）の見回りとごみ集めを1日3回（10:00・13:00・15:30 ごろ。1か所5〜10分）。それ以外は場面にいない",
+      "access": "外来の患者と化学療法の患者の入れる所に入れる（座らない）",
+      "cart_m": {
+       "w": 0.6,
+       "d": 1.0
+      }
+     },
+     "警備の人": {
+      "n": 2,
+      "what": "1人は 8:00〜16:00 に正面玄関に立つ。もう1人は1時間に1回、外来の大廊下を端から端まで歩いて見回り、玄関へ戻る",
+      "access": "外来の患者の入れる所に入れる（座らない）"
+     }
+    },
+    "what": "清掃の人・警備の人（職員141人とは別）",
+    "basis": "仮置き",
+    "source": "2026-11-12 エイイチ：清掃や警備の人も入れる。加古川中央市民病院（600床）の清掃業務委託仕様書（https://www.kakohp.jp/wp-content/uploads/02_76_setumeisyo.pdf）：外来部門と通路は外来の受付が始まる 8:00 までに清掃を終える・外来の廊下 1回/日・共用トイレ 3〜8回/日（表が崩れていて回数は確かでない）・清掃用カートを使う。同病院の警備業務仕様書（https://www.kakohp.jp/wp-content/uploads/03_jigyosya_193_ojfs851vglk_siyousyo3.pdf）：立つ人は 8〜11時が最多、院内の見回りの回数は書かれていない。見回り1時間に1回は市川市急病診療所の警備業務仕様書（https://www.city.ichikawa.lg.jp/common/pub01/file/0000485676.pdf）。人数（2人ずつ）・トイレ1日3回・カートの大きさは根拠なし",
+    "n": null,
+    "updated": "2026-11-12"
+   },
    "unity_only_147": {
     "value": "依頼147 で Unity が決めた値（開いた上の端は下の端の2倍、救急の滞在の分け方、化学療法の患者の行き先の順、職員の持ち場の当て方、職員が動く間とどまる時間）",
     "what": "Unity だけの値",
diff --git a/tools/hospital_sim/export_unity_params.py b/tools/hospital_sim/export_unity_params.py
index 252248a..50ba11e 100644
--- a/tools/hospital_sim/export_unity_params.py
+++ b/tools/hospital_sim/export_unity_params.py
@@ -30,8 +30,13 @@ def day_schedule(A):
                 out["plans"][plan][str(sp)].append([{"depart": t["depart_s"], "from": t["from"]} for t in d.trip_log if t["route"] == "blue"])
                 out.setdefault("trips_all", {}).setdefault(plan, {}).setdefault(str(sp), []).append(
                     [{"route": t["route"], "depart": t["depart_s"], "from": t["from"]} for t in d.trip_log])
+                out.setdefault("staff_walks_all", {}).setdefault(plan, {}).setdefault(str(sp), []).append(
+                    [{"route": t["route"], "depart": t["depart_s"], "from": t["from"], "to": t["to"]} for t in d.walk_log])
     out["trips_all_what"] = ("1台のロボットが緑・青・赤の全部を回すときの便の時刻表（h3 から）。plan × 速さ × 種。"
                              "route は green/blue/red、from は積む所。道は routes_all を使う")
+    out["staff_walks_all_what"] = ("ロボット1台のとき、人（看護業務補助者）が歩いて運ぶ回の時刻表（試算の決まり：至急の依頼が出たとき、"
+                                   "その出発地に空いているロボットがいなければ人が運ぶ）。plan × 速さ × 種。depart は 7:30 からの秒。"
+                                   "from で受け取り、to へ歩いて渡し、持ち場へ戻る。2026-11-12 職員の用事の表（people_flow.staff_moves）で使う")
     return out
 
 
diff --git a/tools/hospital_sim/hospital_sim.py b/tools/hospital_sim/hospital_sim.py
index 7f35061..c1b8789 100644
--- a/tools/hospital_sim/hospital_sim.py
+++ b/tools/hospital_sim/hospital_sim.py
@@ -126,6 +126,7 @@ class Day:
             self.L = json.loads((HERE / "../hospital_layouts/hospital_h0b.json").read_text(encoding="utf-8"))
         self.back_hours = [(hm(a) - self.day0, hm(b) - self.day0) for a, b in self.r.get("back_door_hours", [])]
         self.trip_log = []  # ロボットの便（Unity に渡す時刻表）
+        self.walk_log = []  # 人が歩いて運んだ回（Unity に渡す時刻表。記録だけで、結果は変えない）
 
     def robot_from(self, k, t):
         """ロボットが積む所。青だけ、決め方により裏口になる。人が歩くときはいつも表（routes の from_point）"""
@@ -169,6 +170,8 @@ class Day:
         d = self.route_dist(k)
         v = self.c["staff_speed"]
         extra = self.c["staff_extra_s"]
+        self.walk_log.append({"route": k, "depart_s": round(self.env.now, 1), "from": self.routes[k]["from_point"],
+                              "to": self.routes[k]["to_point"], "items": len(items)})
         yield self.env.timeout(d / v + extra + self.c["staff_handoff_s"])
         for q in items:
             self.finish(q, "staff")
