コンテンツにスキップ

3画面パック ③ PM — 案件のかんばん

結論(3行)

  1. 列=領域、カード=案件 1 件。案件が進むと、カードが次の列へ動きます
  2. 🔴 警告は 2 つの条件でしか出しません。「決めて止めている案件」は鳴りません。ここがこの画面の肝です
  3. 画面を直しても意味がありません。直す場所は deal.csvactivity.csv です

この画面が答える問い:いま案件は何件あり、どこに居て、次に何をするのか。そして手が止まっているものはどれか


1. 画面の構成

flowchart TB
    H["ヘッダー<br>タイトル / 他の画面への行き来 / 判定日"] --> M["指標 3つ<br>進行中 / 停滞 / 型 n/総数"]
    M --> S["今週の主役<br>1件だけ選ぶ"]
    S --> B["板<br>領域の列 + 完了の列"]
    B --> C["カード = 案件1件"]
場所 何を出すか
ヘッダー 画面名、ポータルと SW への行き来、判定日の入力欄
指標(3 つ) ① 進行中の件数 ② 停滞の件数 ③ 型が「ある」数 / 全升目数(押すと SW へ)
今週の主役 進行中の案件から 1 件だけ選ぶ。選んだカードを板の上で強調する
領域ごとの列 + 右端に 完了の列
カード 案件 1 件

