EDITABLE SAMPLE / VERSION 1.0

架空案件の記入例です。企業内でコピー・編集して利用できます。

この文稿をダウンロード(Markdown) ↓

詳細設計・データ定義・タスクサンプル

文書ID: DESIGN-014 / 版: 1.0 / 関連: REQ-014〜016、API-014、ADR-001 / 状態: 記入例・未承認

架空案件の設計例。型とSQLは説明用であり、自社DB・認証・運用制約で検証する必要があります。

工程定義

1. データモデル

テーブル型の例制約
expensesidvarchar(40)主キー
expensesapplicant_idvarchar(40)必須、利用者参照
expensesstatusvarchar(16)submitted / approved
expensesapproved_byvarchar(40)未承認時NULL
expensesapproved_attimestamp未承認時NULL、UTC
approval_auditidvarchar(40)主キー
approval_auditexpense_idvarchar(40)外部キー、この例では一申請一承認で一意
approval_auditactor_idvarchar(40)必須
approval_auditoccurred_attimestamp必須、UTC

関係: expenses 1件 → approval_audit 0〜1件。多段階承認を採用する企業では、承認段階IDを追加して一意制約と状態モデルを再設計する。

2. 型定義例

type ExpenseStatus = 'submitted' | 'approved';
type ApprovalResult = {
  expenseId: string;
  status: 'approved';
  approvedBy: string;
};

3. 処理仕様

  1. 認証を検証。不成立なら401。承認権限なしなら403 FORBIDDEN。
  2. トランザクション開始。閲覧範囲内の申請を行ロック付きで取得。存在しなければ404。
  3. applicant_idと実行者IDが同じなら403 SELF_APPROVALで終了。
  4. statusがsubmitted以外なら409 ALREADY_PROCESSEDで終了。
  5. approvedへ更新し、同じトランザクションで監査記録を作成。
  6. コミット後に200を返す。保存失敗はロールバックし503 SAVE_FAILED。

同時要求は行ロックと状態再確認で制御する。再送された承認要求は409とし、クライアントは最新状態を再取得する。この例では同じ要求へ200を再返却する方式は採用しない。

4. 契約テスト定義

CT-014-01: 成功レスポンスにexpenseId、status、approvedByが存在し、statusはapproved。

CT-014-02: 自己承認の403レスポンスにcode=SELF_APPROVALを含み、DBは不変。

CT-014-03: 本文に他人のactorIdを入れても本人性の根拠に使われない。

5. 実装タスク・要件追跡

タスク対象要件検証
TASK-014-A権限と自己承認判定REQ-014 / 015UT-014-01〜03
TASK-014-B排他と監査記録REQ-016IT-014-02 / 03
TASK-014-CUIの結果とエラー表示REQ-014 / 015ST-014-01 / 02

6. 移行・復旧設計

本例ではapproved_by、approved_atとapproval_auditを追加。既存データへの影響を検証環境で調査し、過去の承認者が不明な行を推測で補完しない。アプリ切戻し後も新しい監査記録を保持し、破壊的な列削除は別変更とする。

自社用確認欄

DB・分離レベル: {{DATABASE_POLICY}} / 部門別権限: {{AUTHORIZATION_POLICY}} / 過去データ移行: {{MIGRATION_POLICY}}

レビュー: {{TECH_OWNER}} / 判定: 未承認 / 指摘と対応: {{REVIEW_NOTES}}

全11文稿とZIPのダウンロードへ →

無料相談