食品原料の輸入商社が海外の原料メーカーから届く英文のハラール認証書を読み取り、認証機関・対象品目・有効期限を原料台帳と照らして、期限切れと対象外の品目を拾う
海外の原料メーカーから届く英文のハラール認証書を読み取り、認証機関・製造所・対象品目・有効期限を原料台帳と照らします。期限切れ、対象品目に入っていない原料、顧客が受け入れない認証機関のものを、顧客に出す前に拾います。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- AWS Textract/Azure AI/Google Document AI
- 連携・自動化
- Python
- 対象業界
- 商社/小売/製造
- 対象部門
- 品質管理/購買
- 対象業務
- 内容確認・チェック/台帳・マスタ管理
- 主な課題
- 属人化している/期限・対応漏れが起きる/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/工数削減/機会損失防止
- 導入難易度
- ★★★☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 原料メーカーから認証書のPDFがメールで届き、担当者が原料のフォルダに保存する
- 原料台帳を開き、その原料の品番・メーカー品名・製造所・納入先を確かめる
- 認証書の表面を読み、認証機関・認証番号・認証を受けた会社・発行日・有効期限を確かめる
- 別表をめくり、自社が買っている品名が載っているかを探す
- 製造所の住所が台帳の製造所と同じかを見る
- 納入先の顧客が受け入れる認証機関かを、過去のメールで確かめる
- 問題があれば、メーカーに更新した認証書か対象品目を足した別表を頼むメールを書く
- 台帳の「ハラール認証書」の列に有効期限を書く(書き忘れることがある)
- 人メーカーから届いた認証書のPDFを受付フォルダに保存する(ファイル名にメーカーコードを入れる)
- 自動保存をきっかけに処理が動き、形式・ページ数・パスワードの有無を確かめる
- 自動AWS Textract が全ページを読み、キーと値、表、質問への答えと信頼度を返す
- 自動生成AIが、読み取り結果から認証機関・認証番号・会社・製造所・対象品目・発行日・有効期限を項目に分ける
- 自動プログラムがメーカーコードで原料台帳を引き、対象品目・製造所・期限・認証機関を照らして印を付ける
- 自動印の組み合わせから、`ok` / `needs_request` / `needs_human` を規則で決める
- 自動`needs_request` のものについて、メーカーへの依頼の英文の下書きを作る
- 人担当者が `needs_request` と `needs_human` の認証書だけを開き、印の根拠を確かめる
- 人メーカーへの依頼を送るか、顧客へ事情を伝えるかを決める
- 【人/自動】 台帳の「ハラール認証書」の列(期限・確認日・確認者)を確定し、期限の近いものの一覧を毎週出す
各工程の詳しい説明を読む
- 原料メーカーから認証書のPDFがメールで届き、担当者が原料のフォルダに保存する
- 原料台帳を開き、その原料の品番・メーカー品名・製造所・納入先を確かめる
- 認証書の表面を読み、認証機関・認証番号・認証を受けた会社・発行日・有効期限を確かめる
- 別表をめくり、自社が買っている品名が載っているかを探す
- 製造所の住所が台帳の製造所と同じかを見る
- 納入先の顧客が受け入れる認証機関かを、過去のメールで確かめる
- 問題があれば、メーカーに更新した認証書か対象品目を足した別表を頼むメールを書く
- 台帳の「ハラール認証書」の列に有効期限を書く(書き忘れることがある)
(a)別表を読み落とす。 表面の期限を確かめた時点で「確認済み」になりがちで、別表に自社の品番が無いことに気づかないまま顧客に出すことがあります。メーカーの品名と自社の品番の呼び方が違うと、載っていても探せません。
(b)期限切れに顧客からの指摘で気づく。 有効期限を台帳に書く担当者と書かない担当者がいて、期限の近いものを一覧にする仕組みがありません。 顧客の監査の前に「この認証書は期限が切れています」と言われて、慌ててメーカーに頼みます。
(c)認証機関の変化を追えていない。 顧客が指定する一覧は改定され、取り消された機関の認証書が台帳に残っていても、誰も気づきません。
(d)確認が1名に寄っている。 認証書を読み慣れた担当者が1名だけで、その人が休むと確認が止まります。
- 【人】 メーカーから届いた認証書のPDFを受付フォルダに保存する(ファイル名にメーカーコードを入れる)
- 【自動】 保存をきっかけに処理が動き、形式・ページ数・パスワードの有無を確かめる
- 【自動】 AWS Textract が全ページを読み、キーと値、表、質問への答えと信頼度を返す
- 【自動】 生成AIが、読み取り結果から認証機関・認証番号・会社・製造所・対象品目・発行日・有効期限を項目に分ける
- 【自動】 プログラムがメーカーコードで原料台帳を引き、対象品目・製造所・期限・認証機関を照らして印を付ける
- 【自動】 印の組み合わせから、
ok/needs_request/needs_humanを規則で決める - 【自動】
needs_requestのものについて、メーカーへの依頼の英文の下書きを作る - 【人】 担当者が
needs_requestとneeds_humanの認証書だけを開き、印の根拠を確かめる - 【人】 メーカーへの依頼を送るか、顧客へ事情を伝えるかを決める
- 【人/自動】 台帳の「ハラール認証書」の列(期限・確認日・確認者)を確定し、期限の近いものの一覧を毎週出す
5番目と6番目をプログラムと規則に置くのは、顧客ごとに受け入れる認証機関が違うからです。 AIには認証書に何が書かれているかだけを答えさせ、それが顧客の条件に合うかは台帳と規則で決めます。
02今回想定するシステム構成
ハラール認証書(PDF。原料メーカーからメールで届く) ▼【トリガー】受付フォルダ(Amazon S3)への保存 AWS Lambda ── 形式・ページ数・パスワードの確認、メーカーコードの取り出し ▼ AWS Textract(StartDocumentAnalysis:FORMS/TABLES/QUERIES) │ 全文、キーと値、別表の表、質問への答え、信頼度 ▼ Claude API ── 認証書の記載を項目に分ける │ ① 認証機関 ② 認証番号 ③ 認証を受けた会社 ④ 製造所 │ ⑤ 対象品目の一覧 ⑥ 発行日・有効期限 ▼ Python ── 原料台帳と認証機関の一覧との照合 │ 品名の対応、製造所、期限までの日数、顧客が受け入れる機関か ▼ 判定(ok / needs_request / 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(認証書、読み取り結果、照合の結果) | 社内のファイルサーバー |
原料台帳は、新しく足すものではありません。 最初の準備は、「メーカー品名」の列を認証書に書かれる呼び方で埋めることと、顧客ごとに受け入れる認証機関の表を作ることです。どちらも無ければ照合の規則が書けません。
認証機関の表の土台にするのが、JAKIMが公表している一覧です。 2026年8月21日から有効とされる一覧は、マレーシアの取引表示法の命令に基づいて官報で告示されたもので、国・地域ごとに機関の名前と住所が並んでいます。付録には、認める期間は3年で、期間が終わると見直しの監査を行うこと、マレーシアで売られる輸入食品は、JAKIMが認めた海外の認証機関の認証を受けていなければハラールと表示できないことが書かれています。一覧は改定されるので、表には一覧の有効日を一緒に持たせます。
OCRに AWS Textract を選ぶのは、認証書の英語の部分を読めば足りるからです。 公式の上限の表では、対応言語は英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語とされ、アラビア語や中国語は読めません。 英語とアラビア語を並べた認証書なら英語の側だけを読み、英語の記載が無い認証書は、担当者が目で見る一覧に入れます。 質問の検出も英語の文書だけが対象です。
03どうやって実装するのか
処理の起点を決める
受付フォルダ(Amazon S3)に認証書のPDFが保存されたことを起点にします。 保存の通知で AWS Lambda が動き、照合までを済ませます。
保存するのは担当者で、ファイル名の先頭にメーカーコードを入れる決まりにします。 代理店から転送されてくることが多く、差出人から自動で取ると別のメーカーの原料と照らすおそれがあるためです。
もう一つの起点は、毎週月曜の定時実行です。 認証書は読まず、台帳の期限と認証機関の表だけを見直して、期限まで60日を切ったものと、一覧の改定で外れた機関のものを一覧にします。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| ハラール認証書 | PDF。表面(機関・番号・会社・期限)と別表(対象品目の一覧) | 受付フォルダ |
| 読み取り結果 | 全文、キーと値、表、質問への答え、信頼度 | AWS Textract |
| 原料の情報 | 品番、メーカー品名(認証書に書かれる呼び方)、メーカー、製造所の住所、納入先 | 原料台帳 |
| 顧客の指定 | 顧客ごとに受け入れる認証機関(「JAKIMの一覧」または機関名の列挙) | 自社で用意する表 |
| 認証機関の一覧 | JAKIMの一覧に載った機関の名前・国・住所と、一覧の有効日 | 公表された一覧から自社で起こした表 |
| 機関名の呼び方の一覧 | 略称、旧名、現地語の名前など、同じ機関の別の書き方 | 自社で用意する一覧 |
質を決めるのは、メーカー品名と機関名の呼び方の2つです。 自社の品番が「乳化剤E-12」でも、別表には「Emulsifier Type 12 (Powder)」と書かれます。この対応が無ければ、載っている原料を「対象外」と判定します。
指定を聞いていない顧客は「未確認」とし、照合の規則で needs_human に回します。 空欄を「どの機関でもよい」と読まないためです。
データの取得方法を決める
読み取りは StartDocumentAnalysis に S3 の場所と FeatureTypes を渡して始めます。完了は NotificationChannel に指定した Amazon SNS のトピックに通知され、状態が SUCCEEDED なら GetDocumentAnalysis で結果を取ります。
| 指定するもの | 値 | 理由 |
|---|---|---|
FeatureTypes | FORMS、TABLES、QUERIES | 表面のキーと値、別表の品目の表、文章の中の期限 |
QueriesConfig | 質問の文と Alias、Pages に * | 別表のページにも質問を当てる |
ClientRequestToken | ファイルのハッシュ | 同じ認証書で二重に読み取りを始めない |
JobTag | メーカーコード | 完了の通知からメーカーを引く |
OutputConfig | 自社の S3 の場所 | 読み取り結果を自社の側に残す |
Alias | 質問の文 |
|---|---|
CERT_BODY | Who issued this halal certificate? |
CERT_NO | What is the certificate number? |
HOLDER | Which company is certified? |
SITE | What is the address of the certified plant? |
ISSUE_DATE | What is the date of issue? |
EXPIRY_DATE | What is the expiry date? |
質問は対象ページを指定しないと既定で1ページ目だけに当たります。 有効期限が最後のページの署名の近くに書かれている認証書もあるため、Pages に * を入れて全ページに当てます。質問は非同期の処理で1ページあたり30個までです。
対象品目の一覧は、質問ではなく表として取り、セルの単位で生成AIに渡します。 箇条書きの別表もあるので、全文も一緒に渡します。
結果は1回最大1,000ブロックで区切られ、NextToken が返る限り呼び直します。JobId は7日間しか有効でないため、取った結果はその場で S3 に保存します。 状態が PARTIAL_SUCCESS のときは Warnings のページ番号を記録し、そのページを読めなかったものとして扱います。
AIへ渡す前に整形する
- 形式の確認 … JPEG、PNG、PDF、TIFF であることを確かめます。XFA で作られたPDFは扱えないとされているので、印刷してPDFにし直します
- パスワードの確認 … PDFはパスワードで保護されていてはいけないとされています。保護されたものは、メーカーに解除したものを頼みます
- ページ数の確認 … 非同期の処理で、PDFとTIFFは500MB・3,000ページまでです。規格書や分析証明書とまとめて1つのPDFで届いたときは、認証書のページだけを切り出します
- 言語の確認 … 英語の記載が無い認証書は、読み取りに回さず担当者の一覧に入れます
- 文字の大きさの確認 … 検出できる文字の高さの下限は15ピクセルで、150DPIで8ポイント相当です。別表の品目は小さな字で詰めて書かれることが多いため、スキャンの写しは解像度を確かめます
- メーカーコードの確認 … ファイル名のメーカーコードで台帳が引けるかを確かめ、引けなければ処理を止めて担当者に戻します
AIに処理させる
させるのは、読み取り結果から6つの項目を取り出し、それぞれに根拠の文字列と状態を付けることだけです。 原料台帳と認証機関の表との照合は Python が行い、AIには台帳を渡しません。
| 取り出すもの | 取り出し方 | 判断できないときの扱い |
|---|---|---|
| 認証機関 | 書かれたとおりに名前と国を写す | ロゴだけで名前が無ければ missing |
| 認証番号 | 書かれたとおりに写す | 読めなければ unreadable |
| 認証を受けた会社 | 書かれたとおりに写す | 会社と製造所が混ざっていれば ambiguous |
| 製造所 | 住所を写す。複数あれば分けて並べる | 「all plants」等は not_specific |
| 対象品目 | 品名・ブランド・品番を1行ずつ写す | 「as per annex」で別表が無ければ reference_only |
| 発行日・有効期限 | 日付を書かれたとおりに写し、年月日に直す | 日付の並びが決められなければ ambiguous |
対象品目の欄が、この構成でいちばん大事です。 品目を1行ずつ写させ、自社のどの品番に当たるかは選ばせません。 当てるのは Python が台帳のメーカー品名と照らして行います。日付は、「05/04/2027」が4月5日か5月4日かを決められなければ ambiguous にさせます。
| させないこと | 理由 |
|---|---|
| 原料がハラールに当たるかの判断 | 宗教上の判断は認証機関の仕事 |
| 認証機関が信頼できるかの評価 | 顧客の指定と公表された一覧で決める |
| 品名が似ている品目の読み替え | 「Type 12」と「Type 12 Powder」を同じとすると対象外を見落とす |
| 期限の延長の推測 | 「更新中」と書かれていても、書面の期限で扱う |
| 顧客に出してよいかの結論 | 規則で決め、人が確かめる |
3行目がいちばん起きやすい失敗です。 品名の照合は Python で完全一致と呼び方の一覧だけに限ります。
指示内容を固定する
あなたは食品原料の輸入商社の品質保証課で、海外の原料メーカーから届いた
英文のハラール認証書を読み、記載を項目に分ける担当です。
AWS Textract の読み取り結果だけを見て答えてください。推測で埋めないでください。
【取り出す6項目】
1. 認証機関(名前と国)
2. 認証番号
3. 認証を受けた会社
4. 製造所(住所。複数あればすべて)
5. 対象品目(品名・ブランド・品番を1行ずつ)
6. 発行日と有効期限
【status の選び方】
- present ......... 値が読み取れている
- missing ......... 該当する記載が無い。項目名だけがあって値が空の場合も missing
- unreadable ...... 文字は検出されているが信頼度が低く、値として確定できない
- ambiguous ....... 値の候補が複数あり、1つに決められない
- not_specific .... 製造所が「all plants」など特定されていない
- reference_only .. 「as per annex」など別の書類を参照するとだけ書かれ、その書類が無い
迷ったときに present を選ばないでください。
【厳守事項】
- 対象品目は、書かれた品名を1文字も変えずに1行ずつ写してください。
似た品名をまとめたり、自社の品番に読み替えたりしないでください。
- 日付は書かれた文字列をそのまま raw に写し、年月日に直した値を date に入れてください。
日と月の並びが決められない場合は ambiguous とし、どちらかに決めないでください。
- 「renewal in progress」などと書かれていても、書面の有効期限をそのまま写してください。
期限が延びたものとして扱わないでください。
- 認証機関の名前は、ロゴの図柄ではなく文字で書かれた名前を写してください。
- 読み取りの警告が出ているページがあれば、そのページにありうる項目は
missing ではなく unreadable としてください。
- evidence には根拠の文字列を原文のまま、ページ番号と一緒に写してください。
- 原料がハラールに当たるか、顧客に出してよいかは書かないでください。
- ハラール認証書でない書類(規格書、分析証明書など)と判断した場合は、
項目を取り出さず document_type に種類を書いてください。
【読み取り結果】{textract_result}
【読み取りの警告があったページ】{warning_pages}
「1文字も変えずに写す」を強く書くのは、AIが品名を整えたがるからです。 「Gelatin 240 Bloom (Bovine)」を「Gelatin」とまとめると、牛由来と魚由来のゼラチンの区別が消えます。日付を raw と date の2つで返させるのは、期限の判定を誤ったときに原文から追えるようにするためです。
出力形式を固定する
Claude API の構造化出力(output_config.format に json_schema)で、次の形のJSONを受け取ります。 数値の minimum・maximum や文字列の長さの制約は使えないとされているため、日付の範囲や品目の数は Python の側で確かめます。
{
"maker_code": "MK-0412",
"document_type": "halal_certificate",
"items": [
{ "item": "cert_body", "status": "present",
"value": "Halal Certification Body X (Brazil)",
"page": 1, "confidence": 97.2, "evidence": "Issued by: Halal Certification Body X" },
{ "item": "expiry", "status": "present",
"raw": "05/04/2027", "date": "2027-04-05",
"page": 1, "confidence": 95.8, "evidence": "Valid until: 05/04/2027" }
],
"products": [
{ "name": "Gelatin 240 Bloom (Bovine)", "brand": "", "code": "G240B",
"page": 2, "confidence": 93.1 }
]
}
items には5項目(認証機関・認証番号・会社・製造所・期限)を並べ、item は cert_body / cert_no / holder / site / issue_and_expiry です。対象品目は products に1行ずつ入れます。
照合は Python が台帳と認証機関の表に突き合わせて行い、項目ごとに印を付けます。
| 印 | 付く条件 |
|---|---|
expired | 有効期限が今日より前 |
expiring_soon | 有効期限まで60日を切っている |
product_not_listed | 台帳でこのメーカーに紐づく品番のメーカー品名が、products に無い |
site_mismatch | 製造所の住所が台帳の製造所と合わない |
body_not_accepted | 認証機関が、納入先の顧客が受け入れる機関の表に無い |
body_list_changed | 前回の確認のあと、認証機関の一覧が改定されている |
holder_mismatch | 認証を受けた会社が台帳のメーカーと違う |
判定は、印と状態の組み合わせで規則として決めます。
verdict | 条件 |
|---|---|
ok | 5項目がすべて present で、印が1つも無い |
needs_request | expired・expiring_soon・product_not_listed・site_mismatch のどれかがあり、該当の項目が present |
needs_human | body_not_accepted・body_list_changed・holder_mismatch がある、または present 以外の状態が1つでもある |
認証機関の印を needs_human に寄せているのは、メーカーに頼んでも直らないからです。 必要なのは顧客との相談か、別のメーカーの原料の検討です。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 受付フォルダ(Amazon S3) | 保存の通知で AWS Lambda を起動 | 認証書の保存を検知する |
| AWS Textract | API呼び出し(非同期) | 全文・キーと値・表・質問への答え・信頼度を返す |
| Claude API | API呼び出し | 6項目の取り出しと、メーカーへの依頼の英文の下書き |
| 原料台帳 | 読み取り(照合)と、確認の列への書き込み | 品名・製造所を引き、期限と確認日を書く |
| 認証機関の表 | 読み取りだけ | 顧客ごとに受け入れる機関と、一覧の有効日を引く |
| メール | 担当者が送る | メーカーへの依頼、顧客への連絡 |
原料台帳への書き込みは、「ハラール認証書」の列(期限・認証番号・確認日・確認者)だけに限ります。 照合の元になる列を、照合する側が書き換えられないようにします。
人が確認する
担当者が開くのは needs_request と needs_human の認証書だけです。 ok のものは一覧でメーカーと品目の数を流し見て、確認の列を確定します。
needs_humanを先に見る … 多くは別表が読めていないか、認証機関の表に無い書き方ですproduct_not_listedの根拠を確かめる … 別表の原文を開き、自社の品名が本当に無いのか、呼び方が違うだけなのかを見ますbody_not_acceptedの対応を決める … 顧客に相談するか、別のメーカーの原料を探すかを、課長と購買の担当で決めます- メーカーへの依頼を送る … 下書きを直して送ります。送信は人が行います
- 印を覆したら記録する … どの印を、なぜ外したかを残し、呼び方の一覧を直します
目標は、120件をならして1件4分です。 開くのは2割前後という想定です。
例外に対処する
| 起きること | 対応 |
|---|---|
| パスワード付きのPDF | 読めないので、メーカーに解除したものを頼む |
| 英語の記載が無い認証書 | 質問が使えないため、担当者の一覧に入れて目で見る |
状態が PARTIAL_SUCCESS | 警告のページを unreadable として扱い、needs_human へ |
| 別表が「as per annex」で添付されていない | reference_only。メーカーに別表を頼む |
| 1通に複数の製造所 | 製造所ごとに台帳と照らし、どれにも当たらなければ site_mismatch |
| ファイル名のメーカーコードで台帳が引けない | 処理を止めて担当者に戻す。推測で近いメーカーに当てない |
| 認証書でなく規格書が届く | document_type を見て、照合せずに担当者に戻す |
| 認証機関の一覧が改定された | 週次の定時実行で、改定の前に確認した認証書を body_list_changed で拾い直す |
最後の行は仕組みの側に持たせます。 JAKIMは2025年3月に、フランス、クロアチア、中国の海外認証機関の承認の取り消しを告知しており、届いた日に正しくても後の改定で出せなくなります。
記録を残す
- 元の認証書ファイル(版を含む)と、受け取った日時・送り主
- AWS Textract が返したJSONの全文と、
Warningsのページ - 生成AIが返した6項目と品目のJSON、Python が付けた印、
verdict - そのとき参照した認証機関の一覧の有効日と、顧客の指定
- 人が印を覆した記録 … どの印を、なぜ外したか
- メーカーへの依頼の日時と、届いた新しい認証書との対応
4つ目を残すのは、顧客の監査で「その時点で正しかったか」を答えるためです。
04実装レベルの3段階
本記事の想定は半自動化です。 読み取りと照合と判定が自動になり、担当者は印の付いた認証書を確かめます。1件16分が4分になるのはこの段階です。 本格構成で足すのは、顧客への提出の側です。 顧客から「この原料の認証書を」と頼まれたときに、台帳の確認の列が ok の最新の認証書と確認の記録を一式で出せるようにします。提出そのものは人が行います。
05工数削減シミュレーション
導入後 120件 × 4分 ÷ 60 = 8 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 海外の原料メーカーからゼラチン・乳化剤・香料・調味料・でん粉などを輸入し、ハラール対応の食品を作る国内のメーカーに納めている商社。顧客から原料ごとにハラール認証書の提出を求められ、海外のメーカーから英文の認証書がPDFで届き、認証機関・対象品目・有効期限を担当者が目で見ている場合。マレーシア向けなど、顧客が「受け入れる認証機関」を指定している取引がある場合。原料台帳(品番・メーカー品名・製造所・納入先)を表で持っている場合。
- 扱う原料が数品目で、認証書が年に数通しか届かない場合。認証書が英語以外(アラビア語・インドネシア語・中国語など)だけで書かれていることが多い場合(この構成のOCRは英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語しか読めず、質問(Queries)は英語の文書だけが対象です)。なお、原料がハラールに当たるかの宗教上の判断、認証機関の信頼性の評価、顧客への提出可否の最終判断は、この構成では代替できません。
07最小構成で試す方法
- 共有フォルダから認証書を20通選ぶ(別表に数十品目並ぶもの、英語とアラビア語を並べたもの、期限が近いものを必ず入れる)
- 手元の生成AIの画面に1通ずつ渡し、「このハラール認証書の、認証機関、認証番号、認証を受けた会社、製造所の住所、対象品目(1行ずつ、書かれたとおり)、発行日、有効期限を表にしてください。書かれていない項目は空欄にし、推測で埋めないでください。品名をまとめたり言い換えたりしないでください」と指示する
- 出てきた表の対象品目を原料台帳の品名と見比べ、当時の確認で見落としていた対象外の品目が無いかを数える
- 有効期限について、AIの答えと原文の日付の並びを1通ずつ見比べる
20通は必ずやってください。 仕組みを組む前に、品名をまとめないか、日付の並びを取り違えないかを確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 品目と期限を原文どおりに取り出した | OCRのAPIと照合の処理に進む |
| 似た品名をまとめた、品名を短くした | 指示で禁じる。直るまで先に進まない |
| 別表の字が小さく読めない認証書が多い | 受け取り方が先。 メーカーに元のPDFを頼む |
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 載っている品目が対象外と出る | メーカー品名の対応が台帳に無い。 呼び方の一覧を足す |
| 似た品名をまとめて写す | 1文字も変えずに写させ、照合は完全一致と一覧だけ |
| 日付の日と月を取り違える | raw と date を分け、並びが決められなければ ambiguous |
| 質問が最後のページに当たらない | Pages を指定しないと1ページ目だけ。 * を入れる |
| 別表が読めないのに対象外になる | Warnings のページを unreadable として渡す |
| 機関名が一覧と一致しない | 略称・旧名の呼び方の一覧を作る |
| 一覧の改定に気づかない | 一覧の有効日を表に持たせ、週次で照らし直す |
| 顧客の指定が空欄のまま通る | 空欄は「未確認」として needs_human に回す |
| 英語の記載が無い認証書が混ざる | 対応言語は6つ。担当者の一覧へ |
| 依頼が自動で飛ぶ | 下書きまでにする。 送信は人が行う |
上の3行が、この構成の失敗のほとんどです。 どれも品名と日付を「整えて」しまうことから起き、原文のまま写させる指示と、照合をプログラムに置く設計で防げます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 原料メーカーと顧客の名称、原料の品名と品番、製造所の住所、認証番号です。個人の情報はほとんど含まれませんが、どの顧客にどのメーカーの原料を納めているかという取引の構造がまとまっています。
- 外部へ渡す範囲を、認証書の読み取り結果までに限る … 原料台帳と顧客の指定の表はAIに渡さず、照合は Python の側で行います。 納入先の一覧を外へ出さないためです
- 読み取り結果を自社の側に置く …
OutputConfigで自社の S3 に出し、KMSKeyIdで自社の鍵による暗号化を指定できます。保管の期間を社内の文書管理の決まりに合わせます - 宗教上の判断を代替しない … この構成が出すのは、認証書に何が書かれているかと、台帳と顧客の指定との差です。原料がハラールに当たるかは認証機関の判断で、顧客に出すかは課長が決めます
- メーカーと顧客への連絡を自動で送らない … 出すのは下書きまでです。誤った指摘は、メーカーとの関係にも顧客の信頼にもひびきます
- 認証書の写しを顧客以外に出さない … 認証書にはメーカーの製造所と製品の一覧が載っています。メーカーとの約束で、提出先を顧客に限っている場合があります
誤りが起きた場合のリスクは、対象外の原料を認証ありとして顧客に出すことと、対象の原料を対象外としてメーカーに無用な依頼を出すことの2つです。 前者は品名をまとめて写すと起き、後者は呼び方の一覧が足りないと起きます。どちらも品名の照合から出ているので、そこだけは設計で守ります。
10まず何から始めるか
1週目:原料台帳の列を整える
「メーカー品名」の列を、手元の認証書の別表の書き方で埋めます。件数の多い上位20社のメーカーの原料から始めます。 あわせて、「ハラール認証書」の列を、期限・認証番号・確認日・確認者に分けます。
2週目:20通で試す
手元の認証書から20通を選び、生成AIに渡して項目と品目を表にさせます。品名をまとめていないか、日付の並びを取り違えていないかを最優先で見ます。
3週目:顧客の指定と認証機関の表を作る
営業の担当と一緒に、顧客ごとに受け入れる認証機関を表にします。JAKIMの一覧に載った機関は、一覧の有効日と一緒に起こします。 指定を聞いていない顧客は「未確認」として残します。
4週目:受付フォルダから照合までをつなぐ
S3、Lambda、Textract、Claude API、Python の照合までを作ります。この時点では verdict を出さず、6項目と印の一覧だけを担当者が見ます。
2か月目: verdict と週次の期限の一覧を出し、needs_request と needs_human の件数を毎週数えます。3か月目以降: メーカーへの依頼の下書きを足し、1件16分が何分になったかを実測します。期限切れに顧客の指摘より先に気づけるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 対応形式が JPEG、PNG、PDF、TIFF で XFA のPDFは非対応なこと。非同期でPDFとTIFFが500MB・3,000ページまでなこと。PDFはパスワードで保護されていてはいけないこと。質問は非同期で1ページあたり30個までなこと。対応言語が英・仏・独・伊・葡・西の6つで、質問の検出は英語の文書だけなこと。検出できる文字の高さの下限が15ピクセル(150DPIで8ポイント相当)なこと | AWS: Set Quotas in Amazon Textract | 2026-10-26 |
質問の Pages を指定しないと既定で ["1"] になること。* で全ページを指せること。質問の文と Alias が200文字までなこと | AWS: Query | 2026-10-26 |
FeatureTypes に TABLES/FORMS/QUERIES を指定できること。完了が SNS に通知されること。ClientRequestToken で同じジョブの二重起動を防げること。JobTag が完了の通知に含まれること。OutputConfig と KMSKeyId で出力先と暗号化を指定できること。JobId が7日間有効なこと | AWS: StartDocumentAnalysis | 2026-10-26 |
結果が1回最大1,000ブロックで NextToken で続きを取ること。状態に PARTIAL_SUCCESS があり Warnings にページが返ること | AWS: GetDocumentAnalysis | 2026-10-26 |
output_config.format に json_schema を指定するとスキーマに沿った JSON で返ること。数値の minimum・maximum と文字列の長さの制約が使えないこと | Claude: Structured outputs | 2026-10-26 |
| JAKIMが認めた海外のハラール認証機関の一覧が2026年8月21日から有効とされ、取引表示法(ハラールの認証と表示)命令2011に基づいて告示されていること。認める期間が3年で、期間の後に見直しの監査を行うこと。マレーシアで売られる輸入食品は、JAKIMが認めた海外の認証機関の認証を受けていなければハラールと表示できず、輸入者等が認証機関の名前を表示すること | JAKIM: The Recognized Foreign Halal Certification Bodies & Authorities | 2026-10-26 |
| JAKIMのサイトに、フランス、クロアチア、中国の海外ハラール認証機関の承認の取り消しの告知(2025年3月13日)が載っていること | JAKIM: Halal Malaysia | 2026-10-26 |
原料がハラールに当たるか、顧客に出してよいかは、認証機関と顧客の求めに従って判断してください。 本記事は公式のページで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1750)についてのご相談はこちらから。
