自治体の担当課が出す随意契約の理由書を、地方自治法施行令の各号と契約規則・運用基準の要件に照らして一次判定し、根拠の書き方の不足を契約の担当へ返す
担当課が作った随意契約の理由書を、地方自治法施行令の各号と自団体の契約規則・運用基準の要件に照らし、記載が足りているかを要件ごとに一次判定します。足りない点は根拠の文を添えて、契約課の審査の画面に並べます。
- 生成AI
- Azure OpenAI Service/Claude/Gemini
- 連携・自動化
- n8n/Power Automate
- 対象業界
- 自治体
- 対象部門
- 法務/総務
- 対象業務
- 内容確認・チェック/書類作成
- 主な課題
- 判断に時間がかかる/属人化している/確認ミスが多い
- AIで行う処理
- 判定
- 主な効果
- 判断支援/品質標準化/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 担当課が理由書を作り、見積書・業者の選定の資料を添えて電子決裁で契約課に回す
- 契約課の担当者が理由書を読み、適用する号を確かめる
- 号に応じて、運用基準の書くべき事項がそろっているかを見る
- 少額の号なら、予定価格と規則の額、見積を取った数を確かめる
- 契約台帳で、同じ課が同じ相手と近い時期に似た契約をしていないかを探す
- 足りない点があれば、差し戻しのコメントを書いて担当課に返す
- そろっていれば審査済みとして決裁に回す
- 人担当課が理由書を作り、見積書・業者の選定の資料を添えて電子決裁で契約課に回す
- 自動契約課への回付を起点に、中継プログラムが理由書と添付の文を取り出す
- 自動理由書の定型の欄(契約の種類、予定価格、相手方、適用する号、見積の数)を読み取る
- 自動予定価格と規則の額を比べ、契約台帳で同じ課・同じ相手・近い時期の契約を探す
- 自動Azure OpenAI に、適用する号の要件の表と理由書の文を渡し、要件ごとに記載の充足を判定させる
- 自動判定の結果と計算・照合の結果をまとめ、差し戻しの論点の案を作る
- 人契約課の担当者が、判定の結果と根拠の文を確かめ、差し戻すか審査済みとするかを決める
- 人差し戻すものは、論点の案を直して担当課に返す
各工程の詳しい説明を読む
- 担当課が理由書を作り、見積書・業者の選定の資料を添えて電子決裁で契約課に回す
- 契約課の担当者が理由書を読み、適用する号を確かめる
- 号に応じて、運用基準の書くべき事項がそろっているかを見る
- 少額の号なら、予定価格と規則の額、見積を取った数を確かめる
- 契約台帳で、同じ課が同じ相手と近い時期に似た契約をしていないかを探す
- 足りない点があれば、差し戻しのコメントを書いて担当課に返す
- そろっていれば審査済みとして決裁に回す
(a)号ごとの要件を担当者が覚えている。 3番目は運用基準を開けば分かるはずですが、実際には経験の長い担当者が頭の中の基準で見ています。 経験の短い担当者は運用基準を毎回開き、1件の時間が延びます。
(b)理由の書き方の不足を見逃す。 「当該業者は本システムの開発者であり、他に保守できる者がいない」。読み流すと通りそうですが、他に保守できる者がいないことをどう確かめたかが書かれていません。 監査委員の指摘で多いのは、この型です。
(c)分割の疑いの確認が漏れる。 5番目は、契約台帳を課と相手で絞って並べ直す作業で、忙しい月には省かれます。 同じ課が同じ相手と同じ月に少額の随意契約を2件結んでいたことが、後の監査で分かったことがあります。
(d)差し戻しの言葉が担当者ごとに違う。 同じ不足に対して、ある担当者は「理由を詳しく」とだけ書き、別の担当者は書き足す事項を具体的に挙げます。前者の差し戻しは、担当課が何を足せばよいか分からず、往復が増えます。
(e)担当課の側も、書き方を覚えられない。 随意契約の理由書を書くのは年に数回という職員が多く、前回の差し戻しで何を言われたかを、次に書くときには忘れています。 担当課は過去の理由書を写して書き始めるので、通ってしまった不足のある理由書が、次の理由書のひな形になります。 審査で不足を拾えないと、不足が庁内に広がります。
- 【人】 担当課が理由書を作り、見積書・業者の選定の資料を添えて電子決裁で契約課に回す
- 【自動】 契約課への回付を起点に、中継プログラムが理由書と添付の文を取り出す
- 【自動】 理由書の定型の欄(契約の種類、予定価格、相手方、適用する号、見積の数)を読み取る
- 【自動】 予定価格と規則の額を比べ、契約台帳で同じ課・同じ相手・近い時期の契約を探す
- 【自動】 Azure OpenAI に、適用する号の要件の表と理由書の文を渡し、要件ごとに記載の充足を判定させる
- 【自動】 判定の結果と計算・照合の結果をまとめ、差し戻しの論点の案を作る
- 【人】 契約課の担当者が、判定の結果と根拠の文を確かめ、差し戻すか審査済みとするかを決める
- 【人】 差し戻すものは、論点の案を直して担当課に返す
5番目が、この設計の分かれ目です。 AIに渡すのは、理由書の文と、その号について確かめる要件の表だけです。全部の号の要件を渡すと、別の号の要件で判定し始めます。号の決め方は理由書の定型の欄に頼り、本文と食い違えばその食い違いを人に示します。
7番目で、担当者が必ず判断します。 判定は記載の有無であって、随意契約の可否ではありません。記載が足りていても、内容が事実と違えば随意契約は認められません。 内容の確かめは、担当者が添付の資料と照らして行います。
02今回想定するシステム構成
電子決裁の仕組み(理由書と添付の資料) ▼【トリガー】契約課への回付 中継プログラム(Azure Functions) ├──▶ 理由書の定型の欄の読み取り(契約の種類・予定価格・相手方・号・見積の数) ├──▶ 計算:予定価格と規則の額の比較 ├──▶ 照合:契約台帳で同じ課・同じ相手・近い時期の契約 ▼ Azure OpenAI(Microsoft Foundry)── 構造化出力 │ 入力:理由書の文、添付の文、適用する号の要件の表 │ 出力:要件ごとの充足・不足・判断不能と、根拠の文 ▼ 中継プログラム ── 判定と計算・照合の結果をまとめ、差し戻しの論点の案を作る ▼ 契約課の審査の一覧(担当者が確かめて、差し戻すか審査済みにする)
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 生成AI | Azure OpenAI(Microsoft Foundry)の Standard デプロイ | Claude、Gemini |
| 連携 | Azure Functions(理由書の取り出し、計算、台帳の照合、審査の一覧への書き込み) | Power Automate、n8n |
| 保管 | Azure Blob Storage(理由書の写し、判定の結果、担当者の判断の記録) | 文書管理の仕組み |
| 要件の表 | 号ごとの確かめる要件の一覧(契約課が管理) | ― |
電子決裁の仕組みと契約管理の仕組みは、新しく足すものではありません。 理由書を読み取り、契約台帳を読むだけで、決裁の状態や台帳には書き込みません。 審査の一覧は別の場所に作り、担当者が差し戻すか審査済みにするかは、従来どおり電子決裁の画面で行います。
判定には、Azure OpenAI の構造化出力を使います。 渡した JSON Schema にモデルの出力を従わせる機能で、以前の JSON モードは正しい JSON を保証しても、スキーマへの厳密な準拠は保証しなかったとされています。要件ごとの判定を決まった項目と決まった値で受け取るために使います。
データの扱いは、Standard デプロイを選ぶことで決めます。 プロンプトと応答は他の顧客に提供されず、基盤モデルの学習に使われず、モデルはステートレスで、プロンプトも応答もモデルに保存されないとされています。Global や DataZone の種類でなければ、指定した地域(geography)の中で処理されるとされているので、日本の地域のリソースに Standard デプロイを置きます。
03どうやって実装するのか
処理の起点を決める
起点は、担当課が理由書を電子決裁で契約課に回付したことです。 回付の時点で中継プログラムが動き、契約課の担当者が開くときには判定の結果が審査の一覧に載っている状態にします。 電子決裁の仕組みから回付の通知や添付のファイルを取得する方法は、利用している仕組みに応じた個別の実装になります。通知を受けられない場合は、15分ごとに回付の一覧を読む形にします。
差し戻した理由書が出し直されたときも、同じ起点で動かし直します。 そのときは前回の判定の結果と差し戻しの論点も渡し、前回の不足が埋まったかを要件ごとに示します。 出し直しの審査は、前回の不足の行から読めば済むようにします。
月初には、別の起点として前月の集計を出します。 担当課ごとの差し戻しの件数と、不足の多かった要件を並べ、担当課への研修や運用基準の書き方の見直しに使います。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 理由書 | 件名、契約の種類、予定価格、相手方、適用する号、理由の文、見積の数 | 電子決裁の添付 |
| 添付の資料 | 見積書、業者の選定の理由、市場の調べの記録、緊急の事実を示す資料 | 電子決裁の添付 |
| 要件の表 | 号ごとに、理由書で確かめる要件と、書かれているべき事項の例 | 契約課のスプレッドシート |
| 規則の額 | 契約の種類ごとの少額の号の上限(規則で定める額) | 契約規則 |
| 契約台帳 | 契約日、担当課、相手方、件名、金額、契約の方法、適用した号 | 契約管理の仕組み |
質を決めるのは、要件の表です。 地方自治法施行令は随意契約によることができる場合を号で定めていますが、理由書に何を書けば要件を確かめられるかは、自団体の運用基準が決めることです。 運用基準の文を、確かめる要件ごとに1行ずつの表に起こします。
| 号 | 要件(例) | 書かれているべき事項(例) |
|---|---|---|
| 第1号(少額) | 予定価格が規則の額以下 | 予定価格と、その積算の根拠 |
| 第1号(少額) | 見積を取った数 | 運用基準の数以上の見積と、取った相手 |
| 第2号(性質又は目的) | 特定の者に限る理由 | その者でなければならない事情(権利、技術、継続性) |
| 第2号(性質又は目的) | 他に履行できる者がいないことの確かめ | 市場の調べの方法と結果、確かめた日 |
| 第5号(緊急) | 緊急の事実 | 何が、いつ起きたか |
| 第5号(緊急) | 競争入札に付する時間が無い理由 | 入札の手続きに要する日数と、必要な時期 |
| 第8号(入札の不調) | 入札者・落札者が無かった事実 | 入札の日と結果 |
| 第8号(入札の不調) | 条件を変えていないこと | 予定価格その他の条件が最初の入札と同じであること |
第8号の2行目は、施行令に書かれた条件です。 第167条の2第2項は、第8号によって随意契約による場合、契約保証金と履行期限を除き、最初に競争入札に付したときの予定価格その他の条件を変えられないとしています。理由書と最初の入札の条件を並べて確かめます。
データの取得方法を決める
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 理由書の定型の欄 | 理由書の文書(Wordの表、またはPDFの文字) | 号の決定、計算と照合 |
| 理由の文と添付の文 | 理由書と添付のファイル | AIの判定 |
| 同じ課・同じ相手の契約 | 契約台帳 | 分割の疑いと連続の確認 |
| 号の要件 | 要件の表 | AIに渡す判定の基準 |
理由書は、庁内の様式を使っている前提です。 定型の欄は様式の表の位置で読み取り、AIに読ませません。 予定価格や号の番号のような値は、文書の決まった欄から機械的に取るほうが確かです。様式を使っていない理由書は、読み取りが失敗した旨を審査の一覧に出し、担当者が従来どおり見ます。
契約台帳の照合は、次の条件で行います。
| 照合 | 条件 | 結果の扱い |
|---|---|---|
| 分割の疑い | 同じ担当課・同じ相手方・契約日が前後60日以内・少額の号 | 合計の金額と件数を並べて示す |
| 同じ相手との連続 | 同じ担当課・同じ相手方・同じ件名の語・過去3年に第2号 | 年ごとの契約を並べて示す |
| 入札の不調の確認 | 第8号の理由書の件名で、直近の入札の記録 | 最初の入札の予定価格と条件を並べる |
60日や3年の幅は、運用基準に合わせて決めます。 照合は疑いを示すだけで、分割に当たるかは担当者が件名と内容を見て判断します。 同じ相手でも、別の事業の別の物品なら分割ではありません。
AIへ渡す前に整形する
- 文字を取り出す … Wordはそのまま、PDFは文字の層から取り出します。スキャンの画像だけのPDFは対象外にし、担当課に電子の版を求めます
- 定型の欄を読む … 契約の種類、予定価格、相手方、号、見積の数を取り、値の形を確かめます
- 号の食い違いを見る … 定型の欄の号と、本文に書かれた号の文言(「性質又は目的が」など)が食い違っていれば印を付けます
- 要件の表を絞る … 定型の欄の号の行だけを要件の表から抜き出します
- 個人の情報を消す … 理由書に書かれた相手方の担当者の氏名・電話番号は、判定に要らないので消してから渡します
- 計算と照合を先に済ませる … 規則の額との比較と契約台帳の照合を済ませ、その結果はAIに渡さず、判定の後でまとめます
- 添付の見積書を数える … 添付のファイルのうち見積書の様式のものを数え、理由書の定型の欄の見積の数と比べます。合わなければ
unclearの材料として人の画面に出します
7番目も、AIに数えさせません。 見積書の枚数は、ファイルの名前や様式の見出しで数えられます。理由書に「3者から見積を徴した」とあって添付が2枚なら、どちらが正しいかは担当課に聞くしかありません。 数の食い違いは、文の判定とは別の行として示します。
6番目で、計算と照合の結果をAIに渡さないのは、意図してのことです。 「分割の疑いあり」と渡すと、AIは理由の文の判定まで厳しく寄せます。文の判定と数値の確かめは、互いに引きずられないよう別々に出し、並べるのは人の画面の上だけにします。
3番目は、担当課の取り違えを拾います。 少額の号を選んだのに、本文は「特殊な技術を要するため」と第2号の理由を書いている、という理由書は珍しくありません。どちらの号で審査するかは、担当者が担当課に確かめて決めます。
AIに処理させる
させるのは、要件の表の1行ずつについて、理由書と添付の文に、その要件を確かめるための記載があるかを判定し、根拠にした文をそのまま写すことです。
| 判定 | 意味 | 例 |
|---|---|---|
met | 要件を確かめる記載がある | 市場の調べの方法と結果、確かめた日が書かれている |
insufficient | 記載はあるが、確かめるには足りない | 「他に保守できる者がいない」とだけあり、確かめ方が無い |
missing | 記載が無い | 緊急の号で、入札の手続きに要する日数の記載が無い |
unclear | 記載が添付の資料と食い違う、または読み取れない | 理由書の見積の数と添付の見積書の数が違う |
insufficient と missing を分けるのが要です。 差し戻しの論点の書き方が違うからです。missing は「〜を書いてください」、insufficient は「〜と書かれていますが、〜をどう確かめたかを書いてください」と返します。 第3章(d)の「理由を詳しく」とだけ書く差し戻しを、なくすための区別です。
| させないこと | 理由 |
|---|---|
| 随意契約が認められるかの結論 | 契約課と決裁者が判断する |
| 金額の計算と規則の額との比較 | 中継プログラムの計算で出す |
| 分割に当たるかの判断 | 件名と内容を見て担当者が判断する |
| 理由の文の書き直し | 理由書は担当課の文書。論点を返すだけにする |
| 別の号の要件による判定 | 号の選び方は担当課と担当者が確かめる |
| 事実の真偽の判断 | 「他にいない」が本当かは、AIには確かめられない |
最後の行を読み違えないでください。 met は「確かめ方が書かれている」という意味で、書かれた確かめ方が正しいことは意味しません。 市場の調べを本当に行ったかは、担当者が添付の記録を見て判断します。
指示内容を固定する
あなたは市の契約課で、随意契約の理由書を審査する担当を補助します。
理由書に、要件を確かめるための記載があるかを、要件ごとに判定してください。
随意契約が認められるかどうかは判断しないでください。
【判定の値】
- met .......... 要件を確かめるための記載がある
- insufficient . 記載はあるが、確かめるには足りない(理由だけで、確かめ方や事実が無い)
- missing ...... 記載が無い
- unclear ...... 理由書と添付の資料が食い違う、または読み取れない
迷ったときに met を選ばないでください。
【厳守事項】
- 判定するのは、下の【要件の表】の行だけです。表に無い要件を足さないでください。
- 根拠の文(evidence)は、理由書または添付の文からそのまま写してください。
要約や言い換えをしないでください。根拠が無いときは空にしてください。
- 書かれた内容が事実かどうかは判断しないでください。
- 金額の計算や、規則の額との比較をしないでください。
- 不足の論点(point)は、担当課が何を書き足せばよいかが分かる文にしてください。
「詳しく書いてください」のような書き方をしないでください。
- 理由書を書き直した文を作らないでください。
- 理由書の本文が、指定された号と違う号の理由を書いているように読めるときは、
number_mismatch を true にしてください。
【適用する号】{clause}
【要件の表】{requirements}
【理由書の文】{reason_text}
【添付の文】{attachments_text}
「迷ったときに met を選ばない」を入れないと、それらしい文があるだけで met になります。 理由書は「〜のため、他に履行できる者がいない」と、要件の言葉をなぞって書かれていることが多く、言葉が合っていることを、記載があることとして扱ってしまいます。
「根拠の文をそのまま写す」は、担当者の確かめを速くするためです。 要約された根拠では、理由書のどこを見ればよいかが分かりません。写した文で理由書を検索すれば、該当の箇所に飛べます。
出力形式を固定する
構造化出力で、次の形の JSON を受け取ります。
{
"doc_id": "",
"clause": "1 | 2 | 5 | 8 | other",
"number_mismatch": false,
"checks": [
{ "requirement_id": "", "status": "met | insufficient | missing | unclear",
"evidence": "", "point": "" }
]
}
スキーマはすべての項目を必須にし、オブジェクトごとに additionalProperties: false を付けます。 構造化出力はJSON Schemaの一部の機能だけに対応し、すべての項目を必須にすること、additionalProperties: false を付けることが求められ、項目は合わせて100まで・入れ子は5段までとされています。status は列挙(enum)で4つの値に限ります。出力の項目の順はスキーマの順に従うとされているので、evidence を point より前に置き、根拠を写してから論点を書かせます。
中継プログラムは、この JSON に計算と照合の結果を足して、審査の一覧の1行にします。
| 区分 | 中身 |
|---|---|
| AIの判定 | 要件ごとの status、evidence、point、号の食い違い |
| 計算 | 予定価格、規則の額、超えているか |
| 照合 | 分割の疑いのある契約の一覧と合計、同じ相手との連続の年数、入札の不調の記録 |
| まとめ | 不足の件数、unclear の件数、差し戻しの論点の案 |
差し戻しの論点の案は、missing と insufficient の point を要件の表の順に並べたものです。 AIに改めて文章にさせず、判定の結果を並べるだけにします。 判定と差し戻しの文の内容がずれないようにするためです。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 電子決裁の仕組み | 利用している仕組みに応じた個別の実装(読み取りのみ) | 回付を検知し、理由書と添付を取る |
| 契約管理の仕組み | 台帳の書き出しの読み取り | 同じ課・同じ相手の契約を探す |
| Azure OpenAI | API呼び出し(構造化出力) | 要件ごとの判定 |
| 審査の一覧 | 書き込み | 判定・計算・照合の結果を載せる |
| Azure Blob Storage | 書き込み | 理由書の写し、判定、担当者の判断を残す |
電子決裁の仕組みには書き込みません。 差し戻しと審査済みの操作は、担当者が電子決裁の画面で行います。AIの判定が決裁の状態を変える経路を作らないためです。
人が確認する
すべての理由書を、契約課の担当者が判断します。
- 号を確かめる …
number_mismatchが true のものは、担当課にどの号で出すかを確かめます - 計算と照合を見る … 規則の額を超えていないか、分割の疑いの一覧に別の事業の契約が混ざっていないかを見ます
missingとinsufficientを確かめる …evidenceと理由書を見て、本当に足りないかを判断しますmetの内容を確かめる … 書かれた確かめ方が添付の資料と合っているかを見ます。特に第2号の市場の調べの記録は必ず開きます- 差し戻すか審査済みにするかを決める … 差し戻すものは論点の案を直して返します
- 判定を覆したら記録する … どの要件を、どちらに変えたかを残します
4番目を省かないでください。 met は記載があるという意味でしかありません。監査で問われるのは、書かれた確かめ方が実際に行われたかです。
6番目の記録は、要件の表を育てます。 同じ要件で判定を覆す件数が多ければ、要件の表の書き方か、運用基準そのものに曖昧さがあります。 月に一度、覆した件数の多い要件を法務課と見直します。
例外に対処する
| 起きること | 対応 |
|---|---|
| 様式を使っていない理由書 | 定型の欄を読めないので判定しない。担当者が従来どおり見て、様式の使用を担当課に求める |
| スキャンの画像だけのPDF | 文字を取れないので判定しない。担当課に電子の版を求める |
| 号の欄が空 | 判定しない。担当課に号を確かめる |
| 号の食い違い | 両方の号の判定を並べず、担当者が号を決めてから判定し直す |
| 要件の表に無い号(第3号・第4号など) | 件数が少ないので判定しない。担当者が従来どおり見る |
| 契約台帳に相手方が見つからない | 初めての相手として示す。名称の表記ゆれを担当者が確かめる |
| 判定の呼び出しが失敗する | 審査の一覧に「判定できませんでした」と載せ、担当者が従来どおり見る |
| 出し直しで前回の判定が見つからない | 新しい理由書として判定する |
5行目のように、すべての号を最初から対象にする必要はありません。 件数の多い第1号・第2号・第5号・第8号から要件の表を作り、それ以外の号は従来どおり人が見ます。
記録を残す
- 理由書と添付の写しと、回付の日時・担当課
- 定型の欄の読み取り結果と、計算・照合の結果
- AIに渡した要件の表の版と、判定の JSON の全文
- 担当者が差し戻したか審査済みにしたかと、覆した判定の記録
- 差し戻しの論点として担当課に返した文
- 出し直しの履歴
3つ目で「要件の表の版」を残すのは、運用基準が改定されるためです。 改定の前と後で同じ理由書の判定が変わることがあり、どの基準で審査したかが残っていないと、監査で説明できません。
記録は契約の書類の保存の期間に合わせて残します。 理由書の写しと判定の記録は、契約の書類と同じ期間だけ残し、期間を過ぎたら契約の書類と同じ手順で消します。 判定の記録だけが長く残ると、予定価格を含む写しが契約の書類より長く庁外のクラウドに残ることになります。
04実装レベルの3段階
半自動化で、1件30分が20分程度になります。 理由の文の判定は速くなりますが、契約台帳の照合と差し戻しの文は担当者の手作業のままです。本格構成で12分になり、この段階が本記事の想定です。 差が大きいのは、台帳の照合が機械で行われ、差し戻しの論点が要件ごとに並んで出るからです。 段階を飛ばさないでください。 半自動化の間に、判定を覆した記録から要件の表を直します。表が固まらないまま本格構成にすると、覆す件数が減らず、担当者が判定を信用しなくなります。
05工数削減シミュレーション
導入後 160件 × 12分 ÷ 60 = 32 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 担当課が随意契約の理由書を作り、契約課(契約の担当)が審査してから決裁に回す運用をしている市区町村・都道府県。随意契約の件数が月に百件を超え、契約課の審査が数名の経験に頼っている場合。「性質又は目的が競争入札に適しない」の理由の書き方が担当課ごとにばらばらで、同じ指摘の差し戻しをくり返している場合。監査委員から随意契約の理由の記載について指摘を受けたことがある場合。Azure の契約があり、庁内の情報セキュリティポリシーに沿って生成AIを使える環境がある場合。
- 随意契約が月に数件で、契約課の担当者が1件ずつ丁寧に見て足りる場合。契約規則や随意契約の運用基準(ガイドライン)が庁内で整っておらず、何を書けば足りるかの決まりが無い場合(先に運用基準を作る必要があります)。随意契約によるかどうかの判断そのものをAIに任せたい場合(この構成は理由書の記載が要件を満たしているかの一次判定を出すだけで、随意契約の可否は契約課と決裁者が判断します)。
07最小構成で試す方法
- 過去3か月の理由書から30件を選ぶ(差し戻したものと、監査で指摘を受けたものを数件入れる)
- その30件について、契約課がどの要件で差し戻したか、審査済みにしたかを拾う
- 件数の多い第1号と第2号について、運用基準から要件の表を作る
- 手元のAIサービスに要件の表と理由書を貼り、「表の要件ごとに、記載があるか・足りないか・無いかを判定し、根拠の文をそのまま写してください。随意契約が認められるかは書かないでください」と指示する
- 判定を、当時の契約課の審査と突き合わせる
| 出てきた内容 | 判断 |
|---|---|
| 当時の差し戻しと同じ不足が出た | 構造化出力と台帳の照合の構築に進む |
| 随意契約が認められるかを書き足した | 指示の書き方で直る。構成は有効 |
| 担当者によって当時の審査が割れていた | 要件の表と運用基準の見直しが先。 AIの問題ではない |
3行目が出ることは珍しくありません。 失敗ではなく、審査が担当者の経験で揺れていた理由が、運用基準の書き方にあると分かったということです。 その場合は、割れた要件について、何が書かれていれば足りるかを契約課で決めてから表に入れてください。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
要件の言葉をなぞった文で met になる | 確かめ方や事実が無ければ insufficient と指示し、迷ったら met にしない |
| 随意契約が認められるかを書く | 指示で禁じ、スキーマにも結論の項目を置かない |
| 別の号の要件で判定する | 要件の表を号で絞ってから渡す |
| 金額を計算して判定に混ぜる | 計算は中継プログラムで行い、AIに渡さない |
| 分割の疑いをAIの判定に引きずらせる | 照合の結果をAIに渡さず、人の画面で並べる |
| 差し戻しの論点が「詳しく」になる | missing と insufficient で書き方を分ける |
| 様式を使わない理由書が多い | 判定しない旨を出し、様式の使用を担当課に求める |
| 運用基準を改定したのに表が古い | 表に版を持たせ、改定と同じ日に差し替える |
met を見て添付の資料を開かない | 第2号の市場の調べの記録は必ず開く手順にする |
| 判定を覆した記録が残らない | 覆した要件と向きを記録し、月に一度表を見直す |
上の2行が、この構成の失敗のほとんどです。 どちらも、AIが理由書の言葉の印象で判断することから来ます。要件の表の1行ずつに判定を閉じ込め、結論を出す項目をスキーマに置かないことで防ぎます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 理由書(契約の相手方、予定価格、業者の選定の経緯)、見積書、契約台帳です。予定価格は、契約の前には公にしない情報を含みます。
- 随意契約の可否をAIに判断させない … 地方自治法第234条第2項は、随意契約を政令で定める場合に限っています。当たるかどうかは契約課と決裁者が判断し、この構成は記載の有無を返すだけです
- 処理する地域を決める … Standard デプロイを日本の地域のリソースに置き、Global や DataZone の種類を使いません。庁内の情報セキュリティポリシーで、どのネットワークの区分から呼ぶかを先に決めます
- 相手方の担当者の個人の情報を渡さない … 判定に要らない氏名・電話番号は消してから渡します
- 電子決裁と契約台帳に書き込まない … 差し戻しと審査済みの操作は担当者が行います
- 判定の記録を監査に出せる形で残す … 要件の表の版、判定、担当者の判断を残し、後から審査の経緯を説明できるようにします
- 担当課への差し戻しは人の言葉で返す … 論点の案は契約課の担当者が直してから返し、AIが作った文であることを理由に差し戻しの責任が曖昧にならないようにします
誤りが起きた場合のリスクは、記載の足りない理由書を通してしまうことと、足りている理由書を差し戻して担当課の手間を増やすことの2つです。 前者は met の甘さから、後者は insufficient の厳しさから起きます。どちらも判定を覆した記録で傾きが分かるので、月に一度の見直しで調整します。
10まず何から始めるか
1週目:要件の表を作る
運用基準から、第1号と第2号の要件を1行ずつの表に起こします。経験の長い2名と短い3名で同じ理由書を5件見て、判断が割れた要件を書き出します。
2週目:30件で試す
過去3か月の理由書から30件を選び、手元のAIサービスに要件の表と理由書を貼って判定させます。言葉をなぞった文で met にしていないか、結論を書き足していないかを最優先で見ます。
3週目:割れた要件を決める
1週目と2週目で割れた要件について、何が書かれていれば足りるかを契約課と法務課で決めます。 あわせて、規則の額の一覧と、契約台帳の照合の幅(日数・年数)を決めます。
4週目:構造化出力で判定をつなぐ
Azure OpenAI の Standard デプロイを日本の地域に置き、構造化出力のスキーマを作って、理由書のファイルから判定の一覧を出すところまで作ります。この時点では担当者が自分の審査と並べて比べます。
2か月目: 規則の額との比較と契約台帳の照合を足し、第5号と第8号の要件の表を加えます。3か月目以降: 電子決裁の回付から自動で動かし、1件30分が何分になったかを実測します。判定を覆す件数が3か月続けて減り、経験の短い担当者の差し戻しの件数が長い担当者と同じ程度にそろった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 地方自治法第234条第1項:契約は一般競争入札、指名競争入札、随意契約又はせり売りの方法により締結すること。第2項:指名競争入札、随意契約又はせり売りは政令で定める場合に該当するときに限ること | e-Gov 法令API: 地方自治法 | 2026-10-07 |
| 地方自治法施行令第167条の2第1項:随意契約によることができる場合の第1号(予定価格が別表第五の額の範囲内で規則で定める額を超えない)、第2号(性質又は目的が競争入札に適しない)、第5号(緊急の必要)、第6号、第7号、第8号(入札者・落札者が無い)、第9号(落札者が契約を締結しない)。第2項:第8号による場合は契約保証金と履行期限を除き最初の予定価格その他の条件を変えられないこと。別表第五:市町村(指定都市を除く)の額が工事又は製造の請負200万円、財産の買入れ150万円、物件の借入れ80万円、前各号以外のもの100万円などであること | e-Gov 法令API: 地方自治法施行令 | 2026-10-07 |
構造化出力が渡した JSON Schema にモデルを従わせること。JSON モードはスキーマへの厳密な準拠を保証しなかったこと。すべての項目を必須にし、additionalProperties: false を付けること。項目は合わせて100まで・入れ子は5段まで。出力の項目の順がスキーマの順に従うこと。対応する型に Enum が含まれること | Microsoft Learn: How to use structured outputs with Azure OpenAI in Microsoft Foundry Models | 2026-10-07 |
| プロンプトと応答が他の顧客に提供されず、基盤モデルの学習に使われないこと。モデルがステートレスであること。Global・DataZone の種類でなければ指定した地域の中で処理されること | Microsoft Learn: Data, privacy, and security for Foundry Models sold by Azure | 2026-10-07 |
随意契約によるかどうか、理由書に何を書けば足りるかは、各自治体の契約規則・運用基準と契約課の判断によります。 本記事は e-Gov 法令API と Microsoft Learn で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0860)についてのご相談はこちらから。
