宅内漏水による水道料金の減額申請書と修理証明を読み取り、検針の記録と照らして要件に合わないものと不足書類を拾う
水道局に届く漏水による減額の申請書と、工事店の修繕の証明書を読み取り、使用者番号・修繕日・漏水箇所を項目にそろえます。検針の記録と照らし、要件に合わない申請の候補と不足書類を担当職員へ返します。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- Azure AI/Google Document AI
- 連携・自動化
- Google Apps Script/Python
- 対象業界
- その他/自治体
- 対象部門
- 総務
- 対象業務
- データ入力・転記/内容確認・チェック
- 主な課題
- 人手が足りない/入力作業が多い/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/品質標準化/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 郵送・窓口で届いた申請書と証明書を受付簿に記録する
- 申請書の使用者番号(お客さま番号)と氏名・住所を見て、料金システムで使用者を照会する
- 証明書の修繕年月日、漏水箇所、使用材料、施工した事業者と指定番号を読む
- 指定給水装置工事事業者の一覧を開き、指定番号と事業者名が一致するかを確かめる
- 料金システムで漏水を含む検針期の水量と、過去の同じ時期の水量を並べて見る
- 過去に漏水による減量を受けていないか、給水装置の工事の記録が直近にないかを照会する
- 写真の添付、押印、記入漏れを確かめ、足りないものがあれば電話か文書で連絡する
- 要件を満たすと見たものを、減量の算定と決裁に回す
- 人届いた申請書・証明書・写真をスキャンし、1件分を1つのPDFにして受付フォルダに入れる
- 自動保存をきっかけに処理が動き、ページの種類(申請書・証明書・写真)を分ける
- 自動OCRが申請書と証明書の項目と値、チェック欄、信頼度を返す
- 自動生成AIが、使用者番号・修繕日・漏水箇所・事業者などを決まった項目にそろえ、漏水箇所を区分に当てはめた根拠を書く
- 自動料金システムから書き出した検針の記録・過去の適用・給水装置の工事の記録と照らす
- 自動指定事業者の一覧と、指定番号・事業者名を照らす
- 自動要件ごとの事実から、`candidate`/`missing_docs`/`out_of_scope_candidate`/`needs_human` を規則で決める
- 人担当職員が一覧を開き、`candidate` 以外のものと、漏水箇所の区分の根拠を確かめる
- 人不足書類の連絡文の下書きを直し、使用者または工事店へ送る
- 人要件を満たすと判断したものを、減量の算定と決裁に回す
各工程の詳しい説明を読む
- 郵送・窓口で届いた申請書と証明書を受付簿に記録する
- 申請書の使用者番号(お客さま番号)と氏名・住所を見て、料金システムで使用者を照会する
- 証明書の修繕年月日、漏水箇所、使用材料、施工した事業者と指定番号を読む
- 指定給水装置工事事業者の一覧を開き、指定番号と事業者名が一致するかを確かめる
- 料金システムで漏水を含む検針期の水量と、過去の同じ時期の水量を並べて見る
- 過去に漏水による減量を受けていないか、給水装置の工事の記録が直近にないかを照会する
- 写真の添付、押印、記入漏れを確かめ、足りないものがあれば電話か文書で連絡する
- 要件を満たすと見たものを、減量の算定と決裁に回す
(a)1件に何画面も開く。 2番、5番、6番は、どれも料金システムの別の画面です。使用者番号を写し間違えると、別の家の検針を見て判断することになります。
(b)漏水箇所の書き方がばらばら。 「床下配管漏れ」「屋外 給湯器下 地中 エルボ割れ」「トイレ」。同じ欄に、対象になる漏水と対象外の故障が並びます。 「給湯器」の文字だけを見て対象外にしたら、実は給湯器の下の地中の配管だった、という読み違いが起きます。
(c)不足書類の連絡が遅れる。 写真が無い、修繕日が書かれていない、指定番号が無い。気づくのが決裁の手前だと、使用者に連絡するまでに次の検針が来ます。
(d)基準の当てはめが人によって揺れる。 過去の同じ時期の水量が今回より多い場合、施工から1年以内の漏水、2回目以降の申請。どれを先に見るかが担当者ごとに違い、見落としは後から苦情で分かります。
- 【人】 届いた申請書・証明書・写真をスキャンし、1件分を1つのPDFにして受付フォルダに入れる
- 【自動】 保存をきっかけに処理が動き、ページの種類(申請書・証明書・写真)を分ける
- 【自動】 OCRが申請書と証明書の項目と値、チェック欄、信頼度を返す
- 【自動】 生成AIが、使用者番号・修繕日・漏水箇所・事業者などを決まった項目にそろえ、漏水箇所を区分に当てはめた根拠を書く
- 【自動】 料金システムから書き出した検針の記録・過去の適用・給水装置の工事の記録と照らす
- 【自動】 指定事業者の一覧と、指定番号・事業者名を照らす
- 【自動】 要件ごとの事実から、
candidate/missing_docs/out_of_scope_candidate/needs_humanを規則で決める - 【人】 担当職員が一覧を開き、
candidate以外のものと、漏水箇所の区分の根拠を確かめる - 【人】 不足書類の連絡文の下書きを直し、使用者または工事店へ送る
- 【人】 要件を満たすと判断したものを、減量の算定と決裁に回す
8番目が、この設計の分かれ目です。 一覧は要件ごとの事実を並べたもので、対象外の候補と出ても、その時点では何も決まっていません。 職員が根拠の文字列を読んで初めて判断になります。
7番目を生成AIにさせないのも、意図してのことです。 「過去の同じ時期の水量の方が多い」「施工から1年以内」のような基準は、局の要綱に書かれた条件を規則としてそのまま持たせるほうが、説明がつきます。生成AIに任せるのは、手書きの自由記述を区分に読み替えるところだけです。
02今回想定するシステム構成
申請書・修繕の証明書・写真(郵送・窓口) │ スキャンして1件1PDF ▼【トリガー】受付フォルダへの保存 Python(ページの種類分け、照合、規則の判定) ▼ Google Document AI(Form Parser) │ 項目と値(formFields)、チェック欄、表、信頼度 ▼ Claude API ── 項目のそろえと、漏水箇所の区分の根拠 │ ① 使用者番号・氏名・住所 ② 修繕年月日 │ ③ 漏水箇所と区分 ④ 事業者名・指定番号 ▼ Python ── 料金システムの書き出し(検針・過去の適用・工事の記録)と照合 │ 指定事業者の一覧と照合 ▼ 判定(candidate / missing_docs / out_of_scope_candidate / needs_human) ▼ 【担当職員が確認】 ├──▶ 不足書類の連絡文の下書き └──▶ 減量の算定と決裁へ
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Google Document AI(Form Parser) | Azure AI Document Intelligence |
| 生成AI | Claude API(項目のそろえと漏水箇所の区分の根拠) | OpenAI API、Gemini API |
| 連携 | Python(ページの分割、料金システムの書き出しとの照合、規則の判定) | Google Apps Script |
| 保管 | 局内の共有フォルダ(申請の画像と確認の一覧) | 文書管理のシステム |
料金システムには、この構成から書き込みません。 照合に使うのは、料金システムから毎日書き出す検針の記録と過去の適用の一覧です。書き出しの形式はシステムごとに違うため、この部分は利用環境に応じた個別実装になります。
土台は Document AI の Form Parser です。 公式のプロセッサ一覧では、OCRのテキストに加えてキーと値のペア、チェック欄、表、一般的な項目を抽出するとされ、日本語(ja)は手書きに対応する言語として示されています。申請書は「お客さま番号」「修繕年月日」のように項目名が印刷され、その横に記入する形なので、項目と値の組として読めることが効きます。
チェック欄は文字とは別に返ります。 京都市の様式は、減量の事由を「地中・床下・壁中・その他」から選ぶ形です。応答の扱いの説明では、印の付いたチェック欄は filled_checkbox、付いていないものは unfilled_checkbox とされています。ただし Form Parser の説明ではラジオボタンには対応しないとされ、丸で囲む形の選択は文字として読むしかありません(第7章の前処理)。
処理する場所に日本はありません。 公式のリージョンの説明では、マルチリージョンは us と eu、単一リージョンはムンバイ、シンガポール、シドニーなどで、日本のリージョンは一覧にありません。 申請書には使用者の氏名・住所・電話番号が書かれているので、国外で処理してよいかを導入前に決めます(第13章)。
03どうやって実装するのか
処理の起点を決める
受付フォルダにPDFが保存されたことを起点にします。 1件ずつ動かし、処理が終わったものだけを処理済みフォルダへ移します。受付フォルダに残っている数が、未処理の数になります。
1件分を1つのPDFにまとめることを、受付の決まりにします。 申請書と証明書が別々のファイルになると、どの証明書がどの申請のものかを後から使用者番号で探すことになり、番号が読めなかった1枚が宙に浮きます。 郵送の封筒単位、窓口の受付単位でまとめます。
検針の直後の繁忙期も、夜間の一括処理にはしません。 不足書類の連絡を早く出すほど、次の検針までに書類がそろいます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 申請書 | 使用者番号、氏名、住所、電話番号、申請日、署名 | 受付フォルダ(スキャン) |
| 修繕の証明書・工事報告書 | 事業者名、指定番号、修繕年月日、漏水箇所、減量の事由の区分、使用材料 | 同上 |
| 写真 | 工事の前後の写真(局が求める場合) | 同上 |
| 検針の記録 | 使用者ごとの検針期、使用水量、検針日 | 料金システムの書き出し |
| 過去の適用 | 漏水による減量を受けた検針期 | 料金システムの書き出し |
| 給水装置の工事の記録 | 直近の新設・改造の工事の竣工日 | 給水装置の台帳の書き出し |
| 指定事業者の一覧 | 指定番号、事業者名、指定の有効期間 | 局の一覧 |
| 要件の表 | 対象の箇所、対象外の故障、期間の条件、必要書類 | 局の要綱から作る |
質を決めるのは、いちばん下の要件の表です。 静岡市のページでは、給水栓の故障、水洗便所の洗浄装置の故障、施工した日から1年以内の漏水、過去の使用水量の方が多い場合などを対象外として挙げています。長野市は受水槽のボールタップの故障を条件付きで対象にしています。同じ「トイレ」でも局によって扱いが違うので、自局の要綱から表を作ります。
データの取得方法を決める
読み取りは Form Parser のオンライン処理で呼びます。公式の上限では、Form Parser のオンライン処理は15ページまで、ファイルは40MBまでです。1件分は数ページなので収まります。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 項目と値 | pages[].formFields の fieldName/fieldValue | 使用者番号、修繕年月日、指定番号などの値 |
| チェック欄 | fieldValue の valueType | 減量の事由の区分(四角のチェック欄の場合) |
| 表 | pages[].tables | 使用材料の表、お客さま番号の表 |
| 全文 | text と textAnchor | 漏水箇所の自由記述 |
| 信頼度 | 各要素の confidence | 読めた値と読めなかった値を分ける |
キーは書類に書かれた文字そのものです。 応答の扱いの説明では、キーと値のペアは設定した項目名ではなく、書類上のキーの文字がそのまま返るとされています。「お客さま番号」「使用者コード」「水栓番号」のように局の様式の文字を、Python 側の対応表で項目名に寄せます。
お客さま番号は表として返ることがあります。 京都市の様式では、検針区・使用者コード・水栓番号が1行の表です。Form Parser の表の抽出は、行や列をまたぐセルの無い表だけを認識するとされています。様式の表はこの形なので読めますが、手で罫線を引き足した用紙は崩れます。
料金システムの書き出しは、毎朝の一括の書き出しを Python が読みます。照合は使用者番号が先、氏名と住所が後です。 氏名から引くと、契約者と申請者が違う家(賃貸住宅など)で引けません。
AIへ渡す前に整形する
- ページの種類分け … 申請書・証明書・写真を、様式のタイトルの文字と画像の割合で分けます
- 解像度の確認 … 公式の説明では、スキャンは最低200dpi、300dpi以上が一般に最もよいとされています。200dpiを下回るものはスキャンし直します
- 画像の大きさ … PDF以外の画像は1ページ40メガピクセルが上限です
- 選択の形の確認 … 区分を丸で囲む様式は、チェック欄として返りません。様式を改めるまでは、区分の欄の文字と丸の位置を生成AIに読ませ、
needs_humanに寄せます - 印字と手書きの区別はしない … どちらも同じ処理に流します。信頼度で後から分けます
- 重複の検知 … 同じ使用者番号・同じ修繕日の申請が直近にあれば、二重の受付として印を付けます
- 写真のページ … OCRに回さず、枚数と撮影の有無だけを記録します。写真の中身の判断は職員が行います
4番目は様式の側で直すのが早道です。 減量の事由の欄を、丸で囲む形から四角のチェック欄に変えるだけで、区分が文字の読み取りではなく filled_checkbox で決まります。 様式の改定は工事店への周知が要るので、半年ほどかけて切り替えます。
AIに処理させる
させるのは、読み取った項目を決まった名前にそろえることと、漏水箇所の自由記述を区分に当てはめて、根拠の文字列を写すことだけです。
| 見るもの | させること | 判断できないときの扱い |
|---|---|---|
| 使用者番号 | 申請書と証明書の両方から読み、一致するかを書く | 片方が読めなければ unreadable |
| 修繕年月日 | 和暦・西暦を日付にそろえる | 複数の日付があれば ambiguous |
| 漏水箇所 | 「地中」「床下」「壁中」「器具」「その他」に当てはめる | 両方に読める記述は ambiguous |
| 器具の名前 | 給水栓、便器、給湯器、ボールタップなどの語を抜き出す | 書かれていなければ空のまま |
| 事業者 | 事業者名と指定番号を写す | 指定番号が無ければ missing |
| 必要書類 | 申請書・証明書・写真のそろい方を数える | ページの種類が決まらなければ needs_human |
漏水箇所の区分がいちばん難しく、いちばん大事です。 「屋外 給湯器下 地中 エルボ割れ」は、器具の名前が出てきますが漏水は地中の配管です。逆に「給湯器 本体より漏水」は器具の故障です。器具の名前と、壊れた部材の位置の両方を写させ、区分はその2つから決めさせます。
| させないこと | 理由 |
|---|---|
| 減量を認めるかの結論 | 局の要綱に基づく職員の判断 |
| 減量する水量の計算 | 料金システムと要綱の算定式で行う |
| 指定事業者かどうかの判定 | 一覧との照合は Python が行う |
| 検針の水量の比較 | 料金システムの数字を規則で比べる |
| 読めない番号の補完 | 似た番号に寄せると別の家の検針を見る |
最後の行がいちばん起きやすい失敗です。 使用者番号の1桁が読めないとき、生成AIは料金システムにありそうな番号へ寄せたくなります。寄せた番号は、照合で「一致」になってしまいます。
指示内容を固定する
あなたは水道局の料金課で、漏水による使用水量の減量の申請書類を
受け付ける立場です。OCRが返した読み取り結果だけを見て、
決められた項目に値をそろえてください。推測で埋めないでください。
【そろえる項目】
1. customer_no(使用者番号。申請書と証明書の両方から)
2. applicant_name、address、phone
3. repair_date(修繕年月日。YYYY-MM-DD にそろえる)
4. leak_location_text(漏水箇所の記述をそのまま)
5. leak_category(underground / under_floor / in_wall /
fixture / other / ambiguous のどれか)
6. fixture_words(給水栓、便器、タンク、給湯器、ボールタップ等の語)
7. contractor_name、contractor_no(事業者名と指定番号)
8. pages(申請書・証明書・写真の枚数)
【leak_category の決め方】
- 記述に「地中」「埋設」「土中」があり、壊れた部材が配管であれば
underground。「床下」「壁中」「壁内」も同じ考え方で決める
- 給水栓、便器、タンク、給湯器などの器具そのものが壊れたと
書かれていれば fixture
- 器具の名前があっても、壊れたのが器具の下や近くの配管なら
fixture にしない。たとえば「給湯器下 地中 エルボ割れ」は underground
- どちらにも読めるときは ambiguous。迷ったときに underground を
選ばないでください
- チェック欄の valueType が filled_checkbox の区分があれば、
それを checkbox_category に写し、記述から決めた区分と並べる
【厳守事項】
- 記載がなければ「不明」とし、status を missing にしてください。
- 読み取りの confidence が 0.7 未満の値は status を unreadable にし、
値はOCRが返したまま入れてください。
- 使用者番号・指定番号は、読み取った文字列をそのまま入れてください。
桁を補う、似た番号に直すことをしないでください。
- 減量の可否、対象かどうかの結論、減量する水量は書かないでください。
- evidence には、区分を決めた根拠の文字列をそのまま写してください。
【読み取り結果】{ocr_result}
【様式のキーと項目名の対応表】{key_map}
「器具の名前があっても fixture にしない」を例付きで書かないと、器具の語に引きずられます。 第3章の(b)の読み違いは、人も生成AIも同じ形で起こします。例を1つ書くだけで、区分の揺れはかなり減ります。
checkbox_category と記述からの区分を並べさせるのは、食い違いを拾うためです。 「地中」に印があるのに記述が「便器のタンク内部品の交換」なら、どちらかが誤りです。食い違いはそれだけで needs_human にします。
出力形式を固定する
次の形のJSONで受け取ります。 Claude API の構造化出力では、output_config.format に JSON スキーマを渡して応答の形を固定できます。
{
"receipt_id": "",
"customer_no": { "application": "", "certificate": "", "status": "ok | missing | unreadable | mismatch" },
"repair_date": { "value": "", "status": "ok | missing | unreadable | ambiguous" },
"leak": {
"location_text": "",
"leak_category": "underground | under_floor | in_wall | fixture | other | ambiguous",
"checkbox_category": "",
"fixture_words": [],
"evidence": ""
},
"contractor": { "name": "", "contractor_no": "", "status": "ok | missing | unreadable" },
"pages": { "application": 0, "certificate": 0, "photo": 0 }
}
1つ目の理由は、AIが書く層と規則が書く層を分けられることです。 上のJSONはAIが埋め、要件の照合結果は Python が別の層に書き足します。
| Python が足す項目 | 中身 |
|---|---|
meter_check | 漏水を含む検針期の水量と、過去の同じ時期の水量。過去の方が多ければ past_higher |
prior_relief | 過去に減量を受けた検針期。あれば already_applied |
install_within_1y | 給水装置の工事の竣工日から修繕日までが1年以内なら true |
contractor_check | 指定事業者の一覧に指定番号と名前があれば listed |
verdict | candidate/missing_docs/out_of_scope_candidate/needs_human |
2つ目は、verdict の決め方を表で持てることです。
verdict | 条件 |
|---|---|
missing_docs | 修繕日・指定番号・写真のどれかが無い |
out_of_scope_candidate | leak_category が fixture、または past_higher、already_applied、install_within_1y、contractor_check が一覧に無い |
needs_human | unreadable、ambiguous、mismatch が1つでもある。チェック欄と記述の区分が食い違う |
candidate | 上のどれにも当たらない |
3つ目は、evidence で確認が速くなることです。 職員は画像を開く前に、区分を決めた文字列を一覧で読めます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 受付フォルダ | Python の監視 | PDFの保存を検知する |
| Google Document AI | API呼び出し(オンライン処理) | 項目と値、チェック欄、表、信頼度 |
| Claude API | API呼び出し(構造化出力) | 項目のそろえと漏水箇所の区分 |
| 料金システム | 毎朝の書き出しファイルの読み取り | 検針の記録、過去の適用 |
| 給水装置の台帳 | 書き出しファイルの読み取り | 直近の工事の竣工日 |
| 確認の一覧 | 表計算への書き出し | 職員が開く一覧 |
料金システムへの書き込みは作りません。 減量の算定と調定は、職員が決裁を経て料金システムの画面で行います。一覧の誤りが、そのまま請求額の変更に進む経路を持たせないためです。
不足書類の連絡文は下書きまでです。 使用者に頼むもの(申請書の署名)と工事店に頼むもの(指定番号、写真、修繕日)を分けて下書きし、送るのは職員です。
人が確認する
needs_humanを先に見る … 読めなかった値と区分の食い違いです。画像を開いて、該当の欄だけを見ますout_of_scope_candidateの根拠を確かめる …evidenceと検針の数字を見ます。対象外とするのは職員の判断で、通知の文面も職員が書きますmissing_docsの連絡先を決める … 使用者か工事店か。下書きを直して送りますcandidateは一覧で流し見る … 修繕日と区分だけを見て、算定に回します- 判断を覆したら記録する … どの項目を、どちらに変えたかを残します
2番目を省かないでください。 対象外と通知すれば、使用者は高い請求額をそのまま払うことになります。読み違いの1件は、苦情と再審査の手間になって返ってきます。
目標は、120件をならして1件7分です。 candidate は数分で済み、out_of_scope_candidate と needs_human に時間を使います。
例外に対処する
| 起きること | 対応 |
|---|---|
| 使用者番号が料金システムに無い | mismatch。住所と氏名で候補を出し、職員が電話で確かめる |
| 申請書と証明書で使用者番号が違う | mismatch。どちらかの写し間違い。 使用者に確認する |
| 指定事業者の一覧に無い | 指定の取消し・名称変更の可能性もある。一覧の更新日を見てから判断 |
| 修繕日が検針期と合わない | 2回の検針にまたがる漏水の可能性。検針期を2つ並べて人へ |
| 写真のページしか無い | 申請書・証明書の未着として missing_docs |
| 1つのPDFに2件分 | 使用者番号でページを分け直し、分けられなければ needs_human |
| OCRが応答しない | 受付フォルダに残し、次の起動で再処理 |
| 15ページを超える | 写真のページを外してから処理する |
上の2行は、料金の誤りに直結します。 別の家の検針の記録で判断すると、要件に合うかどうかが入れ替わります。使用者番号の一致は、規則の判定より前に必ず確かめます。
記録を残す
- 申請のPDFと、受け付けた日・経路(郵送・窓口)
- Document AI が返したJSONの全文と、Claude API の出力
- 照合に使った料金システムの書き出しの日付と、そのときの検針の数字
verdictと、職員が下した判断、覆した項目- 不足書類を連絡した日、相手、書類がそろった日
- 漏水箇所の区分ごとの件数と、職員が区分を直した件数
3つ目を残すのは、検針の数字が後から変わることがあるからです。 検針の訂正があると、過去の判断の根拠が変わります。当時の数字が残っていないと、再審査の説明ができません。
最後の行は、プロンプトと様式の見直しの材料です。 職員が fixture を underground に直した件数が多ければ、指示の例が足りていません。
04実装レベルの3段階
半自動化で、1件20分が13分程度になります。 読み取りと記録は自動になりますが、料金システムの照会が残ります。本格構成で7分になり、この段階が本記事の想定です。 差が大きいのは、第4章の②が1件ずつの画面の行き来だからです。 段階を飛ばさないでください。 半自動化の一覧を1か月見ると、unreadable の多い工事店と、区分の書き方が短い工事店が分かります。工事店に記入の仕方を頼んでから本格構成に進むほうが、needs_human が減ります。
05工数削減シミュレーション
導入後 120件 × 7分 ÷ 60 = 14 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 宅内の地下漏水による使用水量の減量(料金の減額)の制度を持ち、申請書と指定給水装置工事事業者の修繕の証明書を紙・郵送・窓口で受け付けている水道事業者。月に百件前後の申請があり、担当職員が料金システムで検針の記録と過去の適用を1件ずつ照会している場合。器具の故障や指定外の事業者による修理など、対象外の申請が一定の割合で混ざり、見落としが後から分かることがある場合。
- 減量の申請をすでに電子申請の入力項目で受けており、紙の書類がほとんど届かない水道事業者。月の申請が十数件で、窓口でその場で確かめられている場合。使用者の氏名・住所を国外のリージョンで処理することを、情報セキュリティポリシーで認められない場合。なお、減量を認めるかどうかの決定と、減量する水量の算定は、この構成では代替できません。
07最小構成で試す方法
- 先月受け付けた申請から20件を選ぶ(うち数件は、対象外と判断したものを入れる)
- 個人の氏名・住所・電話番号を黒塗りした写しを作る
- 証明書の漏水箇所の欄の文字を、手で書き写して表にする
- 手元の生成AIの画面で「次の漏水箇所の記述を、地中・床下・壁中・器具・その他・判断できない に分け、根拠の語を書いてください。器具の名前があっても壊れたのが配管なら器具にしないでください」と指示する
- 出てきた区分を、当時の職員の判断と突き合わせる
最初に確かめるのは、OCRではなく区分の読み分けです。 手で書き写した文字で区分が揃わないなら、OCRを足しても揃いません。
| 出てきた内容 | 判断 |
|---|---|
| 当時の判断と区分がほぼ揃った | OCRと料金システムの書き出しとの照合に進む |
| 器具の語に引きずられた | 指示の例を足せば直る。構成は有効 |
| 記述そのものが短すぎて区分できない | 様式と工事店への記入の依頼が先。 AIの問題ではない |
3行目は珍しくありません。 「漏水修理」とだけ書かれた証明書は、人が読んでも区分できません。京都市の記入例のように、地中・床下・壁中が分かる書き方を工事店に頼むほうが先です。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 器具の名前で対象外にしてしまう | 壊れた部材の位置と器具の名前を両方写させる。 例を指示に書く |
| 読めない使用者番号を似た番号に寄せる | 補完を禁じ、申請書と証明書の両方の番号を照らす |
| 区分を丸で囲む様式が読めない | ラジオボタンに対応しない。四角のチェック欄に様式を改める |
| 項目名が局の様式と合わない | キーは書類の文字そのまま。対応表を Python 側に持つ |
| 2回の検針にまたがる漏水 | 検針期を2つ並べて人へ。どちらの期に当てるかは要綱で決める |
| 指定事業者の一覧が古い | 一覧の更新日を照合の結果に残す |
| 解像度が足りない | 最低200dpi、300dpi以上が望ましい。複合機の既定を見直す |
| 写真の中身まで判定させたくなる | 写真の判断は職員。 枚数だけを記録する |
| 対象外の通知が自動で出る | 下書きまでにする。 通知は職員が決裁を経て出す |
| 料金システムに書き込みたくなる | 書き込まない。 算定と調定は職員が行う |
上の2行が、この構成の失敗のほとんどです。 どちらも「それらしい答えに寄せる」ことから起きます。根拠の文字列と、2か所の番号の一致という形で、寄せた跡が見えるようにしておくことが、運用に乗るかを決めます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 使用者の氏名・住所・電話番号、使用者番号、検針の水量、過去の減量の履歴、工事店の名称と指定番号です。
- 国外での処理の可否を先に決める … Document AI の対応リージョンに日本はありません。個人情報を米国・EU・シンガポール等で処理してよいかを、個人情報の保護の担当と決めます
- 生成AIに渡す範囲を絞る … 漏水箇所の区分に電話番号は要りません。区分の判断に渡すのは、漏水箇所・修繕日・事業者の欄の文字だけにする設計にできます
- 料金システムの書き出しを外部へ出さない … 照合は局内の Python で行い、検針の記録そのものをAIに渡さないでください
- 減量の可否はこの構成で決めない … 出すのは要件ごとの事実と根拠までです。対象外の通知は、職員が決裁を経て出します
- 工事店の評価に使わない …
unreadableや記入の短さの件数は、記入の依頼の材料です。指定の取消しなどの判断に流用しないでください
誤りが起きた場合のリスクは、対象のものを対象外と通知することと、対象外のものに減量を認めることの2つです。 前者は器具の語への引きずり、後者は使用者番号の取り違えから起きます。どちらも根拠の文字列と番号の照合で見えるようにしてあるので、そこを省かない運用にします。
10まず何から始めるか
1週目:要件の表を作る
自局の要綱から、対象になる箇所、対象外の故障、期間の条件、必要書類を表にします。静岡市や長野市の公開ページと見比べると、自局の要綱で書かれていない条件が見つかることがあります。
2週目:20件で区分を試す
先月の申請から20件を選び、漏水箇所の記述を写して区分させます。当時の職員の判断と食い違ったものを1件ずつ読み、指示の例を足します。
3週目:料金システムの書き出しを確かめる
検針の記録、過去の適用、給水装置の工事の記録が、使用者番号で引ける形で毎朝書き出せるかをベンダーと確かめます。
4週目:受付フォルダから項目の一覧までをつなぐ
Document AI と Claude API を呼び、項目の一覧を書き出すところまで作ります。この時点では verdict を出さず、項目のそろい方だけを見ます。
2か月目: 料金システムの書き出しと指定事業者の一覧との照合を足し、verdict を出します。3か月目以降: 不足書類の連絡文の下書きを足し、1件20分が何分になったかを実測します。工事店への記入の依頼と様式の改定まで済んだ時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 地中・壁内・床下等の給水管からの漏水に限り一定の基準で減量・減額すること。指定給水装置工事事業者による修繕と修繕工事報告書・工事前後の写真の提出。適用が検針月分(2か月)に1回であること。給水栓の故障、水洗便所の洗浄装置の故障、施工から1年以内、過去の使用水量の方が多い場合などが対象外であること。指定外の事業者の修理は対象外であること(原文を取得して確認) | 静岡市: 水道料金・下水道使用料の減額について | 2026-10-09 |
| 修繕完了後に過去の使用水量等を参考に減量認定すること。指定工事店による修繕証明書が必要なこと。適用期間が2期(4か月)であること。受水槽のボールタップの故障が条件付きで対象、器具の故障や操作不良が対象外であること(原文を取得して確認) | 長野市: 漏水等により給水装置を修繕されたときの手続き | 2026-10-09 |
| 漏水修繕施工証明書の記載項目(使用者、お客さま番号、減量の事由の地中・床下・壁中・その他、工事箇所、使用材料、修繕年月日)。地下漏水に限り減量できること。器具の故障による減額はできないこと。記入の不備や範囲外は受け付けないこと | 京都市上下水道局: 漏水修繕施工証明書(様式・記入例) | 2026-10-09 |
Form Parser がキーと値のペア、チェック欄、表、一般的な項目を抽出すること。日本語(ja)が手書きに対応する言語として示されていること。対応リージョンに日本が無いこと(HTMLを取得して確認) | Google Cloud: Processor list | 2026-10-09 |
| チェック欄がキーと値として抽出されること。ラジオボタンに対応しないこと。値の空欄のキーと値の組を確実には読めないこと | Google Cloud: Form Parser | 2026-10-09 |
formFields のキーが書類上の文字そのものであること。filled_checkbox/unfilled_checkbox。表の抽出は行・列をまたぐセルの無い表だけであること | Google Cloud: Handle the processing response | 2026-10-09 |
| スキャンは最低200dpi、300dpi以上が一般に最もよいこと。対応するファイル形式 | Google Cloud: Supported files | 2026-10-09 |
| オンライン処理のファイルが40MBまで、画像が40メガピクセルまで、Form Parser のオンライン処理が15ページまでであること | Google Cloud: Limits | 2026-10-09 |
output_config.format に JSON スキーマを渡して応答の形を固定できること | Claude API: Structured outputs | 2026-10-09 |
減量の要件と算定は水道事業者ごとに違います。自局の要綱と、国外での処理の可否は、担当課と情報セキュリティの担当で確かめてください。 本記事は確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1193)についてのご相談はこちらから。
