Media > AI活用ユースケース > 物流 > 建設現場で交付した産業廃棄物の紙マニフェストの返送票を読み取り、交付日・数量・処分終了日を台帳にそろえて、返送期限を過ぎたものと記載の食い違いを拾う

建設現場で交付した産業廃棄物の紙マニフェストの返送票を読み取り、交付日・数量・処分終了日を台帳にそろえて、返送期限を過ぎたものと記載の食い違いを拾う

実装ステータス:構成例 技術的に実現可能な構成として設計したもの。自社未検証

収集運搬業者と処分業者から返ってくる紙マニフェストのB2票・D票・E票を読み取り、交付番号で台帳の行に結び付けます。返送期限を過ぎても戻らないものと、日付・数量・記載の食い違いを毎日拾います。

サマリー
生成AI
ChatGPT/Claude/Gemini
AIサービス
Azure AI/Google Document AI
連携・自動化
Google Apps Script/Python
対象業界
建設/製造
対象部門
物流/総務
対象業務
内容確認・チェック/台帳・マスタ管理
主な課題
入力作業が多い/期限・対応漏れが起きる/確認ミスが多い
AIで行う処理
読み取り(OCR)
主な効果
入力漏れ削減/対応スピード向上/工数削減
導入難易度
★★☆☆☆
実装レベル
本格構成
費用感
API連携(中)
人間の確認
条件付き
現在工数
40h/月
AI導入後
10h/月
想定削減
75%
年間削減
360h
モデル条件による試算値です。実在企業の実績ではありません。

01導入前 / 導入後の業務フロー

導入前(Before)
  1. 現場から届いたA票の控えをもとに、台帳に交付番号・交付日・現場・廃棄物の種類・数量・業者を書く
  2. 業者から返送票が郵送で届く
  3. 担当者が返送票の交付番号を読み、台帳とA票の控えのバインダーから該当の行を探す
  4. 返送票の運搬終了日・処分終了日・最終処分終了日を台帳に書き写す
  5. 返送票の数量・業者名・署名がA票の控えと合っているかを目で見る
  6. 返送票をA票の控えと一緒に綴じる
  7. 月末に台帳を見て、返送が来ていない行を探し、現場と業者に問い合わせる
導入後(After)
  1. 人届いた返送票を、その日のうちに複合機でスキャンし、取込フォルダに保存する
  2. 自動Python のスクリプトが1時間ごとに取込フォルダを見て、Document AI の Form Parser に渡す
  3. 自動Form Parser が、票の文字、項目名と値の組、信頼度を返す
  4. 自動Claude API が、票の種類(B2・D・E)と、交付番号・日付・数量・業者名・署名の有無を台帳の項目にそろえる
  5. 自動Python が交付番号で台帳の行に結び付け、終了日を書き込み、A票の記録と比べて印を付ける
  6. 自動毎朝、台帳の全行について返送の期限を数え、期限が近いもの・過ぎたものの一覧を出す
  7. 人担当者が、印の付いた返送票と期限の一覧を見て、現場と業者に確かめる
  8. 人措置内容等報告書を出すかどうかを、環境の担当の責任者が決める
各工程の詳しい説明を読む
  1. 現場から届いたA票の控えをもとに、台帳に交付番号・交付日・現場・廃棄物の種類・数量・業者を書く
  2. 業者から返送票が郵送で届く
  3. 担当者が返送票の交付番号を読み、台帳とA票の控えのバインダーから該当の行を探す
  4. 返送票の運搬終了日・処分終了日・最終処分終了日を台帳に書き写す
  5. 返送票の数量・業者名・署名がA票の控えと合っているかを目で見る
  6. 返送票をA票の控えと一緒に綴じる
  7. 月末に台帳を見て、返送が来ていない行を探し、現場と業者に問い合わせる

(a)1枚ごとの探し物が多い。 交付番号は7桁前後の数字で、返送票の番号を読んでバインダーの中からA票を探します。月600枚、毎回探し物から始まります。

(b)期限の確認が月末だけになる。 返送の期限は交付日ごとに違い、台帳を毎日見て数える人がいません。 月末にまとめて見ると、90日を過ぎてから気づく行が出ます。報告の期限は、その期間が経過した日から30日以内です。

(c)記載の不足を見落とす。 返送票の処分終了日の欄が空いている、担当者の署名が無い、数量の単位が交付時と違う。日付を書き写すことに集中していると、空いている欄は目に入りません。

