# Built-in `system` — System — quyền hạ tầng (manifest-only)

> 08/7/2026 · **Built-in module — WS runtime** (sẵn lúc boot, không cài qua .ogapp) · Bản HTML: [system-builtin.html](system-builtin.html) · [Review tổng core](core-review-2026-07-07.md) · [Quan hệ module](../quan-he-module-2026-07-07.md)
>
> 🎯 **Pattern chuẩn — mở rộng dần.** Hiện trạng: chỉ phủ install/delete module. Đích = mọi năng lực hạ tầng WS đều có permission trong taxonomy, không hardcode ngoài luồng.

## 1. Vai trò
Module **manifest-only** (không code): khai **permission cho năng lực hạ tầng** vào taxonomy 4 cấp để RBAC gán được — route thật ở core. Nguyên tắc: **thêm năng lực core mới = thêm 1 dòng permission ở system**.

## 2. Feature / BO / Action

| Feature | BO chính | Action |
|---|---|---|
| `modules` | Quản lý ứng dụng (cài/gỡ/bật/tắt) | view·**install**·**delete** |
| `backup` | Backup per-WS (gắn P3 review) | view·**restore** |
| `audit` | Nhật ký hệ thống (khi có audit platform) | view·export |
| `health` | Tình trạng module / kết nối | view |
| `notify-channel` | Cấu hình kênh gửi (Zalo OA/SMS) | view·configure |

## 3. Manifest — khai báo permissions

Permission key: `system.<group>.<feature>.<action>`; `fields`/`scopeVars` theo plan data-scope (manifest v1.1).

```json
{
  "key": "system",
  "name": "Hệ thống (manifest-only)",
  "version": "1.1.0 (đích)",
  "permissions": [
    {
      "group": "admin",
      "feature": "modules",
      "label": "Quản lý ứng dụng",
      "actions": [
        "view",
        "install",
        "delete"
      ]
    },
    {
      "group": "admin",
      "feature": "backup",
      "label": "Backup workspace",
      "actions": [
        "view",
        "restore"
      ]
    },
    {
      "group": "admin",
      "feature": "audit",
      "label": "Nhật ký hệ thống",
      "actions": [
        "view",
        "export"
      ]
    },
    {
      "group": "admin",
      "feature": "health",
      "label": "Tình trạng module",
      "actions": [
        "view"
      ]
    },
    {
      "group": "admin",
      "feature": "notify-channel",
      "label": "Kênh thông báo",
      "actions": [
        "view",
        "configure"
      ]
    }
  ]
}
```

## 4. Dữ liệu chính

### Danh mục quyền hạ tầng (đích)
| Trường | Kiểu | Bắt buộc | Ghi chú |
|---|---|---|---|
| modules.view / install / delete | permission | ✔ | Đã có — routes/modules.js |
| backup.view / restore | permission | ✔ | Thêm cùng P3 (pg_dump per-WS) |
| audit.view / export | permission | — | Thêm khi có audit platform |
| health.view | permission | — | Health-check module sau mount |
| notify-channel.configure | permission | — | Cấu hình Zalo OA/SMS tách khỏi QTHT chung |

### Cơ chế
| Trường | Kiểu | Bắt buộc | Ghi chú |
|---|---|---|---|
| Permission key | system.admin.. | ✔ | Cùng format module thường |
| Đăng ký | stub từ manifest | ✔ | runtime-core — không models/routes |
| Gán mặc định | role owner/QTHT | ✔ | Không rơi vào role nghiệp vụ |

## 5. Ma trận quyền — vai trò × feature

| Feature | QTHT | GIAM_DOC | QL_DAO_TAO | TUYEN_SINH | GIAO_VU | GIAO_VIEN | KE_TOAN | NHAN_SU |
|---|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|
| `modules` | W | R | — | — | — | — | — | — |
| `backup` | W | R | — | — | — | — | — | — |
| `audit` | R | R | — | — | — | — | — | — |
| `health` | R | R | — | — | — | — | — | — |
| `notify-channel` | W | — | — | — | — | — | — | — |

¹ chỉ bản ghi mình phụ trách · ² chỉ của chính mình · **W·A** = tạo/sửa + duyệt

## 6. Quy tắc nghiệp vụ
1. Mọi route hạ tầng mới **bắt buộc** gate bằng permission khai ở system — không hardcode ngoài taxonomy
2. Quyền system mặc định chỉ gán owner/QTHT
3. Feature backup/audit/health thêm dần theo tiến độ — bump version manifest như module thường

## 7. Liên kết chéo
- **rt-host** — thực thi install/delete/health
- **cp-workspace** — backup per-WS (P3)
- **notify** — kênh gửi
- **cp-rbac** — catalog nhận quyền

## 8. Câu hỏi mở
- Chốt danh sách feature hạ tầng đợt đầu: modules + backup + health?
