実装構成設計書 / DRAFT

士業向けドラフト作成ツール
実装構成の設計

既存の AI書類チャット(Cloudflare Workers)と Shachihata Cloud / SDX を前提に、9画面のUI設計をどう実装に落とすかを整理したもの。未確定事項は末尾にまとめた。

現状
AI書類チャット稼働中。検索+生成の2段構成。出典は案件名まで。
目標
条項単位の出典、差分レビュー、承認ゲートを備えた9画面。将来は助言まで。
最大のギャップ
全文1セル運用から条項単位データへの移行。ここが全機能の土台。

1. 確定した方針

項目決定設計への影響
主対象の業務建設業許可条項分割の規則は様式番号ベース。現在のSDXの19件(無人航空機中心)は参照元にならない
第1段階の範囲9画面すべて出典検証はbbox、承認ゲートはシヤチハタAPIに依存。依存先が揃う順に着手する
助言の提供初期から有効パイプライン4段目を第1段階に含める。記録と助言は別ブロックで表示
利用人数2〜3名承認ゲートは他者レビューとして成立。担当者と承認者のロール分離が必要
参照案件の選定自動選択+差し替え画面3の初期状態を「選ばれた状態」に変更。選定理由の表示が必要
事務所標準自動抽出+人が確認抽出結果を承認する画面が新規で必要(既存の9画面になし)
差分レビューAI由来の変更のみ必須revision.originaihumanを区別し、aiの未レビューをブロック

2. データの置き場所

三層に分ける。SDXを主データストア、Cloudflare側を作業データと検索インデックス、Shachihata Cloud を承認と証跡。既存資産をそのまま活かせる形。

置き場所持つもの
案件台帳SDX(既存シート)案件名、案件種類、契約当事者、案件開始日時、原本ファイル、抽出全文
作業データCloudflare D1条項、出典位置、ドラフト、差分履歴、レビュー状態、AI相談スレッド
検索Cloudflare Vectorize条項単位の埋め込みベクトル + 案件ID / 条項IDのメタデータ
原本キャッシュCloudflare R2SDXから取得したPDFの作業用コピー、OCR中間結果、書き出し済み成果物
承認・押印Shachihata Cloud申請、決裁、タイムスタンプ、監査証跡

SDXとD1は 案件ID(SDXの _id)で紐づける。D1側はSDXの内容を複製せず、参照とオフセットのみを持つ。SDXにAPIがあることは確認済みのため、WorkerからSDXの行を直接読み書きする前提で設計する。

設計判断
条項テーブルをSDXに作らずD1に置くのは、案件1件で数百行になるため。SDXは案件単位の台帳として使い、行数が案件数を大きく超えるデータは持たせない。

3. データモデル(D1)

出典表示と差分レビューを成立させるための最小構成。clause の位置情報が出典表示の精度を決める。

テーブル主な列役割
documentid, sdx_row_id, sdx_file_name, doc_type, ocr_status, ocr_version, page_countSDXの1ファイルに対応。ocr_versionで処理済みバージョンを管理し、座標の追装対象を絞る
clauseid, document_id, seq, label, text, page, bbox, split_method, confidence条項1つ。labelは「第3条」等、bboxは原本上の座標(nullable)、split_methodrulellm。出典表示の実体
draftid, case_id, status, template_id, assignee, approver, approved_at作成中の申請書1件。statusが承認ゲートを制御。担当者と承認者を別に持つ
draft_fieldid, draft_id, key, value, source_clause_id, confidence, flagドラフトの1項目。source_clause_idで出典に接続、flagが要確認表示
revisionid, draft_field_id, before, after, origin, actor, reason, reviewed_at追記のみ。originaiの行はreviewed_atが入るまで承認に進めない
thread / messageid, draft_id, role, body, cited_clause_idsAI相談。引用した条項IDを保持し、後から出典を再表示できる
office_standardid, key, expected, rationale事務所標準。ドラフトとの不一致検出に使う
consentid, client_id, scope, granted_at, revoked_at依頼者の同意状態。未同意の案件はLLM送信をブロック
llm_call_logid, case_id, purpose, model, token_count, created_at送信ログ。監査と事故時の調査用
設計判断 — 座標は後から追装する
bbox はnullableとし、座標がなくても全画面が動く状態で作る。後から座標を入れる際は再分割せず、既存の条項テキストと突き合わせて座標だけを埋める。条項IDが変わらないため、差分履歴とAI相談の引用リンクが切れない。逆に再分割すると、それまでの履歴の参照先が全て壊れる。
そのために、原本PDFはR2に保持し(SDXから取り直さずに再処理できる)、ocr_version で未処理の文書を特定できるようにしておく。

4. 処理パイプライン

既存の2段構成を維持したまま、段の中身を条項単位に置き換える。将来の助言機能は4段目として追加する。

