# Built-in `org` — Tổ chức (built-in)

> 08/7/2026 · **Built-in module — WS runtime** (sẵn lúc boot, không cài qua .ogapp) · Bản HTML: [org-builtin.html](org-builtin.html) · [Review tổng core](core-review-2026-07-07.md) · [Quan hệ module](../quan-he-module-2026-07-07.md)
>
> 🎯 **Dùng ngay từ MVP — nguồn duy nhất cho WS0.** Hiện trạng: bảng có sẵn nhưng chưa module domain nào trỏ vào.

## 1. Vai trò
Nguồn duy nhất về **cơ cấu tổ chức**: cây phòng ban, chức danh, định biên — đúng thiết kế dữ liệu WS0. student (bàn giao hồ sơ), hrm (nhân viên), data-scope theo phòng đều tham chiếu về đây.

## 2. Feature / BO / Action

| Feature | BO chính | Action |
|---|---|---|
| `unit` | Đơn vị / phòng ban (cây cha–con) | view·create·edit·configure |
| `position` | Chức danh / vị trí | view·create·edit |
| `org-chart` | Sơ đồ tổ chức | view·export |
| `headcount` | Định biên theo phòng | view·configure·report |

## 3. Manifest — khai báo permissions

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

```json
{
  "key": "org",
  "name": "Tổ chức",
  "version": "1.1.0 (đích)",
  "permissions": [
    {
      "group": "organization",
      "feature": "unit",
      "label": "Đơn vị / Phòng ban",
      "actions": [
        "view",
        "create",
        "edit",
        "configure"
      ]
    },
    {
      "group": "organization",
      "feature": "position",
      "label": "Chức danh / Vị trí",
      "actions": [
        "view",
        "create",
        "edit"
      ]
    },
    {
      "group": "organization",
      "feature": "org-chart",
      "label": "Sơ đồ tổ chức",
      "actions": [
        "view",
        "export"
      ]
    },
    {
      "group": "organization",
      "feature": "headcount",
      "label": "Định biên",
      "actions": [
        "view",
        "configure",
        "report"
      ]
    }
  ]
}
```

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

### Phòng ban (khớp WS0 §4.1)
| Trường | Kiểu | Bắt buộc | Ghi chú |
|---|---|---|---|
| Mã phòng | text | ✔ | Duy nhất trong trung tâm |
| Tên phòng | text | ✔ |  |
| Phòng cha | ref | — | Cây cha–con; trống = cấp cao nhất |
| Loại phòng | enum | — | tuyển sinh / đào tạo / kế toán / nhân sự / kỹ thuật / sát hạch |
| Thứ tự hiển thị | number | — |  |
| Trạng thái | bool | ✔ | Đang hoạt động / ngừng |

### Chức danh (khớp WS0 §2)
| Trường | Kiểu | Bắt buộc | Ghi chú |
|---|---|---|---|
| Mã chức danh | text | ✔ | GD, PGD, TP, PP, TT, KTT, NV, GV_LT, GV_TH, KTV, CTV |
| Tên chức danh | text | ✔ |  |
| Cấp | enum | — | Ban GĐ / quản lý / nhân viên / ngoài biên chế |
| Ghi chú | text | — |  |

### Định biên
| Trường | Kiểu | Bắt buộc | Ghi chú |
|---|---|---|---|
| Phòng ban | ref | ✔ |  |
| Chức danh | ref | ✔ |  |
| Số lượng kế hoạch | number | ✔ |  |
| Thực tế | number (view) | — | Đếm từ hrm.Employee — không nhập tay |

## 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 |
|---|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|
| `unit` | W | R | R | R | R | R | R | W |
| `position` | W | R | R | — | — | — | — | W |
| `org-chart` | R | R | R | R | R | R | R | R |
| `headcount` | R | R | R | — | — | — | — | 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. **Không tạo danh mục phòng/chức danh ở nơi khác** — catalog/hrm/student đều tham chiếu org
2. Seed **template trường lái** (cây WS0) lúc provision workspace; sửa theo thực tế từng trung tâm
3. Không xóa cứng phòng đã có tham chiếu — chỉ ngừng hoạt động
4. `student.phong_phu_trach_id` và biến data-scope `current_dept_id` đọc từ org

## 7. Liên kết chéo
- **hrm** — Employee gắn 1 phòng + 1 chức danh chính
- **student** — bàn giao hồ sơ theo phòng
- **rt-authz** — biến ctx current_dept_id/subtree
- **WS0** — tài liệu dữ liệu nguồn

## 8. Câu hỏi mở
- Danh sách phòng ban Vĩnh An (việc #3) → nhập cây thật
- Headcount có cần cho trung tâm nhỏ không hay ẩn (config)?
