建設現場で交付した産業廃棄物の紙マニフェストの返送票を読み取り、交付日・数量・処分終了日を台帳にそろえて、返送期限を過ぎたものと記載の食い違いを拾う
収集運搬業者と処分業者から返ってくる紙マニフェストのB2票・D票・E票を読み取り、交付番号で台帳の行に結び付けます。返送期限を過ぎても戻らないものと、日付・数量・記載の食い違いを毎日拾います。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- Azure AI/Google Document AI
- 連携・自動化
- Google Apps Script/Python
- 対象業界
- 建設/製造
- 対象部門
- 物流/総務
- 対象業務
- 内容確認・チェック/台帳・マスタ管理
- 主な課題
- 入力作業が多い/期限・対応漏れが起きる/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/対応スピード向上/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 現場から届いたA票の控えをもとに、台帳に交付番号・交付日・現場・廃棄物の種類・数量・業者を書く
- 業者から返送票が郵送で届く
- 担当者が返送票の交付番号を読み、台帳とA票の控えのバインダーから該当の行を探す
- 返送票の運搬終了日・処分終了日・最終処分終了日を台帳に書き写す
- 返送票の数量・業者名・署名がA票の控えと合っているかを目で見る
- 返送票をA票の控えと一緒に綴じる
- 月末に台帳を見て、返送が来ていない行を探し、現場と業者に問い合わせる
- 人届いた返送票を、その日のうちに複合機でスキャンし、取込フォルダに保存する
- 自動Python のスクリプトが1時間ごとに取込フォルダを見て、Document AI の Form Parser に渡す
- 自動Form Parser が、票の文字、項目名と値の組、信頼度を返す
- 自動Claude API が、票の種類(B2・D・E)と、交付番号・日付・数量・業者名・署名の有無を台帳の項目にそろえる
- 自動Python が交付番号で台帳の行に結び付け、終了日を書き込み、A票の記録と比べて印を付ける
- 自動毎朝、台帳の全行について返送の期限を数え、期限が近いもの・過ぎたものの一覧を出す
- 人担当者が、印の付いた返送票と期限の一覧を見て、現場と業者に確かめる
- 人措置内容等報告書を出すかどうかを、環境の担当の責任者が決める
各工程の詳しい説明を読む
- 現場から届いたA票の控えをもとに、台帳に交付番号・交付日・現場・廃棄物の種類・数量・業者を書く
- 業者から返送票が郵送で届く
- 担当者が返送票の交付番号を読み、台帳とA票の控えのバインダーから該当の行を探す
- 返送票の運搬終了日・処分終了日・最終処分終了日を台帳に書き写す
- 返送票の数量・業者名・署名がA票の控えと合っているかを目で見る
- 返送票をA票の控えと一緒に綴じる
- 月末に台帳を見て、返送が来ていない行を探し、現場と業者に問い合わせる
(a)1枚ごとの探し物が多い。 交付番号は7桁前後の数字で、返送票の番号を読んでバインダーの中からA票を探します。月600枚、毎回探し物から始まります。
(b)期限の確認が月末だけになる。 返送の期限は交付日ごとに違い、台帳を毎日見て数える人がいません。 月末にまとめて見ると、90日を過ぎてから気づく行が出ます。報告の期限は、その期間が経過した日から30日以内です。
(c)記載の不足を見落とす。 返送票の処分終了日の欄が空いている、担当者の署名が無い、数量の単位が交付時と違う。日付を書き写すことに集中していると、空いている欄は目に入りません。
(d)複写の文字が薄い。 返送票は複写式で、下の票ほど文字が薄く、業者の手書きの日付が読みにくくなります。読みにくい日付を推して書き写すと、期限の計算そのものがずれます。
- 【人】 届いた返送票を、その日のうちに複合機でスキャンし、取込フォルダに保存する
- 【自動】 Python のスクリプトが1時間ごとに取込フォルダを見て、Document AI の Form Parser に渡す
- 【自動】 Form Parser が、票の文字、項目名と値の組、信頼度を返す
- 【自動】 Claude API が、票の種類(B2・D・E)と、交付番号・日付・数量・業者名・署名の有無を台帳の項目にそろえる
- 【自動】 Python が交付番号で台帳の行に結び付け、終了日を書き込み、A票の記録と比べて印を付ける
- 【自動】 毎朝、台帳の全行について返送の期限を数え、期限が近いもの・過ぎたものの一覧を出す
- 【人】 担当者が、印の付いた返送票と期限の一覧を見て、現場と業者に確かめる
- 【人】 措置内容等報告書を出すかどうかを、環境の担当の責任者が決める
6番目が、この設計でいちばん大事な工程です。 返送票を読み取るのは届いた紙の処理ですが、期限の一覧は届いていない紙の処理です。 台帳の行は交付のときにできているので、終了日が空のままの行を毎朝数えるだけで、戻っていないものが見えます。
紙は今までどおり綴じて保存します。 大阪府のページでは、A票・B2票・D票・E票は5年間保存しなければならないとされています。スキャンは原本の代わりではなく、台帳を作るための写しです。
02今回想定するシステム構成
返送票(B2票・D票・E票、複写式の紙) │ 届いた日に複合機でスキャン ▼【トリガー】Python のスクリプト(1時間ごと、社内のサーバーで定時実行) Python ── 形式・画質・ページ数の確認 ▼ Google Document AI(Form Parser) │ 票の文字、項目名と値の組、信頼度 ▼ Claude API ── 構造化出力で台帳の項目にそろえる │ 票の種類/交付番号/終了日/数量/業者名/署名の有無 ▼ Python ── 交付番号で台帳の行に結び付け、A票の記録と比較 │ ok/mismatch/missing/unreadable/no_ledger ▼ マニフェスト台帳 ──【毎朝】期限の計算 ├──▶ 記載の印が付いた返送票の一覧 └──▶ 期限が近い・過ぎた行の一覧(現場ごと) ▼ 【担当者が現場と業者に確認】──【責任者が報告の要否を決める】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Google Document AI(Form Parser) | Azure AI Document Intelligence |
| 生成AI | Claude API(票の種類と項目のそろえ) | OpenAI API、Gemini API |
| 連携 | Python(フォルダの監視、台帳への書き込み、A票との比較) | Google Apps Script |
| 集計 | Python(返送期限の計算と一覧の作成) | Google Apps Script |
| 保管 | 社内のファイルサーバー | Google ドライブ |
新しく作るのは、台帳の列の追加と、期限の規則の2つです。 台帳にはすでに交付番号・交付日・数量の列があるので、B2票・D票・E票の終了日と、記載の印の列を足します。 期限の規則は、普通の産業廃棄物と特別管理産業廃棄物で日数を分けます。
土台は Document AI の Form Parser です。 公式のプロセッサ一覧では、OCRのテキストに加えて、キーと値のペア、チェックボックス、表を抽出するとされ、言語の一覧で日本語(ja)は手書きに対応する言語として示されています。マニフェストは「交付番号」「運搬終了年月日」「処分終了年月日」などの印字の欄に手書きで記入する書式なので、キーと値のペアとして読めます。
Form Parser の注意書きのうち、この題材で効くのは、値の入っていないキーと値の組を確実には読み取れないことです。 処分終了日の欄が空の返送票は、「欄があって値が無い」形で返ってこないことがあります。欄が返ってこないことを、空欄と決めつけない設計にします(第7章)。
処理する場所は、Document AI のリージョンの一覧から選びます。 マルチリージョンの us と eu と、シンガポール(asia-southeast1)などの単一リージョンで、日本のリージョンはありません。 返送票に書かれるのは業者名・担当者名・廃棄物の種類と数量で、個人の情報は担当者の氏名程度ですが、国外で処理することは社内で確かめておきます。
03どうやって実装するのか
処理の起点を決める
届いた返送票を、その日のうちにスキャンして取込フォルダに保存することを起点にします。 郵便を開けた担当者が、その場で複合機に通します。届いた日にスキャンするのは、受け取った日を記録に残すためです。 記載の不足があったときの報告の期限は、写しの送付を受けた日から数えます。ファイル名に受け取った日付を入れる設定にします。
Python のスクリプトを、社内のサーバーで1時間ごとに定時実行します。 取込フォルダの新しいPDFを順に処理し、台帳への書き込みまで成功したものだけを処理済みのフォルダへ移します。 失敗したものは取込フォルダに残り、次の実行で拾い直されます。
期限の一覧は、別のスクリプトで毎朝7時に作ります。 返送票が1枚も届かない日でも、期限は進みます。読み取りの処理と期限の計算を分けておくと、読み取りが止まっていても期限の一覧は出続けます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 返送票のPDF | B2票・D票・E票。受け取った日(ファイル名) | 取込フォルダ |
| 読み取り結果 | 票の文字、項目名と値の組、要素ごとの信頼度 | Document AI(Form Parser) |
| マニフェスト台帳 | 交付番号、交付日、現場、廃棄物の種類、数量と単位、特別管理かどうか、収集運搬業者、処分業者、各票の終了日、印 | 社内のファイルサーバー |
| 委託先の一覧 | 業者名と、よく書かれる略称・旧社名 | 総務部で用意する一覧 |
質を決めるのは、台帳の「特別管理かどうか」の列です。 B2票とD票の期限は、普通の産業廃棄物が90日、特別管理産業廃棄物が60日です。列が空なら、短いほうの60日で数えます。 長いほうで数えると、特別管理のものの期限を過ぎてから気づくことになります。
委託先の一覧は、業者名の表記をそろえるために使います。 返送票の業者名は、業者のゴム印で押されることも、手書きで略されることもあります。台帳の業者名と一字一句が合わなくても、同じ業者として扱えるようにします。
データの取得方法を決める
読み取りは、Python から Document AI の処理の API を呼ぶだけです。公式のページには Python のクライアントライブラリで応答を扱う例が載っています。返ってきた Document から次のものを取ります。
| 取るもの | 応答のどこから | 何に使うか |
|---|---|---|
| 項目名と値の組 | pages[].formFields[] の fieldName と fieldValue | 交付番号、各終了年月日、数量、業者名、担当者の欄 |
| 全文のテキスト | text と各要素の textAnchor | 票の種類の見出し(「B2」「D」「E」の印字)、欄として取れなかった値 |
| 信頼度 | 各要素の layout の confidence | 複写の薄い文字が確かに読めているかの判定 |
票の種類は、印字の見出しから決めます。 7枚綴りの各票には票の名前が印字されているので、全文のテキストから探します。種類が分からないと、どの終了日の列に書くかが決まりません。 見つからなければ unknown として担当者に回します。
交付番号は、台帳の行を探す鍵です。 読み取った番号で台帳を引き、完全に一致する行が1つだけあるときだけ結び付けます。 1字違いの行に寄せることはしません。一致する行が無ければ no_ledger として、A票の控えがまだ本社に届いていないのか、番号の読み違いかを担当者が確かめます。
AIへ渡す前に整形する
- 形式の確認 … Document AI の対象は PDF、GIF、TIFF、JPEG、PNG、BMP、WebP などです。複合機のPDFはそのまま入れられます
- 画質の確認 … 公式には、スキャンは最低200dpiが望ましく、300dpi以上が一般に最もよい結果になるとされています。複写の薄い文字のために、複合機の設定を300dpi以上・濃いめに固定します
- 1枚1ファイル … 何枚もまとめてスキャンしたPDFは、ページごとに分けます。返送票は1枚が1ページなので、ページで分ければ票ごとになります
- 受け取った日の確認 … ファイル名の日付が無いものは、処理を止めて担当者に知らせます
- 重複の検知 … 同じ交付番号・同じ票の種類のものが2枚あれば、後のものを差し替えとして扱います
2番目がいちばん効きます。 返送票は複写の何枚目かなので、業者のボールペンの筆圧が弱いと、日付の数字がかすれています。 濃いめの設定でスキャンすると、信頼度が目に見えて変わることがあります。
AIに処理させる
させるのは、読み取り結果から票の種類と台帳の項目を取り出し、値ごとに状態を付けることだけです。 台帳との比較と期限の計算は Python が行います。
| 取り出すもの | 取り出し方 | 判断できないときの扱い |
|---|---|---|
| 票の種類 | 印字の見出しから B2/D/E | 見出しが無ければ unknown |
| 交付番号 | 「交付番号」の欄の数字をそのまま | 信頼度が低ければ空にして unreadable |
| 終了年月日 | B2票は運搬終了、D票は処分終了、E票は最終処分終了の欄 | 欄の値が無ければ missing、読めなければ unreadable |
| 数量と単位 | 欄に書かれた数字と単位をそのまま | 単位が書かれていなければ単位だけ missing |
| 業者名 | 欄の文字。委託先の一覧の名前に当てる | 一覧に無ければ書かれたまま、unlisted |
| 担当者の署名 | 欄に文字があるか | 空なら missing |
Python が比べる規則は次のとおりです。
| 比べること | 規則 |
|---|---|
| 数量 | 返送票の数量と単位が、台帳(A票)の数量と単位と同じか |
| 業者 | B2票は収集運搬業者、D票とE票は処分業者が、台帳の業者と同じか |
| 日付の順 | 運搬終了日 ≦ 処分終了日 ≦ 最終処分終了日、交付日 ≦ 運搬終了日になっているか |
| 期限 | 交付日からB2票・D票は90日(特別管理は60日)、E票は180日以内に届いているか |
日付の順の規則は、読み違いを拾うためにあります。 「10月1日」が「10月7日」と読まれても、それだけでは気づけません。処分終了日が運搬終了日より前になっていれば、どちらかの読み違いか、記載の誤りです。
| させないこと | 理由 |
|---|---|
| 読めない日付や番号の補完 | 期限の計算そのものがずれる |
| 交付番号の近い行への寄せ | 別のマニフェストに終了日が書き込まれる |
| 措置内容等報告書を出すかの判断 | 環境の担当の責任者が決める |
| 委託先の処理が適正かの判断 | 返送票から分かることではない |
| 数量の換算 | トンと立方メートルの換算をすると、食い違いが消える |
1行目がいちばん起きやすい失敗です。 処分終了日の数字がかすれているとき、AIは運搬終了日の数日後や交付日の数十日後といった「ありそうな日付」で埋めようとします。埋められた日付は台帳の上では正しく見え、期限の一覧からその行が消えます。
指示内容を固定する
あなたは建設会社の総務部で、産業廃棄物管理票(マニフェスト)の
返送票を台帳に記録する担当です。
渡すのは、返送票1枚の読み取り結果です。
書かれている文字だけを使って、台帳の項目に値を並べてください。
推測で埋めないでください。
【やること】
1. slip_type:印字の見出しから B2/D/E を選ぶ。見当たらなければ unknown
2. manifest_no:交付番号の欄の数字をそのまま写す
3. end_date:B2 は運搬終了年月日、D は処分終了年月日、
E は最終処分終了年月日の欄の値
4. quantity と unit:数量の欄の数字と単位をそのまま
5. company:業者名の欄の文字。委託先の一覧に当たれば一覧の名前
6. signer_present:担当者の署名欄に文字があれば true
7. 項目ごとに status を付ける
read(読めた)/missing(欄に値が無い)/
unreadable(文字はあるが信頼度が低い・読み方が2つ以上ある)
8. evidence に、根拠にした文字列をそのまま写す
【厳守事項】
- 読めない日付を、他の日付から推して埋めないでください。
- 交付番号の桁を補ったり、似た番号に直したりしないでください。
- 数量の単位を換算しないでください。書かれた単位のまま返してください。
- 欄の項目名だけがあって値が空なら missing です。
- 欄そのものが読み取り結果に見当たらないときは、
missing ではなく not_found とし、note に書いてください。
- 処理が適正か、報告が必要かは書かないでください。
【委託先の一覧】{companies}
【読み取り結果】{ocr_result}
missing と not_found を分けているのは、Form Parser の注意書きのためです。 値の入っていない欄は、欄として返ってこないことがあります。「欄はあったが空だった」と「欄が見つからなかった」を同じにすると、読み取りの取りこぼしを記載の不足として報告の候補にしてしまいます。 not_found は担当者が画像で欄を確かめます。
出力形式を固定する
Claude API の構造化出力を使い、次の形のJSONで受け取ります。 output_config.format に JSON スキーマを渡すと、応答がそのスキーマに沿った形になります。
{
"file": "20261007_return_014.pdf",
"received_date": "2026-10-07",
"slip_type": "D",
"fields": [
{ "name": "manifest_no", "value": "1234567", "status": "read",
"confidence": 0.97, "evidence": "1234567", "note": "" },
{ "name": "end_date", "value": "", "status": "unreadable",
"confidence": 0.42, "evidence": "R8.9.?", "note": "日の数字がかすれている" },
{ "name": "quantity", "value": "4.5", "status": "read",
"confidence": 0.93, "evidence": "4.5", "note": "" },
{ "name": "unit", "value": "m3", "status": "read",
"confidence": 0.90, "evidence": "㎥", "note": "" },
{ "name": "company", "value": "○○環境サービス", "status": "read",
"confidence": 0.88, "evidence": "○○環境サービス", "note": "" },
{ "name": "signer_present", "value": "true", "status": "read",
"confidence": 0.95, "evidence": "(署名あり)", "note": "" }
]
}
1つ目の理由は、比較と期限の計算をAIの外に出せることです。 AIが返すのは票1枚の値までで、台帳との比較と期限は Python が行います。期限の日数や業者の一覧が変わっても、AIを呼び直さずに計算だけをやり直せます。
2つ目は、status で報告の候補と読み直しの候補を分けられることです。 missing は記載の不足の候補、unreadable と not_found は画像を見直す候補です。この2つを混ぜると、読めなかっただけの返送票を、法定事項の記載が無いものとして扱ってしまいます。
公式のページでは、列挙の値の大文字・小文字までは保証されないとされているので、status と slip_type は Python で正規化してから使います。stop_reason が max_tokens のときは出力が途中で切れているので、台帳に書かずに呼び直します。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 取込フォルダ | Python で定時に読む | 新しいPDFを処理し、成功したものを処理済みへ移す |
| Document AI | Python のクライアントライブラリから処理の API を呼ぶ | 票の文字、項目名と値の組、信頼度 |
| Claude API | Python から呼ぶ | 票の種類と台帳の項目のそろえ |
| マニフェスト台帳 | Python で行を探して書き込む | 終了日、受け取った日、印 |
| 期限の一覧 | 毎朝作るファイルとメール | 現場ごとに、期限が近い行と過ぎた行 |
台帳への書き込みは、終了日と印の列だけにします。 交付番号・交付日・数量などの交付時の記録は、A票から人が作った値です。返送票の値で上書きしません。 数量が違えば mismatch の印を付け、どちらが正しいかは担当者が確かめます。
期限の一覧は、現場ごとに分けて現場の担当者にも送ります。 返送が遅れている理由は、現場が業者とのやり取りで知っていることが多いからです。
人が確認する
- 毎朝、期限の一覧を見る … 期限まで14日を切った行は、現場と業者に状況を問い合わせます。期限を過ぎた行は、環境の担当の責任者に回します
- 印の付いた返送票を見る …
unreadable・not_found・no_ledgerは画像を見て値を直し、missing・mismatchは業者に確かめます - 直した記録を残す … どの項目を、どの値からどの値に直したかを台帳の別の列に書きます
- 報告の要否を決める … 期限を過ぎたもの、法定事項の記載が無いものについて、責任者が措置と報告を決めます
1番目を毎朝にするのは、期限の前に動くためです。 業者に問い合わせると、返送票が郵送の途中だったり、処分は終わっているのに送付が遅れていたりすることが分かります。期限を過ぎてから分かるのと、2週間前に分かるのとでは、取れる手が違います。
目標は、600枚をならして1枚1分です。 印の付く返送票が1割前後という想定で、それより多い月は、スキャンの設定か、特定の業者の書き方を疑います。
例外に対処する
| 起きること | 対応 |
|---|---|
| 交付番号が台帳に無い | no_ledger。A票の控えが届いていないか、番号の読み違いかを確かめる |
| 同じ交付番号・同じ票が2枚届く | 後のものを差し替えとし、前のものも残す |
| 1つの交付番号で票の種類がそろわない | E票だけ先に届いたなど。順の規則で印を付け、業者に確かめる |
| 票の種類が分からない | unknown。担当者が種類を指定して処理し直す |
| 複写が薄くて全体が読めない | 原本を見て手で入力する。業者に筆圧の強い記入を頼む |
| 欄が読み取り結果に見当たらない | not_found。画像で欄を確かめる |
| 特別管理かどうかが台帳で空 | 60日で数え、台帳の整備を求める |
| Document AI か Claude API が応答しない | PDFを取込フォルダに残し、次の実行で拾い直す |
1行目は、台帳の側に原因があることが多いものです。 A票の控えが現場から本社に届くのが遅いと、返送票が先に届いて no_ledger になります。A票の控えも、届いた日にスキャンして台帳の行を作る運用にすると、この例外は減ります。
記録を残す
- スキャンしたPDFと、受け取った日(紙の原本は今までどおり5年間綴じて保存する)
- Document AI が返したJSONの全文
- Claude API に渡した入力と、返ってきたJSON
- 台帳に書き込んだ値、付けた印、人が直した記録
- 期限の一覧の日ごとの控えと、そのときの期限の規則の版
- 現場・業者への問い合わせの記録と、報告を出したかどうか
期限の一覧の控えを日ごとに残すのは、いつ気づいたかを後から示せるようにするためです。 報告の期限は、期間が経過した日から30日以内です。期限を過ぎた行が一覧に初めて出た日が記録に残っていれば、対応が遅れたかどうかを説明できます。
04実装レベルの3段階
最小構成では枚数がさばけません。 確かめるための段階です。ただし、期限の数え上げだけは最小構成のうちから毎日回せます。 半自動化で、1枚4分が2分程度になります。 書き写しはなくなりますが、台帳の行を探して値を移し、A票と見比べるのはまだ人です。本格構成で1分になり、この段階が本記事の想定です。 差が大きいのは、交付番号で台帳の行が自動で決まり、探し物がなくなるからです。 段階を飛ばさないでください。 半自動化の一覧を1か月見ると、どの業者の返送票で読めない値が多いか、どの業者名の書き方が一覧に無いかが分かります。そこを直してから台帳への書き込みを始めるほうが、台帳を汚しません。
05工数削減シミュレーション
導入後 600件 × 1分 ÷ 60 = 10 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 同時に10前後の現場を持ち、現場ごとに紙のマニフェストを月に数十枚交付している建設会社。収集運搬業者と処分業者から返送されるB2票・D票・E票を本社の総務や工務がA票の控えと突き合わせ、台帳に日付を書き写している場合。返送が来ていないことに、期限を過ぎてから気づくことがある場合。社内にPythonを動かせるサーバーか常時起動のPCがある場合。
- マニフェストをすでに電子マニフェストに切り替えており、紙の返送票がほとんど無い場合。交付が月に数枚で、担当者が手元の一覧で追える場合。処理業者が返送票をスキャンして送ってこず、紙が各現場に散らばったまま本社に集まらない場合。なお、措置内容等報告書を出すかどうかの判断、委託先の処理が適正かどうかの判断は、この構成では代替できません。
07最小構成で試す方法
- 先月届いた返送票から30枚を選ぶ(B2・D・Eをそれぞれ入れ、複写の薄いものも入れる)
- 30枚をスキャンして、手元のAIサービスの画面に1枚ずつ貼り付ける
- 「この票の種類(B2・D・E)、交付番号、終了年月日、数量と単位、業者名、担当者の署名の有無を書き出してください。読めない値は空にし、推測で埋めないでください」と指示する
- 書き出された値を、台帳に書き写した値と比べる
- あわせて、台帳の全行について、交付日から90日・180日を数え、終了日が空の行を数える
5番目はAIを使いません。 台帳の行に交付日が入っていれば、表計算ソフトの式だけで期限を過ぎた行を数えられます。この数が0でなければ、読み取りより先に期限の一覧を作る価値があります。
| 出てきた内容 | 判断 |
|---|---|
| 台帳に書き写した値とほぼ同じになった | Document AI と Python のつなぎに進む |
| かすれた日付を推して埋めた | 指示の書き方で直る。構成は有効 |
| 複写の薄い票が読めない | スキャンの設定が先。 AIの問題ではない |
| 期限を過ぎた行が見つかった | 読み取りの前に、期限の一覧だけを先に始める |
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| かすれた日付を推して埋める | 指示で禁じ、日付の順の規則で読み違いを拾う |
| 交付番号を近い行に寄せる | 完全に一致する1行のときだけ結び付ける |
| 空欄の欄が返ってこない | 値の無いキーと値の組は確実には読めない。not_found として画像で確かめる |
missing と unreadable が混ざる | 混ぜると、読めなかっただけの票を記載の不足として扱う |
| 特別管理の期限を90日で数える | 列が空なら60日で数える |
| 数量の単位を換算する | 換算を禁じ、単位ごと比べる |
| 返送票の値で交付時の記録を上書きする | 終了日と印の列だけを書く |
| 複写の薄い票が読めない | 複合機を300dpi以上・濃いめに固定する |
| 返送票が来ない日に期限の一覧が止まる | 読み取りと期限の計算を別のスクリプトにする |
| スキャンを原本の代わりにする | 紙は5年間綴じて保存する |
上の2行が、この構成でいちばん避けたい失敗です。 どちらも、台帳の上ではきれいに埋まった行を作り、期限の一覧からその行を消します。 埋まっていないことのほうが、期限の管理にとっては安全です。
5行目は、規則の初期値の話です。 迷ったら短いほうで数える、を最初から決めておくと、台帳の整備が遅れても期限を過ぎてから気づく事態にはなりません。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 交付番号、現場名、廃棄物の種類と数量、収集運搬業者と処分業者の名前、業者の担当者の氏名です。
- 国外で処理されることを確かめる … Document AI のリージョンの一覧に日本はありません。
us、eu、単一リージョンのどこで処理するかを決めます - AIに渡す範囲を絞る … Claude API には読み取り結果と委託先の一覧だけを渡し、台帳の全体は渡しません。 台帳との比較は Python の中で行います
- 報告の判断をAIや規則に任せない … 千葉県のページでは、期限内に写しの送付を受けない場合や、法定事項が記載されていない写しの送付を受けた場合に、措置内容等報告書の提出が要るとされています。この構成が出すのはその候補の一覧で、報告するかどうかは責任者が決めます
- 原本を残す … A票・B2票・D票・E票の保存は5年間とされています。スキャンしたPDFと台帳は、原本を探すための索引として扱います
- 委託先の処理を評価しない … 返送の遅れや記載の不足は、業者の処理が不適正であることを意味しません。一覧を業者の評価に使うときは、遅れの理由を確かめてからにします
誤りが起きた場合のリスクは、戻っていないマニフェストを戻ったものとして扱うことと、記載の不足を見落とすことの2つです。 前者は読めない日付を埋めると起き、後者は missing と unreadable を混ぜると起きます。どちらも、値を埋めない指示と、状態を分ける出力の形で防ぎます。
10まず何から始めるか
1週目:期限の一覧を先に作る
今の台帳に交付日が入っていれば、表計算ソフトの式で、B2票・D票は90日(特別管理は60日)、E票は180日を数え、終了日が空の行を出します。AIを入れる前に、期限を過ぎた行が今いくつあるかを数えます。
2週目:30枚で試す
先月の返送票から30枚を選び、手元のAIサービスに貼って値を書き出させます。かすれた日付を推して埋めていないかを最優先で見ます。
3週目:台帳を整える
「特別管理かどうか」と、B2票・D票・E票の終了日、印の列を台帳にそろえます。委託先の一覧を作り、A票の控えを届いた日にスキャンして台帳の行を作る運用を現場と決めます。
4週目:取込フォルダから読み取りまでをつなぐ
Python で取込フォルダを見張り、Document AI と Claude API を呼び、読み取った値を一覧に書き出すところまで作ります。この時点では台帳に書き込まず、一覧と台帳を担当者が見比べます。
2か月目: 交付番号で台帳に書き込み、A票の記録との比較の印を出します。3か月目以降: 期限の一覧を現場ごとに分けて送り、1枚4分が何分になったかを実測します。期限を過ぎてから気づく行が出なくなった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| A票・B2票・D票・E票を5年間保存すること。B2票・D票が交付の日から90日以内(特別管理産業廃棄物は60日以内)、E票が180日以内に送付されない場合に、状況を把握して措置を講じ知事に報告すること。7枚綴りの流れ(運搬終了後10日以内のB2票、処分終了後10日以内のD票、最終処分終了の確認後10日以内のE票) | 大阪府: マニフェスト制度のページ(紙マニフェストの場合) | 2026-10-07 |
| 期限内に写しの送付を受けない場合は期間が経過した日から30日以内、法定事項が記載されていない写しの送付を受けた場合は送付を受けた日から30日以内に措置内容等報告書を出すこと | 千葉県: 産業廃棄物管理票(マニフェスト)に係る措置内容等の報告 | 2026-10-07 |
Form Parser がキーと値のペア、チェックボックス、表を抽出すること。日本語(ja)が手書きに対応する言語に含まれること | Google Cloud: Processor list | 2026-10-07 |
| 値の入っていないキーと値の組を確実には読み取れないこと | Google Cloud: Form Parser | 2026-10-07 |
項目名と値の組が formFields の fieldName/fieldValue で返ること。Python のクライアントライブラリで応答を扱う例 | Google Cloud: Handle the processing response | 2026-10-07 |
| 対応形式。スキャンは最低200dpiが望ましく300dpi以上が一般に最もよいこと | Google Cloud: Supported files | 2026-10-07 |
処理の場所が us・eu と単一リージョンで、日本が無いこと | Google Cloud: Regional and multi-regional support | 2026-10-07 |
output_config.format で応答の形を固定できること。列挙の値の大文字・小文字が保証されないこと。max_tokens で打ち切られうること | Claude API: Structured outputs | 2026-10-07 |
措置内容等報告書の提出先と様式は、排出事業場のある自治体によって異なります。 本記事は大阪府と千葉県の公開ページで確認できた範囲だけを扱っています。報告するかどうかは、自社の環境の担当の責任者が判断してください。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0796)についてのご相談はこちらから。
