酒類の輸入商社が英国の樽の保管業者から毎月届く英文の樽の在庫・保管料の明細を読み取り、樽ごとの台帳と保管料の請求との照合表を作る
英国の保管業者から毎月届く樽の在庫の明細と保管料の請求書を読み取り、樽ごとの台帳と突き合わせます。在庫の食い違いと、料金表・作業の依頼に照らした保管料と作業料の差を、照合表にします。
- AIサービス
- AWS Textract/Azure AI/Google Document AI
- 連携・自動化
- Python
- 対象業界
- 商社/小売/製造
- 対象部門
- 経理/購買
- 対象業務
- 内容確認・チェック/台帳・マスタ管理
- 主な課題
- 人手が足りない/入力作業が多い/確認ミスが多い
- AIで行う処理
- 抽出
- 主な効果
- 入力漏れ削減/判断支援/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 必須
01導入前 / 導入後の業務フロー
- 購買の担当者が、メールで届いた明細と請求書のPDFを口座ごとのフォルダに保存する
- 明細を開き、樽番号を1行ずつ台帳と見比べ、抜けている樽と台帳に無い樽を探す
- 再計量された樽は、新しい量を台帳に写し、前回からの減り方を見る
- 請求書の保管料を、樽の種類ごとの数と料金表で計算し直す
- 作業料の行を、こちらから依頼した作業の記録と見比べる
- 食い違いを一覧にして、保管業者に問い合わせる
- 経理の担当者が、確かめ終わった請求書の支払の手続きをする
- 人購買の担当者が明細と請求書のPDFを受付のフォルダに保存する(メールの自動振り分けでも可)
- 自動保存をきっかけに、形式・サイズ・パスワードの有無を確かめ、ファイル名から保管業者と口座を見分ける
- 自動AWS Textract の非同期の文書の解析で、明細の表・項目と値・問いへの答えを読む
- 自動保管業者ごとの列の対応表で、列の見出しを共通の項目に直し、ページごとに繰り返される見出しの行を外す
- 自動原液の量×度数とアルコール分の量を検算し、合計の行と明細の行の合計を照らす
- 自動樽番号で台帳と突き合わせ、抜け・台帳に無い樽・移し替えを分ける
- 自動再計量の値と前回の値から、量の減り方を出し、自社で決めた幅を超える樽に印を付ける
- 自動請求書の行を、料金表と樽の数、作業の依頼の記録に照らす
- 人購買の担当者が `ok` 以外の樽と請求の行だけを開き、PDFの画像で値を確かめる
- 人食い違いを保管業者に問い合わせ、経理の担当者が支払の手続きに回す
各工程の詳しい説明を読む
- 購買の担当者が、メールで届いた明細と請求書のPDFを口座ごとのフォルダに保存する
- 明細を開き、樽番号を1行ずつ台帳と見比べ、抜けている樽と台帳に無い樽を探す
- 再計量された樽は、新しい量を台帳に写し、前回からの減り方を見る
- 請求書の保管料を、樽の種類ごとの数と料金表で計算し直す
- 作業料の行を、こちらから依頼した作業の記録と見比べる
- 食い違いを一覧にして、保管業者に問い合わせる
- 経理の担当者が、確かめ終わった請求書の支払の手続きをする
(a)樽の抜けに気づきにくい。 千樽の台帳と数百行の明細を目で見比べるので、1樽が明細から消えていても、行の多さに紛れます。 別の口座への移し替えや、売った樽の引き渡しが明細に遅れて載ることもあります。
(b)量の列の取り違え。 原液の量とアルコール分の量の列が隣に並び、見出しが「BL」「LA」「OLA」「RLA」のような略号だけの明細もあります。 担当者が保管業者ごとの略号を覚えていて、引き継ぐと読み違えます。
(c)保管料の計算が人によって違う。 月の途中で入った樽、月の途中で出た樽を、日割りにするか1か月分とするか。料金表の取り決めを覚えている担当者でないと、正しい請求を誤りと言ってしまいます。
(d)作業料の確かめが後回しになる。 作業料は依頼したものだけのはずですが、依頼の記録がメールに散らばり、見比べるのが最後になります。
- 【人】 購買の担当者が明細と請求書のPDFを受付のフォルダに保存する(メールの自動振り分けでも可)
- 【自動】 保存をきっかけに、形式・サイズ・パスワードの有無を確かめ、ファイル名から保管業者と口座を見分ける
- 【自動】 AWS Textract の非同期の文書の解析で、明細の表・項目と値・問いへの答えを読む
- 【自動】 保管業者ごとの列の対応表で、列の見出しを共通の項目に直し、ページごとに繰り返される見出しの行を外す
- 【自動】 原液の量×度数とアルコール分の量を検算し、合計の行と明細の行の合計を照らす
- 【自動】 樽番号で台帳と突き合わせ、抜け・台帳に無い樽・移し替えを分ける
- 【自動】 再計量の値と前回の値から、量の減り方を出し、自社で決めた幅を超える樽に印を付ける
- 【自動】 請求書の行を、料金表と樽の数、作業の依頼の記録に照らす
- 【人】 購買の担当者が
ok以外の樽と請求の行だけを開き、PDFの画像で値を確かめる - 【人】 食い違いを保管業者に問い合わせ、経理の担当者が支払の手続きに回す
4番目と5番目が、この設計の分かれ目です。 列の意味が決まらない値は台帳と照らしません。決まらないまま照らすと、樽が半分に減ったという、もっともらしい誤りになります。
8番目で料金の計算を規則の表に置いているのも、意図してのことです。 料金表は保管業者との取り決めで、更新されても直すのは表だけです。
02今回想定するシステム構成
樽の在庫の明細・保管料の請求書(英文のPDF。数ページから十数ページ) │ 購買の担当者が受付フォルダへ保存 ▼【トリガー】Amazon S3 への保存 AWS Lambda ├──▶ 形式・サイズ・パスワードの確認、保管業者と口座の見分け ▼ AWS Textract(StartDocumentAnalysis。TABLES・FORMS・QUERIES) │ 表のセルと列の見出し・合計の行、項目と値、問いへの答え、信頼度 ▼ AWS Lambda(Python) │ ① 列の対応表で見出しを共通の項目に直す │ ② 原液の量×度数とアルコール分の量の検算、合計の照合 │ ③ 樽番号で台帳と突き合わせる │ ④ 再計量の値から量の減り方を出す │ ⑤ 料金表と作業の依頼の記録に照らす ▼ 樽ごと・請求の行ごとの判定(ok / diff / missing / needs_review) ▼ 【人が ok 以外だけ確認】 ├──▶ 樽ごとの台帳(確かめた後に取り込む) └──▶ 照合表(在庫の食い違いと保管料・作業料の差)
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | AWS Textract(StartDocumentAnalysis の TABLES・FORMS・QUERIES) | Azure AI Document Intelligence、Google Document AI |
| 差異計算 | 列の対応、検算、台帳との突き合わせ、量の減り方、料金の照合(Python。AWS Lambda で動かす) | ─ |
| 連携 | AWS Lambda(S3 への保存を起点に読み取りを始め、結果を一覧に書く) | Amazon EventBridge |
| 保管 | Amazon S3(明細・請求書と読み取りの結果) | 社内のファイルサーバー |
| 通知 | Amazon SNS(読み取りの完了と要確認の知らせ) | 社内のチャット |
樽ごとの台帳と料金表は、新しく足すものではありません。 新しく作るのは、保管業者ごとの列の対応表と、料金表を機械で読める形にした表の2つです。列の対応表は、明細の列の見出し(略号を含む)と共通の項目、量の列が原液の量かアルコール分の量か、樽番号の書き方を保管業者ごとに並べた表です。
明細は、AWS Textract の文書の解析で読みます。 樽の行は表(TABLE・CELL)として返り、セルには列の見出し(COLUMN_HEADER)や合計の行(TABLE_SUMMARY)、表の下の注記(TABLE_FOOTER)の印が付きます。口座番号や明細の期間のような項目と値の組は、フォーム(KEY_VALUE_SET)として返ります。
明細は複数ページなので、非同期の StartDocumentAnalysis で読みます。 同期の処理は PDF 1ページまでで、非同期なら PDF は500MB・3,000ページまでです。AWS Textract が読めるのは英語・フランス語・ドイツ語・イタリア語・ポルトガル語・スペイン語で、日本語は読めません。 英国の保管業者の明細は英語なので、この構成に向きます。
03どうやって実装するのか
処理の起点を決める
受付フォルダ(Amazon S3 のバケット)に明細か請求書のPDFが保存されたことを起点にします。 明細と請求書は月初に口座ごとに届きます。支払の期日の前に照合表を出せば、食い違いを問い合わせてから支払えます。
ファイル名の先頭に、保管業者の略号と口座番号と書類の種類(明細か請求書か)を付けます。 保管業者が分かれば、列の対応表と料金表を最初から正しく選べます。明細と請求書は口座と月で組にし、 両方がそろってから照合を始めます。片方だけのときは、そろうまで待ちます。
終わったファイルは処理済みの場所へ移します。 移すのは成功したときだけで、受付フォルダに残っている数が、そのまま未処理の数になります。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 樽の在庫の明細 | 口座番号、明細の期間、樽番号、蒸留所、樽の種類、詰めた日、原液の量、度数、アルコール分の量、最新の再計量の日と値、倉庫の場所、月中の入出庫 | 受付フォルダ |
| 保管料の請求書 | 請求の期間、樽の種類ごとの数と単価と金額、保険料、作業料の行(再計量・試料・移し替え・移送) | 受付フォルダ |
| 読み取り結果 | 表のセルと列の見出し・合計の行、項目と値、問いへの答え、信頼度 | AWS Textract |
| 樽ごとの台帳 | 樽番号、保管業者と口座、蒸留所、樽の種類、詰めた日、買った時の量、前回の再計量の値、売約・引き渡しの予定 | 購買部の台帳 |
| 列の対応表 | 保管業者ごとの列の見出しと共通の項目、量の列の種類、樽番号の書き方 | 自社で整える表 |
| 料金表 | 保管業者ごとの樽の種類別の料金、数え方(週か月か、月の途中の入出庫の扱い)、保険料の計算の仕方、作業料の単価 | 保管業者との取り決めから作る |
| 作業の依頼の記録 | 依頼した日、樽番号、作業の種類 | 購買部の依頼の一覧 |
質を決めるのは、列の対応表の「量の列の種類」です。 見出しが「Bulk Litres」「LPA」のように書かれていればそれに従い、略号だけなら対応表に従い、どちらでも決まらなければ決めません。
樽番号の書き方も、対応表に1列持たせます。 蒸留所の番号に年を付けるもの、保管業者の通し番号を付けるもの、両方を書くものがあります。台帳の樽番号に、保管業者ごとの書き方を並べておけば、同じ樽を2つの番号で数えずに済みます。
作業の依頼の記録は、メールから一覧に移しておきます。 依頼の日と樽番号と作業の種類だけの一覧で足ります。一覧に無い作業料が請求されたら、それが問い合わせの候補です。
データの取得方法を決める
明細と請求書は、非同期の StartDocumentAnalysis に S3 の場所を渡し、FeatureTypes に TABLES・FORMS・QUERIES を指定して読みます。 返った JobId を控え、完了の知らせが Amazon SNS に届き、状態が SUCCEEDED であることを確かめてから GetDocumentAnalysis で結果を取ります。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 樽ごとの行 | TABLE の CELL | 樽番号・量・度数・詰めた日 |
| 列の見出し | EntityTypes が COLUMN_HEADER のセル | 列の対応と、繰り返しの見出しの行を外す |
| 合計の行 | EntityTypes が TABLE_SUMMARY のセル | 明細の行の合計と照らす |
| 口座番号・明細の期間 | KEY_VALUE_SET、QUERY_RESULT | 台帳と料金表を選ぶ |
| 請求の行 | 請求書の TABLE の CELL | 樽の種類ごとの数・単価・金額、作業料 |
問い(Queries)は英語の文書でだけ使えます。 英国の明細は英語なので使えます。問いは対象のページを指定しないと1ページ目にしか当たりませんが、口座番号と明細の期間は1ページ目の上に書かれるので、あえて1ページ目だけに当てます。 すべてのページに当てると、ページごとに同じ答えが返り、照らす手間が増えます。
同じ ClientRequestToken で読み取りを始めれば、同じ JobId が返ります。 ファイル名から作った値を渡しておけば、Lambda が再試行しても同じファイルを二度読まずに済みます。JobId は7日間だけ有効なので、 結果は取った時点で S3 に残します。
AIへ渡す前に整形する
- 形式の確認 … JPEG・PNG・PDF・TIFF のいずれかであることを確かめます。XFA 形式の PDF は読めないので、印刷し直した PDF を頼みます
- パスワードの確認 … パスワードで保護された PDF は読めません。解除した版を保管業者に頼みます
- ページの大きさ … PDF の縦横は40インチ・9,000ポイントまでです。表計算のソフトから横長に書き出した明細は、この範囲に収まるかを見ます
- 文字の大きさ … 文字の高さは15ピクセル(150 DPI で8ポイント相当)が下限です。1ページに多くの行を詰めた明細は、文字が小さくなりがちです
- 組の確認 … 同じ口座・同じ月の明細と請求書がそろっているかを見ます。片方だけなら照合を待ちます
- 重複の確認 … 口座と明細の期間が同じものは重複として外します。差し替えの版が届いたときは、両方を残して人が選びます
4番目を省かないでください。 小さな文字の「3」と「8」の読み違いは、樽番号なら台帳に無い樽として、量なら大きな減りとして出ます。 どちらも検算で拾える仕組みを後段に置いていますが、元の画像の質がいちばん効きます。
AIに処理させる
させるのは、明細と請求書から決まった項目の値を取り出し、列の見出し・信頼度・ページの位置を添えることだけです。 列の対応、検算、台帳との突き合わせ、量の減り方、料金の照合は、取り出した後に Python の規則が行います。
| 取り出す項目 | どこから | 取り出せないときの扱い |
|---|---|---|
| 口座番号・明細の期間 | 問いへの答え、フォーム | 空なら台帳と料金表を選べず needs_review |
| 樽番号 | 表のセル | 空なら needs_review。前後の行から補わない |
| 原液の量・度数・アルコール分の量 | 表のセル | 列の種類が決まらなければ照らさない。needs_review |
| 詰めた日・再計量の日 | 表のセル | 日付として読めなければ unreadable |
| 請求の行(数・単価・金額) | 請求書の表のセル | 空なら missing。0とはみなさない |
| させないこと | 理由 |
|---|---|
| 量の列の種類の推測 | 原液の量とアルコール分の量の取り違えは、在庫が半分に見える誤りになる |
| 樽番号の補完 | 似た番号に寄せると、抜けた樽が見えなくなる |
| 量の減り方の良し悪しの判断 | 樽の種類・倉庫・年数で違う。自社で決めた幅で印を付けるだけ |
| 樽の価値の評価 | 熟成の進み方と市況で決まる |
| 支払の可否の決定 | 経理の担当者が決める |
1行目がいちばん起きやすい失敗です。 「Litres」とだけ書かれた列を、隣の列と同じ種類だと決めつけると、検算が合わないまま台帳の値が書き換わり、量が急に減った樽が並びます。
指示内容を固定する
文書の解析そのものには指示を書く場所がありません。AWS Textract に渡すのは文書と問い(Queries)で、判定の指示にあたるものは読み取った後の規則として持ちます。 問いは明細の1ページ目に当てる次の4つです。
【問い(Queries。明細の1ページ目)】
1. Alias: ACCOUNT_NO Text: What is the account number?
2. Alias: PERIOD_FROM Text: What is the statement start date?
3. Alias: PERIOD_TO Text: What is the statement end date?
4. Alias: CUSTOMER Text: What is the customer name?
【読み取った値の扱いの決まり】
1. 値が空の項目は missing とする。0 や前の行の値で埋めない。
2. 信頼度が決めた値を下回る値は unreadable とし、値は参考として残す。
3. 列の見出しは、その保管業者の列の対応表だけで共通の項目
(cask_no, distillery, cask_type, fill_date, bulk_litres, abv,
litres_alcohol, regauge_date, location)に直す。
表に無い見出しは unknown_column とする。
4. 量の列の種類は、見出しの語、無ければ対応表で決める。
どちらでも決まらなければ照らさず needs_review とする。
5. ページごとに繰り返される列の見出しの行は、樽の行として数えない。
6. bulk_litres × abv ÷ 100 と litres_alcohol の差が決めた幅を超えたら
calc_mismatch とする。どちらの値も直さない。
7. 樽の行の litres_alcohol の合計と、合計の行の値が合わなければ
total_mismatch とする。
8. 樽番号は、対応表の書き方で台帳の番号に直してから照らす。
直せない番号は unknown_cask とし、似た番号に寄せない。
9. 請求の行は、料金表の樽の種類・数え方・単価で金額を計算し直し、
差が決めた幅を超えたら rate_diff とする。
10. 作業料の行は、作業の依頼の記録の樽番号と作業の種類で照らし、
記録に無ければ not_ordered とする。
4番目と8番目が、この構成の罠です。 どちらも「たぶんこれだろう」で埋めたくなる箇所で、埋めた瞬間に、誤った値が台帳まで通ります。 決まらない明細は、保管業者ごとの対応表に書き方を足せば翌月から決まります。
6番目で値を直さないのも同じ理由です。 検算が合わないとき、原因は読み違いのこともあれば、明細の側の誤りのこともあります。どちらかは画像を見ないと分かりません。
出力形式を固定する
次の形の JSON で一覧に書き出します。
{
"warehouse_code": "WK-03",
"account_no": "",
"period": { "from": "2026-09-01", "to": "2026-09-30" },
"casks": [
{ "cask_no_raw": "", "cask_no": "", "cask_type": "hogshead",
"fill_date": "2019-04-11", "bulk_litres": 0, "abv": 0, "litres_alcohol": 0,
"regauge_date": "", "loss_pct_per_year": 0,
"status": "ok | missing_on_statement | unknown_cask | transferred | calc_mismatch | needs_review",
"confidence": 0, "page": 1 }
],
"totals": { "litres_alcohol_rows": 0, "litres_alcohol_summary": 0, "check": "ok | total_mismatch" },
"invoice_lines": [
{ "item": "storage | insurance | regauge | sampling | transfer", "cask_type": "",
"qty": 0, "unit_price": 0, "amount": 0, "expected_amount": 0,
"status": "match | rate_diff | count_diff | not_ordered | needs_review" }
],
"verdict": "clear | query_warehouse | needs_review"
}
1つ目の理由は、元の樽番号と直した樽番号を並べて残せることです。 cask_no_raw と cask_no が並んでいれば、どの書き方をどう読み替えたかを、画像を開く前に読めます。
2つ目は、在庫と請求を1つの照合表で見られることです。 樽の数が明細と台帳で合わなければ、保管料の数も合わないはずで、 2つの差を並べると問い合わせを1通にまとめられます。
| 条件 | verdict |
|---|---|
すべての樽が ok、すべての請求の行が match | clear |
missing_on_statement・unknown_cask・rate_diff・count_diff・not_ordered がある | query_warehouse |
needs_review・unreadable・calc_mismatch・total_mismatch がある | needs_review |
transferred は clear を妨げません。 台帳に移し替えの予定がある樽が、移し先の口座の明細に載っていれば、正しく動いた樽です。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 受付フォルダ | Amazon S3 の保存のイベント | Lambda を起動する |
| AWS Textract | 非同期の API 呼び出し | 明細と請求書の表・項目・問いの読み取り |
| Amazon SNS | 完了の知らせ | 状態を確かめて結果を取る |
| 樽ごとの台帳 | スプレッドシートの読み取り | 樽番号、樽の種類、前回の量 |
| 列の対応表・料金表 | スプレッドシートの読み取り | 列の意味、料金と数え方 |
| 作業の依頼の記録 | スプレッドシートの読み取り | 依頼した作業 |
| 照合表 | 判定の書き出し | 在庫の食い違いと料金の差 |
樽ごとの台帳には自動で書き込みません。 列を取り違えた値が台帳に入ると、翌月からその樽の量の減り方がすべて狂います。 再計量の値は、人が確かめた後に取り込みます。料金表も読むだけで、変えるのは購買部です。
支払の仕組みにもつなぎません。 照合表は支払の判断の材料で、支払うかどうかは経理の担当者が決めます。
人が確認する
人が開くのは clear 以外の口座だけです。 clear の口座は一覧で流し見て、経理に回します。全件を開く設計にすると、第10章の4.0時間には収まりません。
needs_reviewを先に見る … 量の列の種類、検算の合わない樽、合計の合わない明細を、画像で確かめます。決めた書き方は対応表に足しますmissing_on_statementを確かめる … 台帳にあって明細に無い樽が、売った樽の引き渡しか、移し替えか、本当の抜けかを、台帳の予定と照らします- 料金の差を確かめる …
rate_diffとcount_diffは、料金表の数え方の取り決めを読み直してから、保管業者に問い合わせます - 量の減り方の印を見る … 自社の幅を超えた樽は、再計量の値の読み違いでないかを確かめ、本当に大きく減っていれば、保管業者に樽の状態を尋ねます
2番目は、仕組みでは置き換えられません。 樽の売買と引き渡しの段取りは、台帳に書かれていない約束で動いていることがあります。
目標は、24件をならして1件10分です。 それを超える月は、列の対応表の書き方か、料金表の数え方の列が足りていません。
例外に対処する
| 起きること | 対応 |
|---|---|
| パスワードで保護された PDF | 読めない。解除した版を頼む |
| XFA 形式の PDF | 読めない。印刷し直した PDF を頼む |
| 量の列の種類が決まらない | needs_review。対応表に書き方を足す |
| 検算が合わない | calc_mismatch。値を直さず画像で確かめる |
| 合計の行と樽の行の合計が合わない | total_mismatch。ページの抜けか読み違いを確かめる |
| 樽番号が台帳に無い | unknown_cask。似た番号に寄せない |
| 明細だけ届き、請求書が届かない | 照合を待ち、期日の前に保管業者に頼む |
| 月の途中で料金表が改定された | 改定日で期間を分けて計算し、rate_diff は人が確かめる |
| 明細に容量の大きな樽の種類が書かれている | 樽の種類を対応表で確かめ、人に回す |
読み取りが失敗した、または JobId が切れた | 受付フォルダに残し、読み直す。処理済みへ移すのは成功時だけ |
大半は AI の精度ではなく、明細の書き方の揺れと、対応表と料金表の整い方の問題です。
記録を残す
- 元の明細と請求書、受け取った日時・保管業者・口座
- AWS Textract が返した JSON の全文と
JobId - 樽ごと・請求の行ごとの判定と、そのとき参照した対応表・料金表の版
- 人が値や判定を直した記録 … どの樽の、どの値を、どう読み直したか
- 保管業者への問い合わせの内容と返事、請求の訂正の有無
- 再計量の値の履歴(樽ごと)
- 保管業者ごとの
needs_reviewとquery_warehouseの件数
6つ目を積み重ねると、樽ごとの量の減り方が年ごとに見えてきます。 倉庫や樽の種類ごとの傾向が分かれば、量の減り方の印の幅を、自社の実績に合わせて決め直せます。
04実装レベルの3段階
最小構成では件数がさばけません。 1通ずつ読ませるので、月24件には使えません。確かめるための段階です。 半自動化で、1件45分が10分になり、この段階が本記事の想定です。 樽の見比べ、再計量の値の写し、保管料の計算、作業料の見比べは自動になり、人は clear 以外の口座だけを見ます。差が大きいのは、数百行の樽を台帳と目で見比べる作業がまるごとなくなるからです。 本格構成は、再計量を定期的に依頼している場合に向きます。
05工数削減シミュレーション
導入後 24件 × 10分 ÷ 60 = 4 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- スコットランドなど英国の保税倉庫に熟成中のウイスキーの樽を預け、複数の保管業者から毎月、英文の樽の在庫の明細と保管料の請求書を受け取っている酒類の輸入商社・洋酒の販売会社・自社ブランドのウイスキーを作る会社。樽の数が数百から千を超え、明細を台帳と1行ずつ見比べるのと、樽の種類ごとの料金と作業料の確かめに手間がかかっている場合。
- 預けている樽が数樽で、明細を目で見ても負担にならない場合。保管業者がポータルや CSV で在庫と請求のデータを渡してくれる場合(読み取りが要りません)。明細が日本語で届く場合(AWS Textract は日本語を読めません)。なお、樽の価値の評価、熟成の良し悪しの判断、酒税・関税の手続き、保管業者への支払の可否の決定は、この構成では行いません。
07最小構成で試す方法
- 先月の明細と請求書から5口座分を選ぶ(略号だけの見出しの明細、ページの多い明細、作業料の行がある請求書を必ず入れる)
- その5口座について、当時台帳と見比べた結果と、保管業者に問い合わせた内容を書き出す
- AWS Textract のコンソールで、表・フォーム・問いの解析を1通ずつかける
- 返った値を台帳と並べ、列の見出し、樽番号、量の列、合計の行が取れているかを見る
- 取れなかった項目を並べ、列の対応表の下書きを保管業者ごとに作る
5口座は必ずやってください。 Lambda を組む前に、「ページをまたぐ表が1つの表として並べ直せるか」と「量の列の種類が見出しから決まるか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 樽の行が表のセルで返り、列の見出しの印も付く | 対応表を作り、S3 と Lambda の連携に進む |
| 見出しの印が付かず、1行目が樽の行として返る | 対応表に見出しの文字を足して外す。構成は有効 |
| 量の列が略号だけで、どの保管業者も決まらない | 保管業者に列の意味を尋ねるのが先。 読み取りの問題ではない |
3行目は珍しくありません。 失敗ではなく、担当者が覚えていた略号の意味が、明細そのものには書かれていなかったと分かったということです。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 原液の量とアルコール分の量を取り違える | 見出しと対応表で決め、検算で確かめる |
| ページごとの見出しの行を樽として数える | 列の見出しの印と対応表の文字で外す |
| 似た樽番号に寄せて抜けが消える | unknown_cask にする。寄せない |
| 問いをすべてのページに当てて同じ答えが並ぶ | 口座番号と期間は1ページ目だけに当てる |
| 月の途中の入出庫の数え方を誤る | 料金表に数え方の列を持つ |
JobId が切れて結果が取れない | 7日間だけ有効。取った時点で S3 に残す |
上の2行が、この構成の失敗のほとんどです。 どちらも表の読み方の誤りで、照合表の上では、ありそうな差に見えます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 保管業者の名前、口座番号、樽ごとの蒸留所・年・量、保管料と保険料の金額です。個人情報はほとんど含みませんが、どの蒸留所の何年の樽をどれだけ持っているかは、仕入れと販売の計画そのもので、競合に知られたくない情報です。
- 明細と台帳を一覧の外に出さない … 照合表は購買部と経理部だけが見ます。保管業者への問い合わせに、他の保管業者の口座の樽や料金を書かないでください
- S3 の結果を暗号化する …
StartDocumentAnalysisに KMS の鍵を渡せば出力をその鍵で暗号化でき、渡さないときは SSE-S3 です。バケットの権限は購買部の処理に限ります - 量の減り方の印を、保管業者の責任の根拠にしない … HMRC の届出の注記では、保管中に認められる減りに樽の熟成による減りが含まれるとされています。印は、樽の状態を尋ねる入口です。 責任の話は、契約と保管業者の説明を確かめてから購買部が決めてください
- 熟成の年数は参考にとどめる … 詰めた日から3年の日付は、スコッチウイスキーとして売り出せる時期の目安として一覧に出せますが、名乗れるかどうかは、熟成の場所や樽の条件も含めて確かめることです。 この構成は判断しません
- 支払と問い合わせは人が決める …
query_warehouseは確認の入口です。支払を止めるか、どの差を問い合わせるかは、保管業者との関係を見て決めてください
誤りのリスクは、樽の抜けを見逃すことと、正しい請求を誤りとして問い合わせることの2つです。 どちらも列と数え方の取り違えから起きるため、意味が決まらない列を照らさない決まりで防ぎます。
10まず何から始めるか
1週目:料金表を機械で読める形にする
保管業者ごとの取り決めを、樽の種類ごとの料金、週か月か、月の途中の入出庫の扱い、作業料の単価として1つの表にまとめます。作業の依頼の記録も、メールから一覧に移します。
2週目:5口座で試す
先月の5口座分を AWS Textract のコンソールで読ませます。列の見出しの印が付くか、ページをまたぐ表を並べ直せるか、量の列の種類が見出しから決まるかを最優先で見ます。
3週目:列の対応表を作る
預けている樽の多い保管業者から、列の見出しと略号、量の列の種類、樽番号の書き方を1行ずつまとめます。略号の意味が分からない保管業者には、明細の列の定義を尋ねます。
4週目:受付から突き合わせまでをつなぐ
S3 への保存を起点に読み取りを始め、樽番号で台帳と突き合わせた一覧を書き出すところまで作ります。この時点では料金の照合をせず、樽の取れ方だけを見ます。
2か月目: 検算と合計の照合、料金表と作業の依頼の記録の照合を足します。3か月目以降: 再計量の値の履歴を積み重ね、1件45分が何分になったかを実測します。needs_review が月に数件まで減り、樽の抜けと料金の差がその月のうちに問い合わせられるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 対応形式が JPEG・PNG・PDF・TIFF で XFA 形式の PDF は不可。同期は10MB・PDF 1ページまで、非同期は PDF 500MB・3,000ページまで。PDF は縦横40インチ・9,000ポイントまでで、パスワード保護不可。対応言語が英・仏・独・伊・葡・西で、問い(Queries)は英語の文書のみ。文字の高さの下限が15ピクセル(150 DPI で8ポイント相当)。日本語などの縦書きに対応しないこと | AWS: Set Quotas in Amazon Textract | 2026-10-29 |
AnalyzeDocument がフォーム(KEY_VALUE_SET)・表(TABLE・CELL)・問い(QUERY・QUERY_RESULT)を返すこと。FeatureTypes の値。同期の処理で、非同期は StartDocumentAnalysis を使うこと | AWS: AnalyzeDocument | 2026-10-29 |
StartDocumentAnalysis が JobId を返し、完了の状態を SNS に知らせ、SUCCEEDED を確かめてから GetDocumentAnalysis で結果を取ること。同じ ClientRequestToken なら同じ JobId が返ること。JobId が7日間有効なこと。KMSKeyId を渡さないと SSE-S3 で暗号化されること | AWS: StartDocumentAnalysis | 2026-10-29 |
表のセルに COLUMN_HEADER・TABLE_SUMMARY・TABLE_FOOTER などの EntityTypes が付くこと。結合したセルが MERGED_CELL で返ること | AWS: Tables | 2026-10-29 |
問いの Pages を指定しないと ["1"] になること。* で全ページを指定できること | AWS: Query | 2026-10-29 |
| スコッチウイスキーが、容量700リットル以下のオーク樽で、スコットランドで、保税倉庫などで3年以上熟成させ、度数40%以上のものとされていること | legislation.gov.uk: The Scotch Whisky Regulations 2009, regulation 3 | 2026-10-29 |
| 保税倉庫の在庫の記録が、スピリッツはアルコール分の量(litres of alcohol)で、容器の数とともに記録され、持ち主・度数・受け入れた日を示すこと。減りは記録して調べ、出どころの違う減りと増えを相殺できないこと | GOV.UK: Keeping records for an excise warehouse | 2026-10-29 |
| 在庫の届出(W1)で、ウイスキーなどのスピリッツは20℃のアルコール分の量で記録すること。保管中に認められる減りに、樽の熟成による減りが含まれること | GOV.UK: Notes to help you complete form W1 | 2026-10-29 |
料金表と数え方の取り決め、樽の引き渡しの条件は、保管業者との契約で確かめてください。 本記事は上記の公開情報で確認できた範囲だけを扱っています。保管業者の明細の様式は、特定の会社のものを確かめていません。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-2230)についてのご相談はこちらから。
