# Module `examops` — Vận hành kỳ sát hạch (cho mượn sân)

> 07/7/2026 · Giai đoạn: **v2** · WS đào tạo · Bản HTML: [examops.html](examops.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 — nghiệp vụ dịch vụ, không cần thẩm định.

## 1. Vai trò
Khi cơ quan chức năng **mượn sân tổ chức sát hạch**: lịch kỳ thi, điều phối **xe sát hạch & sân**, danh sách thí sinh, doanh thu cho thuê. **Không chấm thi** — phần chấm thuộc WS sát hạch (v3).

## 2. Feature / BO / Action

| Feature | BO chính | Action |
|---|---|---|
| `exam` | Kỳ sát hạch (mượn sân) | view·create·edit |
| `roster` | Danh sách thí sinh · điều phối xe/sân | view·import·**assign** |
| `revenue` | Doanh thu cho thuê theo kỳ | view·report·**reconcile** |

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

| BO | Trường chính |
|---|---|
| **Kỳ thi** | Ngày · hội đồng/đơn vị tổ chức · hạng thi · số thí sinh dự kiến · sân/khu vực dùng |
| **Điều phối** | Xe sát hạch × kỳ × ca · nhân sự phục vụ · checklist chuẩn bị sân |
| **Doanh thu** | Đơn giá thuê sân/xe theo kỳ · đối soát với đơn vị tổ chức · trạng thái thanh toán |

## 4. Quy tắc nghiệp vụ
1. Dữ liệu chấm thi/kết quả thuộc **hội đồng** — module chỉ vận hành dịch vụ
2. Xe sát hạch tách danh mục với xe tập (điều kiện, niêm phong khác)
3. Lịch kỳ thi khóa sân/xe tương ứng bên booking (không cho thuê trùng)
4. Đối soát doanh thu theo kỳ với đơn vị tổ chức → finance

## 5. Liên kết chéo
- **booking** — khóa lịch sân/xe
- **vehicle** — xe sát hạch
- **finance** — doanh thu thuê
- **WS sát hạch (v3)** — khi tự vận hành hệ chấm

## 6. Câu hỏi mở
- Tần suất kỳ sát hạch mượn sân tại Vĩnh An?
- Cơ chế giá thuê hiện tại (theo kỳ/thí sinh)?

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

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

```json
[
  {
    "group": "main",
    "feature": "exam",
    "label": "Kỳ sát hạch (mượn sân)",
    "actions": [
      "view",
      "create",
      "edit"
    ]
  },
  {
    "group": "main",
    "feature": "roster",
    "label": "Thí sinh & điều phối",
    "actions": [
      "view",
      "import",
      "assign"
    ]
  },
  {
    "group": "main",
    "feature": "revenue",
    "label": "Doanh thu cho thuê",
    "actions": [
      "view",
      "report",
      "reconcile"
    ]
  }
]
```

> ⚠️ Action đặc thù (`reconcile`) cần bổ sung vào validator manifest — xem [plan data-scope P1](../giai-doan-1-mvp/plan-data-scope-2026-07-06.md).

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

| Feature | `QTHT` | `GIAM_DOC` | `SAT_HACH` | `KE_TOAN` |
|---|:--:|:--:|:--:|:--:|
| `exam` | R | R | W | — |
| `roster` | R | R | W | — |
| `revenue` | R | R | — | 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 đủ: `examops.main.<feature>.<action>`.
> Đặc thù: roster +import,assign (SAT_HACH) · revenue +reconcile (KE_TOAN)