(d)複写の文字が薄い。 返送票は複写式で、下の票ほど文字が薄く、業者の手書きの日付が読みにくくなります。読みにくい日付を推して書き写すと、期限の計算そのものがずれます。

  1. 【人】 届いた返送票を、その日のうちに複合機でスキャンし、取込フォルダに保存する
  2. 【自動】 Python のスクリプトが1時間ごとに取込フォルダを見て、Document AI の Form Parser に渡す
  3. 【自動】 Form Parser が、票の文字、項目名と値の組、信頼度を返す
  4. 【自動】 Claude API が、票の種類(B2・D・E)と、交付番号・日付・数量・業者名・署名の有無を台帳の項目にそろえる
  5. 【自動】 Python が交付番号で台帳の行に結び付け、終了日を書き込み、A票の記録と比べて印を付ける
  6. 【自動】 毎朝、台帳の全行について返送の期限を数え、期限が近いもの・過ぎたものの一覧を出す
  7. 【人】 担当者が、印の付いた返送票と期限の一覧を見て、現場と業者に確かめる
  8. 【人】 措置内容等報告書を出すかどうかを、環境の担当の責任者が決める

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
   ▼
マニフェスト台帳 ──【毎朝】期限の計算
   ├──▶ 記載の印が付いた返送票の一覧
   └──▶ 期限が近い・過ぎた行の一覧(現場ごと)
   ▼
【担当者が現場と業者に確認】──【責任者が報告の要否を決める】
役割想定する製品代替候補
OCRGoogle Document AI(Form Parser)Azure AI Document Intelligence
生成AIClaude 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どうやって実装するのか

Step1

処理の起点を決める

届いた返送票を、その日のうちにスキャンして取込フォルダに保存することを起点にします。 郵便を開けた担当者が、その場で複合機に通します。届いた日にスキャンするのは、受け取った日を記録に残すためです。 記載の不足があったときの報告の期限は、写しの送付を受けた日から数えます。ファイル名に受け取った日付を入れる設定にします。

Python のスクリプトを、社内のサーバーで1時間ごとに定時実行します。 取込フォルダの新しいPDFを順に処理し、台帳への書き込みまで成功したものだけを処理済みのフォルダへ移します。 失敗したものは取込フォルダに残り、次の実行で拾い直されます。

期限の一覧は、別のスクリプトで毎朝7時に作ります。 返送票が1枚も届かない日でも、期限は進みます。読み取りの処理と期限の計算を分けておくと、読み取りが止まっていても期限の一覧は出続けます。

Step2

入力データを集める

データ中身取得元
返送票のPDFB2票・D票・E票。受け取った日(ファイル名)取込フォルダ
読み取り結果票の文字、項目名と値の組、要素ごとの信頼度Document AI(Form Parser)
マニフェスト台帳交付番号、交付日、現場、廃棄物の種類、数量と単位、特別管理かどうか、収集運搬業者、処分業者、各票の終了日、印社内のファイルサーバー
委託先の一覧業者名と、よく書かれる略称・旧社名総務部で用意する一覧

質を決めるのは、台帳の「特別管理かどうか」の列です。 B2票とD票の期限は、普通の産業廃棄物が90日、特別管理産業廃棄物が60日です。列が空なら、短いほうの60日で数えます。 長いほうで数えると、特別管理のものの期限を過ぎてから気づくことになります。

委託先の一覧は、業者名の表記をそろえるために使います。 返送票の業者名は、業者のゴム印で押されることも、手書きで略されることもあります。台帳の業者名と一字一句が合わなくても、同じ業者として扱えるようにします。

Step3

データの取得方法を決める

読み取りは、Python から Document AI の処理の API を呼ぶだけです。公式のページには Python のクライアントライブラリで応答を扱う例が載っています。返ってきた Document から次のものを取ります。

取るもの応答のどこから何に使うか
項目名と値の組pages[].formFields[] の fieldName と fieldValue交付番号、各終了年月日、数量、業者名、担当者の欄
全文のテキストtext と各要素の textAnchor票の種類の見出し(「B2」「D」「E」の印字)、欄として取れなかった値
信頼度各要素の layout の confidence複写の薄い文字が確かに読めているかの判定

票の種類は、印字の見出しから決めます。 7枚綴りの各票には票の名前が印字されているので、全文のテキストから探します。種類が分からないと、どの終了日の列に書くかが決まりません。 見つからなければ unknown として担当者に回します。

