英文の到着案内を読み取り、入港日・フリータイムの期限・請求額を輸入台帳に転記して、デマレージの恐れがあるコンテナを拾う
船会社やフォワーダーから届く英文の到着案内を読み取り、入港日・フリータイムの期限・請求額を輸入案件の台帳に転記します。通関と配車の予定と照らし、デマレージがかかりそうなコンテナを拾います。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- AWS Textract/Azure AI/Google Document AI
- 連携・自動化
- Python
- 対象業界
- 商社/小売/物流/製造
- 対象部門
- 物流/購買
- 対象業務
- データ入力・転記/台帳・マスタ管理
- 主な課題
- 人手が足りない/入力作業が多い/期限・対応漏れが起きる
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 対応スピード向上/工数削減/機会損失防止
- 導入難易度
- ★★★☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 共有受信箱に届いた到着案内のPDFを、担当者が開く
- B/L番号、船名と航海番号、入港予定日、荷揚げ港、コンテナ番号と種類、フリータイムの記載、請求額を読む
- 輸入案件の台帳でB/L番号の行を探し、転記する
- 荷主の契約の一覧でフリータイムの日数を確かめ、入港日から最終日を計算して台帳に書く
- 通関の状態と配車の予定日を見て、最終日までに引き取れるかを確かめる
- 間に合わなさそうなコンテナを、通関と配車の担当者、荷主に連絡する
- 自動共有受信箱に届いた到着案内のPDFが、受付フォルダ(Amazon S3)に保存される
- 自動保存をきっかけに処理が動き、形式・ページ数・パスワードの有無を確かめる
- 自動OCRが到着案内の全文、キーと値、表、質問への答え、信頼度を返す
- 自動B/L番号、船名、入港日、荷揚げ港、コンテナ番号と種類、フリータイムの記載、請求額の明細を取り出し、原文のまま記録する
- 自動プログラムが台帳のB/L番号の行に書き、改訂版なら入港日の履歴を足す
- 自動プログラムが契約の一覧からフリータイムの最終日を計算し、到着案内の記載と比べる
- 自動通関の状態と配車の予定日から、最終日までに引き取れないコンテナに印を付ける
- 人担当者が、印の付いたコンテナを確かめ、通関・配車・荷主と引き取りの順番を決める
各工程の詳しい説明を読む
- 共有受信箱に届いた到着案内のPDFを、担当者が開く
- B/L番号、船名と航海番号、入港予定日、荷揚げ港、コンテナ番号と種類、フリータイムの記載、請求額を読む
- 輸入案件の台帳でB/L番号の行を探し、転記する
- 荷主の契約の一覧でフリータイムの日数を確かめ、入港日から最終日を計算して台帳に書く
- 通関の状態と配車の予定日を見て、最終日までに引き取れるかを確かめる
- 間に合わなさそうなコンテナを、通関と配車の担当者、荷主に連絡する
(a)期限に気づくのが遅れる。 4番目と5番目は、到着案内が多い週ほど後回しになります。最終日の前日に気づいても、通関の書類がそろっていなければ引き取れません。
(b)入港日の変更が台帳に入らない。 改訂版の到着案内は、件名に Revised と付くだけで、本文の書式は最初のものと同じです。最初のものと区別がつかず、改訂を読み落とします。
(c)転記に追われる。 1通あたりの時間は短くても、月600通を5名で転記すると、それだけで日中の作業が埋まります。 期限の確認に回す時間が残りません。
- 【自動】 共有受信箱に届いた到着案内のPDFが、受付フォルダ(Amazon S3)に保存される
- 【自動】 保存をきっかけに処理が動き、形式・ページ数・パスワードの有無を確かめる
- 【自動】 OCRが到着案内の全文、キーと値、表、質問への答え、信頼度を返す
- 【自動】 B/L番号、船名、入港日、荷揚げ港、コンテナ番号と種類、フリータイムの記載、請求額の明細を取り出し、原文のまま記録する
- 【自動】 プログラムが台帳のB/L番号の行に書き、改訂版なら入港日の履歴を足す
- 【自動】 プログラムが契約の一覧からフリータイムの最終日を計算し、到着案内の記載と比べる
- 【自動】 通関の状態と配車の予定日から、最終日までに引き取れないコンテナに印を付ける
- 【人】 担当者が、印の付いたコンテナを確かめ、通関・配車・荷主と引き取りの順番を決める
8番目が、この設計の分かれ目です。 担当者は600通を開くのではなく、期限に間に合わない印と、記載の食い違いの印が付いたものだけを見ます。 印の無い到着案内は、台帳に書かれた値を一覧で流し見ます。
6番目と7番目をAIにさせないのも、意図してのことです。 入港日からの日数、契約の日数、通関と配車の予定との比較。どれも規則で決まる計算で、AIには到着案内から値を読み取るところまでをさせます。
02今回想定するシステム構成
英文の到着案内(PDF。船会社・フォワーダーからのメール添付) ▼【トリガー】受付フォルダ(Amazon S3)への保存 AWS Lambda ── 形式・ページ数・サイズ・パスワードの確認 ▼ AWS Textract(StartDocumentAnalysis:FORMS/TABLES/QUERIES) │ 全文、キーと値、コンテナと請求の表、質問への答え、信頼度 ▼ Claude API ── 到着案内の項目を取り出し、原文と解釈を分けて記録する │ ① B/L番号と船名 ② 入港日と荷揚げ港 ③ コンテナ番号と種類 │ ④ フリータイムの記載 ⑤ 請求額の明細 ⑥ 改訂版かどうか ▼ Python ── 台帳に書き、契約の一覧で最終日を計算し、通関・配車の予定と比べる ▼ 台帳(ok / at_risk / freetime_mismatch / eta_changed / needs_human) ▼ 【担当者が印の付いたコンテナを確認】 └──▶ 通関・配車・荷主と引き取りの順番を決める
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | AWS Textract(StartDocumentAnalysis/GetDocumentAnalysis) | Azure AI Document Intelligence、Google Document AI |
| 生成AI | Claude API(到着案内の項目の取り出し) | OpenAI API、Gemini API |
| 差異計算 | Python(フリータイムの最終日の計算と、記載・通関・配車の予定との照合) | 輸入管理システムの期限計算の機能 |
| 連携 | AWS Lambda(保存と完了の通知を起点に処理を動かす) | Amazon EventBridge |
| 保管 | Amazon S3(到着案内、読み取り結果、照合の結果) | 社内のファイルサーバー |
輸入案件の台帳と契約の一覧は、新しく足すものではありません。 最初の準備は、荷主ごと・船会社ごとのフリータイムの日数と数え方を、プログラムが読める表にすることです。日数、起算日(入港日の翌日か、荷揚げの日か)、休日を数えるか、コンテナの種類ごとの違いを1行ずつ持たせます。
OCRに AWS Textract を選ぶのは、到着案内が英文だからです。 公式の上限の表で、対応言語は英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語とされ、日本語や中国語は読めません。 日本の代理店が日本語で出す到着案内は、この構成では読み取りに回しません。
この題材で効くのは、表(TABLES)と質問(QUERIES)の組み合わせです。 コンテナ番号と請求の明細は表に並び、入港日やフリータイムの記載はキーと値か文章にあります。表は行と列で、それ以外は質問で取ると、書式の違いを吸収しやすくなります。 質問は英語の文書でしか使えず、1ページあたり非同期で30個までです。
項目の並びの目安として、米国の規則も参照します。 米国の連邦海事委員会(FMC)の規則(46 CFR Part 541)は、外航の運送人などが出すデマレージ・ディテンションの請求書に、B/L番号、コンテナ番号、輸入では荷揚げ港、フリータイムの日数・起算日・終了日、輸入ではコンテナの引き取りが可能になった日などを書くよう求めています。自社の貨物にこの規則が及ぶかは取引ごとに確かめる必要がありますが、フリータイムを数えるのに要る項目の並びとして、台帳の列を決める参考になります。
03どうやって実装するのか
処理の起点を決める
起点は2つあります。到着案内が届いたときと、毎朝の定時です。
1つ目は、受付フォルダ(Amazon S3)に到着案内のPDFが保存されたことです。共有受信箱のルールで、登録した船会社とフォワーダーのアドレスから届いたメールの添付をS3へ転送します。保存の通知で AWS Lambda が動き、読み取りから台帳への記録までを済ませます。改訂版も同じ経路で入れ、件名と本文から改訂かどうかを判定します。
2つ目は、毎朝8時の定時です。台帳の全コンテナについて、フリータイムの最終日まで3営業日を切ったのに通関が終わっていないもの、配車の予定日が最終日より後のものを一覧にして、担当者と通関・配車の担当者に送ります。通関の状態と配車の予定は毎日変わるので、到着案内が届いた日だけでなく毎朝照らし直します。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 到着案内 | PDF。B/L番号、船名と航海番号、入港予定日、荷揚げ港、コンテナ番号と種類、フリータイムの記載、請求額の明細 | 受付フォルダ(Amazon S3) |
| 読み取り結果 | 全文、キーと値、表、質問への答え、それぞれの信頼度 | AWS Textract |
| 輸入案件の台帳 | B/L番号、荷主、船会社、コンテナ番号、入港日の履歴、フリータイムの最終日 | 輸入業務部のスプレッドシート |
| フリータイムの条件の表 | 荷主と船会社の組ごとの日数、起算日、休日の扱い、コンテナの種類ごとの違い | 契約の条件の一覧を表にしたもの |
| 通関の状態 | B/L番号ごとの申告の状態、許可の日 | 通関の進み具合の一覧 |
| 配車の予定 | コンテナごとの引き取りの予定日 | 配車の予定表 |
質を決めるのは、フリータイムの条件の表です。 同じ船会社でも荷主ごとに契約の日数が違い、ドライとリーファーで日数が違うこともあります。 表に無い組み合わせは、計算をせずに人に回します。
通関の状態と配車の予定は、毎朝取り込みます。 この2つが古いと、間に合うはずのコンテナに印が付き、担当者が印を信じなくなります。
データの取得方法を決める
読み取りは StartDocumentAnalysis にS3の場所と FeatureTypes を渡して始めます。完了は NotificationChannel に指定した Amazon SNS のトピックに通知され、状態が SUCCEEDED なら GetDocumentAnalysis で結果を取ります。
| 指定するもの | 値 | 理由 |
|---|---|---|
FeatureTypes | FORMS、TABLES、QUERIES | 見出しのキーと値、コンテナと請求の表、文章の中の日付 |
QueriesConfig | 質問の文と Alias の組 | 入港日やフリータイムを項目名で受け取る |
ClientRequestToken | ファイルのハッシュ | 同じ到着案内で二重に読み取りを始めない |
JobTag | 送り元の識別子 | 完了の通知から船会社を引く |
Alias | 質問の文 |
|---|---|
BL_NO | What is the bill of lading number? |
VESSEL_VOYAGE | What is the vessel name and voyage number? |
ETA | What is the estimated or actual arrival date at the port of discharge? |
POD | What is the port of discharge? |
FREE_TIME | How many free days are allowed, or what is the last free day? |
TOTAL_CHARGES | What is the total amount due and the currency? |
REVISION | Is this a revised or amended arrival notice? |
質問の答えが見つからなければ空のまま返ります。 フリータイムが空なら、全文から free time、free days、last free day、LFD を含む行を探し、それでも無ければ not_stated にします。 書かれていないフリータイムを、契約の日数で埋めることはしません。契約の日数は別の列に持ちます。
コンテナ番号は表から取ります。 表の行ごとにコンテナ番号、種類、封印番号を読み、番号が決まった英字と数字の並びになっているかを、後段で確かめます。
結果は1回最大1,000ブロックで区切られ、NextToken が返る限り呼び直します。同期の処理はPDF1ページまでで、到着案内は請求の明細を含めて2〜3ページになるので非同期で読みます。
台帳、条件の表、通関の状態、配車の予定は、Python が読みます。 生成AIには渡しません。
AIへ渡す前に整形する
- 形式の確認 … JPEG、PNG、PDF、TIFF であることを確かめます。メール本文に到着の案内が書かれているものは、本文をPDFにして入れます
- パスワードの確認 … PDFはパスワードで保護されていてはいけないとされています。保護されたものは送り元に解除したものを頼みます
- サイズとページ数の確認 … 非同期の処理で、PDFとTIFFは500MB・3,000ページまでです
- 言語の確認 … 6言語に入らない到着案内は読み取りに回さず、担当者が目で見る一覧に入れます
- 送り元の特定 … 送信元のアドレスから船会社かフォワーダーかを決め、その送り元の日付の書き方を引きます
- 改訂の判定の準備 … 件名に
Revised、Amended、Updatedがあるかを記録し、読み取り結果と合わせて改訂かどうかを決めます
5番目の日付の書き方は、送り元ごとに持つと効きます。 同じ船会社はいつも同じ書き方をするので、決まった書き方の送り元の到着案内でだけ、日と月の順序を確定させます。
AIに処理させる
させるのは、到着案内から8つの項目を読み取り、原文の文字列と、日付や金額の解釈を分けて書き出すことです。 期限の計算と照合はさせません。
| 見るもの | 取り出し方 | 判断できないときの扱い |
|---|---|---|
| B/L番号 | 原文のまま。マスターとハウスを分ける | 複数並べば ambiguous |
| 船名と航海番号 | 原文のまま | 書かれていなければ missing |
| 入港日 | 原文と、日付として確定できるときだけ解釈。予定か実績かも | 順序が決まらなければ ambiguous |
| 荷揚げ港 | 原文のまま | 書かれていなければ missing |
| コンテナ番号と種類 | 表の行ごとに原文のまま | 番号の一部が読めなければ unreadable |
| フリータイムの記載 | 日数か最終日を原文のまま | 書かれていなければ not_stated |
| 請求額の明細 | 費目、金額、通貨を行ごとに | 合計しか無ければ合計だけ |
| 改訂かどうか | 改訂の表示と、変わった項目の記載 | 表示が無ければ unknown |
入港日の「予定か実績か」を分けるのが、いちばん大事な区別です。 ETA と Arrival Date を同じ入港日として扱うと、予定の日付で数えた最終日が、実績の入港で1〜2日ずれます。 予定なら、実績の到着案内が来るまで期限は仮の値として扱います。
| させないこと | 理由 |
|---|---|
| フリータイムの最終日の計算 | 契約の条件の表で Python が行う |
| 間に合うかどうかの判断 | 通関と配車の予定で Python が照らし、人が決める |
| 書かれていないフリータイムの補完 | 契約の日数で埋めると、記載との食い違いが消える |
| 請求額の妥当性の判断 | 運賃とタリフの点検は別の仕組み |
| コンテナ番号の補正 | 1文字違うと別のコンテナになる |
最後の行も見落とされがちです。 OCRが O と 0 を取り違えたとき、それらしく直すと、台帳に存在しないコンテナが生まれます。 形が合わない番号は直さず、人に見せます。
指示内容を固定する
あなたは物流会社の輸入業務部で、船会社やフォワーダーから届いた
英文の到着案内の記載を記録する担当です。
OCRの読み取り結果だけを使ってください。推測で埋めないでください。
【取り出す項目】
mbl_no、hbl_no、vessel_voyage_raw、arrival_date_raw、arrival_date、
arrival_kind(estimated / actual / unknown)、pod_raw、
containers(配列:container_no_raw、type_raw、seal_raw)、
free_time_raw、free_time_days、last_free_day、
charges(配列:item_raw、amount、currency)、total_raw、
revision(revised / original / unknown)、
各項目の status と source(ページと行)
【status の選び方】
- ok ........... 値が読み取れており、その項目として解釈できる
- missing ...... 書かれていない
- not_stated ... フリータイムが書かれていない
- unreadable ... 文字は検出されているが値として確定できない
- ambiguous .... 候補が複数ある、または日付の順序が決まらない
【厳守事項】
- フリータイムが書かれていない場合は not_stated にしてください。
契約や慣習の日数で埋めないでください。
- 入港日が予定(ETA)か実績かを arrival_kind に入れてください。
決まらなければ unknown にしてください。
- 日付は、日と月の順序が文面または {date_style} から確定できるときだけ
YYYY-MM-DD で入れてください。決まらなければ空にし、ambiguous にしてください。
- コンテナ番号は読み取った文字列をそのまま入れてください。
文字を補ったり、似た文字に直したりしないでください。
- 最終日までに引き取れるか、請求額が正しいかを書かないでください。
- 到着案内でない書類(請求書だけのもの、船積の案内、販促など)と
判断した場合は、項目を取り出さず document_type に種類を書いてください。
【読み取り結果】{textract_forms_tables_queries}
【この送り元の日付の書き方】{date_style}
「契約や慣習の日数で埋めない」を明記しないと、埋めます。 フリータイムの記載が無い到着案内で、よくある日数を補った値を返すと、後段の照合では契約の日数と一致したように見え、食い違いの印が付きません。
出力形式を固定する
Claude API の構造化出力(output_config.format に json_schema を指定)で、次の形のJSONを受け取ります。
{
"file": "",
"document_type": "arrival_notice",
"mbl_no": "ABCD26091234",
"hbl_no": "",
"vessel_voyage_raw": "EVER SAMPLE 112E",
"arrival_date_raw": "ETA 14-Oct-2026",
"arrival_date": "2026-10-14",
"arrival_kind": "estimated",
"pod_raw": "TOKYO, JAPAN",
"containers": [
{ "container_no_raw": "TCNU1234567", "type_raw": "40HC", "seal_raw": "" }
],
"free_time_raw": "",
"free_time_days": null,
"last_free_day": "",
"charges": [
{ "item_raw": "D/O FEE", "amount": 0, "currency": "JPY" }
],
"revision": "original",
"items": [
{ "item": "free_time", "status": "not_stated", "confidence": 0, "source": "" }
]
}
1つ目の理由は、期限の計算と照合をプログラムの側に置けることです。 Python が条件の表で最終日を計算し、記載と通関・配車の予定と比べて印を付けます。
| 印 | 付ける条件 |
|---|---|
ok | 計算した最終日が記載と一致するか記載が無く、配車の予定日が最終日以前 |
at_risk | 最終日まで3営業日を切って通関が終わっていない、または配車の予定日が最終日より後 |
freetime_mismatch | 記載のフリータイムと、条件の表で計算した値が違う |
eta_changed | 改訂版で入港日が変わり、最終日が動いた |
needs_human | ambiguous、unreadable の項目がある、条件の表に組み合わせが無い、または到着案内でない書類 |
2つ目は、予定と実績を分けて持てることです。 arrival_kind が estimated の間は最終日を仮の値とし、実績の到着案内が来たら計算し直して履歴に残します。
3つ目は、記載が無いことを記録として残せることです。 not_stated が多い送り元は、フリータイムを契約の表だけで管理していることが分かり、船会社に確認する先が決まります。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 受付フォルダ(Amazon S3) | 保存の通知 | 到着案内の保存を検知して AWS Lambda を動かす |
| AWS Textract | API呼び出し(非同期) | 読み取りを始め、完了の通知で結果を取る |
| Claude API | API呼び出し | 項目の取り出し |
| 輸入案件の台帳 | 読み取りと書き込み | B/L番号の行に値を書き、入港日の履歴を足す |
| 通関の状態・配車の予定 | 毎朝の取り込み | 申告の状態と引き取りの予定日を読む |
| 通知 | メール | 毎朝の印の一覧を担当者に送る |
船会社への支払と、配車の予定の変更は、この構成からは行いません。 請求額は台帳に記録するだけで、支払は既存の手順で行います。引き取りの順番を入れ替えるのは、通関と配車の担当者と話した担当者です。
人が確認する
担当者が開くのは、ok 以外の印が付いたものです。 印の無いものは確認せず、台帳の値のまま扱います。human_check を「条件付き」としているのはこのためです。
at_riskを最初に片付ける … 通関の書類の不足か、配車の空きかを確かめ、引き取りの順番を決めますeta_changedの最終日を確かめる … 改訂版の入港日で計算し直した最終日を、配車の担当者に伝えますfreetime_mismatchを船会社に確かめる … 記載と契約のどちらが正しいかを問い合わせますneeds_humanの値を画像で確定させる … コンテナ番号や日付を確かめます
3番目を放置しないでください。 記載と契約が食い違ったまま期限を過ぎると、後で届くデマレージの請求で、どちらの日数で数えるかの話し合いになります。
例外に対処する
| 起きること | 対応 |
|---|---|
| パスワードで保護されたPDF | 読めない。送り元に解除したものを頼む |
| 6言語に入らない到着案内 | 読み取りに回さず、担当者が目で見る |
| フリータイムが書かれていない | not_stated。条件の表の値だけで最終日を計算する |
| 日と月の順序が決まらない | ambiguous。送り元の書き方と画像で人が確定する |
| コンテナ番号の形が合わない | unreadable。直さず、人が画像で確かめる |
| 台帳にB/L番号の行が無い | 新しい案件か番号の誤りか、人が確かめる |
| 条件の表に荷主と船会社の組が無い | needs_human。契約を確かめて表に足す |
ジョブが FAILED または PARTIAL_SUCCESS | StatusMessage と Warnings のページ番号を記録し、そのページを人へ |
上から3行目と4行目が、期限の誤りのほとんどを生みます。 どちらも最終日という1つの値に効く問題で、ここを人に回す設計を崩すと、at_risk の印が当てにならなくなります。
記録を残す
- 元の到着案内と、受け取った日時、送り元、メールの件名
- AWS Textract が返したJSONの全文と、使った質問の一覧
- Claude API が返したJSON(原文と解釈の両方)
- 入港日と最終日の履歴 … 改訂のたびに、いつ、何が、何から何に変わったか
- 照合の結果と、そのとき参照した条件の表の版
- 担当者が印を覆した記録と、船会社への問い合わせの回答
4つ目の履歴は、デマレージの請求を確かめるときの材料になります。 請求が届いたときに、当時の到着案内の入港日とフリータイムの記載をすぐ引ければ、請求の日数が正しいかを確かめられます。
04実装レベルの3段階
本記事の想定は半自動化です。 読み取りと転記と期限の計算が自動になり、担当者は印の付いたコンテナを確かめて引き取りの順番を決めます。1件8分が2分になるのはこの段階です。 本格構成で足すのは、請求の確認です。 デマレージやディテンションの請求書が届いたら、台帳に残した入港日とフリータイムの履歴と照らし、請求の日数が合っているかを確かめます。 段階を飛ばさないでください。 半自動化を2〜3か月回すと、freetime_mismatch が出やすい船会社と、not_stated の多い送り元が先に分かります。そこで条件の表を船会社に確かめて整えてから、請求の確認に進みます。
05工数削減シミュレーション
導入後 600件 × 2分 ÷ 60 = 20 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 海上コンテナの輸入を月に数百件扱う物流会社の輸入業務部門と、自社で輸入を管理する商社・メーカー・小売。複数の船会社とフォワーダーから英文の到着案内がPDFで届き、入港日・コンテナ番号・請求額を担当者が輸入案件の台帳に手で転記している場合。通関や配車の遅れでフリータイムを過ぎ、デマレージやディテンションを払うことが毎月のように起きている場合。
- 輸入が月に数件の企業。船会社のポータルやデータ連携で到着の情報を受け取れており、PDFの到着案内を読む工程が無い場合。到着案内が英語以外(中国語・韓国語・日本語など)で届くことが多い場合(この構成のOCRは英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語しか読めず、手書きは英語のみです)。なお、フリータイムの延長の交渉、請求額の支払、引き取りの順番の判断は、輸入業務の担当者と責任者が行うもので、この構成では代替できません。
07最小構成で試す方法
- 先月の到着案内から30通を選ぶ(フリータイムが書かれていないもの、改訂版、日付が
03/04/2026のような書き方のもの、コンテナが10本以上並ぶものを必ず入れる) - 手元の生成AIの画面に1通ずつ貼り付け、「この到着案内のB/L番号、船名、入港日(予定か実績か)、荷揚げ港、コンテナ番号と種類、フリータイムの記載、請求額を、書かれたとおりに表にしてください。フリータイムが書かれていなければ『記載なし』とし、日数を補わないでください。コンテナ番号を直さないでください」と指示する
- 出てきた表を、台帳の当時の値と見比べる
30通は必ずやってください。 仕組みを組む前に、フリータイムを補わないか、予定と実績を分けられるか、コンテナ番号を直さないかを確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 入港日とフリータイムを原文どおりに取り出した | OCRのAPIと照合の処理に進む |
| 書かれていないフリータイムを補った | 補完を禁じる指示を足す。直るまで先に進まない |
| コンテナが多い到着案内で行が抜けた | 表の読み取りを使う。構成は有効 |
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 書かれていないフリータイムを補う | 補完を禁じ、not_stated で記録する |
| 予定の入港日で最終日を確定させる | 予定と実績を分け、予定の間は仮の値とする |
| 改訂版で入港日が変わったのに台帳が古いまま | 改訂を判定し、入港日の履歴を足して最終日を計算し直す |
| 日と月の順序を取り違える | 送り元ごとの日付の書き方を持ち、決まらないものは人へ |
| コンテナ番号をそれらしく直す | 直さず、形の合わない番号は人へ |
| コンテナが多い到着案内で行が抜ける | 表の読み取りでコンテナの行を数え、台帳の本数と比べる |
| 通関・配車の予定が古くて印が増える | 毎朝取り込み、取り込みの日時を一覧に出す |
| 条件の表に組み合わせが無い | 計算せずに人へ回し、契約を確かめて表に足す |
上の2行が、この構成の失敗のほとんどです。 どちらもフリータイムの最終日という1つの値の誤りで、1日ずれると、引き取りの順番がそのまま誤ります。 記載を原文のまま残し、計算は表と規則で行う設計で守ります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 荷主の名称、B/L番号、船名、コンテナ番号、請求額、そして荷主と船会社の契約の条件です。個人の情報はほとんど含みませんが、荷主の取引の内容と契約の条件は外に出せない情報です。
- 外部へ渡す範囲を、読み取りに必要なものに限る … 生成AIに渡すのは到着案内の読み取り結果と、送り元の日付の書き方だけです。契約の条件の表、通関の状態、他の荷主の情報は渡しません
- 引き取りの判断を自動で行わない … この構成が出すのは印と一覧までで、どのコンテナから引き取るかは担当者が通関・配車と話して決めます
- 船会社への連絡を自動で送らない … フリータイムの食い違いの問い合わせや延長の相談は、担当者が行います
- 荷主ごとに見られる範囲を分ける … 台帳を荷主に共有するときは、その荷主の行だけが見えるようにします
誤りが起きた場合のリスクは、フリータイムの最終日を遅く見積もり、デマレージを払うことです。 多くはフリータイムの補完と、予定の入港日での確定から起きるので、値を原文のまま残し、計算は表と規則で行う設計を崩さないでください。
10まず何から始めるか
1週目:フリータイムの条件を表にする
荷主と船会社の組ごとに、契約のフリータイムの日数、起算日、休日の扱い、コンテナの種類ごとの違いを表にします。本数の多い上位10の組から始めます。 分からない組は船会社に確かめます。
2週目:30通で試す
先月の到着案内から30通を選び、手元の生成AIの画面で項目を表にさせます。フリータイムを補わないか、予定と実績を分けられるか、コンテナ番号を直さないかを最優先で見ます。
3週目:通関と配車の予定を毎朝取り込む
通関の進み具合の一覧と配車の予定表を、毎朝同じ形で取り込めるようにします。ここが古いと、期限の印がすべて当てにならなくなります。
4週目:受付フォルダから台帳までをつなぐ
S3、Lambda、Textract、Claude API、Python の照合をつなぎ、台帳に値と印を書くところまで作ります。この時点では、本数の多い3社の船会社の到着案内だけを対象にします。
2か月目: 対象を全送り元に広げ、freetime_mismatch と eta_changed の件数を毎週数えて条件の表を直します。3か月目以降: 毎朝の一覧を通関と配車の担当者にも送り、1件8分が何分になったかを実測します。デマレージの請求が届く前に、期限の近いコンテナが毎朝の一覧で確実に拾われるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 外航の運送人・ターミナルオペレーター・NVOCCが出すデマレージ・ディテンションの請求書に、B/L番号、コンテナ番号、輸入では荷揚げ港、請求日と支払期日、フリータイムの日数・起算日・終了日、輸入ではコンテナの引き取りが可能になった日、請求の対象日、合計額と適用する規則と料率、問い合わせ先などを書くこと。必要な記載が欠けた請求は支払の義務がなくなること。請求は最後に費用が発生した日から30暦日以内に出すこと。請求を受けた側は請求日から少なくとも30暦日、減額・返金・免除を求められること | eCFR: 46 CFR Part 541 Demurrage and Detention | 2026-10-07 |
| 対応する形式がJPEG、PNG、PDF、TIFFであること。同期はPDF1ページ・10MB、非同期はPDFとTIFFで500MB・3,000ページであること。PDFはパスワードで保護できないこと。対応言語が英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語で、質問の検出は英語の文書だけであること。質問は非同期で1ページ30個までであること。手書きは英語のみであること | AWS: Set Quotas in Amazon Textract | 2026-10-07 |
StartDocumentAnalysis の FeatureTypes(TABLES/FORMS/QUERIES/SIGNATURES/LAYOUT)、QueriesConfig、ClientRequestToken、JobTag、NotificationChannel で Amazon SNS に完了を通知すること | AWS: StartDocumentAnalysis | 2026-10-07 |
GetDocumentAnalysis が表とセルのブロックを返すこと。JobStatus(SUCCEEDED/FAILED/PARTIAL_SUCCESS ほか)、MaxResults(最大1,000)と NextToken、StatusMessage、Warnings | AWS: GetDocumentAnalysis | 2026-10-07 |
| 質問の応答が QUERY と QUERY_RESULT のブロックで返り、別名(Alias)と信頼度を持つこと。答えが見つからなければ空のまま返ること | AWS: Queries | 2026-10-07 |
構造化出力を output_config.format に json_schema を指定して受け取れること | Claude Docs: Structured outputs | 2026-10-07 |
フリータイムの日数と数え方は、船会社のタリフと荷主の契約で決まります。 本記事は米国の規則で確認できた請求書の記載事項を項目の目安として扱っており、自社の貨物にどの規則が及ぶかは取引ごとに確かめてください。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0789)についてのご相談はこちらから。
