
flowchart LR
%% レイヤ構成
subgraph Frontend
FE[React TSX UI<br>トップ一覧 詳細 仕様入力<br>言語切替 JA EN]
end
subgraph API_BFF
API[REST OpenAPI<br>GET 一覧 詳細 検索<br>PATCH 保存 差分検知]
end
subgraph Postgres
PGv[v_models などの i18n マージビュー<br>COALESCE で英語優先]
PGd[devp_* 原本テーブル群<br>model field view tab menu button relation]
PGi[devp_i18n 翻訳テーブル<br>entity_table entity_id field_key locale text status updated_at]
PGc[devp_chroma_cursor カーソル<br>last_synced_at]
end
subgraph Batch_Local
FET[fetch_needs_update<br>needs_update を取得]
WKR[worker_translate<br>翻訳して upsert]
EXP[export_incremental<br>増分抽出 JSONL または upsert]
end
subgraph Vector_Store
CH[ChromaDB collection<br>id content metadata]
end
subgraph External_Links
GH[GitHub コード参照]
ODOO[Odoo 画面リンク]
end
%% 主なフロー
FE <--> API
API -->|SQL with locale| PGv
PGv --> API
API -->|原本読み書き| PGd
API -->|翻訳参照と更新指示| PGi
PGi -->|status needs_update| FET
FET --> WKR
WKR -->|翻訳 upsert auto| PGi
PGd --> EXP
PGi --> EXP
PGc --> EXP
EXP -->|upsert or JSONL| CH
EXP -->|カーソル更新| PGc
%% 参照リンク
FE -.-> GH
FE -.-> ODOO
%% オプション AWS 置換
subgraph AWS_optional
EVB[EventBridge スケジュール]
SQS[SQS キュー DLQ]
Lf[Lambda Fetcher]
Lw[Lambda Worker]
end
FET -.-> EVB
EVB -.-> Lf
Lf -.-> SQS
SQS -.-> Lw
Lw -.-> PGi
Odoo v18 + Development Portal Design
1. System Components
- Frontend (TSX shell)
- Provides UI for browsing and registering customization details.
- Interfaces with backend APIs to fetch and update metadata.
- Handles multilingual support (Japanese ↔ English) via translation batch.
- Backend (FastAPI / Node backend)
- Exposes REST endpoints for CRUD operations on customization metadata.
- Manages database updates and communicates with ChromaDB.
- Executes translation batch jobs (on-demand or scheduled).
- Database (PostgreSQL)
- Stores metadata of models, fields, views, menus, smart buttons, tabs.
- Tracks timestamps for incremental updates (only load changed/added records).
- Provides reference data for Odoo integration.
- ChromaDB (Vector DB)
- Stores embeddings of customization metadata.
- Used for semantic search and AI-assisted SQL generation.
- Incrementally updated when new or modified entities are detected.
- Odoo v18
- ERP system running locally.
- Provides the source of truth for models and customizations.
- Exposes entities via PostgreSQL or Odoo APIs for synchronization.
2. Functional Flow
- Odoo Customizations
Users create/modify fields, views, menus, or smart buttons in Odoo v18. - Data Extraction
Backend queries Odoo’s DB/API and stores metadata in the Portal DB. - Incremental Sync
Only new or updated entities (based on timestamps or hash checks) are embedded and pushed to ChromaDB. - Translation Batch
Batch job detects untranslated records, runs translation (local first, AWS later), and updates DB. - Portal UI
Frontend displays structured customization metadata with toggleable multilingual views. - AI/ChromaDB Usage
Developers or consultants query Portal → AI retrieves related definitions → supports SQL generation or documentation.
3. Implementation Checklist (Minimal Viable Path)
A. Environment
- Install Odoo v18 (local Docker or standard setup).
- Setup PostgreSQL (metadata DB, separate from Odoo DB).
- Setup ChromaDB locally.
- Prepare FastAPI backend skeleton.
B. Database & Models
- Define
models,fields,views,tabs,menus,smart_buttonstables. - Add
created_at,updated_atcolumns for incremental sync. - Add
translation_statusflags.
C. Backend
- Implement CRUD APIs for all tables.
- Implement incremental sync logic (compare timestamps/hash).
- Implement translation batch job (local: OpenAI API; future: AWS Translate).
- Implement ChromaDB embedding update (only for changed/new records).
D. Frontend (TSX)
- Build table-based UI with filtering & search.
- Add language toggle (JP/EN).
- Add forms for manual entry/update.
- Display sync/translation status indicators.
E. ChromaDB
- Create embedding pipeline for new/changed metadata.
- Provide API for semantic search & retrieval.
- Validate embeddings against sample queries.
F. Testing & Validation
- Unit test DB → Backend sync.
- Unit test translation batch.
- Unit test incremental ChromaDB updates.
- End-to-end test: Add new Odoo field → Portal → Translation → ChromaDB → Search.
1) 目標(最小で完成)
- Odoo と同一の Postgres を使い、devp_* テーブルで開発情報を管理
- Portal は TSXフロント + BFF(API) + 翻訳バッチ で構成
- 画面は
?locale=ja_JP|en_USで表示言語を切替(英語は i18n 参照、無ければ原本)
2) ローカル構成(docker-compose骨子)
version: "3.9"
services:
pg:
image: postgres:15
environment:
POSTGRES_DB: devp
POSTGRES_USER: devp
POSTGRES_PASSWORD: devp
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data
odoo:
image: odoo:18
environment:
HOST: pg
USER: devp
PASSWORD: devp
DATABASE: devp # Share DB with Odoo + Portal
ports:
- "8069:8069"
depends_on:
- pg
api:
build: ./api # BFF (FastAPI etc.)
environment:
PG_DSN: postgresql://devp:devp@pg:5432/devp
ports:
- "8000:8000"
depends_on:
- pg
web:
build: ./web # TSX (Vite etc.)
environment:
VITE_API_BASE: http://localhost:8000
ports:
- "5173:5173"
depends_on:
- api
chroma: # Start only if needed for learning
image: chromadb/chroma:latest
ports:
- "8001:8000"
volumes:
pgdata: {}
3) DB(DDLと最低限の準備)
devp_model, devp_field, devp_view_hdr, devp_tab_hdr, devp_tab_detail, devp_menu, devp_smart_button, devp_relation- 翻訳用:
devp_i18n(entity_table, entity_id, field_key, locale, text, status, updated_at, source_hash) - 速度系INDEX:
devp_i18n(entity_table, entity_id, field_key, locale)devp_i18n(status)
- 増分学習カーソル(必要時):
devp_chroma_cursor
原本テーブルに 表示名/説明/note系のカラムが無ければ追加(
display_name,description,note,detail_noteなど)。
4) API(BFF)最小エンドポイント
読み取り(全て ?locale= 対応。サーバ側で i18n を COALESCE マージ)
GET /models?query=&domain=&status=&limit=&offset=GET /models/{id}GET /models/{id}/fields|views|tabs|buttons|menus|relationsGET /views/{id}/header|common|type
更新(保存→再翻訳トリガ)
PATCH /models/{id}ほか編集系
→ 原本更新後、対象フィールドのdevp_i18nをstatus='needs_update'で upsert(source_hash更新)
学習(必要時)
POST /export/chroma?locale=en_US(増分抽出→Chroma upsert or JSONL返却)
i18nマージは SQL で
COALESCE(t_en.text, m.display_name) AS display_nameの形を徹底。
5) フロント(TSX)やること
- ルーティング:
/(TOP)→/m/:id(モデル詳細)→/v/:id(View詳細) - 言語トグル:UIで
ja/en→ API へ?locale=付与(React Query のキーに含める) - 一覧・詳細の列名は 画面項目=DB列名 に合わせ済み(そのまま利用)
- タブのフロート詳細:初回取得した詳細をメモ化
- 編集フォーム:保存時に PATCH → 成功トースト「翻訳キュー投入済」
6) 翻訳バッチ(ローカル運用)
- 差分検知:PATCH 時に対象
devp_i18nをneeds_updateで upsert - 実行:
python fetch_needs_update.py | python worker_translate.pyを cron 5分毎 - 失敗は
status='error'記録(後から再実行APIで復帰)
7) 学習(Chroma)※後回し可
- 増分抽出:
devp_chroma_cursorを使い 更新/追加のみを JSONL 出力 - upsert:BFF経由 or ツールで upsert
- メタデータに
model_name, entity_table, localeを入れて検索品質を担保
8) 開発の流れ(最短)
docker compose up -d- DDL 適用 → サンプルデータ投入
- API:
GET /modelsとGET /models/{id}を i18n マージで実装 - フロント:TOP→詳細のデータ取得をAPIに接続、言語トグル導入
- 編集系
PATCH実装 →needs_updateupsert を確認 - ローカル翻訳バッチを cron で回し、英語表示が反映されることを確認
- (必要なら)増分エクスポート → Chroma upsert
9) 完了判定(DoD)
- TOP・詳細が
?locale=en_USで英語表示、未翻訳は日本語フォールバック - 編集→保存で対象項目が 翻訳キュー入り→英語表示に反映
- Odoo の画面リンク・GitHub 参照が動作
- エラー時の
status='error'が可視化でき、再実行で復帰可能
フォルダ/ファイル構成
dev-portal/
├─ docker-compose.yml # pg + api(ローカル動作用)
├─ .env.example # PG_DSN など環境変数のサンプル
├─ db/
│ └─ init/
│ └─ 001_schema.sql # 原本 + i18n のDDL(前回の完成版)
└─ api/
├─ Dockerfile
├─ requirements.txt
├─ app/
│ ├─ __init__.py
│ ├─ main.py # FastAPI起動、Swagger有効化、CORS
│ ├─ config.py # env読込(PG_DSNなど)
│ ├─ db.py # psycopg コネクション
│ ├─ schemas.py # Pydanticスキーマ
│ ├─ services/
│ │ ├─ i18n.py # COALESCE参照SQL, 再翻訳キュー登録
│ │ └─ chroma_export.py # (任意)増分エクスポートロジック
│ └─ routers/
│ ├─ models.py # /models, /models/{id}, /models/{id}/fields
│ └─ fields.py # /fields/{id}
└─ tests/
└─ test_smoke.py # スモークテスト(任意)
コメントを残す