交付番号は、台帳の行を探す鍵です。 読み取った番号で台帳を引き、完全に一致する行が1つだけあるときだけ結び付けます。 1字違いの行に寄せることはしません。一致する行が無ければ no_ledger として、A票の控えがまだ本社に届いていないのか、番号の読み違いかを担当者が確かめます。

Step4

AIへ渡す前に整形する

  1. 形式の確認 … Document AI の対象は PDF、GIF、TIFF、JPEG、PNG、BMP、WebP などです。複合機のPDFはそのまま入れられます
  2. 画質の確認 … 公式には、スキャンは最低200dpiが望ましく、300dpi以上が一般に最もよい結果になるとされています。複写の薄い文字のために、複合機の設定を300dpi以上・濃いめに固定します
  3. 1枚1ファイル … 何枚もまとめてスキャンしたPDFは、ページごとに分けます。返送票は1枚が1ページなので、ページで分ければ票ごとになります
  4. 受け取った日の確認 … ファイル名の日付が無いものは、処理を止めて担当者に知らせます
  5. 重複の検知 … 同じ交付番号・同じ票の種類のものが2枚あれば、後のものを差し替えとして扱います

2番目がいちばん効きます。 返送票は複写の何枚目かなので、業者のボールペンの筆圧が弱いと、日付の数字がかすれています。 濃いめの設定でスキャンすると、信頼度が目に見えて変わることがあります。

Step5

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は運搬終了日の数日後や交付日の数十日後といった「ありそうな日付」で埋めようとします。埋められた日付は台帳の上では正しく見え、期限の一覧からその行が消えます。

Step6

指示内容を固定する

あなたは建設会社の総務部で、産業廃棄物管理票(マニフェスト)の
返送票を台帳に記録する担当です。
渡すのは、返送票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 は担当者が画像で欄を確かめます。

Step7

出力形式を固定する

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 のときは出力が途中で切れているので、台帳に書かずに呼び直します。

Step8

システムへ連携する

つなぎ先方式内容
取込フォルダPython で定時に読む新しいPDFを処理し、成功したものを処理済みへ移す
Document AIPython のクライアントライブラリから処理の API を呼ぶ票の文字、項目名と値の組、信頼度
Claude APIPython から呼ぶ票の種類と台帳の項目のそろえ
マニフェスト台帳Python で行を探して書き込む終了日、受け取った日、印
期限の一覧毎朝作るファイルとメール現場ごとに、期限が近い行と過ぎた行

台帳への書き込みは、終了日と印の列だけにします。 交付番号・交付日・数量などの交付時の記録は、A票から人が作った値です。返送票の値で上書きしません。 数量が違えば mismatch の印を付け、どちらが正しいかは担当者が確かめます。

期限の一覧は、現場ごとに分けて現場の担当者にも送ります。 返送が遅れている理由は、現場が業者とのやり取りで知っていることが多いからです。

Step9

人が確認する

  1. 毎朝、期限の一覧を見る … 期限まで14日を切った行は、現場と業者に状況を問い合わせます。期限を過ぎた行は、環境の担当の責任者に回します
  2. 印の付いた返送票を見る … unreadable・not_found・no_ledger は画像を見て値を直し、missing・mismatch は業者に確かめます
  3. 直した記録を残す … どの項目を、どの値からどの値に直したかを台帳の別の列に書きます
  4. 報告の要否を決める … 期限を過ぎたもの、法定事項の記載が無いものについて、責任者が措置と報告を決めます

1番目を毎朝にするのは、期限の前に動くためです。 業者に問い合わせると、返送票が郵送の途中だったり、処分は終わっているのに送付が遅れていたりすることが分かります。期限を過ぎてから分かるのと、2週間前に分かるのとでは、取れる手が違います。

目標は、600枚をならして1枚1分です。 印の付く返送票が1割前後という想定で、それより多い月は、スキャンの設定か、特定の業者の書き方を疑います。

Step10

例外に対処する

起きること対応
交付番号が台帳に無いno_ledger。A票の控えが届いていないか、番号の読み違いかを確かめる
同じ交付番号・同じ票が2枚届く後のものを差し替えとし、前のものも残す
1つの交付番号で票の種類がそろわないE票だけ先に届いたなど。順の規則で印を付け、業者に確かめる
票の種類が分からないunknown。担当者が種類を指定して処理し直す
複写が薄くて全体が読めない原本を見て手で入力する。業者に筆圧の強い記入を頼む
欄が読み取り結果に見当たらないnot_found。画像で欄を確かめる
特別管理かどうかが台帳で空60日で数え、台帳の整備を求める
Document AI か Claude API が応答しないPDFを取込フォルダに残し、次の実行で拾い直す

