要件ドキュメント
「みんなの水」熊本・八代版を作り直すための要件を一冊にまとめる。
第 1 部(1〜6 章)はビジネス要件で、サービスとして何を約束し、どう運用し、何を変えたいかを、実現方式から切り離して記す。
第 2 部(7〜11 章)はシステム要件で、現行実装(GAS のエクスポート)から吸い出した仕組みを記す。
現行の挙動は、作り直しで引き継ぐふるまいの基準になる。
新システムの技術構成や移行手順は本書では扱わない。
第 1 部
ビジネス要件
サービスとして何を約束し、どう運用し、何を変えたいか。
実現方式には踏み込まない。
地震で井戸が使えなくなった熊本県八代市の世帯に、給水車で水を届ける NPO サービス。
サポーターは一覧から 1 世帯を選び、世帯人数に応じた月額(平均水道料金と同額)を寄付して、その世帯の給水を支える。
運営は一般社団法人 能登乃國百年之計。
決済はコングラントの継続寄付を使う。
被災世帯がタンクとポンプの無料設置を申し込む入口。
申し込むと受付番号が発行され、スタッフが訪問して設置する。
仕組みの詳細は 8 章。
サポーターが水を待つ世帯の一覧から 1 世帯を選び、月々の寄付で支える公開サイト。
給水が始まると、世帯からの毎月の便りがここを通じてサポーターへ届く。
仕組みの詳細は 9 章。
給水スタッフが「今日どこへ水を届けるか」を確認し、配達の実績を記録する地図。
班分けと巡回順の管理にも使う。
仕組みの詳細は 10 章。
MZ-A003-K7QF)。支援は次の 1〜5 の順に進む。
支援の対象は、井戸が使えず、水道の契約がない世帯である。
水道契約が有る世帯は対象外とする。
タンクとポンプの設置と毎日の給水は無料で、世帯の負担は消耗品費用(3,000 円ほど)のみ。
公開一覧への掲載には本人の同意を取る。
公開するのは匿名化した情報だけで、氏名、番地、電話番号、メールアドレスは公開しない。
| 元データ | 公開してよい形 |
|---|---|
| ふりがな | イニシャル(やつしろ たろう → Y.T) |
| 住所 | 町名まで(八代市◯◯町。抽出できなければ「八代市内」) |
| 断水の状況 | 160 字に整形した公開メモ(空欄なら井戸の状況からの定型文) |
| 世帯人数 | そのまま(月額の算出にも使う) |
| 氏名、番地、電話番号、メールアドレス | 公開しない |
世帯には掲載区分(掲載/非掲載/自費)があり、公開一覧に出るのは「掲載」だけである。
サポーターは一つの世帯を選んで支え、一つの世帯につくサポーターは一人である(複数を認めるかは未確定、5.2)。
選ばれた世帯は 30 分間仮押さえされ、そのあいだ他の人は選べない。
現状のマッチング成立は、サポーターの自己申告または運営の入金確認の時点である(変更 2 で寄付完了時点に改める)。
給水中の世帯は月に 1 回、近況とお礼の便りをサポーターへ送る。
「便りが届くと給水が継続される」ことがサポーターとの約束である。
便りが 35 日途絶えたら運営が世帯の状況を確認する。
給水終了の判断は自動化せず、必ず人が行う。
サポーターが支援をやめる場合は、コングラント側で継続寄付を停止したうえで運営へ連絡してもらう。
やめた後の世帯の扱いは未確定である(5.2)。
井戸が復旧(通水)したら給水を終了し、サポーターに寄付停止を案内する。
卒業は取り消さない。
サポーターの月額は、世帯人数に応じた平均水道料金と同額に設定する。
| 世帯人数 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 月額(円) | 2,500 | 4,500 | 5,500 | 6,500 | 7,500 | 9,000 | 10,500 | 12,000 | 13,500 | 15,000 |
11 人以上は 1 人 1,500 円を加算。
人数不明は 6,500 円。
給水に使うタンクやポンプなどの資機材は、単発の寄付で別に募っている。
給水費を自分で払う世帯(自費世帯)は公開一覧に載せず、運営が毎月の寄付を案内する。
申込の完了画面では、費用を自分で払いたい世帯向けに、任意の自己負担(世帯人数分の月額を寄付)を案内する。
寄付の有無で給水の内容は変わらない。
給水は原則毎日で、2 日に 1 回でよい世帯は「隔日(青ピン)」として扱う。
前回給水から 3 日以上(隔日は 4 日以上)空いた世帯は「遅れ(赤ピン)」とみなす。
その日の班数を決め、班ごとに効率のよい順番で回る(順番の付け方は 変更 6 で見直す)。
タンク設置はスタッフへの委託で、報酬はタンク 1 台 8,000 円(税込)。
法人へ月ごとに請求する。
| # | 対象 | 現状 | 変更後 |
|---|---|---|---|
| 1 | 寄付の手順 | サポーターが支援コードを控えて、コングラントのコメント欄に手で入力する | コードを意識させず、選んだ世帯が自動で寄付に紐づくようにする |
| 2 | マッチングの成立時点 | サポーターの自己申告、または運営の手動確認の時点 | 寄付の完了を確認できた時点 |
| 3 | 世帯の掲載開始 | 掲載同意があれば、取り込まれた時点で自動掲載 | 設置完了した時点 |
| 4 | ドメイン | 「みんなの水」と被災者側フォームの URL が別々 | minnano-mizu.jp に統一し、被災者側フォームも同じドメインで動かす |
| 5 | 寄付の入口 | コングラントの決済のみ | 八代市へのふるさと納税で発行されるコードでも寄付できるようにする |
| 6 | 採番とピンの扱い | 有効な給水先をすべて同じ扱いで採番する | 遅れ(赤ピン)を優先し、隔日(青ピン)は採番の対象から外す |
| 7 | 班数の上限 | 画面の選択肢は最大 4(コード上は 6) | 最大 15 班程度 |
手入力には、控え忘れや入力間違いで寄付とマッチングが結びつかない弱点と、転記の手間がサポーターの離脱点になる弱点がある。
変更後は、世帯ごとの寄付リンクから決済フォームへ遷移するだけで、どの世帯への寄付かが運営に伝わる状態を目指す。
実現の候補はコングラントの「支援ルート」機能(世帯ごとの専用 URL を作ると、決済記録に経由 URL が自動で残る)。
flowchart LR
subgraph now["現状"]
A1["世帯を選ぶ"] -->|"支援コードを発行"| B1["サポーターが控える"] -->|"コメント欄に手入力"| C1["コングラントで決済"]
end
subgraph after["変更後"]
A2["世帯カード"] -->|"世帯ごとの専用リンク"| C2["コングラントで決済(世帯が自動で記録)"]
end
現状は自己申告や手動確認で成立とするため、決済の事実とずれうる。
寄付の完了(決済側の記録)をもって成立とし、一覧の表示と実際の支援状況を一致させる。
現状は、掲載に同意した世帯が資機材の設置を待たずに一覧へ載る。
変更後は設置完了した世帯だけを掲載し、一覧の世帯はすべて「サポーターがつけば給水を始められる家」にする。
stateDiagram-v2
direction LR
[*] --> 申し込み済み: フォーム入力
申し込み済み --> 募集中: 設置完了(ここで掲載)
募集中 --> 水が届いている: 寄付完了
水が届いている --> 井戸が復旧: 通水
状態の正式な名前と全体像は 5.1 で定義し直す。
サポーター向けサイトと被災者側フォームは一続きの仕組みなので、同じドメインの下で動かす。
八代市にふるさと納税をした人にコードを発行し、「みんなの水」で入力すると寄付ができるようにする。
月々の寄付とは別の入口であり、制度と仕様の両方に未確定点が多い(5.4)。
現状の採番は緊急度と隔日を考慮しないため、優先して届けたい世帯でも順番が後ろになることがある。
変更後は遅れ(赤ピン)の世帯が早い番号になるよう優先し、隔日(青ピン)の世帯は採番の対象から外す(隔日は番号を持たない)。
flowchart LR
subgraph now["現状の採番"]
direction LR
n1(["1"]):::other --> n2(["2"]):::blue --> n3(["3"]):::red --> n4(["4"]):::other --> n5(["5"]):::red --> n6(["6"]):::blue
end
subgraph after["変更後の採番"]
direction LR
a1(["1"]):::red --> a2(["2"]):::red --> a3(["3"]):::other --> a4(["4"]):::other
b1(["隔日"]):::blue
b2(["隔日"]):::blue
end
classDef red fill:#bf4a3d,color:#ffffff,stroke:none
classDef blue fill:#3f6dab,color:#ffffff,stroke:none
classDef other fill:transparent,stroke:#888888,color:#888888
優先の度合いと、隔日世帯を外す期間の扱いは未確定(5.5)。
班数の上限(変更 7)は同じ画面の設定であり、15 程度へ広げる。
決めないと実装や運用に進めない点を挙げる。
課題:現状の 5 状態に掲載区分とキャンセルが重なり、変更後はさらに「申し込み済みで未設置」が加わる。
決めること:
課題:マッチングの成立と解消それぞれで、定義と競合時の扱いが決まっていない。
決めること:
課題:手入力を廃止しても、便りの宛先管理や問い合わせ対応では世帯とサポーターの組を指す名前が必要になる。
決めること:
関連:4.5
課題:ふるさと納税の使途あるいは返礼品として成立するかは八代市との調整次第で、すべての前提になる。
決めること:
課題:採番の見直し(変更 6)の細部と、マップ運用の残る論点が決まっていない。
決めること:
関連:第 2 部の全機能
課題:現行システムには公開一覧のほかに多くの機能群があり、Phase 1(6 章)は公開サイトしか作らない。
決めること:
作り直しは段階に分けて進める。
最初の段階を Phase 1 と呼ぶ。
目的は新しい公開サイトのガワを見せることで、何よりも速さを優先する。
実施日は未定。
着工までに必要な準備は次のとおり。
第 2 部
システム要件(現行実装)
コードから吸い出した現行の仕組み。
作り直しで引き継ぐふるまいの基準。
GAS ウェブアプリ 3 つが、スプレッドシート 2 冊を介して連携する。
アプリ間の API はなく、すべてシートの読み書きとメールでつながる。
flowchart LR
R[被災世帯] --> FORM
S[サポーター] --> MAIN
V[給水スタッフ] --> MAP
subgraph gas["GAS ウェブアプリ"]
FORM["申し込みフォーム"]
MAIN["みんなの水 本体"]
MAP["給水マップ"]
end
subgraph sheets["スプレッドシート"]
SS1[("水回り支援_申込一覧")]
SS2[("給水ボランティア記録")]
end
CG["コングラント(決済)"]
FORM -->|"申込を追記"| SS1
MAIN <-->|"30分ごとに取り込み・状態更新"| SS1
FORM -->|"対応完了でピン追加"| SS2
MAP <--> SS2
MAIN -.->|"寄付ページへ誘導"| CG
CG -.->|"コメント欄の支援コードを運営が目視照合"| MAIN
| アプリ | 使う人 | 役割 | コードの控え |
|---|---|---|---|
| 申し込みフォーム | 被災世帯、設置スタッフ | 申込の受付、対応管理、請求書発行 | origin/form |
| みんなの水 本体 | サポーター、世帯、運営 | 世帯の公開、マッチング、便り、卒業までの管理 | origin/minnano-mizu |
| 給水マップ | 給水スタッフ | 給水記録、巡回ルート、日報 | origin/map |
世帯からみると、申込から卒業までのあいだに 3 アプリすべての世話になる。
受け持ちが途中で切り替わる点が、後述する連携の弱さ(11 章)の背景である。
flowchart LR
S(["世帯が申し込む"]) --> T["30分ごとに取り込み<br>同意があれば掲載(本体)"]
S --> I["訪問調査と設置<br>対応完了でピン登録(フォーム→マップ)"]
T --> M["サポーターが決まり給水中(本体)"]
I --> W["毎日の給水と記録(マップ)"]
M --> L["毎月の便り(本体)"]
W --> G
L --> G(["通水で卒業<br>本体とマップを別々に手動更新"])
| サービス | 用途 | 連携方法 |
|---|---|---|
| コングラント | 継続寄付の決済 | リンクで誘導するだけ。決済結果の連携はなく、コメント欄の支援コードを運営が目視照合する |
| メール(GAS の MailApp) | すべての通知 | 運営宛は個人の Gmail、返信先は法人アドレス |
| Google ドライブ | 写真と請求書 PDF の保存 | 便りと給水ポイントの写真はリンク共有で公開 |
| ジオコーダ | 住所から座標への変換 | フォームは Google、マップは国土地理院を使っており不一致 |
| LINE | 日報の共有、世帯への便り URL 送付 | 共有リンクと手動コピペ |
| OpenStreetMap | マップの地図タイル | Leaflet から参照 |
| 番号 | 例 | 発行元 | 用途 |
|---|---|---|---|
| 受付番号 | 260819-190434 | 申し込みフォーム | 申込の管理。本体への取り込みキー |
| 支援ID | A004 | みんなの水 本体 | 公開一覧と便り |
| ポイントID | P003 | 給水マップ | 給水記録 |
flowchart LR
A[("申込一覧<br>受付番号")] -->|"受付番号をキーに取り込み"| B[("支援募集<br>支援ID")]
A -->|"氏名と住所の文字一致で連携"| C[("給水ポイント<br>ポイントID")]
B -. "対応表なし" .- C
支援ID とポイントID を結ぶ情報はどこにもなく、同じ世帯を二重に管理する原因になっている(11 章)。
被災世帯がタンクとポンプの無料設置を申し込むフォーム。
同じ画面にスタッフ向けの申込管理と請求書発行が同居する(共有の暗証番号つき。番号は本書に記載しない)。
本来の役割は申込の受付だが、受付後の運用もここで完結する。
スタッフは同じ画面で対応状況を管理し、対応完了にした世帯は給水マップへ自動でピン登録される。
設置スタッフへの支払いも担っており、月ごとの設置実績から請求書 PDF を発行して法人へ請求する(報酬のルールは 3 章)。
フォームの冒頭には、未対応と対応中の件数から「現在◯人待ち」を表示する。
「水回り支援_申込一覧」スプレッドシートの「申込一覧」シート 1 枚に、性格の違う列が同居する。
| 区分 | 主な列 |
|---|---|
| 申込内容 | 受付日時、受付番号、申込No、要件、氏名、ふりがな、住所、世帯人数、携帯電話、メールアドレス、LINE ID、代理申込(3 列)、断水の状況、費用のご希望 |
| 現地の状況 | 水道契約、井戸の状況と詳細、井戸水ポンプ、外水栓、屋外電源、タンク置き場所、その他、写真(4 列) |
| 対応管理 | 対応状況、対応開始日と担当者、対応完了日と担当者、キャンセルの日付と担当者と理由、最新情報とその更新日時 |
写真はドライブ「水回り支援_申込データ」、請求書は「請求書控」シートと PDF フォルダに記録する。
sequenceDiagram
actor R as 世帯
participant F as フォーム
actor O as 運営
R->>F: 入力して送信
F->>F: 受付番号を発行し、シートへ追記。写真はドライブへ保存
F-->>O: 全文と写真添付のメール
F-->>R: 受付完了メール
F-->>R: 完了画面で任意の自己負担を案内
受付番号は yyMMdd-HHmm に乱数 2 桁を足した形式。
水道契約が有る世帯は対象外として送信をブロックし、それ以外の世帯には掲載への同意チェックを必須とする。
完了画面の自己負担の案内(ルールは 3 章)では、コングラントのコメント欄に受付番号を書いてもらい、運営がどの世帯の負担かを突き合わせる。
stateDiagram-v2
direction LR
[*] --> 未対応: フォーム送信
未対応 --> 対応中: 訪問調査
対応中 --> 対応完了: 設置完了
未対応 --> キャンセル
対応中 --> キャンセル
状態の更新には担当者名と日付を、キャンセルには理由も記録する。
対応完了にした瞬間、給水マップへ「氏名+様宅」の名称でピンを自動登録する(同名か同住所のピンがあれば追加しない)。
キャンセルにすると、本体側の取り込みが検知してサポーターの自動移行が走る(9 章)。
設置スタッフが対象月の自分の設置実績を読み込み、住所と振込先を入力すると、請求書 PDF が発行される。
PDF は本人へメールされ、台帳シートに記録が残る。
サポーターが世帯を選んで支援する公開サイトと、その裏の運営処理。
世帯の取り込みから公開、マッチング、便り、卒業までのライフサイクルを管理する。
世帯のライフサイクル全体を一手に担う。
30 分ごとに申込一覧から世帯を取り込んで匿名化し、掲載に同意した世帯を公開一覧に載せる。
サポーターの申し込みを仮押さえと支援コードで受け付け、入金確認を経て給水開始とその通知を行う。
給水開始後は、便りの受付と 35 日途絶の検知で支援の継続を見守り、申込がキャンセルされた場合はサポーターを別の世帯へ自動で移す。
このほか、自費世帯の一覧を毎月 1 日に実名と電話つきで運営へメールする。
申込と同じスプレッドシートに 3 シートを追加する。
3 シートは支援ID で結びつく。
| シート | 列 |
|---|---|
| 支援募集 (世帯ごと 1 行) | 支援ID、受付番号、掲載、状態、表示名、地区、世帯人数、公開メモ、月額、支援者ハンドル、応援メッセージ、支援コード、仮押さえ期限、給水開始日、最終便り日、便りトークン、運用メモ |
| 支援申告 (支援の申込ごと 1 行) | 申告日時、支援コード、支援ID、支援者ハンドル、お名前、メールアドレス、月額、応援メッセージ、確認状況、確認日時、運用メモ |
| 近況便り (投稿ごと 1 行) | 投稿日時、支援ID、メッセージ、写真、サポーター通知、運用メモ |
月額は世帯人数から自動計算する(料金表は 3 章)。
同じ表がフォームの完了画面にもハードコードされている(11 章の課題 3)。
stateDiagram-v2
[*] --> 募集中: 取り込み(同意があれば掲載)
募集中 --> お手続き中: サポーターが選ぶ
お手続き中 --> 募集中: 30分で期限切れ
お手続き中 --> 給水中: 自己申告または入金確認
state 給水中 {
[*] --> 便りが続いている
便りが続いている --> 連絡確認中: 世帯の投稿が35日途絶(自動)
連絡確認中 --> 便りが続いている: 世帯が便りを投稿(自動で復帰)
}
給水中 --> 募集中: サポーター離脱(運営の手動操作)
給水中 --> 通水・卒業: 運営の終了操作
連絡確認中とは:便りが 35 日止まった世帯を、運営が電話などで確かめている状態。
便りが止まる典型は井戸が直って連絡が不要になったケースで、通水していればそのまま終了操作で卒業になり、まだ水が要るなら便りの再開で元に戻る。
公開一覧ではどちらも「給水中」と表示され、区別は運営にしか見えない。
図とシートの対応:シートの状態列の値は「募集中」「お手続き中」「給水中」「連絡確認中」「通水・卒業」の 5 つ。
図で「便りが続いている」と描いた内部状態が、シートの「給水中」にあたる。
状態と掲載区分は別もの:世帯は状態のほかに掲載区分(掲載/非掲載/自費)を持ち、公開一覧に出るのは「掲載」の世帯だけである。
卒業とサポーター離脱:「通水・卒業」にした世帯は戻せない。
サポーターの解約(コングラント側の継続寄付停止)を検知する仕組みはなく、気づいた運営が支援申告を「停止」にし、シートを直接編集して世帯を募集中へ戻す。
要件に「設置」を含む申込だけを取り込み、支援ID(A+3 桁連番)を振る。
個人情報は 3 章の公開範囲に従って変換する。
イニシャルはふりがなから作り、地区は住所から町名までを抽出し、断水の状況は 160 字の公開メモに整形する。
掲載区分は申込の「費用のご希望」で決まる。
掲載同意があれば「掲載」、実費(旧フォームのみ)は「自費」、選択がなければ「非掲載」のまま運営が手動で確認する。
sequenceDiagram
actor S as サポーター
participant M as みんなの水
participant C as コングラント
actor O as 運営
S->>M: 世帯を選ぶ(名前とメールを入力)
M-->>S: 支援コードを発行(30分仮押さえ)
S->>C: コメント欄にコードを書いて継続寄付
S->>M: 「寄付を完了しました」ボタン
Note over M: 申告だけで「給水中」になる(決済の裏取りなし)
O->>C: コメント欄のコードを目視照合
M-->>S: 給水開始メール
M-->>O: 世帯へ便りURLの送付依頼(世帯メール未登録時)
給水中への遷移は、自己申告ボタンのほかにシートのメニューと確認状況セルの直接編集があり、入口が 3 つある。
処理は共通で、便りトークンを発行し、サポーターへ開始メールを、世帯へ便り URL を送る。
期限切れの仮押さえは 10 分ごとの自動実行が募集中へ戻す。
| タイミング | 連絡 |
|---|---|
| 給水開始(入金確認後) | 開始のお知らせメール(自動) |
| 便りの投稿ごと | 便りの本文と写真を届けるメール(自動) |
| 世帯側キャンセルでの支援先変更 | 変更のお知らせメール(自動。月額が変わる場合は金額変更の依頼つき) |
| 給水終了(卒業) | 自動送信なし。運営が手動で御礼と寄付停止の案内を送る |
| サポーター自身の解約 | システムでは受け付けない。コングラント側で停止し、運営へ連絡してもらう |
sequenceDiagram
actor H as 世帯
participant M as みんなの水
actor S as サポーター
H->>M: 専用URLから近況とお礼を投稿(月1回、写真は任意)
M-->>S: 便りをメールで届ける
Note over M: 最終便り日を更新。連絡確認中なら給水中へ自動復帰
loop 毎朝7時
M->>M: 便りが35日途絶えた給水中の世帯を「連絡確認中」へ
end
メッセージは 500 字までの必須項目。
継続の約束と終了判断のルールは 3 章のとおりで、システムが自動化しているのは途絶の検知までである。
flowchart TD
A["申込側がキャンセルになる"] --> B{"給水中だったか"}
B -->|いいえ| C["一覧から外し、運営へ記録メール"]
B -->|はい| D{"募集中の世帯があるか"}
D -->|ある| E["サポーターを自動移行<br>月額が同じ世帯を最優先<br>次に世帯人数が近い順"]
E --> F["サポーター、新世帯、運営へメール"]
D -->|ない| G["運営へ要対応メール<br>サポーターには連絡しない"]
月額が変わる移行では、サポーターへコングラント側での金額変更を依頼するメールが送られる。
給水スタッフが現場で使う地図アプリ(Leaflet と OpenStreetMap)。
どこへ水を届けるべきかの把握と、給水実績の記録に使う。
給水先、水源、拠点をピンで管理し、前回給水からの経過日数で緊急度を色分けして「今日どこへ行くべきか」を示す。
スタッフはその場で給水量と担当者を記録し、本日の合計 L と給水済み箇所数がヘッダーに集計される。
管理メニューでは班分けとルート採番を行い、1 日の終わりには LINE にそのまま貼れる日報を生成する。
ピンごとに現場メモ(例「バックで入る」)と写真も持てる。
独立した「給水ボランティア記録」スプレッドシートを使う。
世帯一覧との対応表はない。
| シート | 列 |
|---|---|
| 給水ポイント | ID、名称、住所、緯度、経度、設備、種別(給水先/水源/拠点)、状態(有効/停止/通水済み)、頻度(空欄=自動/毎日/隔日)、タンク所有者、担当団体、現場メモ、用途(生活用水/トイレ)、ルート順 |
| 給水記録 | 記録日時、日付、ポイントID、ポイント名、給水量L、担当者、備考 |
| 設定 | 管理者PIN(本書には記載しない)、隔日判定のしきい値 |
| 写真 | 登録日時、ポイントID、ファイルID |
ピンの色は保存値ではなく、表示のたびに前回給水からの経過日数で決まる(「遅れ」の定義は 3 章)。
| 色 | 毎日ペース | 隔日ペース |
|---|---|---|
| 青 | 本日給水済み | 0〜1 日前 |
| 黄 | 1〜2 日前 | 2〜3 日前 |
| 赤 | 3 日以上(記録なし含む) | 4 日以上 |
隔日ポイントには白丸「2」のバッジが重なる。
隔日は手動指定できるほか、直近 3 回の給水が 1 日あたり 100L 以下なら自動でそうみなす。
水源と拠点は青緑、通水済みは灰色で、いずれも給水記録の対象外である。
ピンを開いて給水量 L(満水で不要なら 0)と担当者、備考を記録すると、ヘッダーの本日集計が更新される。
担当者名は端末に記憶され、次回の入力を省ける。
「本日の報告」を押すと、給水済み、未給水、隔日スキップ、通水済みをまとめたテキストが生成され、そのまま LINE へ共有できる。
flowchart LR
A["対象を抽出<br>有効な給水先のみ"] --> B["作業量を見積もる<br>滞在10分+給水量見合い"]
B --> C["扇形に班数分割<br>作業量が均等になる切り方"]
C --> D["班ごとに巡回順を決定<br>水源起点の最近傍法+2-opt"]
D --> E["A1、A2…と採番<br>担当団体列とルート順列へ"]
対象から水源、拠点、通水済み、座標のないピンを除く。
隔日かどうかは考慮しない。
給水量の実績は直近 7 日の平均を使い、実績のない新規ピンは 150L/日 とみなす。
班数は画面では 1〜4、コード上は 6 まで選べる。
「AI が並べ直す」と呼ばれてきた機能の実体はこのヒューリスティックで、LLM 等は使っていない。
ピンの追加は住所を国土地理院のジオコーダで座標化し、見つからなければ地図をタップして位置を指定する。
重複ピンの整理は、住所の表記ゆれをならしたうえで、住所と用途が同じピンを 1 件残して停止にする。