売買仲介で受け取る固定資産税・都市計画税の課税明細書を読み取り、引渡し日での日割り精算の計算表に転記して、物件の表示との食い違いを拾う
売主から預かった固定資産税・都市計画税の課税明細書を読み取り、土地と家屋の行ごとに税額を取り出して、引渡し日で日割りした精算の計算表に転記します。あわせて、契約書の物件の表示と明細書の地番・家屋番号・面積を照らし、食い違う行を担当へ返します。
- 生成AI
- Azure OpenAI Service/Claude/Gemini
- AIサービス
- Azure AI/Google Document AI
- 連携・自動化
- Make/n8n/Power Automate/Python
- 対象業界
- 不動産/士業/建設
- 対象部門
- 営業/経理
- 対象業務
- データ入力・転記/内容確認・チェック
- 主な課題
- 入力作業が多い/属人化している/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/品質標準化/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 必須
01導入前 / 導入後の業務フロー
- 営業担当が売主から課税明細書の写しを預かり、スキャンかスマートフォンの写真で共有フォルダに入れる
- 営業事務が明細書を開き、売買の対象の土地・家屋の行を探す
- 行ごとに所在・地番・家屋番号・面積・固定資産税と都市計画税の税額を、精算書の雛形に打ち込む
- 契約書の物件の表示を開き、地番と家屋番号が明細書と合っているかを目で比べる
- 契約の起算日と引渡し日から、売主と買主の負担の日数を数える
- 年税額に日数の割合を掛け、端数を取り決めどおりに処理して、買主が売主に支払う精算金を出す
- 経理か店長が精算書を見直し、決済の案内に載せる
- 人営業担当が課税明細書の写しを、契約番号を付けたフォルダに入れる
- 自動ファイルの保存をきっかけに連携の処理が動き、契約管理の仕組みから物件の表示と契約条件を引く
- 自動OCRが明細書の文字・表・キーと値の組と、文字ごとの信頼度を返す
- 自動生成AIが行ごとに、所在・地番・家屋番号・面積・価格・税額・摘要を取り出す
- 自動処理が物件の表示と明細書の行を両方向に照らし、`matched` / `not_in_bill` / `not_in_contract` / `mismatch` を付ける
- 自動処理が契約の起算日・引渡し日・端数処理で日割りを計算し、精算の計算表を作る
- 人営業事務が計算表と照合の結果を見て、食い違いのある行だけ明細書の画像を開いて確かめる
- 人食い違いの理由が分からないものは、営業担当が売主または司法書士に確かめる
- 人経理が計算表を確定し、決済の案内に載せる
各工程の詳しい説明を読む
- 営業担当が売主から課税明細書の写しを預かり、スキャンかスマートフォンの写真で共有フォルダに入れる
- 営業事務が明細書を開き、売買の対象の土地・家屋の行を探す
- 行ごとに所在・地番・家屋番号・面積・固定資産税と都市計画税の税額を、精算書の雛形に打ち込む
- 契約書の物件の表示を開き、地番と家屋番号が明細書と合っているかを目で比べる
- 契約の起算日と引渡し日から、売主と買主の負担の日数を数える
- 年税額に日数の割合を掛け、端数を取り決めどおりに処理して、買主が売主に支払う精算金を出す
- 経理か店長が精算書を見直し、決済の案内に載せる
(a)行を探すところで時間がかかる。 売主が複数の不動産を持っていると、1枚の明細書に10行以上並ぶことがあります。どの行が売買の対象かを、地番と家屋番号で1つずつ当てる作業が、3番目の打ち込みより長くかかります。
(b)載っていない行に気づかない。 私道の持分や公衆用道路のように非課税の土地は、明細書に行がありません。 契約書の物件の表示には載っているので、4番目で契約書から明細書を見る向きに照らさないと、載っていないことに気づけません。
(c)年度を取り違える。 年の初めの決済では、売主の手元に前の年度の明細書しかないことがあります。年度を見ずに打ち込むと、前の年度の税額で精算書ができます。 新築住宅の軽減が切れた年は、年度で税額が大きく変わります。
(d)照合のしかたが人によって違う。 地番だけ見る人、面積まで見る人、摘要まで見る人がいます。誤りが見つかるかどうかが、担当した営業事務で決まります。
- 【人】 営業担当が課税明細書の写しを、契約番号を付けたフォルダに入れる
- 【自動】 ファイルの保存をきっかけに連携の処理が動き、契約管理の仕組みから物件の表示と契約条件を引く
- 【自動】 OCRが明細書の文字・表・キーと値の組と、文字ごとの信頼度を返す
- 【自動】 生成AIが行ごとに、所在・地番・家屋番号・面積・価格・税額・摘要を取り出す
- 【自動】 処理が物件の表示と明細書の行を両方向に照らし、
matched/not_in_bill/not_in_contract/mismatchを付ける - 【自動】 処理が契約の起算日・引渡し日・端数処理で日割りを計算し、精算の計算表を作る
- 【人】 営業事務が計算表と照合の結果を見て、食い違いのある行だけ明細書の画像を開いて確かめる
- 【人】 食い違いの理由が分からないものは、営業担当が売主または司法書士に確かめる
- 【人】 経理が計算表を確定し、決済の案内に載せる
5番目を両方向にしているのが、この設計の要点です。 明細書から契約書を見る向きだけだと、明細書に載っていない土地を拾えません。契約書から明細書を見る向きを足して、初めて第3章の(b)が拾えます。
6番目をAIの外に置いているのも意図してのことです。 計算の式を処理の側に書いておけば、起算日を取り違えた契約を後から見つけたときも、式に入れた値を見直すだけで計算をやり直せます。
02今回想定するシステム構成
売主から預かった課税明細書(スキャン・写真・PDF) │ 契約番号を付けたフォルダへ保存 ▼【トリガー】ファイルの保存 連携の処理(Power Automate) ├──▶ 契約管理の仕組みから物件の表示と契約条件を引く ▼ Azure AI Document Intelligence(レイアウトモデル+キーと値の組) │ 文字・表・キーと値・信頼度 ▼ Azure OpenAI(Microsoft Foundry) ── 構造化出力 │ 行ごとの所在・地番・家屋番号・面積・税額・摘要 ▼ Azure Functions ── 物件の表示との照合/日割りの計算 ▼ 精算の計算表 ──【営業事務が確認・経理が確定】 ▼ 決済の案内・契約管理の仕組みへ記録
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Azure AI Document Intelligence(レイアウトモデル) | Google Document AI(Form Parser) |
| 生成AI | Azure OpenAI(Microsoft Foundry)(構造化出力で行ごとの項目を取り出す) | Claude API、Gemini API |
| 連携 | Power Automate(フォルダの監視と契約管理の仕組みとのやり取り) | Make、n8n |
| 差異計算 | Azure Functions(物件の表示との照合と日割りの計算) | Python |
| 保管 | SharePoint の文書ライブラリ(明細書と計算表の控え) | 社内のファイルサーバー |
契約管理の仕組みと精算書の雛形は、新しく足すものではありません。 足すのは読み取りと照合の処理です。最初の準備は、契約管理の仕組みに起算日と端数処理の取り決めを項目として持たせることです。 契約書の本文にしか書かれていないと、計算の入力にできません。
読み取りには、Azure AI Document Intelligence のレイアウトモデル(prebuilt-layout)を使います。 文字に加えて、表・選択マーク・文書の構造を取り出すモデルで、表は行数・列数と、セルごとの行と列の位置を返します。課税明細書は土地と家屋の表でできているので、表として返ることが効きます。 日本語は印刷の文字にも手書きの文字にも対応しています。
キーと値の組も取ります。 v4.0(2024-11-30)では、以前の汎用ドキュメントモデルの機能がレイアウトモデルに入り、features=keyValuePairs を付けると「年度」「納税義務者」のようなラベルと値の組を返します。この機能は追加料金のない扱いです。明細書の上の欄の年度と納税義務者は、表の外にあるのでこちらで拾います。
03どうやって実装するのか
処理の起点を決める
契約番号を付けたフォルダに、明細書のファイルが保存されたことを起点にします。 フォルダの名前は契約管理の仕組みの契約番号にそろえ、ファイルを入れた時点でどの契約の明細書かが決まるようにします。ファイル名から契約を推し量る作りにすると、売主の名前の表記ゆれで当たらないものが出ます。
1つの契約に複数のファイルが入ることがあります。土地と家屋で市区町村が違う(境界をまたぐ)場合や、明細書が2枚以上に分かれる場合です。最後のファイルが入ってから10分待って、まとめて処理します。 1枚ずつ処理すると、2枚目の行が無いまま「載っていない行がある」と返してしまいます。
決済の日が近いのに明細書のフォルダが空の契約は、毎朝の一覧で営業担当に知らせます。 明細書が来ないこと自体が、決済の直前に慌てる一番の原因だからです。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 課税明細書 | 写真・スキャン・PDF。年度、納税義務者、土地と家屋の行 | 契約番号のフォルダ |
| 物件の表示 | 土地:所在・地番・地目・地積・持分/家屋:所在・家屋番号・種類・床面積・持分 | 契約管理の仕組み |
| 契約条件 | 起算日(1月1日か4月1日か)、引渡し日、引渡し日をどちらの負担にするか、年の日数、端数処理 | 契約管理の仕組み |
| 売主の情報 | 売主の氏名、共有者の有無 | 契約管理の仕組み |
質を決めるのは、2行目と3行目です。 物件の表示がデータで無ければ照合ができず、契約条件が項目で無ければ計算の入力がありません。明細書の側は読み取れば済みますが、契約の側は人が先に入れておく必要があります。
持分は必ず入れます。 マンションの敷地や私道は共有のことが多く、明細書の税額が持分で按分した後の額か、按分する前の額かは、自治体の書式によって違います。持分が無いと、ここを照らせません。
データの取得方法を決める
読み取りは、連携の処理からレイアウトモデルを呼ぶだけです。features=keyValuePairs と、outputContentFormat=markdown を付けます。 Markdown の出力では、表は結合したセルと複数行の見出しを表せるように HTML の表で返ります。課税明細書の見出しは2段になっていることが多いので、この形のほうが列の対応を取り違えにくくなります。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 表とセル | tables(行・列の位置、見出しかどうか) | 土地と家屋の行を1行ずつ取り出す |
| キーと値の組 | keyValuePairs | 年度、納税義務者、合計の税額 |
| 文字と信頼度 | pages の words(confidence 付き) | 地番・税額の数字の読み取りの確かさ |
| 段落の役割 | paragraphs の role | 見出しや注記を本文と分ける |
契約管理の仕組みからは、契約番号で物件の表示と契約条件を引きます。 連携は Power Automate のコネクタか、仕組みの API で行い、読むだけにします。
AIへ渡す前に整形する
- 形式の確認 … レイアウトモデルが受け付けるのは PDF、画像(JPEG/JPG、PNG、BMP、TIFF、HEIF)、Office 形式などです。スマートフォンの写真はそのまま渡せます
- ページ数とサイズの確認 … PDF と TIFF は2,000ページまで、ファイルは有料(S0)で500MBまでです。明細書なら十分に収まります
- 画像の寸法の確認 … 50×50ピクセルから10,000×10,000ピクセルの間に収めます
- 文字の大きさの確認 … 1024×768の画像で12ピクセルが読み取れる最小の高さで、150dpiで約8ポイントの文字にあたります。明細書の税額の欄は文字が小さいので、写真は明細書を画面いっぱいに撮ってもらいます
- 余計なページを除く … 納税通知書の本体や納付書が一緒にスキャンされていれば、明細書のページだけを残します
- 個人番号の欄を確かめる … 明細書に個人番号は通常ありませんが、売主が身分証の写しを一緒に入れてしまうことがあります。 明細書以外のページは処理に回しません
4番目は、写真で受け取るときに必ず効いてきます。 明細書を机に置いて少し離れて撮ると、税額の数字が下限に近くなり、「3」と「8」、「1」と「7」の取り違えが税額の行に出ます。 金額の読み違いは、計算が正しくても精算金をずらします。
AIに処理させる
させるのは、明細書の行ごとに項目を取り出し、根拠にした文字列を書き出すことだけです。
| 取り出すもの | 取り出し方 | 判断できないときの扱い |
|---|---|---|
| 年度・納税義務者 | 明細書の上の欄の値をそのまま | 読めなければ null と理由 |
| 行の区分 | 土地か家屋か | 見出しで決められなければ unknown |
| 所在・地番/家屋番号 | 書かれたとおりに写す | 一部が読めなければ読めた部分と low_confidence |
| 地目・種類・面積 | 登記と課税の両方の欄があれば両方 | 片方だけなら、どちらの欄かを書く |
| 価格・課税標準額 | 数字をそのまま | 読めなければ null |
| 固定資産税・都市計画税の税額 | 行ごとの額と、合計の欄 | 行ごとの額が無い書式なら null とし、合計だけ写す |
| 摘要 | 住宅用地、新築軽減などの文字をそのまま | ― |
面積の欄を「登記」と「課税」に分けて取るのが大事です。 明細書には登記の地積と課税の地積が並ぶ書式があり、私道に使っている部分が非課税になっていると、課税の地積だけが小さくなります。 これは誤りではありません。照合は登記の地積で行い、課税の地積の差は「理由のある差」として別に出します。
| させないこと | 理由 |
|---|---|
| 日割りの計算 | 起算日と端数は契約で決まる。式で計算する |
| 行の税額を合計から割り振る | 書かれていない値を作ることになる |
| 売買の対象の行かどうかの判断 | 照合は処理の側で、地番と家屋番号で行う |
| 地番の表記を直す | 「12番3」と「12-3」の正規化は処理の側で行う |
| 精算金の税務上の扱いの説明 | 判断は顧問税理士に委ねる |
2行目が一番起きやすい失敗です。 行ごとの税額が無い書式で、合計を面積の比で割り振って行に埋めることがあります。その瞬間、自治体が計算した額ではない数字が精算書に入ります。
指示内容を固定する
あなたは不動産会社で、売買の決済の前に課税明細書を読み取る担当です。
OCRが返した読み取り結果だけを見て、行ごとに項目を取り出してください。
【取り出すもの】
1. 明細書の年度と納税義務者
2. 土地と家屋の行ごとに、区分・所在・地番または家屋番号・
地目または種類・登記の面積・課税の面積・価格・課税標準額・
固定資産税の額・都市計画税の額・摘要
3. 明細書の合計欄の固定資産税と都市計画税の額
【厳守事項】
- 書かれていない値は null にしてください。推測で埋めないでください。
- 行ごとの税額が書かれていない場合、合計や面積から割り振らないでください。
- 計算をしないでください。日割り、合計、按分のいずれもしないでください。
- 地番・家屋番号は、書かれた文字をそのまま写してください。
「番」を「-」に直すなどの書き換えをしないでください。
- 登記の面積と課税の面積が両方ある場合は、両方を別々に入れてください。
片方しかない場合は、それがどちらの欄の値かを area_basis に書いてください。
- OCRの信頼度が0.8未満の文字を含む値は、low_confidence に項目名を入れてください。
- evidence には、その行の値を取った元の文字列をそのまま写してください。
- 売買の対象の行かどうかは判断しないでください。すべての行を出してください。
- 課税明細書でないページは document_type に種類を書き、行を出さないでください。
【読み取り結果】{layout_markdown}
【キーと値の組】{key_value_pairs}
「すべての行を出す」を明記しているのは、AIに行を選ばせないためです。 物件の表示を渡すと、AIは気を利かせて対象の行だけを返そうとします。対象でない行を落とすと、照合で「明細書にあって契約に無い行」を拾えなくなります。 選ぶのは処理の側です。そのため、プロンプトには物件の表示を渡していません。
出力形式を固定する
構造化出力で、次の形のJSONを受け取ります。 Azure OpenAI の構造化出力では、スキーマのすべての項目を必須にし、additionalProperties: false を付けます。値が無い項目は null を許す型にしておきます。
{
"document_type": "tax_bill_detail",
"fiscal_year": "令和8年度",
"taxpayer": "",
"rows": [
{
"kind": "land | building | unknown",
"location": "",
"lot_or_house_no": "",
"category": "",
"registered_area": null,
"taxable_area": null,
"area_basis": "registered | taxable | both | unknown",
"assessed_value": null,
"tax_base": null,
"fixed_asset_tax": null,
"city_planning_tax": null,
"remarks": "",
"low_confidence": [],
"evidence": ""
}
],
"total_fixed_asset_tax": null,
"total_city_planning_tax": null
}
これを処理が照合と計算にかけ、次の計算表を作ります(1月1日起算、引渡し日から買主の負担、年365日、円未満切り捨ての例)。
| 項目 | 固定資産税 | 都市計画税 |
|---|---|---|
| 年税額(対象の行の合計) | 142,800円 | 30,600円 |
| 起算日/引渡し日 | 2026-01-01/2026-11-20 | 同左 |
| 売主の負担日数/買主の負担日数 | 323日/42日 | 323日/42日 |
| 買主の負担額(年税額×42÷365) | 16,431円 | 3,521円 |
1つ目の理由は、照合が機械でできることです。 lot_or_house_no と物件の表示の地番・家屋番号を、表記をそろえたうえで突き合わせ、行ごとに matched / not_in_bill / not_in_contract / mismatch を付けます。mismatch は地番は合うが面積や地目が違う行で、登記の後に分筆や地目の変更があったことを示す場合があります。 自由文で返されると、この4つの区分を毎回人が読み取ることになります。
2つ目は、計算を入力ごと残せることです。 計算表の数字がどの行のどの値から来たかを、evidence でたどれます。4月1日起算の契約なら、同じ引渡し日で売主233日・買主132日になり、買主の負担額は大きく変わります。 起算日の入れ違いは計算表の見直しで最も見落としやすいので、起算日を表の上に大きく出します。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 契約番号のフォルダ | Power Automate のトリガー | ファイルの保存を検知する |
| 契約管理の仕組み | コネクタまたは API(読み取り) | 物件の表示と契約条件を引く |
| Azure AI Document Intelligence | API呼び出し | 文字・表・キーと値・信頼度を返す |
| Azure OpenAI | API呼び出し(構造化出力) | 行ごとの項目を返す |
| Azure Functions | HTTPで呼ぶ | 照合と日割りの計算、計算表の作成 |
| 精算書の雛形 | 計算表の値を差し込む | 確定は経理が行う |
契約管理の仕組みへの書き込みは、経理が確定した後の1回だけにします。 書くのは精算金の額と、照合の結果に食い違いがあったかどうかの印です。AIの出力を直接書き込む経路は作りません。
人が確認する
営業事務が見るのは、照合の結果と計算表の上の段です。 すべての行が matched で、low_confidence が空なら、起算日・引渡し日・年税額の3つを契約書と見比べて終わりにします。
- 起算日と引渡し日を見る … 計算表の上に出した値を、契約書の条項と見比べます。ここだけは全件で行います。 引渡し日が契約後に変わっていないかも、営業担当の予定と照らします
- 食い違いのある行の画像を開く …
not_in_bill・not_in_contract・mismatchの行は、明細書の画像の該当箇所を見ます low_confidenceの数字を確かめる … 税額と地番に付いていれば、画像の数字と1桁ずつ見比べます- 理由が分からない食い違いを営業担当に渡す … 売主か司法書士への確認が要るものです
- 経理が確定する … 計算表を確定し、決済の案内に載せます
not_in_bill は、多くの場合誤りではありません。 私道や公衆用道路のように非課税の土地や、免税点未満の土地には、明細書に行がありません。共有の土地で、売主が共有の代表者でない場合は、明細書そのものが売主に届いていないこともあります。 この場合は代表者に届いた明細書の写しを、売主を通して取り寄せてもらいます。ただし、売主が明細書の2枚目を渡し忘れている場合も同じ見た目になります。 地目が公衆用道路でない土地が not_in_bill のときは、必ず営業担当に確かめてもらいます。
例外に対処する
| 起きること | 対応 |
|---|---|
| 前の年度の明細書だった | fiscal_year が決済の年度と違えば止め、計算表に「前年度の税額」と出す。どちらで精算するかは契約の取り決めに従う |
| 納税義務者が売主と違う | 相続の後で名義が変わっていない、共有の代表者に届いている、などを営業担当が確かめる |
| 行ごとの税額が無い書式 | 合計だけで計算し、対象でない行があれば needs_human。割り振りはしない |
| 対象でない行が混ざる | not_in_contract として計算から外し、一覧に残す |
| 摘要に新築軽減がある | 計算表に印を付ける。次の年度で税額が変わる旨を買主への説明に使う |
| 持分の扱いが分からない | 按分前か後かを明細書の書式で確かめ、分からなければ needs_human |
| 写真が斜め・暗い | 信頼度が下がった項目を low_confidence で返し、撮り直しを頼む |
| 明細書の数字の合計と行の合計が合わない | 計算はせず、どちらの値も出して needs_human |
| OCRが応答しない | フォルダに残し、30分後にやり直す。3回続けば担当へ知らせる |
1行目が年の初めに集中します。 新しい年度の明細書が届くのは、たとえば神戸市では4月上旬です。それより前の決済は、前の年度の税額で精算するのか、届いてから精算し直すのかを契約で決めているはずなので、その取り決めを契約条件の項目に持たせておきます。
記録を残す
- 元の明細書ファイルと、受け取った日時・契約番号
- OCRが返したJSONの全文と、AIが返した行ごとのJSON
- 照合の結果(行ごとの区分)と、そのとき参照した物件の表示と契約条件
- 計算表の入力(年税額・起算日・引渡し日・日数・端数処理)と出力
- 人が直した値と、直した理由
- 経理が確定した日時と確定した人
3つ目で、参照した契約条件を残すのは、契約は決済の直前まで変わるからです。 引渡し日が1日ずれただけで負担の日数が変わります。どの時点の引渡し日で計算したかが残っていないと、決済の場で数字が合わない理由を説明できません。 引渡し日が変わったときは、契約管理の仕組みの更新をきっかけに計算表を作り直し、前の版は消さずに残します。
5つ目の「直した理由」は、自治体の書式ごとに集計します。 同じ自治体で同じ項目を毎回直しているなら、プロンプトにその書式の注意を1行足すだけで直ることが多く、直した記録がそのまま改善の材料になります。
04実装レベルの3段階
最小構成では件数がさばけません。 1件ずつ貼り付けるので、確かめるための段階です。 半自動化で、①の転記がほぼ無くなります。 ただし、照合と計算は人が行うので、②と③は残ります。本格構成で照合と計算が処理に移り、本記事の想定の9分になります。 差が大きいのは②で、両方向の照合を毎回同じ手順で行えることが、品質をそろえる部分だからです。 段階を飛ばさないでください。 半自動化の1か月で、どの自治体の書式で行の区分を取り違えるかが分かります。そこを把握してから照合を足すほうが、mismatch の空振りが減ります。
05工数削減シミュレーション
導入後 60件 × 9分 ÷ 60 = 9 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 売買仲介の決済が毎月数十件あり、固定資産税・都市計画税の精算金を営業担当や営業事務が電卓と表計算で出している不動産会社。売主から預かる課税明細書が市区町村ごとに書式が違い、土地と家屋が何行にも分かれていて転記に時間がかかっている場合。契約管理の仕組みに物件の表示(所在・地番・家屋番号・地積・床面積)をデータで持っている場合。
- 決済が月に数件で、担当者が1件ずつ確かめても負担にならない場合。精算金を扱わない賃貸仲介だけの会社。物件の表示をデータで持っておらず、契約書の紙を見て照らすしかない場合。なお、精算の起算日や端数の扱いをどう取り決めるか、精算金の税務上の扱いの判断はこの構成では行いません。
07最小構成で試す方法
- 先月決済した契約から10件を選ぶ(うち2件は、私道の持分がある物件か、売主が複数の不動産を持つ物件にする)
- その10件の課税明細書の画像を、手元のAIサービスの画面に1件ずつ貼り付ける
- 「この課税明細書の土地と家屋の行を、すべて表にしてください。地番・家屋番号・面積・税額は書かれたとおりに写し、書かれていない値は空欄にしてください。計算はしないでください」と指示する
- 出てきた表を、当時の精算書と、契約書の物件の表示に照らす
- 日割りの計算は、表計算に式を書いて行う
AIに計算をさせずに試すことが大事です。 最小構成で計算まで頼むと、読み取りの誤りと計算の誤りが混ざり、どちらを直せばよいのかが分からなくなります。
| 出てきた内容 | 判断 |
|---|---|
| 行も数字も当時の精算書と合った | フォルダの監視と照合の処理に進む |
| 税額の数字の取り違えがある | 写真の撮り方を先に直す。構成は有効 |
| 行の区分(土地か家屋か)を取り違える | 自治体の書式の差。レイアウトモデルの表の出力を使う段階で改善を確かめる |
2行目が出ても、構成をやめる理由にはなりません。 第7章の前処理のとおり、文字の大きさは撮り方でほぼ決まります。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 行ごとの税額を合計から割り振って埋める | 指示で禁じ、行の合計と合計欄の差を処理で検知する |
| 非課税の土地が「載っていない」と出続ける | 地目が公衆用道路などなら理由付きで出す。それ以外は必ず人が確かめる |
| 登記の地積と課税の地積の差を誤りと判定する | 照合は登記の地積で行い、課税の地積の差は別に出す |
| 前の年度の明細書で計算する | fiscal_year を契約の決済年度と照らして止める |
| 起算日を取り違える | 計算表の上に起算日を大きく出し、人が全件で見る項目にする |
| 持分の按分が二重になる | 明細書の額が按分前か後かを自治体の書式ごとに記録する |
| 地番の表記ゆれで照合が外れる | 「12番3」「12-3」を処理の側でそろえる。AIに直させない |
| 写真の税額の数字を取り違える | 画面いっぱいに撮るよう営業担当に伝え、low_confidence を人が見る |
| 明細書以外の書類が混ざる | document_type で外し、処理に回さない |
| 2枚目のファイルを待たずに照合する | 最後のファイルから10分待ってまとめて処理する |
| 計算表の式を担当者が書き換える | 式は処理の側に置き、表には値だけを出す |
上の3行が、この構成の失敗のほとんどです。 どれも「明細書に書かれていないことを、どう扱うか」の問題です。書かれていない値を作らない、書かれていない行を誤りと決めつけない。 この2つを設計で守れば、残りは運用で直せます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 売主の氏名と住所、所有する土地・家屋の一覧と評価額、税額です。売買の対象でない不動産の情報も、同じ明細書に載っています。
- 対象でない行の扱いを決めておく … 売主が持つ他の不動産の情報は、売買には関係ありません。計算表には対象の行だけを載せ、対象でない行は照合の記録の中だけに残します。 買主に渡す書類に混ざらないようにします
- Azure の中で処理を閉じる … OCR・生成AI・照合の処理を同じ Azure の契約の中に置き、生成AIのデプロイは処理する地域を選べる種類にします。 Global の種類は、要求と応答が他の地域で処理されうるとされています
- 精算金の額を自動で確定させない … 精算金は売主と買主の間で動くお金です。確定は経理が行い、AIの出力を直接決済の案内に載せません
- 起算日・端数処理の取り決めはこの構成では決めない … どちらの起算日で精算するか、端数をどう扱うかは、契約の当事者が取り決めることです。 この構成は取り決められた条件で計算するだけです
- 税務上の扱いは専門家に委ねる … 精算金を売主・買主の税務上どう扱うかは、顧問税理士に確かめてください。 この構成はその説明を作りません
- 明細書の控えの保存期間を決める … 契約の書類と同じ期間とし、それを過ぎたら画像とOCRの結果を消します
誤りが起きた場合のリスクは、精算金の額が違うまま決済が終わることです。 金額の差は小さくても、決済の後に売主と買主の間でやり取りし直すのは、仲介した会社の信用にひびきます。起算日と年度の2つは、どれだけ自動化しても人の確認に残してください。
10まず何から始めるか
1週目:契約条件を項目にする
契約管理の仕組みに、起算日・引渡し日をどちらの負担にするか・年の日数・端数処理の項目を足します。今月以降の契約から入れ始め、過去の契約は決済が近いものだけ入れます。
2週目:10件で試す
先月の決済から10件を選び、明細書の画像を手元のAIサービスに貼って行の一覧を作らせます。当時の精算書と、行の数・地番・税額が合っているかを見ます。 合わない場合は、写真の撮り方か自治体の書式のどちらが原因かを分けます。
3週目:地番の表記の規則と照合の区分を決める
「番」「番地」「-」をどうそろえるか、not_in_bill をどの地目なら理由付きで流すかを決めます。私道や公衆用道路をどう扱うかを、店舗の間でそろえるのがこの週の目的です。
4週目:レイアウトモデルと構造化出力をつなぐ
Power Automate でフォルダを監視し、レイアウトモデルを呼び、行のJSONを表計算に流し込むところまで作ります。この時点では照合と計算をせず、行の取り出しの精度だけを見ます。
2か月目: 照合と日割りの計算を Azure Functions に書き、計算表を出します。食い違いの区分ごとの件数を毎週数えます。3か月目以降: 1件30分が何分になったかを実測し、mismatch の多い自治体の書式を把握します。起算日の確認だけが人の作業として残った時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 固定資産税の納税義務者が土地・家屋の所有者で、登記簿上の所有者等を固定資産課税台帳に登録して課税すること。賦課期日が当該年度の初日の属する年の1月1日であること。免税点が土地30万円・家屋20万円であること | 総務省: 固定資産税の概要 | 2026-10-07 |
| 固定資産税が1月1日現在の所有者に4月1日から始まる年度分として課されること。都市計画税が市街化区域の土地・家屋に固定資産税とあわせて課されること。売買で所有者が変わっても1月1日現在で名義変更が済んでいなければ前の所有者が納めること。納税通知書と課税明細書が4月上旬に送られること。非課税や免税点未満の場合は納税通知書が送られないこと | 神戸市: 固定資産税(概要) | 2026-10-07 |
| 課税明細書の摘要に「住宅用地」「新築軽減」「新築軽減終了」などが記載され、特例措置・減額措置の適用状況を示すこと | 神戸市: 課税明細書(見本) | 2026-10-07 |
| レイアウトモデルが文字・表・選択マーク・構造を取り出し、表の行数・列数とセルの位置を返すこと。入力形式、PDF・TIFFが2,000ページまで、S0で500MB、画像が50×50〜10,000×10,000ピクセル、文字の最小高さが1024×768で12ピクセルであること。Markdown の出力で表が HTML の表になること。段落の役割と、文字ごとの信頼度が返ること | Microsoft Learn: Document layout analysis | 2026-10-07 |
レイアウトモデルが日本語の印刷の文字と手書きの文字に対応していること。v4.0 では prebuilt-layout に features=keyValuePairs を付けてキーと値の組を取ること | Microsoft Learn: Language support for Read and Layout | 2026-10-07 |
| キーと値の組の機能が 2024-11-30 (GA) で使え、追加料金の無い扱いであること | Microsoft Learn: Add-on capabilities | 2026-10-07 |
構造化出力でスキーマのすべての項目を必須にし、additionalProperties: false を付けること | Microsoft Learn: Azure OpenAI で構造化出力を使用する方法 | 2026-10-07 |
| プロンプトと応答がモデルの学習に使われないこと。Global の種類のデプロイでは要求と応答がモデルの配置された任意の地域で処理されうること、DataZone ではそのデータゾーンの中で処理されうること | Microsoft Learn: Data, privacy, and security for Foundry Models sold by Azure | 2026-10-07 |
精算の起算日・端数処理は契約の取り決めにより、地域の慣行も異なります。 本記事は公開情報で確認できた範囲だけを扱っています。精算金の税務上の扱いは顧問税理士に確かめてください。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0798)についてのご相談はこちらから。
