New_Engry_System_Architecture
新ESのアーキテクチャー
graph TD
subgraph Apps
Web[apps/web]
Api[apps/api]
Worker[apps/worker]
end
subgraph Packages
subgraph Shared
SharedPkg[packages/shared]
end
subgraph Domain
DocClass[packages/domain/document-classification]
DocProc[packages/domain/document-processing]
HumanLoop[packages/domain/human-loop]
Training[packages/domain/training-feedback]
end
subgraph Workflows
DocLifecycle[packages/workflows/document-lifecycle]
Retraining[packages/workflows/retraining]
end
subgraph Adapters
ClassAdapter[packages/adapters/document-classification]
ProcAdapter[packages/adapters/document-processing]
HumanAdapter[packages/adapters/human-loop]
TrainingAdapter[packages/adapters/training-feedback]
InfraShared[packages/adapters/shared]
end
subgraph EventStore
PgStore[packages/event-store/postgres]
StoreIface[packages/event-store/interfaces]
end
end
Web --> SharedPkg
Api --> SharedPkg
Api --> DocClass
Api --> DocProc
Api --> HumanLoop
Api --> Training
Api --> DocLifecycle
Worker --> SharedPkg
Worker --> DocClass
Worker --> DocProc
Worker --> HumanLoop
Worker --> Training
Worker --> DocLifecycle
Worker --> Retraining
DocLifecycle --> DocClass
DocLifecycle --> DocProc
DocLifecycle --> HumanLoop
DocLifecycle --> ClassAdapter
DocLifecycle --> ProcAdapter
DocLifecycle --> HumanAdapter
DocLifecycle --> PgStore
Retraining --> Training
Retraining --> TrainingAdapter
Retraining --> PgStore
DocClass --> SharedPkg
DocProc --> SharedPkg
HumanLoop --> SharedPkg
Training --> SharedPkg
ClassAdapter --> SharedPkg
ClassAdapter --> DocClass
ProcAdapter --> SharedPkg
ProcAdapter --> DocProc
HumanAdapter --> SharedPkg
HumanAdapter --> HumanLoop
TrainingAdapter --> SharedPkg
TrainingAdapter --> Training
InfraShared --> SharedPkg
PgStore --> SharedPkg
PgStore --> StoreIface
PgStore --> DocClass
PgStore --> DocProc
PgStore --> HumanLoop
PgStore --> Training
StoreIface --> SharedPkg
システム概要
- AI・OCR・Human-in-the-loop を組み合わせ、請求書含む複数種別の書類を自動分類→項目抽出→人手確認→確定データ化するワークフローを提供。
- Event Sourcing + CQRS を採用し、書類分類や抽出結果をイベントとして記録して再処理・再学習に活用。Human-in-the-loop の操作履歴もイベント化して精度改善につなげる。
- Next.js UI はオペレーター向けレビュー画面、Hono API は Command/Query 問い合わせ、BullMQ Worker は非同期ジョブ・投影更新・モデル呼び出しを担当。
- ドメインロジックや外部連携は Bun モノレポ内の context 別パッケージとして整理し、種別追加やモデル切替に強い構成を目指す。
マイルストーン1 (雛形構築)
- Bun workspace 初期化 (bunfig.toml, ルート package.json, 共通 tsconfig.json)。
- apps:
- apps/web: Next.js App Router skeleton、Tailwind/shadcn 設定ファイルのみ。
- apps/api: Hono エントリポイントと /health ルート。
- apps/worker: BullMQ Worker のスタブ実装 (キュー名とログ出力のみ)。
- packages: 空構造と index.ts スタブを用意。
- domain(document-classification, document-processing, human-loop, training-feedback ディレクトリのみ、TODO コメント)。
- adapters(context ごとのサブフォルダと index.ts)。
- event-store(interfaces, postgres 下にプレースホルダ)。
- workflows(document-lifecycle, retraining)。
- shared(dtos, schemas, utils/neverthrow, config など)。
- infra/, prisma/ に README/コメントで今後のタスクを明記。
- package.json に dev:web, dev:api, dev:worker, lint, typecheck などのスクリプト追加。
- ESLint/Prettier/Tailwind 共通設定、必要なら簡易 CI ワークフローを配置。
- ルート README にアーキテクチャ概要と次フェーズの指針を記載。
アーキテクチャ概要
- Bun モノレポ: apps に実行物 (Next.js UI・Hono API・BullMQ Worker)、packages に共有ロジック、infra にローンチ/DB/Redis 設定、tools に運用スクリプト。
- レイヤ区分: packages/domain (bounded context: 書類分類・データ化・ヒューマンループ・再学習)、packages/adapters (外部サービス/DB 接続の context 別実装)、packages/workflows (ライフサイクル/再学習オーケストレーション)、packages/event-store (PostgreSQL+Prisma のイベントストア実装)、packages/shared (DTO・スキーマ・neverthrow ユーティリティ)。
- Event Sourcing/CQRS: Command→イベント記録→Read Model を apps/api/apps/worker が分担し、packages/workflows が Human-in-the-loop と非同期処理を束ねる設計。
- ドキュメント種別拡張: context ごとのディレクトリ/パッケージで抽象化し、種別追加時は packages/domain/document-processing/
等を増やすだけで横展開可能。 - packages/shared: 型共有・エラーハンドリング・共通ユーティリティ・設定・テスト共通資産を集約し、アプリ間で整合性を維持。
- Bun workspaces 初期化 (bunfig.toml, ルート package.json, 共通 tsconfig.json)。
- ディレクトリおよび空パッケージ作成:
- apps/web (Next.js App Router skelet, Tailwind/shadcn 用設定ファイルのみ)。
- apps/api (Hono エントリポイントと最低限の health check ルート)。
- apps/worker (BullMQ ワーカーの骨組みとスタブキュー)。
- packages/domain 以下に context ディレクトリだけ作成し、index.ts でエクスポートをスタブ化。
- packages/adapters, packages/workflows, packages/event-store, packages/shared も同様に空構造とエントリーポイントを定義。
- 共通 ESLint/Prettier/Tailwind 設定 (Bun 用 eslint.config.js 等) を追加。
- Prisma/infra はまだ実装せず、infra/README.md と prisma/schema.prisma に TODO コメント。
- package.json workspace 設定に apps/* と packages/* を登録し、基本スクリプト (bun run dev:web, dev:api, dev:worker, lint, typecheck) を記述。
- CI 用に bun run lint / bun run typecheck を実行する GitHub Actions も骨組みを追加 (任意だが推奨)。
- ルート設定: Bun workspaces・TSConfig・prettier・ESLint/Tailwind 共通設定を整備。
- 各 app の雛形: Next.js プロジェクト, Hono サーバー, BullMQ ワーカーのエントリーポイントを最小限で用意。
- packages の空モジュール: context サブディレクトリと index.ts を作成し、コメントで TODO を記述。
- スクリプト/CI: package.json スクリプトと簡易 CI (必要なら) を追加し、実行確認。
- README/ドキュメント: ルート README にアーキテクチャ概要と次フェーズ (ドメイン/イベント実装) の指針を記述。
- ドキュメント分類/処理のイベント・コマンド定義と最小ドメインロジック追加。
- Prisma イベントストアスキーマと PostgreSQL 接続を packages/event-store に実装。
- Human-in-the-loop ワークフローと Read Model 投影の骨組みを packages/workflows に実装。
マイルストーン1: 雛形実装のゴール
実装ステップ案
次マイルストーン候補 (雛形完成後)