英文の居住者証明書を読み取り、名義・居住国・作成日を支払先台帳と照らして、租税条約の軽減が使えない支払を毎月の支払前に拾う
海外のライセンサーや業務委託先から届く英文の居住者証明書を読み取り、名義・居住国・作成日を支払先台帳と照らします。毎月の支払の前に、租税条約による源泉徴収の軽減が使えない支払を拾い、経理の担当者へ返します。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- AWS Textract/Azure AI/Google Document AI
- 連携・自動化
- Python
- 対象業界
- IT・SaaS/商社/広告/製造
- 対象部門
- 経理/財務
- 対象業務
- 内容確認・チェック/台帳・マスタ管理
- 主な課題
- 属人化している/期限・対応漏れが起きる/確認ミスが多い
- AIで行う処理
- 抽出
- 主な効果
- 入力漏れ削減/判断支援/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 毎月の支払予定表が固まったら、非居住者・外国法人への支払を抜き出す
- 支払先台帳で、その支払先の届出書の提出日、様式、適用する条約を確かめる
- 特典条項のある条約の支払先は、共有フォルダから居住者証明書のPDFを開く
- 証明書の名義、住所、居住国、対象の年、作成日を読み、台帳と契約書の名義と見比べる
- 作成日から1年たっていないか、名称や住所の変更(異動)がないかを確かめる
- 軽減が使えない、または確かめきれない支払を一覧にし、支払先へ証明書の取り直しを頼む
- 一覧を責任者に回し、源泉徴収の税率を決めてもらってから送金の手続きに進む
- 人支払先から届いた居住者証明書のPDFを、支払先コードを付けて受付フォルダに保存する
- 自動保存をきっかけに処理が動き、形式・ページ数・パスワードの有無を確かめる
- 自動OCRが証明書の全文、キーと値、質問への答え、信頼度を返す
- 自動名義・住所・居住国・対象の年・作成日・発行機関を取り出し、原文のまま記録する
- 自動支払予定表が固まった時点で、支払ごとに台帳と証明書の記録を照らす
- 自動プログラムが名義・居住国・作成日からの期間・届出書の提出日を規則で判定し、印を付ける
- 自動取り直しが要る支払先には、英文の依頼文の下書きを作る
- 人経理の担当者が、印の付いた支払だけを証明書の画像と見比べる
- 人責任者が、印の付いた支払の源泉徴収の扱いを決め、送金の手続きに進む
各工程の詳しい説明を読む
- 毎月の支払予定表が固まったら、非居住者・外国法人への支払を抜き出す
- 支払先台帳で、その支払先の届出書の提出日、様式、適用する条約を確かめる
- 特典条項のある条約の支払先は、共有フォルダから居住者証明書のPDFを開く
- 証明書の名義、住所、居住国、対象の年、作成日を読み、台帳と契約書の名義と見比べる
- 作成日から1年たっていないか、名称や住所の変更(異動)がないかを確かめる
- 軽減が使えない、または確かめきれない支払を一覧にし、支払先へ証明書の取り直しを頼む
- 一覧を責任者に回し、源泉徴収の税率を決めてもらってから送金の手続きに進む
(a)作成日を数え直さない。 一度「確認済み」と台帳に付けた支払先は、次の月から3番と4番が省かれます。新しい契約で届出書を出し直すときも、手元の古い証明書をそのまま添付しようとして、作成日が1年を過ぎていたことに提出の直前で気づきます。
(b)名義の違いを見逃す。 証明書の名義が親会社や旧社名で、支払先は子会社や新社名ということがあります。証明書が示すのは、その名義の者が相手国の居住者であることで、支払を受ける者が居住者であることではありません。 似た名前だと、目で見ても通ってしまいます。
(c)確認のやり方が1人の担当者の頭の中にある。 どの国の証明書のどこに作成日があるか、どの支払先が特典条項の対象か。この知識を持っているのは3名のうち1名で、その担当者が休むと月末の支払が止まります。
(d)支払の前日までに間に合わない。 届出書等を支払を受ける日の前日までに出していなければ、支払者は条約の限度税率ではなく国内法の税率で源泉徴収を行うとされています。取り直しの依頼が支払の数日前になると、相手国の当局の発行に間に合いません。
- 【人】 支払先から届いた居住者証明書のPDFを、支払先コードを付けて受付フォルダに保存する
- 【自動】 保存をきっかけに処理が動き、形式・ページ数・パスワードの有無を確かめる
- 【自動】 OCRが証明書の全文、キーと値、質問への答え、信頼度を返す
- 【自動】 名義・住所・居住国・対象の年・作成日・発行機関を取り出し、原文のまま記録する
- 【自動】 支払予定表が固まった時点で、支払ごとに台帳と証明書の記録を照らす
- 【自動】 プログラムが名義・居住国・作成日からの期間・届出書の提出日を規則で判定し、印を付ける
- 【自動】 取り直しが要る支払先には、英文の依頼文の下書きを作る
- 【人】 経理の担当者が、印の付いた支払だけを証明書の画像と見比べる
- 【人】 責任者が、印の付いた支払の源泉徴収の扱いを決め、送金の手続きに進む
8番目が、この設計の分かれ目です。 担当者は180件の証明書を毎月開くのではなく、印の付いた支払だけを開きます。 印の無い支払は、名義と作成日を並べた一覧で流し見ます。
6番目の判定をAIにさせないのも、意図してのことです。 作成日から1年、届出書の提出日と支払日の前後、台帳の名義との一致。どれも規則で決まる比較で、AIには証明書から値を取り出すところまでをさせます。
02今回想定するシステム構成
英文の居住者証明書(PDF。支払先からのメールまたは郵送をスキャン) ▼【トリガー】受付フォルダ(Amazon S3)への保存 AWS Lambda ── 形式・ページ数・サイズ・パスワードの確認 ▼ AWS Textract(StartDocumentAnalysis:FORMS/QUERIES) │ 全文、キーと値、質問への答え、信頼度 ▼ Claude API ── 証明書の項目を取り出し、原文と解釈を分けて記録する │ ① 名義と住所 ② 居住国と発行機関 ③ 対象の年 ④ 作成日 ▼ 【トリガー】毎月の支払予定表の確定 Python ── 支払ごとに台帳・届出書の提出日・証明書の記録を照らす ▼ 判定(ok / cert_stale / name_mismatch / country_mismatch / no_form / 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(証明書、読み取り結果、照合の結果) | 社内のファイルサーバー |
支払先台帳と支払予定表は、新しく足すものではありません。 最初の準備は、支払先台帳に「特典条項の対象か」「証明書の作成日」「証明書の名義」「名義の別名」の列を足すことです。
OCRに AWS Textract を選ぶのは、証明書が英文だからです。 公式の上限の表で、対応言語は英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語とされ、日本語や中国語は読めません。 欧州の当局がフランス語やドイツ語で出す証明書も読めますが、手書きの文字が読めるのは英語だけです。
この題材で効くのは、質問(QUERIES)です。 証明書はレターの形が多く、表やキーと値の形に収まらない文章の中に名義や対象の年が書かれています。「この証明書は誰が居住者であることを証明しているか」と質問の形で聞くと、文章の中から答えの文字列と信頼度が返ります。 ただし質問は英語の文書でしか使えないので、フランス語やドイツ語の証明書では質問を外し、キーと値と全文で読みます。
03どうやって実装するのか
処理の起点を決める
起点は2つあります。証明書が届いたときと、支払予定表が固まったときです。
1つ目は、受付フォルダ(Amazon S3)に居住者証明書が保存されたことです。保存の通知で AWS Lambda が動き、読み取りと項目の取り出しまでを済ませて、支払先台帳とは別の「証明書の記録」に書き込みます。届いた時点で読んでおくので、支払の直前に読み取りが集中しません。
2つ目は、毎月の支払予定表が固まったことです。支払日の10営業日前に支払予定表を確定し、その確定の通知で照合が動きます。10営業日前にするのは、取り直しの依頼に相手国の当局の発行の時間を残すためです。 届出書等を支払を受ける日の前日までに出していなければ国内法の税率で源泉徴収することになるので、照合は支払日から逆算して早めに置きます。
さらに、月初に「作成日から10か月を過ぎた証明書」の一覧を出します。 支払が無い月でも、次の提示に備えて取り直しを早めに頼めるようにするためです。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 居住者証明書 | PDF。名義、住所、居住国、対象の年、作成日、発行機関、署名や印影 | 受付フォルダ(Amazon S3) |
| 読み取り結果 | 全文、キーと値、質問への答え、それぞれの信頼度 | AWS Textract |
| 支払予定表 | 支払先コード、支払日、支払の種類(使用料・報酬など)、金額 | 会計システムから出力 |
| 支払先台帳 | 正式名称、所在国、適用する条約と様式、特典条項の対象か、届出書の提出日、原本の添付か提示か | 経理部のスプレッドシート |
| 名義の別名の一覧 | 支払先ごとに、証明書や契約書に出てくる名義の書き方 | 経理部で用意する一覧 |
質を決めるのは、名義の別名の一覧です。 一覧が無いと、ABC Brands Inc. と ABC Brands, Incorporated を別人と判定するか、逆に ABC Holdings Inc. まで同じ者と寄せてしまいます。一覧にある書き方だけを同じ者とし、無いものは人に見せます。
台帳の「原本の添付か提示か」の列も欠かせません。 提示を受けた場合は、確認した旨・確認者・確認日・証明書の作成年月日を届出書に記載し、写しを5年間保存する必要があるとされています。どちらの扱いかで、後段の照合と保存の手順が変わります。
データの取得方法を決める
読み取りは StartDocumentAnalysis にS3の場所と FeatureTypes を渡して始めます。完了は NotificationChannel に指定した Amazon SNS のトピックに通知され、状態が SUCCEEDED なら GetDocumentAnalysis で結果を取ります。
| 指定するもの | 値 | 理由 |
|---|---|---|
FeatureTypes | FORMS、QUERIES(英語のとき) | 見出しのキーと値、文章の中の名義と日付 |
QueriesConfig | 質問の文と Alias の組 | 名義や作成日を項目名で受け取る |
ClientRequestToken | 支払先コードとファイルのハッシュ | 同じ証明書で二重に読み取りを始めない |
JobTag | 支払先コード | 完了の通知から支払先を引く |
Alias | 質問の文 |
|---|---|
TAXPAYER_NAME | Whose residence is certified by this document? |
TAXPAYER_ADDRESS | What is the address of the certified taxpayer? |
RESIDENCE_COUNTRY | Of which country is the taxpayer a resident? |
TAX_PERIOD | For which tax year or period is residence certified? |
ISSUE_DATE | On what date was this certificate issued? |
ISSUING_AUTHORITY | Which authority issued this certificate? |
質問の答えが見つからなければ空のまま返ります。 作成日が空なら、全文から Date、Issued、Dated を含む行を探し、それでも無ければ missing にします。作成日の無い証明書を、受け取った日やPDFの作成日で埋めません。
同期の処理はPDF1ページまでです。 証明書の本体は1ページでも、送付状や翻訳が付いて数ページになるので、非同期で読みます。結果は1回最大1,000ブロックで区切られ、NextToken が返る限り呼び直します。
支払予定表は会計システムからCSVで出し、支払先台帳とあわせて Python が読みます。 生成AIには渡しません。
AIへ渡す前に整形する
- 形式の確認 … JPEG、PNG、PDF、TIFF であることを確かめます。メール本文に貼られた画像は、PDFにして入れます
- パスワードの確認 … PDFはパスワードで保護されていてはいけないとされています。保護されたものは支払先に解除を頼みます
- サイズとページ数の確認 … 非同期の処理で、PDFとTIFFは500MB・3,000ページまでです
- スキャンの解像度の確認 … 文字の高さは最小15ピクセルで、150 DPIで8ポイントの文字に相当します。郵送の原本をスキャンするときは、印影や透かしに重なった日付が下回りやすい箇所です
- 言語の確認 … 6言語に入らない証明書は読み取りに回さず、担当者が目で見る一覧に入れます
- 支払先の特定 … ファイル名の支払先コードを台帳で引き、条約と様式、特典条項の対象かを取り出します
5番目は、受付の時点で支払先台帳の所在国から先に分けておけます。 所在国が6言語の国でなくても英語の証明書が出ることはあるので、国で弾くのではなく、読み取って英字がほとんど出ないものを人に回します。
AIに処理させる
させるのは、証明書から6つの項目を取り出し、原文の文字列と、日付や国名の解釈を分けて書き出すことです。 照合はさせません。
| 見るもの | 取り出し方 | 判断できないときの扱い |
|---|---|---|
| 名義 | 原文のまま。法人の種類の略記(Inc.、Ltd. など)も残す | 複数の名義が並べば ambiguous |
| 住所 | 原文のまま | 書かれていなければ空 |
| 居住国 | 原文と、ISO の国コードへの対応 | 発行機関の国と食い違えば ambiguous |
| 対象の年・期間 | 原文と、開始日・終了日 | 書かれていなければ not_stated |
| 作成日 | 原文と、日付として確定できるときだけ解釈 | 03/04/2026 のように順序が決まらなければ ambiguous |
| 発行機関・署名 | 発行機関の名称と、署名や印影の有無 | 読めなければ unreadable |
作成日の原文を残すのは、日と月の順序が国で違うためです。 03/04/2026 は3月4日にも4月3日にも読めます。1年の判定は1か月の違いで結果が変わるので、順序が決まらない日付は解釈させず人に見せます。 発行機関の国の慣行から推測することもさせません。
対象の年と作成日を取り違えないことも大事です。 「2025年の課税年度について居住者であることを証明する」証明書が2026年に作成されることは普通にあります。1年の判定に使うのは作成日で、対象の年ではありません。
| させないこと | 理由 |
|---|---|
| 軽減してよいかの判断、条約の条項の当てはめ | 顧問税理士と経理の責任者が決める |
| 名義が同じ者かの判断 | 別名の一覧にもとづいて Python が照合する |
| 作成日からの期間の計算 | 規則で決まる比較。Python が行う |
| 順序の決まらない日付の解釈 | 1か月違うと結果が変わる |
| 作成日が無い証明書の日付の補完 | 受け取った日やファイルの日付で埋めると、古い証明書が通る |
最後の行が、いちばん起きやすい失敗です。 作成日が書かれていない、または読めない証明書で、メールの受信日やPDFのプロパティの日付を作成日として埋めると、何年も前の証明書が「作成から1か月」に見えます。
指示内容を固定する
あなたは商社の経理部で、海外の支払先から届いた英文の居住者証明書の
記載を記録する担当です。
OCRの読み取り結果だけを使ってください。推測で埋めないでください。
【取り出す項目】
taxpayer_name_raw、taxpayer_address_raw、residence_country_raw、
residence_country_code、tax_period_raw、tax_period_start、tax_period_end、
issue_date_raw、issue_date、issuing_authority_raw、signature_or_seal、
各項目の status と source(ページと行)
【status の選び方】
- ok ........... 値が読み取れており、その項目として解釈できる
- missing ...... 書かれていない
- not_stated ... 対象の年・期間が書かれていない
- unreadable ... 文字は検出されているが値として確定できない
- ambiguous .... 候補が複数ある、または日付の順序が決まらない
【厳守事項】
- 名義は書かれた文字列をそのまま入れてください。略記を補ったり、
台帳の名称に書き換えたりしないでください。
- issue_date は、日と月の順序が文面から確定できるときだけ
YYYY-MM-DD で入れてください。決まらなければ空にし、
status を ambiguous にしてください。
- 作成日が書かれていない場合は missing にしてください。
メールの日付、ファイルの日付、対象の年から補わないでください。
- 対象の年(tax year)と作成日(date of issue)を混同しないでください。
- 軽減を受けられるか、条約の要件を満たすかを書かないでください。
- 居住者証明書でない書類(送付状、翻訳、請求書など)と判断した場合は、
項目を取り出さず document_type に種類を書いてください。
【読み取り結果】{textract_forms_and_queries}
【この支払先の台帳上の所在国】{ledger_country}
「台帳の名称に書き換えない」を明記しないと、書き換えます。 台帳の所在国や名称を一緒に渡すと、近い名義を台帳の表記にそろえて返し、その瞬間に名義の食い違いが見えなくなります。 台帳の名称そのものは渡さず、所在国だけを渡しているのもそのためです。
出力形式を固定する
Claude API の構造化出力(output_config.format に json_schema を指定)で、次の形のJSONを受け取ります。
{
"file": "",
"payee_code": "",
"document_type": "residence_certificate",
"taxpayer_name_raw": "ABC Brands, Incorporated",
"residence_country_raw": "United States of America",
"residence_country_code": "US",
"tax_period_raw": "calendar year 2025",
"issue_date_raw": "March 4, 2026",
"issue_date": "2026-03-04",
"issuing_authority_raw": "",
"signature_or_seal": "present",
"items": [
{ "item": "issue_date", "status": "ok", "confidence": 0, "source": "p1:L12" }
],
"request_draft": ""
}
1つ目の理由は、照合をプログラムの側に置けることです。 Python が支払予定表の支払ごとに、台帳とこの記録を突き合わせて印を付けます。
| 印 | 付ける条件 |
|---|---|
ok | 届出書の提出日が支払日の前日より前で、特典条項の対象なら証明書があり、名義・居住国が一致し、作成日の条件を満たす |
cert_stale | 提示の扱いで、作成日が提示の日の1年より前。または月初の一覧で作成から10か月を過ぎた |
name_mismatch | 証明書の名義が、台帳の正式名称にも別名の一覧にも当たらない |
country_mismatch | 証明書の居住国が、台帳の適用する条約の相手国と違う |
no_form | 届出書の提出日が空、または支払日の前日より後 |
needs_human | ambiguous、unreadable、missing の項目がある、または証明書が未着 |
2つ目は、原文と解釈を分けて持てることです。 issue_date_raw と issue_date を並べておけば、担当者は解釈が正しいかを原文で確かめられます。解釈が空なら、それだけで人が見る印になります。
3つ目は、source で根拠をたどれることです。 p1:L12 なら1ページ目の12行目で、担当者は画像のその行だけを見れば済みます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 受付フォルダ(Amazon S3) | 保存の通知 | 証明書の保存を検知して AWS Lambda を動かす |
| AWS Textract | API呼び出し(非同期) | 読み取りを始め、完了の通知で結果を取る |
| Claude API | API呼び出し | 項目の取り出し、取り直しの依頼文の下書き |
| 支払予定表 | 会計システムからのCSV出力 | 支払ごとの支払先・支払日・種類を読む |
| 支払先台帳 | 読み取り | 条約・様式・特典条項の対象か・届出書の提出日を引く |
| 照合結果の一覧 | 書き込み | 支払ごとの印と根拠を書く |
会計システムへは書き込みません。 源泉徴収の税率を決めて送金の手続きに進むのは、責任者が一覧を確かめたあとです。支払先台帳にも書き込みません。 証明書の作成日や名義を台帳に写すのは、担当者が画像で確かめたあとに人が行います。
人が確認する
経理の担当者が開くのは、ok 以外の印が付いた支払です。 ok の支払は、名義と作成日を並べた一覧で流し見ます。
needs_humanを先に片付ける … 日付の順序が決まらないもの、読めないものを画像で確かめ、作成日を確定させますname_mismatchの理由を確かめる … 旧社名や表記の違いなら別名の一覧に足し、親会社名義なら証明書の取り直しを依頼しますcert_staleとno_formを責任者に上げる … 支払日までに取り直しが間に合うかを見て、源泉徴収の扱いを決めてもらいます- 取り直しの依頼を送る … 下書きを直して、担当者が送ります
2番目で別名の一覧に足すかを、担当者1人で決めないでください。 名義が同じ者かは、軽減の前提に関わります。足すときは責任者の確認を取り、足した理由を一覧に残します。
例外に対処する
| 起きること | 対応 |
|---|---|
| パスワードで保護されたPDF | 読めない。支払先に解除を頼む |
| 6言語に入らない証明書 | 読み取りに回さず、担当者が目で見る |
| フランス語・ドイツ語の証明書 | 質問を外し、キーと値と全文で読む |
| 作成日が無い、または読めない | missing か unreadable。日付を補わず、人へ |
| 日と月の順序が決まらない | ambiguous。画像と発行機関の書式で人が確定する |
| 1通に複数の法人の名義 | ambiguous。どの法人の証明かを人が決める |
ジョブが FAILED または PARTIAL_SUCCESS | StatusMessage と Warnings のページ番号を記録し、そのページを人へ |
| 支払予定に証明書が未着の支払先 | needs_human。支払日から逆算して取り直しを急ぐ |
上から4行目と5行目が、照合の誤りのほとんどを生みます。 どちらも「作成日」という1つの値の問題で、ここを人に回す設計を崩すと、1年の判定が当てにならなくなります。
記録を残す
- 元の居住者証明書と、受け取った日時、支払先コード、原本の添付か提示か
- AWS Textract が返したJSONの全文と、使った質問の一覧
- Claude API が返したJSON(原文と解釈の両方)
- 支払ごとの照合の結果と、そのとき参照した支払先台帳と別名の一覧の版
- 担当者が結果を覆した記録 … どの印を、どちらに変えたか、誰が確認したか
- 取り直しの依頼と、新しい証明書との対応
提示を受けた場合の写しの保存は、この記録とは別に扱います。 国税庁のページでは、提示を受けた日から5年間、国内にある事務所等に写しを保存しておく必要があるとされています。S3 に置くのは照合の記録で、法定の保存を兼ねるかは経理の責任者と顧問税理士で決めます。
04実装レベルの3段階
本記事の想定は半自動化です。 読み取りと照合が自動になり、担当者は印の付いた支払を確かめて責任者に上げます。1件20分が6分になるのはこの段階です。 本格構成で足すのは、先回りの管理です。 作成から10か月を過ぎた証明書の支払先へ、取り直しの依頼を毎月自動で下書きし、支払の直前に気づく場面をなくします。 段階を飛ばさないでください。 半自動化を2〜3か月回すと、name_mismatch を繰り返す支払先と、日付の書き方で ambiguous になる国が先に分かります。そこで別名の一覧と国ごとの質問の文を整えてから本格構成に進むほうが、催促の空振りが減ります。
05工数削減シミュレーション
導入後 180件 × 6分 ÷ 60 = 18 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 海外のブランドの使用料、ソフトウェアの使用料、海外の業務委託先への報酬などを毎月支払い、租税条約による源泉徴収の軽減・免除を受けている支払先が数十から数百ある商社・IT企業・メーカー・広告会社。特典条項のある条約の相手国の支払先が多く、居住者証明書の作成日と名義の確認が担当者の目視になっている場合。支払先台帳はあるが、届出書の提出日や証明書の作成日が台帳と別のフォルダに散らばっている場合。
- 居住者証明書が英語以外(中国語・韓国語・日本語など)で届く支払先が中心の場合(この構成のOCRは英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語しか読めず、手書きは英語のみです)。海外への支払が年に数件の場合。なお、どの条約のどの条項が適用されるか、軽減税率を適用してよいか、特典条項の要件を満たすかの判断は、顧問税理士と経理の責任者が行うもので、この構成では代替できません。
07最小構成で試す方法
- 共有フォルダの居住者証明書から20通を選ぶ(作成日が1年近く前のもの、名義の表記が台帳と違うもの、日付が
03/04/2026のような書き方のものを必ず入れる) - 手元の生成AIの画面に1通ずつ貼り付け、「この証明書の名義、住所、居住国、対象の年、作成日を、書かれたとおりに表にしてください。日と月の順序が決まらない日付は『順序不明』とし、作成日が無ければ『記載なし』としてください。軽減が受けられるかは書かないでください」と指示する
- 出てきた表を、支払先台帳と手で見比べる
- 当時の確認の記録と突き合わせる
20通は必ずやってください。 仕組みを組む前に、対象の年と作成日を取り違えないか、名義を書き換えないかを確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 名義と作成日を原文どおりに取り出した | OCRのAPIと照合の処理に進む |
| 対象の年を作成日として取り出した | 指示で2つを分けて聞く。直るまで先に進まない |
| 名義を台帳の表記に寄せて書いた | 台帳の名称を渡さない設計にする。構成は有効 |
2行目が出たら、その証明書の文面を見てください。 「for the year 2025」と作成日が近くに並ぶレターの形で起きやすい誤りです。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 対象の年を作成日として読む | 指示で2つを分けて聞き、1年の判定には作成日だけを使う |
| 作成日が無い証明書を受信日で埋める | 補完を禁じ、missing で人へ |
| 日と月の順序を取り違える | 順序が決まらない日付は解釈させず、原文を残す |
| 名義を台帳の表記に寄せる | 台帳の名称をAIに渡さず、照合は別名の一覧で Python が行う |
| 親会社名義の証明書で子会社への支払を通す | 名義が一覧に当たらなければ name_mismatch |
| 照合が支払の直前に動く | 支払予定表を支払日の10営業日前に確定し、そこで照合する |
| フランス語の証明書で質問が効かない | 質問は英語の文書だけ。キーと値と全文で読む |
| 中国語の証明書を読ませて失敗する | 6言語以外は読み取りに回さない |
| パスワード付きのPDFで止まる | 支払先に解除したものを頼む |
| 別名の一覧を担当者1人で足す | 責任者の確認を取り、理由を残す |
上の2行が、この構成の失敗のほとんどです。 どちらも作成日という1つの値の誤りで、1年の判定がそのまま誤った「軽減可」になります。 作成日を原文と解釈に分け、決まらないものは人に回す設計で守ります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 支払先の正式名称、住所、居住国、相手国の納税者番号が書かれた証明書、支払の金額と種類です。個人の業務委託先なら、個人の氏名と住所も含みます。
- 外部へ渡す範囲を、取り出しに必要なものに限る … 生成AIに渡すのは読み取り結果と台帳上の所在国だけです。支払の金額、台帳の正式名称、他の支払先の情報は渡しません
- 軽減してよいかを判定させない … この構成が出すのは照合の印までで、条約の当てはめと源泉徴収の税率は顧問税理士と経理の責任者が決めます
- 取り直しの依頼を自動で送らない … 依頼は下書きまでで、経理の担当者が送ります。 支払先との契約の関係に関わります
- 法定の保存と照合の記録を分けて考える … 写しの保存や届出書への記載は国税庁のページに沿って経理が行い、この構成の記録がそれを兼ねるかは別に決めます
- 別名の一覧を書き換える権限を限る … 一覧に1行足すと、その名義の証明書が通るようになります。変更は責任者の確認を経て、版を残します
誤りが起きた場合のリスクは、軽減の前提を欠いた支払に軽減税率を適用してしまうことです。 多くは作成日の読み違いと名義の寄せから起きるので、値を原文のまま残し、比べるのは規則という設計を崩さないでください。
10まず何から始めるか
1週目:支払先台帳に4つの列を足す
支払先台帳に、特典条項の対象か、原本の添付か提示か、証明書の名義、証明書の作成日の列を足します。支払の多い上位30社から埋めます。この作業だけで、作成日が古くなっている支払先が見つかることがあります。
2週目:20通で試す
共有フォルダの証明書から20通を選び、手元の生成AIの画面で名義と作成日を表にさせます。対象の年と作成日を取り違えないか、名義を書き換えないかを最優先で見ます。
3週目:名義の別名の一覧と照合の規則を決める
上位30社について、証明書や契約書に出てくる名義の書き方を集めます。作成日の条件をどう置くかを、顧問税理士と決めます。 提示の扱いの支払先と、添付の扱いの支払先で規則を分けるかも、ここで決めます。
4週目:受付フォルダから照合までをつなぐ
S3、Lambda、Textract、Claude API、Python の照合をつなぎ、支払予定表の確定で照合結果の一覧を出すところまで作ります。この時点では上位30社の支払だけを対象にします。
2か月目: 対象を全支払先に広げ、needs_human と name_mismatch の件数を毎週数えて別名の一覧を育てます。3か月目以降: 作成から10か月の一覧と取り直しの依頼の下書きを足し、1件20分が何分になったかを実測します。支払の直前に証明書の取り直しに気づく場面がなくなった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 租税条約に基づく軽減・免除には「租税条約に関する届出書」が必要で、支払者ごとに作成し、最初に支払を受ける日の前日までに支払者を経由して提出すること。様式1(配当)・様式2(利子)・様式3(使用料)などがあること。前日までに提出がなければ国内法の税率で源泉徴収し、後日還付請求(様式11)ができること。異動の届出。特典条項を有する条約では付表(様式17)と居住者証明書が必要なこと。原本を添付するか提示すること。提示を受けた場合に確認した旨・確認者・確認日・作成年月日を記載し、写しを5年間保存し、証明書は提示の日前1年以内に作成されたものに限ること | 国税庁: No.2888 租税条約に関する届出書の提出(源泉徴収関係) | 2026-10-07 |
| 対応する形式がJPEG、PNG、PDF、TIFFであること。同期はPDF1ページ・10MB、非同期はPDFとTIFFで500MB・3,000ページであること。PDFはパスワードで保護できないこと。対応言語が英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語で、質問の検出は英語の文書だけであること。手書きは英語のみであること。文字の最小の高さが15ピクセル(150 DPIで8ポイント相当)であること | 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-0706)についてのご相談はこちらから。
