読み込み中
豆知識
公開・確定した書類は消さず、電子帳簿保存法の保存期間と監査証跡を守ります。ロック・無効化・復元など、J-GAAP に沿った書類ライフサイクルの実装メモです。
本文は英語のエンジニア向け仕様です。 保存の考え方だけ知りたい方は、セキュリティ/コンプライアンスの概要から読んでください。
Purpose: Prevent accidental edits on finalized documents.
UI Location: Document Viewer Header → More Actions (⋮) → ロック/ロック解除
Behavior:
API:
PATCH /api/documents/{documentId}/lock
Body: { "isLocked": boolean }
Frontend Files:
src/features/document/components/document-viewer-header.tsx - Lock toggle UIsrc/features/document/components/document-viewer.tsx - Lock mutation handlersrc/features/document/apis.ts - toggleLock() API functionsrc/features/document/queries.ts - useToggleLockMutation() hookPurpose: Mark documents as deleted without removing data (電子帳簿保存法 compliance).
UI Location:
Behavior:
deleted_at and deleted_by fieldsAPI:
DELETE /api/documents/{documentId}
Frontend Files:
src/features/document-list/components/document-list-modal.tsx - Delete button UIsrc/features/document/apis.ts - softDelete() API functionsrc/features/document/queries.ts - useSoftDeleteMutation() hookPurpose: Restore soft-deleted documents.
UI Location: Document List Modal → Restore button (on deleted documents)
Behavior:
deleted_at and deleted_by fieldsAPI:
POST /api/documents/{documentId}/restore
Frontend Files:
src/features/document-list/components/document-list-modal.tsx - Restore button UIsrc/features/document/apis.ts - restore() API functionsrc/features/document/queries.ts - useRestoreMutation() hookPurpose: Void accounting documents with documented reason (required for J-GAAP compliance when deletion is not allowed).
UI Location: Document Viewer Header → More Actions (⋮) → 書類を無効化
Behavior:
is_voided, voided_at, voided_by, void_reason fieldsAPI:
POST /api/documents/{documentId}/void
Body: { "reason": "void reason (required)" }
Frontend Files:
src/features/document/components/document-viewer-header.tsx - Void button UIsrc/features/document/components/document-viewer.tsx - Void mutation handlersrc/features/document/apis.ts - voidDocument() API functionsrc/features/document/queries.ts - useVoidDocumentMutation() hookPurpose: Create draft copies from existing documents for templating.
UI Location: Document Viewer Header → More Actions (⋮) → テンプレート複製
Behavior:
API:
POST /api/documents/{documentId}/duplicate
Frontend Files:
src/features/document/components/document-viewer-header.tsx - Duplicate button UIsrc/features/document/components/document-viewer.tsx - Duplicate mutation handlersrc/features/document/apis.ts - duplicateDocument() API functionsrc/features/document/queries.ts - useDuplicateDocumentMutation() hookPurpose: View complete audit trail for document operations.
UI Location: Document Viewer Header → More Actions (⋮) → 変更履歴
Behavior:
API:
GET /api/documents/{documentId}/activities
Frontend Files:
src/features/document/components/document-activity-log-panel.tsx - Activity log panel UIsrc/features/document/apis.ts - getActivities() API functionsrc/features/document/queries.ts - useGetDocumentActivitiesQuery() hookPurpose: Perform operations on multiple documents at once.
UI Location: Document List Modal → Select documents → Bulk Actions Bar
Features:
Behavior:
API:
PATCH /api/documents/bulk/lock
Body: { "documentIds": string[], "isLocked": boolean }
DELETE /api/documents/bulk
Body: { "documentIds": string[] }
Frontend Files:
src/features/document-list/components/document-list-modal.tsx - Bulk selection UIsrc/features/document/apis.ts - bulkLock(), bulkDelete() API functionssrc/features/document/queries.ts - useBulkLockMutation(), useBulkDeleteMutation() hooksPurpose: Toggle visibility of soft-deleted documents.
UI Location: Document List Modal → Stats bar → Toggle switch
Behavior:
Frontend Implementation:
include_deleted query parameter-- Soft delete fields
deleted_at TIMESTAMPTZ,
deleted_by UUID REFERENCES auth.users(id),
-- Void fields (for J-GAAP compliance)
is_voided BOOLEAN DEFAULT FALSE,
voided_at TIMESTAMPTZ,
voided_by UUID REFERENCES auth.users(id),
void_reason TEXT,
-- Lock field
is_locked BOOLEAN DEFAULT FALSE,
-- Indexes
CREATE INDEX idx_documents_deleted ON documents(is_deleted);
CREATE INDEX idx_documents_voided ON documents(is_voided);
CREATE INDEX idx_documents_user_deleted ON documents(user_id, is_deleted);
| Parameter | Type | Description |
|---|---|---|
type |
string | Filter by document type |
page |
number | Page number (default: 1) |
pageSize |
number | Items per page (default: 20) |
include_deleted |
boolean | Include soft-deleted documents |
The header toolbar organizes actions logically:
Row 1: Breadcrumb navigation
Row 2 (Left to Right):
Enhanced with J-GAAP features:
Header:
Document Row:
Bulk Actions Bar (appears when documents selected):
| Action | Success | Error |
|---|---|---|
| Lock | ドキュメントをロックしました | ロック状態の変更に失敗しました |
| Unlock | ドキュメントのロックを解除しました | ロック状態の変更に失敗しました |
| Delete | ドキュメントを削除しました | 削除に失敗しました |
| Restore | ドキュメントを復元しました | 復元に失敗しました |
| Void | ドキュメントを無効化しました | 無効化に失敗しました |
| Duplicate | ドキュメントを複製しました | 複製に失敗しました |
| Bulk Lock | X件のドキュメントをロックしました | 一括ロックに失敗しました |
| Bulk Delete | X件のドキュメントを削除しました | 一括削除に失敗しました |
docs/BACKEND-USER-ACTIVITY-SCHEMA.md - User activity tracking schemadocs/AI-DOCUMENT-GENERATION-GUIDE.md - AI document generationREADME.md - Project overview and API reference読み込み中
豆知識