海外のカストディアンから毎月届く英文の保管残高報告書を読み取り、銘柄ごとの数量・評価額・配当と利息の入金を自社の有価証券台帳と照らして、差異を理由の候補付きで一覧にする
海外のカストディアンから毎月届く英文の保管残高報告書と入金の明細を読み取り、銘柄ごとの数量・評価額・配当と利息の入金を自社の有価証券台帳と照らします。差異を理由の候補付きで一覧にし、照会の英文の下書きを付けて担当者に回します。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- AWS Textract/Azure AI/Google Document AI
- 連携・自動化
- Python
- 対象業界
- 保険/金融
- 対象部門
- 経理/財務
- 対象業務
- データ入力・転記/内容確認・チェック
- 主な課題
- データ分析に時間がかかる/入力作業が多い/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/判断支援/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- カストディアンからメールで届いた報告書と明細のPDFを共有フォルダに保存する
- 報告書を開き、銘柄ごとの ISIN・数量・評価額を表計算のファイルへ写す
- 有価証券台帳から同じ口座の月末の保有を書き出し、ISIN で並べて数量の差を出す
- 差のある銘柄について、月末前後の約定と決済の一覧を見て、未決済の取引で説明できるかを調べる
- 償還・株式分割・銘柄の入れ替えなどのコーポレートアクションの通知を探し、説明できるかを調べる
- 明細から配当・利息の入金を写し、台帳の保有から見込んだ入金と比べ、源泉税の率を確かめる
- 説明できない差と入金の不足を、カストディアンへ英文のメールで照会する
- 人カストディアンから届いた報告書と明細のPDFを、口座ごとの受け取りの場所(Amazon S3)に保存する
- 自動保存をきっかけに、AWS Textract が表の読み取りを非同期で始める
- 自動読み取りが終わったら、プログラムが表をセルから組み立て、列の見出しを取り出す
- 自動見出しがそのカストディアンの登録済みの対応と違えば、Claude API が自社の項目への対応づけの案を出し、担当者の承認を待つ
- 自動プログラムが数をカストディアンごとの書き方の設定で読み替え、報告書の合計と銘柄の行の合計が一致するかを確かめる
- 自動プログラムが台帳と ISIN で照らし、未決済の取引とコーポレートアクションで説明できる差異を消し込む
- 自動Claude API が入金の明細の摘要を種類に分け、プログラムが見込みの入金と源泉税の率と比べる
- 自動Claude API が、残った差異と入金の不足について、カストディアンへの照会の英文の下書きを作る
- 人担当者が残った差異と、読み取りの信頼度の低いセルを確かめ、照会を直して送る
- 人照合の結果を経理に回す
各工程の詳しい説明を読む
- カストディアンからメールで届いた報告書と明細のPDFを共有フォルダに保存する
- 報告書を開き、銘柄ごとの ISIN・数量・評価額を表計算のファイルへ写す
- 有価証券台帳から同じ口座の月末の保有を書き出し、ISIN で並べて数量の差を出す
- 差のある銘柄について、月末前後の約定と決済の一覧を見て、未決済の取引で説明できるかを調べる
- 償還・株式分割・銘柄の入れ替えなどのコーポレートアクションの通知を探し、説明できるかを調べる
- 明細から配当・利息の入金を写し、台帳の保有から見込んだ入金と比べ、源泉税の率を確かめる
- 説明できない差と入金の不足を、カストディアンへ英文のメールで照会する
(a)写すだけで時間がかかる。 20ページの報告書から300銘柄を写すと、写し間違いが差異として現れます。 調べた結果が自分の写し間違いだった、ということが毎月起きます。
(b)約定の日と決済の日のずれを毎月消している。 月末の前の数日に約定した売買は、決済が翌月になります。差異の大半はこのずれで、毎月同じ手順で約定の一覧と見比べて消しています。
(c)数の書き方がカストディアンで違う。 欧州のカストディアンの報告書は、桁区切りに点、小数点にコンマを使うことがあり、「1.250.000,00」が125万を表します。 写す人がその都度読み替えています。
(d)源泉税の取られすぎに気づきにくい。 租税条約で軽減された率が適用されるはずの配当に、軽減前の率で源泉税が取られていることがあります。手取り額だけを見ていると気づかず、還付の請求の期限を過ぎてしまうことがあります。
- 【人】 カストディアンから届いた報告書と明細のPDFを、口座ごとの受け取りの場所(Amazon S3)に保存する
- 【自動】 保存をきっかけに、AWS Textract が表の読み取りを非同期で始める
- 【自動】 読み取りが終わったら、プログラムが表をセルから組み立て、列の見出しを取り出す
- 【自動】 見出しがそのカストディアンの登録済みの対応と違えば、Claude API が自社の項目への対応づけの案を出し、担当者の承認を待つ
- 【自動】 プログラムが数をカストディアンごとの書き方の設定で読み替え、報告書の合計と銘柄の行の合計が一致するかを確かめる
- 【自動】 プログラムが台帳と ISIN で照らし、未決済の取引とコーポレートアクションで説明できる差異を消し込む
- 【自動】 Claude API が入金の明細の摘要を種類に分け、プログラムが見込みの入金と源泉税の率と比べる
- 【自動】 Claude API が、残った差異と入金の不足について、カストディアンへの照会の英文の下書きを作る
- 【人】 担当者が残った差異と、読み取りの信頼度の低いセルを確かめ、照会を直して送る
- 【人】 照合の結果を経理に回す
5番目が、この設計の分かれ目です。 報告書には口座全体の評価額の合計があります。銘柄の行を足した額が合計と合わなければ、読み取りか表の組み立てのどこかに誤りがあります。 その報告書は照合に進めず、人に回します。
6番目で消し込みをプログラムが行うのも、意図してのことです。 約定の日と決済の日のずれは、約定の一覧と日付で決まります。毎月同じ手順で消していたものを規則にし、人は規則で消えなかった差異だけを見ます。
02今回想定するシステム構成
カストディアンの報告書と明細(英文のPDF。2社・12口座) │ 担当者が口座ごとの場所へ保存 ▼【トリガー】Amazon S3 への保存 AWS Lambda ── StartDocumentAnalysis(FeatureTypes:TABLES、QUERIES) ▼ AWS Textract(非同期の文書分析) │ 完了の通知(Amazon SNS) ▼ AWS Lambda ── GetDocumentAnalysis(NextToken でページを送る) ├──▶ Python:CELL のブロックから表を組み立て、見出しと合計の行を取り出す ├──▶ Claude API:見出しが変わったときだけ、自社の項目への対応づけの案(承認待ち) ├──▶ Python:数の読み替え、合計の確かめ、台帳との照合と消し込み ├──▶ Claude API:入金の摘要の区分 ├──▶ Python:見込みの入金・源泉税の率との比較 └──▶ Claude API:カストディアンへの照会の英文の下書き ▼ 差異と入金の一覧(担当者が確認) ▼ カストディアンへの照会(担当者が送る)/経理へ
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | AWS Textract(StartDocumentAnalysis/GetDocumentAnalysis。TABLES と QUERIES) | Azure AI Document Intelligence、Google Document AI |
| 生成AI | Claude API(列の見出しの対応づけの案、摘要の区分、照会の英文の下書き) | OpenAI API、Gemini API |
| 差異計算 | Python(表の組み立て、数の読み替え、台帳との照合と消し込み) | 有価証券の管理のシステムの照合の機能 |
| 連携 | AWS Lambda(保存と完了の通知を起点に処理を動かす) | AWS Step Functions |
| 保管 | Amazon S3(報告書の原本、読み取り結果、照合の結果、確認の記録) | 社内のファイルサーバー |
土台は、AWS Textract の非同期の文書分析です。 報告書は複数ページのPDFなので、同期の処理(PDFは1ページまで)ではなく、非同期の StartDocumentAnalysis を使います。 非同期ではPDFが500MBと3,000ページまでとされています。
Textract を選べるのは、報告書が英文だからです。 公式の対応言語は英語・フランス語・ドイツ語・イタリア語・ポルトガル語・スペイン語です。カストディアンの報告書は英文で届くので、この範囲に入ります。表の読み取りでは、列の見出しや合計のセルに種類が付いて返るので、20ページの表をつなぐ処理を組みやすくなります。
有価証券の管理のシステムには書き込みません。 照合の結果は一覧として担当者に返し、台帳を直すかどうかは担当者が決めます。
03どうやって実装するのか
処理の起点を決める
口座ごとの受け取りの場所(S3 のフォルダ)にPDFが保存されたことを起点にします。 フォルダは custody/<カストディアンの記号>/<口座の記号>/<対象月>/<報告書の種類>/ の形にし、どの口座のどの月のどの報告書かを、保存した場所で決めます。 報告書の中の口座番号を読み取って決めると、似た番号の口座と取り違えます。
読み取りを始めるとき、ClientRequestToken に「口座の記号+対象月+報告書の種類+版」を入れます。 公式のページでは、同じトークンで StartDocumentAnalysis を呼ぶと同じ JobId が返り、同じジョブを誤って二度始めるのを防げるとされています。
完了は Amazon SNS の通知で受けます。 通知の状態が SUCCEEDED であることを確かめてから GetDocumentAnalysis を呼ぶ、と公式のページにあります。JobTag に口座の記号を入れておくと、通知だけでどの口座の報告かが分かります。 JobId は7日間だけ有効なので、結果は受け取ったその場で S3 に保存します。
照合は、同じ口座の報告書と明細の両方がそろってから始めます。 片方だけで照合すると、入金の確認が抜けたまま結果が出ます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 保管残高報告書 | 銘柄ごとの ISIN、銘柄名、保有数量(債券は額面)、価格、評価額、通貨、経過利息。口座の評価額の合計 | カストディアンからのPDF |
| 入金の明細 | 入金の日、ISIN、摘要、総額、源泉税、手取り額、通貨 | カストディアンからのPDF |
| 読み取り結果 | 表・セル・列の見出し・合計の行、各セルの信頼度 | AWS Textract |
| カストディアンごとの設定 | 列の見出しと自社の項目の対応、数の桁区切りと小数点、日付の順 | 自社で用意する設定表 |
| 有価証券台帳 | 口座ごとの月末の保有(約定の日の基準)、約定と決済の一覧 | 有価証券の管理のシステム |
| 銘柄の情報 | 利率と利払日、配当の予定、適用される源泉税の率(租税条約の軽減後) | 有価証券の管理のシステム、社内の一覧 |
| コーポレートアクションの記録 | 償還、株式分割、銘柄の入れ替え、その有効日 | 有価証券の管理のシステム、カストディアンからの通知 |
質を決めるのは、銘柄の情報の「適用される源泉税の率」の列です。 これがあれば、明細の源泉税を総額で割った率と比べて、取られすぎの候補を機械で拾えます。 列が無いと、手取り額が入ったかどうかしか確かめられません。
数の書き方は、カストディアンごとに設定します。 桁区切りがコンマか点か、小数点がどちらかを、カストディアンごとに1行で決めます。 報告書を見て推し量らせると、「1.250.000,00」を1.25と読む誤りが出ます。
データの取得方法を決める
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 表とセル | GetDocumentAnalysis の TABLE と CELL のブロック | 銘柄の行と各列の数 |
| 列の見出し | EntityTypes が COLUMN_HEADER のセル | カストディアンの設定の見出しと照らす |
| 合計の行 | EntityTypes が TABLE_SUMMARY のセル、または TABLE_FOOTER | 銘柄の行の合計と照らす |
| 報告の基準日と口座番号 | QUERIES(「What is the statement date?」など) | 保存した場所の対象月・口座と照らす |
| セルの信頼度 | CELL と WORD の Confidence | 低いセルを人に回す |
表は、CELL のブロックの RowIndex と ColumnIndex で組み立てます。 公式のページでは、表は TABLE のブロックとして返り、各セルは CELL のブロックで、表の中の位置の情報を持つとされています。結合されたセルは MERGED_CELL として別に示され、表の種類は STRUCTURED_TABLE か SEMI_STRUCTURED_TABLE で示されます。通貨ごとに小見出しの行が入る報告書は、TABLE_SECTION_TITLE のセルで通貨の区切りを知ります。
結果は MaxResults の1,000ブロックずつ返ります。 NextToken が返る限り呼び続け、全ページ分のブロックをそろえてから表を組み立てます。 途中で組み立てると、ページの境目で銘柄の行が落ちます。
基準日と口座番号は、QUERIES で取ります。 公式のページでは、問い合わせ(クエリ)は英語の文書でだけ使え、非同期の処理では1ページあたり30件までとされています。表の外にある基準日と口座番号を、保存した場所の情報と照らすのに使います。
AIへ渡す前に整形する
- 形式の確認 … JPEG、PNG、PDF、TIFF のどれかであることを確かめます。XFA の形式のPDFは扱えないとされています
- パスワードの確認 … パスワードで保護されたPDFは扱えません。 カストディアンがパスワード付きで送ってくる場合は、受け取った担当者が解除して保存する手順にします
- ページをまたぐ表の連結 … 各ページの表の見出しが同じなら1つの表として続け、ページごとに繰り返される見出しの行は落とします
- 通貨の区切りの付与 … 通貨ごとの小見出しの行から、各銘柄の行に通貨を付けます
- 数の読み替え … カストディアンごとの設定で、桁区切りと小数点を読み替えます
- ISIN の確かめ … ISIN は12文字で、最後の1文字が検査用の数字です。検査の計算が合わない ISIN は読み取りの誤りとして人に回します
- 合計の確かめ … 銘柄の行の評価額を通貨ごとに足し、報告書の合計と比べます
6番目は、読み取りの誤りを照合の前で止めるためのものです。 ISIN の1文字を読み違えると、台帳に無い銘柄が1つ増え、台帳の銘柄が1つ消えたように見えます。検査用の数字の計算で、その多くを照合の前に見つけられます。
AIに処理させる
させるのは、言葉を扱う3つの仕事だけです。 数の読み取りは Textract、数の計算と照合はプログラムが行います。
| させること | 中身 | できないときの扱い |
|---|---|---|
| 列の見出しの対応づけの案 | 見出しが設定と違ったときだけ、自社の項目(ISIN・数量・価格・評価額・通貨・経過利息)への対応の案を出す | 決められない見出しは「対応なし」 |
| 入金の摘要の区分 | 摘要の英文を、dividend(配当)/coupon(利息)/redemption(償還)/tax_reclaim(源泉税の還付)/fee(手数料)/other に分ける | 当たらなければ other と原文 |
| 照会の下書き | 残った差異と入金の不足ごとに、銘柄・数・根拠の行を並べた英文のメール | 理由の候補が無いものは事実だけを書く |
2行目が、入金の確認の要です。 摘要は「CASH DIV」「INT PMT」「COUPON」「PARTIAL REDEMPTION」「WHT RECLAIM」のように、カストディアンごとに書き方が違います。区分が付けば、配当と利息の入金を、台帳の保有から見込んだ入金と1行ずつ比べられます。
| させないこと | 理由 |
|---|---|
| 数の読み替えと計算 | 桁区切りを推し量ると、桁が3つずれる |
| 差異の原因の判断 | カストディアンの誤りか自社の誤りかは、記録を見て人が決める |
| 源泉税の率の判断 | 適用される率は銘柄の情報の列で決まる。AIに条約の知識で答えさせない |
| 見出しの対応を確定させる | 承認の前に照合に使うと、列を取り違えたまま差異が出る |
| 評価額の妥当性の判断 | 計上に使う価格は自社の規程で決まる |
3行目を外すのは、源泉税の率が国と投資家の種類と手続きの有無で変わるからです。 AIに「この配当の源泉税率は正しいか」と聞くと、もっともらしい率を答えます。率は銘柄の情報の列から引き、比べるのはプログラムです。
指示内容を固定する
入金の摘要の区分の指示です。
あなたは銀行の有価証券の事務を担当する部署で、海外のカストディアンから届いた
入金の明細の摘要を種類に分ける担当者を手伝います。渡された摘要の一覧だけを見てください。
【種類】
dividend(配当)/coupon(利息)/redemption(償還)/tax_reclaim(源泉税の還付)/
fee(手数料)/other(その他)
【厳守事項】
- 摘要の言葉だけで判断してください。金額の大きさから推し量らないでください。
- 摘要の原文を、種類と一緒にそのまま raw に残してください。
- 「PARTIAL」「FINAL」「REVERSAL」「CANCEL」などの語が付いていれば、
種類に加えて、その語をそのまま qualifier に写してください。
- 2つの種類に当たりうる摘要は other とし、note に理由を書いてください。
- 源泉税の率が正しいかを書かないでください。
照会の英文の下書きの指示です。
あなたは銀行の有価証券の事務を担当する部署で、海外のカストディアンへの照会を
英文で下書きする担当者を手伝います。渡された差異の一覧と、根拠の行だけを見てください。
【書き方】
- 銘柄ごとに、ISIN、銘柄名、報告書の数、自社の記録の数、根拠(約定番号・入金の日・報告書のページ)を並べてください。
- 数は渡された値をそのまま書いてください。足したり引いたりしないでください。
- どちらの誤りかを書かないでください。確認をお願いする形にしてください。
- 理由の候補が unknown のものは、事実だけを書き、原因の推測を書かないでください。
- 源泉税の率の違いは、適用された率と、自社が見込んだ率の両方を書き、
どちらが正しいかは書かないでください。
「REVERSAL」「CANCEL」を写させるのは、入金の取消が同じ明細に並ぶからです。 取消の行を通常の入金として数えると、同じ配当が二度入ったように見えます。 語を写させておけば、プログラムで取消の行を組み合わせて消せます。
照会に「どちらの誤りかを書かない」と入れるのは、カストディアンとの関係のためです。 差異の多くは、自社の約定の登録の遅れやコーポレートアクションの登録漏れから出ます。
出力形式を固定する
照合の結果は、プログラムがJSONで出します。 生成AIの出力も、Claude API の構造化出力で形を決めて受けます。公式のページでは、output_config.format に JSON スキーマを渡すと、スキーマに合う JSON が返るとされ、正式提供の機能です。
{
"account": "USD-BOND-01",
"statement_date": "2026-09-30",
"summary_check": "matched | mismatch",
"positions": [
{ "isin": "US912828XXXX", "security": "",
"custody_qty": 800000, "ledger_qty": 1000000,
"variance": { "type": "pending_settlement | corporate_action | unknown",
"qty": -200000, "evidence": "Trade T-0927-04 sell 200000, settle 2026-10-01" },
"min_cell_confidence": 97.8 }
],
"income": [
{ "isin": "", "class": "dividend", "raw": "CASH DIV", "qualifier": "",
"gross": 0, "tax": 0, "net": 0,
"applied_tax_rate": 0, "expected_tax_rate": 0, "expected_gross": 0,
"check": "ok | missing | short | tax_rate_differs" }
],
"needs_human": [ { "isin": "", "reason": "low_confidence | isin_check_failed | no_mapping | summary_mismatch" } ]
}
1つ目の理由は、差異の理由を1列で持てることです。 variance.type が pending_settlement なら翌月の報告書で消えるはずで、翌月に消えなければ、それ自体が確かめる事項になります。 例の銘柄では、9月27日に約定した20万ドルの売却が10月1日の決済で、報告書の基準日の時点では動いていません。
2つ目は、applied_tax_rate と expected_tax_rate を並べられることです。 率が違う行だけを tax_rate_differs として挙げ、還付を請求するかの判断の材料にします。
variance.type | 決め方(プログラム) |
|---|---|
| pending_settlement | 差の数が、基準日までに約定し基準日の後に決済する取引の数量の合計と一致する |
| corporate_action | 差の数が、基準日の前後のコーポレートアクションの記録で説明できる |
| unknown | 上のどちらにも当たらない |
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| Amazon S3 | 保存の通知で Lambda を動かす | 口座と月と報告書の種類をフォルダで決める |
| AWS Textract | StartDocumentAnalysis/GetDocumentAnalysis | 表・セル・見出し・合計・信頼度 |
| Amazon SNS | 完了の通知 | JobTag で口座を知る |
| 有価証券の管理のシステム | 保有・約定・決済・銘柄の情報を書き出して読む | 読み取りだけ |
| Claude API | API呼び出し(構造化出力) | 見出しの対応の案、摘要の区分、照会の下書き |
| 担当者と経理 | 差異と入金の一覧を共有フォルダに置き、チャットで知らせる | 確認と照会の送信、計上への引き継ぎ |
有価証券台帳には書き込みません。 差異の一覧を見て、台帳を直すか、カストディアンに訂正を求めるかを決めるのは担当者です。この構成から台帳を直すと、カストディアンの誤りに自社の台帳を合わせることになります。
Claude を Amazon Bedrock から使う場合は、構造化出力の対応を先に確かめます。 公式のページでは、Bedrock では構造化出力が旧来の連携でだけ使え、Claude in Amazon Bedrock では使えないとされています。
人が確認する
担当者が全口座の照合の結果を確かめます。 見る順を決めておきます。
summary_mismatchの報告書を先に見る … 合計が合わない報告書は照合に進んでいません。多くは表の連結か、通貨の区切りの付け間違いですisin_check_failedと信頼度の低いセルを原本で見る … セルの位置から原本の該当箇所を開きますunknownの差異の根拠を確かめる … 自社の約定の登録漏れや、コーポレートアクションの登録漏れでないかを見ます- 入金の不足と源泉税の率の違いを確かめる …
tax_rate_differsは、適用の手続きを済ませているかを記録で見ます - 照会を直して送る … 下書きの数と根拠を確かめ、送信は担当者が行います
3番目を省かないでください。 差異の原因が自社の登録漏れなのに照会を送ると、カストディアンからの回答を待つあいだ、自社の台帳の誤りが残ります。
pending_settlement で消し込んだ差異も、翌月に確かめます。 翌月の報告書で同じ銘柄の差異が消えていなければ、決済が失敗している可能性があります。
例外に対処する
| 起きること | 対応 |
|---|---|
| パスワード付き・XFA のPDF | 読めない。担当者が解除して保存し直す |
| JobStatus が FAILED か PARTIAL_SUCCESS | Warnings のページを見て、そのページだけ人が写す |
| 合計の行が見つからない | summary_check を付けられない。全銘柄を人に回す |
| 見出しが設定と違う | 対応づけの案を出し、承認まで照合を止める |
| ISIN の検査の計算が合わない | 読み取りの誤りとして人へ |
| 基準日が保存した場所の月と違う | 読み取らずに担当者へ戻す |
| 報告書と明細の片方しか届かない | 届くまで照合を止め、期日を過ぎたらカストディアンに催促 |
| 同じ報告書の訂正版が届いた | 版を上げて保存し、前の版の照合結果は消さずに残す |
上から3行目と5行目が、最初の数か月は多く起きます。 3行目は報告書の書式の問題で、カストディアンに合計の行の位置を確かめるだけで減ります。
記録を残す
- 報告書と明細の原本と、保存した場所(口座・対象月・種類・版)
- Textract が返したブロックの全文と、組み立てた表
- カストディアンごとの設定の、その月に使った版
- 照合の結果(
positions、income、needs_human)と、消し込みに使った約定とコーポレートアクションの記録 - 担当者が直した箇所 … どのセルの数を、どう直したか
- カストディアンへの照会と回答、差異の解消の記録
- 口座ごとの差異の件数と種類の推移
最後の行は、カストディアンとの定例の材料になります。 同じ種類の差異が続く口座は、決済の連絡かコーポレートアクションの通知の流れに理由があります。
04実装レベルの3段階
半自動化で、1件90分が50分程度になります。 写しの時間は無くなりますが、未決済の取引での消し込みと入金の確認が手作業のまま残ります。 本格構成で25分になり、この段階が本記事の想定です。 段階を飛ばさないでください。 半自動化で3か月回すと、カストディアンごとの見出しの癖と数の書き方が設定表にそろいます。 そこを固めてから消し込みに進むほうが、誤った照会を送ることが減ります。
05工数削減シミュレーション
導入後 24件 × 25分 ÷ 60 = 10 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 外国債券・外国株式を海外のカストディアンに預けて運用している地方銀行・保険会社・事業会社の財務部門。複数の口座の保管残高報告書と入金の明細が毎月英文のPDFで届き、担当者が銘柄ごとの数量と入金を自社の有価証券台帳へ手で写して照らしている場合。配当や利息の入金漏れ、源泉税の取られすぎに気づくのが遅れている場合。
- カストディアンのポータルや SWIFT のメッセージで保有残高と入金のデータを取れる場合(読み取りは要らず、データをそのまま照らせば足ります)。保有銘柄が数銘柄で、目視で足りる場合。報告書が日本語で届く国内の保管の場合(この構成で使う読み取りのサービスは英語など6言語に対応します)。なお、差異をどう処理するか、評価額をどの価格で計上するか、源泉税の還付を請求するかは、財務と経理の責任者が決めます。この構成は差異の候補を挙げるまでです。
07最小構成で試す方法
- 先月の報告書と明細から、書式の違う2社の3口座を選ぶ(うち1口座は、数の書き方が違う欧州の口座を入れる)
- AWS のコンソールで Textract の文書分析を開き、表の読み取りを試す
- 表を表計算のファイルとして書き出し、当時担当者が写したファイルと並べる
- 合計の行と銘柄の行の合計が合うか、数の読み替えが要るかを確かめる
- 手元のAIサービスに入金の明細の摘要の一覧を貼り、種類に分けさせる
欧州の口座は必ず入れてください。 読み取りそのものより、数の書き方の読み替えがどこで要るかが、ここで分かります。
| 出てきた内容 | 判断 |
|---|---|
| 表がセル単位で取れ、合計も合った | 照合のプログラムに進む |
| ページの境目で行が落ちた | 表の連結の手順で直る。構成は有効 |
| 通貨の小見出しで表が切れた | 通貨の区切りの付与が要る。手順で直る |
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 「1.250.000,00」の桁を読み違える | 桁区切りはカストディアンごとの設定で決める。推し量らない |
| ページの境目で行が落ちる・見出しが銘柄になる | 全ページのブロックをそろえてから連結し、繰り返しの見出しを落とす |
| ISIN の1文字の読み違いで銘柄が増減する | 検査用の数字で確かめ、合わないものは人へ |
| 約定の日と決済の日のずれを毎月差異として出す | 未決済の取引で消し込む規則を照合の中に置く |
| 入金の取消を二重の入金と数える | 摘要の「REVERSAL」「CANCEL」を写させて組み合わせる |
| 源泉税の率をAIに判断させる | 率は銘柄の情報の列から引き、比較はプログラムで行う |
| JobId が切れて結果が取れない | 7日間だけ有効。受け取ったその場で保存する |
| Bedrock で構造化出力が使えない | Claude API を直接使うか、対応を先に確かめる |
上の3行が、この構成の失敗のほとんどです。 どれも、読み取りの誤りが差異に化ける失敗です。数をプログラムで読み、合計と検査用の数字で確かめる設計にしておけば、カストディアンへ誤った照会を送ることを防げます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 口座番号、保有している銘柄と数量、評価額、配当と利息の入金、約定の記録です。個人情報は含みませんが、運用の内容そのものが重要な秘密です。
- カストディアンとの契約で、報告書の扱いを確かめる … 報告書を外部のサービスで読み取ることが、保管の契約の秘密保持に触れないかを確かめます
- 受け取りの場所の権限を絞る … S3 のフォルダは、運用事務グループと処理のプログラムだけが読めるようにし、結果は KMSKeyId を指定した暗号化で保存します
- 生成AIに渡す範囲を絞る … 見出しの対応づけには見出しだけ、摘要の区分には摘要だけ、照会の下書きには差異のある銘柄の行だけを渡します。保有の全体は渡しません
- 台帳を自動で直さない … 差異の解消は担当者が記録を確かめてから行います
- 照会を自動で送らない … 下書きまでです
- 計上や還付の判断に使わない … 差異の一覧は計上の根拠ではありません。評価の価格、源泉税の還付の請求は、財務と経理の責任者が決めます
- 外部委託の管理の対象にする … 読み取りと生成AIのサービスを使うことを、社内の外部委託とクラウドの利用の手続きに載せます
誤りが起きた場合のリスクは、読み取りの誤りを差異としてカストディアンへ照会することと、本物の差異や入金の不足を見落とすことの2つです。 前者は合計と検査用の数字の確かめで、後者は全銘柄を機械で照らすことで防ぎます。
10まず何から始めるか
1週目:カストディアンごとの設定表を作る
12口座の報告書を1件ずつ見て、列の見出しと自社の項目の対応、桁区切りと日付の順、通貨の小見出しの形を設定表に書きます。
2週目:3口座で読み取りを試す
書式の違う3口座の報告書をコンソールで読み取り、当時写したファイルと並べます。欧州の口座で数の読み替えが正しくできるかを最優先で見ます。
3週目:銘柄の情報に源泉税の率の列を足す
保有している銘柄について、適用される源泉税の率と、軽減の手続きの有無を銘柄の情報に書き足します。件数の多い外国株式から始めます。
4週目:表の組み立てと照合をつなぐ
保存を起点に読み取り、表を組み立て、合計と ISIN を確かめ、台帳と照らすところまで作ります。この時点では消し込みをせず、数量の差だけを見ます。
2か月目: 未決済とコーポレートアクションの消し込み、入金と源泉税の確認を足し、unknown の件数を毎月数えます。3か月目以降: 照会の下書きを足し、1件90分が何分になったかを実測します。口座ごとの差異の推移をカストディアンとの定例で使い始めた時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 対応する形式が JPEG・PNG・PDF・TIFF で XFA の形式のPDFは扱えないこと。同期の処理はPDFが1ページまで、非同期の処理はPDFが500MB・3,000ページまでであること。パスワードで保護されたPDFは扱えないこと。対応言語が英語・フランス語・ドイツ語・イタリア語・ポルトガル語・スペイン語であること。クエリは英語の文書だけで、非同期で1ページ30件までであること | AWS: Set Quotas in Amazon Textract | 2026-10-13 |
| 表が TABLE のブロック、各セルが CELL のブロックとして返り、表の中の位置の情報を持つこと。結合されたセルが MERGED_CELL で示されること。表の種類が STRUCTURED_TABLE か SEMI_STRUCTURED_TABLE で示されること。セルの EntityTypes に TABLE_TITLE・TABLE_FOOTER・TABLE_SECTION_TITLE・COLUMN_HEADER・TABLE_SUMMARY があること | AWS: Tables(Amazon Textract) | 2026-10-13 |
| StartDocumentAnalysis の FeatureTypes に TABLES・FORMS・QUERIES・SIGNATURES・LAYOUT があること。文書を S3 に置くこと。完了の状態が SNS に通知されること。ClientRequestToken で同じジョブの二重の開始を防げること。JobTag が通知に含まれること。KMSKeyId で結果を暗号化できること。JobId が7日間だけ有効であること | AWS: StartDocumentAnalysis | 2026-10-13 |
| GetDocumentAnalysis が MaxResults 最大1,000で NextToken によりページを送ること。JobStatus が IN_PROGRESS・SUCCEEDED・FAILED・PARTIAL_SUCCESS であること。Warnings が返ること | AWS: GetDocumentAnalysis | 2026-10-13 |
output_config.format に JSON スキーマを渡すとスキーマに合う JSON が返ること。正式提供の機能であること。Amazon Bedrock では旧来の連携でだけ使え、Claude in Amazon Bedrock では使えないこと | Claude Docs: Structured outputs | 2026-10-13 |
差異をどう処理するか、評価の価格、源泉税の還付を請求するかは、財務と経理の責任者が決めてください。 本記事は公開されている製品の仕様で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1417)についてのご相談はこちらから。