1行目は、台帳の側に原因があることが多いものです。 A票の控えが現場から本社に届くのが遅いと、返送票が先に届いて no_ledger になります。A票の控えも、届いた日にスキャンして台帳の行を作る運用にすると、この例外は減ります。

Step11

記録を残す

  • スキャンしたPDFと、受け取った日(紙の原本は今までどおり5年間綴じて保存する)
  • Document AI が返したJSONの全文
  • Claude API に渡した入力と、返ってきたJSON
  • 台帳に書き込んだ値、付けた印、人が直した記録
  • 期限の一覧の日ごとの控えと、そのときの期限の規則の版
  • 現場・業者への問い合わせの記録と、報告を出したかどうか

期限の一覧の控えを日ごとに残すのは、いつ気づいたかを後から示せるようにするためです。 報告の期限は、期間が経過した日から30日以内です。期限を過ぎた行が一覧に初めて出た日が記録に残っていれば、対応が遅れたかどうかを説明できます。

04実装レベルの3段階

最小構成:返送票を手でAIの画面に貼り、値を書き出させる。期限は表計算ソフトの式で数える / 1枚ごとの読み取りと期限の数え上げ
半自動化:上記+取込フォルダから Document AI と Claude API を呼び、読み取った値を一覧に書き出す / 読み取りと値の一覧化
本格構成:上記+交付番号で台帳に書き込み、A票の記録と比べて印を付け、期限の一覧を毎朝出す / 記録、比較、期限の管理

最小構成では枚数がさばけません。 確かめるための段階です。ただし、期限の数え上げだけは最小構成のうちから毎日回せます。 半自動化で、1枚4分が2分程度になります。 書き写しはなくなりますが、台帳の行を探して値を移し、A票と見比べるのはまだ人です。本格構成で1分になり、この段階が本記事の想定です。 差が大きいのは、交付番号で台帳の行が自動で決まり、探し物がなくなるからです。 段階を飛ばさないでください。 半自動化の一覧を1か月見ると、どの業者の返送票で読めない値が多いか、どの業者名の書き方が一覧に無いかが分かります。そこを直してから台帳への書き込みを始めるほうが、台帳を汚しません。

05工数削減シミュレーション

前提値(モデル条件)
対象人数
3 名
月間件数
600 件
1件あたり現在時間
4 分
1件あたり導入後時間
1 分
現在  600件 × 4分 ÷ 60 = 40 時間/月
導入後 600件 × 1分 ÷ 60 = 10 時間/月
月間削減時間
30h
削減率
75%
年間削減時間
360h
年間金額換算(時間単価3,000円)
108万円
モデル条件による試算であり、実際の効果は業務内容・運用方法によって異なります。

自社条件で導入効果を整理したい方へ

このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。

AI活用について相談する

06向いている企業・向いていない企業

向いている
  1. 同時に10前後の現場を持ち、現場ごとに紙のマニフェストを月に数十枚交付している建設会社。収集運搬業者と処分業者から返送されるB2票・D票・E票を本社の総務や工務がA票の控えと突き合わせ、台帳に日付を書き写している場合。返送が来ていないことに、期限を過ぎてから気づくことがある場合。社内にPythonを動かせるサーバーか常時起動のPCがある場合。
向いていない
  1. マニフェストをすでに電子マニフェストに切り替えており、紙の返送票がほとんど無い場合。交付が月に数枚で、担当者が手元の一覧で追える場合。処理業者が返送票をスキャンして送ってこず、紙が各現場に散らばったまま本社に集まらない場合。なお、措置内容等報告書を出すかどうかの判断、委託先の処理が適正かどうかの判断は、この構成では代替できません。

07最小構成で試す方法

  1. 先月届いた返送票から30枚を選ぶ(B2・D・Eをそれぞれ入れ、複写の薄いものも入れる)
  2. 30枚をスキャンして、手元のAIサービスの画面に1枚ずつ貼り付ける
  3. 「この票の種類(B2・D・E)、交付番号、終了年月日、数量と単位、業者名、担当者の署名の有無を書き出してください。読めない値は空にし、推測で埋めないでください」と指示する
  4. 書き出された値を、台帳に書き写した値と比べる
  5. あわせて、台帳の全行について、交付日から90日・180日を数え、終了日が空の行を数える

