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: 型共有・エラーハンドリング・共通ユーティリティ・設定・テスト共通資産を集約し、アプリ間で整合性を維持。
    • マイルストーン1: 雛形実装のゴール

      • 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 も骨組みを追加 (任意だが推奨)。

      実装ステップ案

      1. ルート設定: Bun workspaces・TSConfig・prettier・ESLint/Tailwind 共通設定を整備。
      2. 各 app の雛形: Next.js プロジェクト, Hono サーバー, BullMQ ワーカーのエントリーポイントを最小限で用意。
      3. packages の空モジュール: context サブディレクトリと index.ts を作成し、コメントで TODO を記述。
      4. スクリプト/CI: package.json スクリプトと簡易 CI (必要なら) を追加し、実行確認。
      5. README/ドキュメント: ルート README にアーキテクチャ概要と次フェーズ (ドメイン/イベント実装) の指針を記述。

      次マイルストーン候補 (雛形完成後)

      1. ドキュメント分類/処理のイベント・コマンド定義と最小ドメインロジック追加。
      2. Prisma イベントストアスキーマと PostgreSQL 接続を packages/event-store に実装。
      3. Human-in-the-loop ワークフローと Read Model 投影の骨組みを packages/workflows に実装。