実装構成設計書の3層構成を、実際の呼び出し単位に落としたもの。SDXとShachihata Cloudの仕様は未確認のため、こちら側が必要とする契約として先に書き、確認時にこの表と突き合わせる。要確認の印がある項目が、先方仕様に依存して変わりうる箇所。
SDXは案件台帳の正本。こちらは複製せず、参照とオフセットだけを持つ。書き込みは成果物の格納と状態更新の2つに限る。台帳の構造をこちらから変えない設計にすることで、SDXの既存運用に影響を出さない。
| 向き | 用途 | 必要な操作 | 呼ぶ画面 / 契機 |
|---|---|---|---|
| 読 | 案件一覧の取得 | 条件・並び順・件数指定つきの行一覧 | 画面1。更新日時降順、ページング必須 |
| 読 | 案件1件の取得 | _id指定の単行取得 | 画面1〜9すべての起点 |
| 読 | 更新差分の検知 | 更新日時での絞り込み、または変更通知 | 取り込みパイプライン1段目。5分間隔のCronを想定 |
| 読 | 添付ファイルの取得 | ファイル列からのバイナリ取得(署名URLでも可) | 取り込み時にR2へ複製。1案件で10〜40ファイル |
| 読 | 案件種類・業種のマスタ | 選択肢の一覧 | 画面3の絞り込み条件。取得不可なら固定値で持つ |
| 読 | 担当者一覧 | ユーザー情報 | 画面8の承認者選択。要確認取得できなければ手入力 |
| 書 | 成果物のアップロード | ファイル列への添付追加 | 画面9。押印済みPDFと申請書一式 |
| 書 | 案件状態の更新 | 特定列の値更新 | 画面8・9。「起案中」「承認待ち」「完了」の3値 |
| 項目 | こちらの前提 | 外れた場合の影響 |
|---|---|---|
| 認証方式 | APIキーまたはOAuthクライアント資格情報 | ユーザー単位のOAuthだと、Cron側の無人実行にサービスアカウントが要る |
| レート制限 | 毎分60回以上 | 下回るならQueuesで流量制御。取り込みの所要時間が延びる |
| ファイル列の書き込み | APIから添付を追加できる | できない場合、画面9は書き出しのダウンロードのみとし手動で格納 |
| 更新差分の取得 | 更新日時での絞り込みが可能 | 不可なら全件取得の差分比較。件数が増えると成立しない |
| カスタム列の追加 | 状態管理用の列を1つ追加できる | 不可ならD1側だけで状態を持ち、SDXは成果物の格納先に限定 |
承認フェーズの入口と出口だけを担当させる。ドラフトの中身は渡さず、書き出し済みPDFと案件IDだけを渡す。決裁完了の受け取り方が実装方式を決めるため、そこを最初に確認する。
| 向き | 用途 | 渡す / 受け取る情報 | 備考 |
|---|---|---|---|
| 出 | 承認申請の作成 | PDF、申請者、承認者、件名、外部参照ID(draft_id) | 画面8の「承認に出す」。応答で先方の申請IDを受け取りD1に保存 |
| 入 | 決裁完了の通知 | 申請ID、結果(承認/差戻し)、決裁者、日時 | 要確認 Webhookが第1候補。なければ10分間隔のポーリング |
| 入 | 押印済みPDFの取得 | 完了した申請の成果物 | R2へ保存後、SDXへ格納 |
| 入 | 申請状態の照会 | 申請IDから現在の状態 | 画面8の進捗表示。ポーリング方式ならこれが通知手段を兼ねる |
| 出 | 申請の取り下げ | 申請ID | 差戻し前に起案側が誤りに気づいた場合。要確認 対応可否 |
draft_idを持たせられるかが分かれ目。持たせられれば通知だけでドラフトを特定できる。持たせられない場合は、こちら側で申請IDとの対応表を持ち、件名に案件番号を含めて人が追える状態にしておく(【2026-0431】建設業許可申請書一式 の形式)。10画面が叩くエンドポイント。すべて/api配下、認証はCloudflare Accessのセッションを前提とする。時間のかかる処理はジョブIDを返して非同期にする。
| 画面 | エンドポイント | 返すもの / 動作 |
|---|---|---|
| 1 | GET /api/cases | 案件一覧。SDXの応答にD1の起案状態を合成 |
| 1 | GET /api/cases/:id | 案件詳細+紐づくドラフト一覧 |
| 2 | POST /api/cases/:id/ingest | 取り込み開始。job_idを返す |
| 2 | GET /api/jobs/:job_id | 進捗。{ stage, done, total, errors[] } |
| 3 | GET /api/drafts/:id/references | 自動選定された参照案件と選定理由・類似度 |
| 3 | PUT /api/drafts/:id/references | 参照案件の差し替え。以降の生成に反映 |
| 3 | GET /api/search/clauses | 条項の検索。差し替え時の候補提示に使う |
| 4 | POST /api/drafts/:id/messages | AI相談。SSEで応答。記録ブロックと助言ブロックを別イベントで送る |
| 4 | GET /api/drafts/:id/thread | 相談履歴。引用条項IDを含む |
| 4 | POST /api/drafts/:id/generate | 書類セットの生成。job_idを返す |
| 5 | GET /api/drafts/:id/fields | 全記載欄。値・出典・確信度・フラグ・未レビュー差分の有無 |
| 5 | PATCH /api/drafts/:id/fields/:key | 値の更新。revisionを追記(origin: human) |
| 5 | POST /api/drafts/:id/fields/:key/review | AI由来差分のレビュー完了。reviewed_atを記録 |
| 6 | GET /api/drafts/:id/compare | 参照案件との記載欄単位の対照 |
| 7 | GET /api/clauses/:id | 条項の全文・ページ・bbox・分割方法 |
| 7 | GET /api/documents/:id/page/:n | 原本PDFのページ画像。R2から署名URLを返す |
| 8 | GET /api/drafts/:id/gate | 承認可否と未達項目の一覧 |
| 8 | POST /api/drafts/:id/submit | Shachihataへ申請。承認者を指定 |
| 8 | POST /api/webhooks/shachihata | 決裁完了の受信。署名検証と冪等処理 |
| 9 | POST /api/drafts/:id/export | 様式一式の書き出し。job_idを返す |
| 9 | POST /api/drafts/:id/deliver | SDXへの格納と状態更新 |
| 10 | GET /api/office-standards | 抽出済み標準の一覧。状態・根拠件数つき |
| 10 | GET /api/office-standards/:id | 1件の詳細。根拠案件・一致判定・推定箇所 |
| 10 | POST /api/office-standards/:id/decide | approve / amend / reject。否認も記録に残す |
GET /api/drafts/d_8812/gate
{
"can_submit": false,
"blockers": [
{ "type": "unreviewed_ai_diff", "count": 3,
"fields": ["form4.capital", "form2.work_history.3", "form7.role_title"] },
{ "type": "standard_mismatch", "count": 1,
"standard_id": "os_014", "field": "form4.attachments",
"expected": "貸借対照表で疎明", "actual": "残高証明を添付",
"reason_required": true }
],
"warnings": [
{ "type": "low_confidence", "count": 2,
"fields": ["form2.work_history.5", "form11.branch_office"] }
]
}
blockersは承認に進めない項目、warningsは進めるが表示する項目。確信度の低さは人が読んで判断すれば足りるため警告に置く。すべてブロックにすると、ゲートを通すための形式的な操作が増えて実質が失われる。| 失敗 | 扱い | 利用者に見える形 |
|---|---|---|
| SDXが落ちている | 読みはD1のキャッシュで代替、書きはQueuesに退避して再送 | 画面1に「案件台帳の同期待ち」。起案作業は続行できる |
| OCR / 分割の失敗 | 文書単位で失敗を記録し、他の文書の処理は続ける | 画面2に失敗ファイルを列挙し、個別に再試行 |
| LLMの応答不良 | 3回まで再試行。以降は生成せずフラグを立てる | 該当欄を空欄+「自動生成できず」の印で提示。空欄のまま承認には進めない |
| 未同意の案件 | 送信前にconsentを確認しブロック | 画面4で相談を開始する時点で「同意の記録がありません」を表示 |
| Shachihata通知の欠落 | 申請から24時間状態が変わらない場合はポーリングで補完 | 画面8に「確認中」。人が先方画面を見に行かずに済む |
| Webhookの重複配信 | 申請ID+結果を冪等性キーとして2回目以降を無視 | 表示上の変化なし |
先方への確認は、依存の深いものから。上2つが決まらないと着手できない範囲が広い。