1
取り込み
SDXの新規行を検知 → 原本をR2へ複製 → OCR → 条項分割 → clauseへ格納 → 埋め込み生成 → Vectorizeへ登録。Queues経由の非同期処理。Workerの実行時間制限があるため同期にしない。
条項分割は2段構え。定型様式は規則で切り、規則で切れなかった文書のみLLMに回す。全件LLMにしないのは費用と、定型部分での精度低下を避けるため。
2
検索・選定
質問をベクトル化しVectorizeで条項を検索。ヒットした条項IDでD1とSDXを引き、案件名・条項ラベル・ページを添えて次段へ渡す。現状の文字列検索からの置き換え箇所。
3
回答生成
既存の管理画面プロンプトをそのまま使う。出典の粒度指示のみ「案件名を添える」から「案件名・条項ラベル・ページを添える」へ更新。
4
助言生成 将来
3段目とは別のプロンプト・別のUIブロックとして分ける。記録の提示と助言を同じ吹き出しに混ぜないことで、どこまでが記録でどこからが推論かが利用者に見える。段階投入も切り戻しも容易になる。
UI設計への影響
助言を将来含める方針のため、AI相談画面は「記録」と「助言」の2ブロック構成にしておく。当面は助言ブロックを非表示にし、パイプライン4段目の投入時に有効化する。画面を作り直さずに済む。

5. 画面別のデータ出所

設計済みの9画面が、それぞれどこのデータで動くか。

#画面データ出所備考
1案件ダッシュボードSDX既存シートをほぼそのまま表示
2書類取り込みSDX → R2 → D1パイプライン1段目。進捗表示が必要
3参照案件の選択Vectorize + SDX自動選択された状態で開く。選定理由と差し替えUIが必要
4AI相談・書類セット既存Worker + D1既存資産の延長。2ブロック構成に変更
5差分エディタD1(draft_field / revision新規実装。clauseの位置情報に依存
6案件比較D1 + SDX新規実装
7出典検証D1 + R2(原本PDF)page / bboxで原本の該当箇所を表示
8承認ゲートD1 → Shachihata CloudワークフローAPI経由で申請
9書き出し・引き渡しR2 + Shachihata Cloud押印済みPDFを受け取りSDXへ書き戻す
10事務所標準の確認 設計済D1(office_standard自動抽出した標準を人が承認する画面。新規で必要

6. 未確定事項

実装着手前に確定が必要なもの。上ほど影響範囲が大きい。

建設業許可の過去案件データがない
現在SDXに入っている19件は無人航空機関連が中心で、建設業許可の参照元にならない。類似検索も条項分割規則の検証も、過去案件がたまるまで成立しない。取り込む建設業許可案件の洗い出しが最初の作業。何件あるか、どこに保管されているかの確認が先。
SDX APIの認証方式とレート制限 API有 / 確認済
APIの存在は確認済み。残る確認点は、認証方式(APIキー / OAuth)、書き込み可否、ファイル列へのアップロード方法、レート制限。取り込み時は1案件で多数の呼び出しが発生するため、上限次第でQueuesの流量制御が必要になる。
条項分割の精度基準 方式決定済
規則+LLMの2段構えで確定。残る検討は、規則で切れる様式の洗い出し(現在の19件と今後の主要様式)と、LLM分割をどこまで人が確認するか。split_methodllmの条項は出典表示に「分割は自動推定」の印を付け、確認すべき箇所を絞る方針。
OCRサービスの選定 第2段階
初期はテキスト埋め込み済みPDFからの座標抽出のみ対応し、スキャン画像は座標なしで運用する。画面7はbboxがあれば矩形ハイライト、なければページ単位表示+テキスト一致箇所のハイライトに落とす。座標を返す日本語OCRサービスの選定は第2段階の判断でよい。
Shachihata Cloud のAPI連携仕様 契約確認済
ワークフローAPIは利用可能。残る確認は、申請時に渡せる項目(案件IDを候紙に保持できるか)と、決裁完了の通知方式(Webhookか定期ポーリングか)。後者が画面9の実装方式を決める。API契約の詳細は別冊「API契約仕様書」にまとめた。
同意設計の実装 方針決定済
同意設計を備える方針。実装側で必要なのは3点。依頼者ごとの同意状態を持つこと、未同意の案件はLLM送信をブロックすること、送信ログ(いつ・どの案件の・何を送ったか)を残すこと。ログは監査と事故時の調査に必要。
国外のLLMで処理する方針で確定。したがってCloudflare側のリージョン制御は要件から外し、同意取得と送信ログで担保する。
作成 2026年8月28日 / 対象: AI書類チャット(ai-doc-chat.mindgrow.workers.dev)および設計中の9画面
本書は公開情報とスクリーンショットからの推定を含む。既存Workerのソースを確認できれば精度が上がる。