# Module `cert` — Chứng chỉ nghề

> 07/7/2026 · Giai đoạn: **v2** · WS đào tạo · Bản HTML: [cert.html](cert.html) · Sơ đồ tổng thể: [../so-do-ws-module-feature-2026-07-06.md](../so-do-ws-module-feature-2026-07-06.md)
> Trạng thái: v2 — mở rộng tự nhiên, chi phí thấp.

## 1. Vai trò
Đào tạo **sơ cấp nghề** (xe nâng, máy công trình…) — tái sử dụng gần nguyên hồ sơ (student) + LMS, chỉ đổi **cấu hình chương trình**; cấp và quản lý chứng chỉ.

## 2. Feature / BO / Action

| Feature | BO chính | Action |
|---|---|---|
| `program` | Chương trình nghề (config) | view·configure |
| `issue` | Chứng chỉ cấp | view·create·approve·download |

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

| BO | Trường chính |
|---|---|
| **Chương trình** | Nghề · thời lượng LT/TH · điều kiện đầu vào · mẫu chứng chỉ — toàn bộ là config, không sửa code |
| **Chứng chỉ** | Học viên · chương trình · số hiệu (quy tắc mã) · ngày cấp · người ký · trạng thái · file scan |

## 4. Quy tắc nghiệp vụ
1. Học viên nghề dùng chung **student** (loại hồ sơ = nghề, checklist riêng theo chương trình)
2. Sổ cấp chứng chỉ immutable — phục vụ tra cứu/xác minh
3. Chương trình mới = thêm config, không thêm module

## 5. Liên kết chéo
- **student** — hồ sơ học viên nghề
- **lms** — lý thuyết theo chương trình
- **tuition** — học phí nghề
- **report** — báo cáo cấp chứng chỉ (nếu Sở yêu cầu)

## 6. Câu hỏi mở
- Vĩnh An có đào tạo nghề gì hiện tại?
- Mẫu chứng chỉ + cơ quan quản lý tương ứng?

## 7. Ma trận phân quyền (→ manifest & seed role)

### 7.1 Khai báo `permissions[]` trong `manifest.json`

```json
[
  {
    "group": "main",
    "feature": "program",
    "label": "Chương trình nghề",
    "actions": [
      "view",
      "configure"
    ]
  },
  {
    "group": "main",
    "feature": "issue",
    "label": "Chứng chỉ cấp",
    "actions": [
      "view",
      "create",
      "approve",
      "download"
    ]
  }
]
```


### 7.2 Ma trận vai trò × feature (seed `rt_role`)

| Feature | `QTHT` | `GIAM_DOC` | `QL_DAO_TAO` | `GIAO_VU` |
|---|:--:|:--:|:--:|:--:|
| `program` | W | R | W | — |
| `issue` | R | R·A | W | W |

> **R** xem · **W** tạo/sửa · **A** duyệt · **—** không có quyền · ¹ dữ liệu **phân công** · ² **của chính mình** · ³ **theo trạng thái** hồ sơ. Vai trò không liệt kê = không có quyền. Permission key đầy đủ: `cert.main.<feature>.<action>`.
> GIAO_VU tải bản in chứng chỉ qua download (core)
