Giao diện
Cơ sở dữ liệu
Cloudflare D1, database conan-compass.
| File | Nội dung |
|---|---|
0001_init.sql | Bảng lõi: năng lực, Brand, đánh giá, người dùng, nhật ký |
0002_seed.sql | Sinh tự động từ scripts/model.mjs |
0003_execution.sql | Tầng thực thi và chuyển đổi |
0004_execution_seed.sql | Sinh tự động từ scripts/execution.mjs |
capabilities — mô hình chuẩn
| Cột | Kiểu | Ghi chú |
|---|---|---|
id | TEXT PK | CAP-02-01-03 — bản thân ID thể hiện cây |
code | TEXT UNIQUE | slug dùng trong URL |
level | INTEGER | 1–3 |
parent_id | TEXT FK | NULL với L1 |
sort | INTEGER | thứ tự hiển thị |
name_en / name_vi | TEXT | song ngữ |
definition_en / definition_vi | TEXT | mô tả WHAT |
status | TEXT | active · draft · deprecated |
Khoá ngoại parent_id dùng ON DELETE RESTRICT: không thể xoá một năng lực còn con.
brands
id dạng BRD-nemo12, code là slug, tên và mô tả song ngữ, status là active · draft · archived.
brand_capabilities — thực tế của Brand
Một dòng ở đây nghĩa là Brand đã kích hoạt năng lực đó.
| Cột | Ghi chú |
|---|---|
importance, priority, health, maturity, target_maturity | 1–5, cho phép NULL |
likelihood, impact, detectability | 1–5, ba nguyên nhân của risk |
owner | tên người chịu trách nhiệm |
rationale | bắt buộc khi priority = 5 |
notes | ghi chú tự do |
UNIQUE (brand_id, capability_id) đảm bảo mỗi Brand chỉ có một đánh giá cho mỗi năng lực.
Điểm rủi ro không được lưu thành cột. Nó là tích của ba nguyên nhân và được tính khi hiển thị — lưu lại chỉ tạo cơ hội để nó lệch khỏi nguồn.
users
| Cột | Ghi chú |
|---|---|
email | PK, khớp với email trong Access JWT |
role | architect · executive · brand_owner · viewer |
brand_id | phạm vi của brand_owner |
audit_log
actor, action, entity, entity_id, before, after (JSON), created_at. Mọi thao tác ghi đều tạo một dòng. Bảng này không bao giờ bị xoá.
Tầng thực thi (0003_execution.sql)
| Bảng | Vai trò |
|---|---|
value_streams, value_stream_stages | Chuỗi giá trị và các chặng |
stage_capabilities | Chặng phụ thuộc vào năng lực nào |
processes | Quy trình L4, gắn với một năng lực, brand_id rỗng nghĩa là dùng chung |
activities | Bước trong quy trình, có thứ tự |
applications | Danh mục ứng dụng, có vòng đời |
data_entities | Thực thể dữ liệu, có steward và mức phân loại |
technologies | Công nghệ nền |
capability_applications, capability_data | Năng lực ↔ ứng dụng, năng lực ↔ dữ liệu |
application_technologies, application_data | Ứng dụng ↔ công nghệ, ứng dụng ↔ dữ liệu |
Công nghệ không có bảng nối trực tiếp tới năng lực. Quan hệ đó được suy ra qua ứng dụng, nên không thể xuất hiện mâu thuẫn giữa hai đường dẫn.
Chuyển đổi
| Bảng | Vai trò |
|---|---|
initiatives | Sáng kiến, trạng thái, giai đoạn, đầu tư, tiến độ |
initiative_capabilities | Sáng kiến cải thiện năng lực nào |
kpis | Baseline / current / target cho một năng lực, tuỳ chọn theo Brand |
Quy ước brand_id
Với processes, applications, value_streams, initiatives và kpis, brand_id = NULL nghĩa là dùng chung toàn doanh nghiệp, không phải "thiếu dữ liệu". Giao diện hiển thị nhãn Dùng chung, và khi xem ở phạm vi một Brand thì các bản ghi dùng chung vẫn hiện.
Nạp lại dữ liệu
bash
cd api.conan1.com
node scripts/seed.mjs # sinh lại 0002 và 0004 từ scripts/model.mjs + scripts/execution.mjs
npm run db:local # nạp toàn bộ migrations vào D1 local
npm run db:remote # nạp vào D1 productionDANGER
Các file seed bắt đầu bằng DROP TABLE IF EXISTS và DELETE FROM. Chạy chúng trên production sẽ xoá sạch dữ liệu hiện có. Chỉ dùng khi khởi tạo lần đầu, hoặc khi chủ đích muốn dựng lại từ đầu. Thay đổi schema về sau nên viết thành file migration mới, tăng số thứ tự.