2. 列(何を列にするか)

  • 列は area.csv の領域を、ファイルに書いてある順に並べます
  • 右端に 完了 という列を 1 つ足します。ここには status終了 の案件が入ります
  • 列の見出しには 領域ID + 領域名 + 件数 を出します(例:A 受注まで / 3件
  • 案件が 0 件の列も、列自体は必ず出します(「ここには今、何も無い」が見えることに意味があります)

🔴 板に列が無い領域へ案件を入れないでください

列を持たない領域に案件が入ると、その案件は画面から黙って消えます。 生成器は、この状態を見つけたらエラーで止めて人に知らせます(黙って落としません)。 → 05_build の検査 4

列に出さない領域(例:案件が乗らない、社内向けの領域)を作る場合は、 生成器の「板に出す領域」の一覧を明示的に書き換えてください。

案件がどの列に入るか

案件の status 入る列
進行中 area_id の列
停止中 area_id の列(進行中 と同じ列。文字の違いはカードのタグで見せる)
終了 完了の列

3. カードに何を出すか

上から順に、この 7 つだけです。これ以上詰め込まないでください。

# 出すもの 元の列 備考
1 警告の帯(出るときだけ) カードの最上部。理由を 1 行(下の §4)
2 案件 ID deal.deal_id 小さく、薄く
3 案件名 deal.name いちばん大きく
4 会社名 company.namecompany_id で引く) 薄く
5 工程バッジ deal.stage_idstage.name_ja 色付きの小さな箱(例 A2 見積・提案
6 次の一手 deal.next_action 見出し「次の一手」+本文。空なら 未定。長い場合は 2 行で切り、全文はマウスを乗せると出す
7 タグ 3 つ owner / amountpaid_type / status 丸い小さなタグ。空なら 未定
8 放置の宣言(あるときだけ) deal.snooze_until 9月24日まで意図して放置」と日本語で

「次の一手」を必ず 1 か所に出すのは、意図的です

案件そのものは実行できません。実行できるのは行動だけです。 案件のリストと「次の行動」を別々に持つと、両方を突き合わせる手間が毎回かかります。 だからカードの真ん中に、次の 1 動作を固定で出します。

カードの並び順

  • 列の中は deal.csv の行の順そのままにします。並べ替えのルールを増やさないでください
  • 順番を変えたいときは、CSV の行を動かします(画面側で並べ替えの設定を作らない)

なぜ並べ替え機能を付けないのか

並べ替えを画面に持たせると、「自分が見ている順」と「CSV の順」が食い違い、 どちらが本当の優先順位か分からなくなります。順番も CSV に持たせます。


4. 🔴 警告(停滞)の判定 — この画面でいちばん大事な仕様

判定日(既定は今日。画面上で変更できる)を基準に、案件ごとに次の順で判定します。

flowchart TD
    A["案件"] --> B{"status が 終了 ?"}
    B -->|はい| N["警告なし"]
    B -->|いいえ| C{"snooze_until が入っている ?"}
    C -->|はい| D{"snooze_until < 判定日 ?"}
    D -->|はい| E["🔴 期限切れ"]
    D -->|いいえ| N2["警告なし(決めて待っている)"]
    C -->|いいえ| F{"最後の活動が<br>判定日の7日前より古い ?"}
    F -->|はい| G["🟡 放置の宣言なし(7日以上)"]
    F -->|いいえ| N3["警告なし(最近さわった)"]
警告 条件 帯の色 意味
期限切れ snooze_until が入っていて、判定日より前 「この日まで待つ」と決めた日が過ぎた
放置の宣言なし(7日以上) snooze_until が空で、activity の最新が判定日の 7 日前より古い 決めてもいないのに、1 週間さわっていない
なし 上のどちらでもない 健全

「最後の活動」は、activity.csv のうち deal_id が一致する行の happened_on最大値です。1 件も無ければ、無限に古いものとして扱います。

🔴 停止中 という文字だけでは警告しません

決めて止めているのか、忘れているのかを、文字の見た目では区別できません。 区別するのは snooze_until があるかどうかだけです。

こうしないと、止めている案件が毎日赤くなり、板を見るのが苦痛になって見なくなります。 見なくなった板は、無いのと同じです。

判定日を未来にすると、先読みできます

判定日を来週にすると「来週になると何件が警告になるか」が分かります。 週に 1 回、判定日を 1 週間先にして見るのがおすすめです。


5. 今週の主役

  • 進行中の案件から 1 件だけ選ぶ選択欄を、板の上に置きます
  • 選ぶと、そのカードだけ枠を強調します
  • 🔴 保存しません。選び直すだけの、その場の道具です

なぜ 1 件だけなのか

同時に手を付ける数を絞るためです。一人で全部同時に進めることはできません。 「今週はこれ」を 1 件決めるという、それだけの機能です。


6. 案件の動かし方(状態遷移)

flowchart LR
    S1["進行中<br>A1"] -->|工程が進んだ| S2["進行中<br>A2"]
    S2 -->|領域をまたいだ| S3["進行中<br>B1"]
    S3 --> S4["終了"]
    S2 -->|待つと決めた| P["停止中<br>+ snooze_until"]
    P -->|再開| S2
やること 直す列
工程を進める stage_id(領域をまたいだら area_id も一緒に)
いったん止める status停止中 に、snooze_until にいつまで待つかを書く
再開する status進行中 に、snooze_until を空にする
終わる status終了
何かした activity.csv1 行足す(消さない・直さない)

🔴 deal_id は、始まりから終わりまで変えません

領域(A、B、…)は案件の「いまの位置」であって、案件そのものではありません。 受注から入金まで、1 本の ID で追えます。ID を振り直すと、活動ログも請求も全部切れます。


7. 画面の下に必ず出す 1 行

正本は CSV 9 枚。この画面は生成された表示です。ここを直しても正本は変わりません。
生成日時: 2026-09-14T10:00:00+09:00

生成日時を必ず出してください

これが無いと、いつのデータを見ているか分からなくなります。 「板が古いまま」に気づけるかどうかは、この 1 行にかかっています。


8. 作り手向けの決めごと

決めごと 理由
HTML は 1 ファイル(CSS も JavaScript もデータも中に埋め込む) 外部への読み込みを 0 にします。メールで送っても、USB で渡しても開けます
外部のサービスを読み込まない 社内のデータが外へ出ません。ネットが無くても開きます
文字はすべてエスケープする 案件名に <& が入っても壊れません
横に並ばなくなったら横スクロール(列は畳まない) スマホでも「列がいくつあるか」が分かります

次は 03_sw(仕事の型の升目) です。