# Module `sh-theory` — Chấm sát hạch lý thuyết

> 07/7/2026 · Giai đoạn: **WS sát hạch · v3** · WS sát hạch · Bản HTML: [sh-theory.html](sh-theory.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: v3 — thẩm định BCA; máy chủ kỳ thi on-premise.

## 1. Vai trò
Phòng thi lý thuyết trên máy: **trộn đề 600 câu + câu điểm liệt**, chấm tự động, in biên bản, camera phòng thi + khuôn mặt tại máy.

## 2. Feature / BO / Action

| Feature | BO chính | Action |
|---|---|---|
| `room` | Phòng máy · máy thi | view·configure |
| `paper` | Đề thi (trộn) · bài thi | view·**generate**·**score** |
| `record` | Biên bản kỳ thi | view·download |

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

| BO | Trường chính |
|---|---|
| **Đề/bài thi** | Đề trộn từ ngân hàng 600 câu theo cấu trúc hạng · bài làm từng câu · điểm · kết quả đạt/trượt (điểm liệt) |
| **Biên bản** | Kết quả ca thi · chữ ký hội đồng · ảnh thí sinh tại máy (≥3 lần/bài theo QCVN) · file in |

## 4. Quy tắc nghiệp vụ
1. Trộn đề đúng cấu trúc theo hạng; **sai câu điểm liệt = trượt**
2. Tự chụp ảnh thí sinh tại máy ≥3 lần/bài, in vào biên bản (QCVN 40:2024)
3. Kết quả + hình ảnh truyền về Cục CSGT qua sh-gateway
4. Phần mềm chấm **niêm phong theo phiên bản kiểm chuẩn** — thay đổi phải báo cáo văn bản

## 5. Liên kết chéo
- **sh-schedule** — ca thi
- **sh-kiosk** — xác thực vào phòng
- **sh-gateway** — truyền kết quả
- **sh-monitor** — camera phòng thi

## 6. Câu hỏi mở
- Cấu trúc đề theo hạng bản mới nhất (TT 108/2026)?

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

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

```json
[
  {
    "group": "main",
    "feature": "room",
    "label": "Phòng máy",
    "actions": [
      "view",
      "configure"
    ]
  },
  {
    "group": "main",
    "feature": "paper",
    "label": "Đề & bài thi",
    "actions": [
      "view",
      "generate",
      "score"
    ]
  },
  {
    "group": "main",
    "feature": "record",
    "label": "Biên bản",
    "actions": [
      "view",
      "download"
    ]
  }
]
```

> ⚠️ Action đặc thù (`generate`, `score`) 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` |
|---|:--:|:--:|:--:|
| `room` | W | — | — |
| `paper` | R | R | W |
| `record` | 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 đủ: `sh-theory.main.<feature>.<action>`.
> Đặc thù: paper +generate (SAT_HACH; score = chấm tự động) · record +download (SAT_HACH) · nộp biên bản & truyền = workflow + sh-gateway