5番目はAIを使いません。 台帳の行に交付日が入っていれば、表計算ソフトの式だけで期限を過ぎた行を数えられます。この数が0でなければ、読み取りより先に期限の一覧を作る価値があります。

出てきた内容判断
台帳に書き写した値とほぼ同じになったDocument AI と Python のつなぎに進む
かすれた日付を推して埋めた指示の書き方で直る。構成は有効
複写の薄い票が読めないスキャンの設定が先。 AIの問題ではない
期限を過ぎた行が見つかった読み取りの前に、期限の一覧だけを先に始める

08実装時につまずきやすいポイント

問題対策
かすれた日付を推して埋める指示で禁じ、日付の順の規則で読み違いを拾う
交付番号を近い行に寄せる完全に一致する1行のときだけ結び付ける
空欄の欄が返ってこない値の無いキーと値の組は確実には読めない。not_found として画像で確かめる
missing と unreadable が混ざる混ぜると、読めなかっただけの票を記載の不足として扱う
特別管理の期限を90日で数える列が空なら60日で数える
数量の単位を換算する換算を禁じ、単位ごと比べる
返送票の値で交付時の記録を上書きする終了日と印の列だけを書く
複写の薄い票が読めない複合機を300dpi以上・濃いめに固定する
返送票が来ない日に期限の一覧が止まる読み取りと期限の計算を別のスクリプトにする
スキャンを原本の代わりにする紙は5年間綴じて保存する

上の2行が、この構成でいちばん避けたい失敗です。 どちらも、台帳の上ではきれいに埋まった行を作り、期限の一覧からその行を消します。 埋まっていないことのほうが、期限の管理にとっては安全です。

5行目は、規則の初期値の話です。 迷ったら短いほうで数える、を最初から決めておくと、台帳の整備が遅れても期限を過ぎてから気づく事態にはなりません。

09セキュリティ・AIガバナンス上の注意点

この構成で扱うデータ: 交付番号、現場名、廃棄物の種類と数量、収集運搬業者と処分業者の名前、業者の担当者の氏名です。

  1. 国外で処理されることを確かめる … Document AI のリージョンの一覧に日本はありません。us、eu、単一リージョンのどこで処理するかを決めます
  2. AIに渡す範囲を絞る … Claude API には読み取り結果と委託先の一覧だけを渡し、台帳の全体は渡しません。 台帳との比較は Python の中で行います
  3. 報告の判断をAIや規則に任せない … 千葉県のページでは、期限内に写しの送付を受けない場合や、法定事項が記載されていない写しの送付を受けた場合に、措置内容等報告書の提出が要るとされています。この構成が出すのはその候補の一覧で、報告するかどうかは責任者が決めます
  4. 原本を残す … A票・B2票・D票・E票の保存は5年間とされています。スキャンしたPDFと台帳は、原本を探すための索引として扱います
  5. 委託先の処理を評価しない … 返送の遅れや記載の不足は、業者の処理が不適正であることを意味しません。一覧を業者の評価に使うときは、遅れの理由を確かめてからにします

誤りが起きた場合のリスクは、戻っていないマニフェストを戻ったものとして扱うことと、記載の不足を見落とすことの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技術仕様の確認日・参考情報

技術仕様確認日:2026-10-07/最終更新:2026-10-07
確認した内容情報源確認日
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 list2026-10-07
値の入っていないキーと値の組を確実には読み取れないことGoogle Cloud: Form Parser2026-10-07
項目名と値の組が formFields の fieldName/fieldValue で返ること。Python のクライアントライブラリで応答を扱う例Google Cloud: Handle the processing response2026-10-07
対応形式。スキャンは最低200dpiが望ましく300dpi以上が一般に最もよいことGoogle Cloud: Supported files2026-10-07
処理の場所が us・eu と単一リージョンで、日本が無いことGoogle Cloud: Regional and multi-regional support2026-10-07
output_config.format で応答の形を固定できること。列挙の値の大文字・小文字が保証されないこと。max_tokens で打ち切られうることClaude API: Structured outputs2026-10-07

措置内容等報告書の提出先と様式は、排出事業場のある自治体によって異なります。 本記事は大阪府と千葉県の公開ページで確認できた範囲だけを扱っています。報告するかどうかは、自社の環境の担当の責任者が判断してください。

実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。

自社の業務に使えるAI活用候補を整理します

このユースケース(UC-0796)についてのご相談はこちらから。

AI活用について相談する
目次