# Mục 1.4.10 — Tạo shortcut cho Tài liệu (UC??)

> ⚠️ **Mã UC chưa được chốt** (2026-08-14). Đã biết: 1.4.1 = UC22, 1.4.2 = UC23, 1.4.6 = UC25;
> các mục còn lại (gồm 1.4.10) chưa có xác nhận của QA. Tạm ghi `UC??` trong tên test và dùng prefix
> dữ liệu `AT-1.4.10-<mã case>-<ts>`. Khi QA chốt: sửa tên test + prefix trong **từng spec** và bảng
> danh sách case bên dưới.

> 📌 **PHẠM VI FILE NÀY — CHỈ TIỀN ĐIỀU KIỆN CHUNG CỦA CẢ BỘ CASE.**
>
> Được ghi ở đây: nguyên văn tiền điều kiện QA, cách đọc nó, bảng "vai → cách script dựng dữ liệu",
> dữ liệu mà setup tạo ra, danh sách case của mục.
>
> **KHÔNG** ghi ở đây: thao tác/kỳ vọng của từng case, cách assert, giả định khi viết case, điểm cần
> QA/DEV chốt, bảng hàm dùng chung. Những thứ đó là **logic của case** → mô tả trong khối comment đầu
> file `1.4.10.<mã case>.spec.ts` của chính case đó (hàm dùng chung thì tự mô tả bằng JSDoc trong
> `KHO-TAI-LIEU.functions.ts`).

> **Đọc file này trước khi viết bất kỳ case nào của mục 1.4.10.**
>
> Tài liệu màn hình: `src/screen-instructions/KHO-TAI-LIEU.md` — mục **4.4** (menu hành động của dòng
> tài liệu, nơi có `mni-tao-shortcut`) và mục **10** (modal "Tạo mới Shortcut").
> Quy ước đặt tên & cấu trúc: `CLAUDE.md`. Fixture/TIMEOUT/PW: `tests/README.md`.

---

## 1. Tiền điều kiện chung của mục 1.4.10

Chưa có bản **nguyên văn QA** cho toàn mục — hiện chỉ có phần thao tác của từng case do người dùng
gửi. Bản dưới đây suy ra từ mục 1.4.2 / 1.4.9 (cùng màn, cùng nhóm vai, cùng đối tượng là tài liệu
trong Cấu trúc hồ sơ); **thay bằng nguyên văn khi QA gửi**:

- Thủ thư / ITAdmin / Người dùng được phân quyền **tạo mới bộ hồ sơ**: BHS ở trạng thái
  **"Khai báo"** hoặc **"Đang hoạt động"**.
- Người dùng / Nhóm được phân quyền **Owner / Tạo mới** của Bộ hồ sơ: BHS **"Đang hoạt động"**.
- Chức năng cần **2 Bộ hồ sơ**: 1 BHS **nguồn** (chứa tài liệu gốc) và 1 BHS **đích** (nơi shortcut
  được đặt vào).

Cách đọc tiền điều kiện: xem `CLAUDE.md` mục "Đọc tiền điều kiện của testcase QA" — vai QA ghi là
có quyền thì **mặc định làm được** tới bước Mong muốn; quyền **cấp lớn bao trùm cấp nhỏ**.

### 🚨 Ràng buộc bắt buộc khi dựng dữ liệu

1. **Mỗi case tự dựng BHS mới** để chạy song song được và để mọi item thấy sau thao tác đều do case
   đó sinh ra.
2. **Vai không phải người tạo BHS chỉ mở được BHS ở trạng thái "Hoạt động"**
   (`KHO-TAI-LIEU.PHAN-QUYEN-THEO-VAI.md` mục 1) → case nào để vai khác thao tác thì phải
   `chuyenHoatDong` trước.
3. **`recordUrl` của cả 2 BHS phải lưu ngay sau khi tạo** (`KHO-TAI-LIEU.md` mục 9.3) —
   `createBoHoSo` trả về sẵn; tạo tài liệu và mở modal shortcut đều **đổi `page.url()`** nên 2 biến
   này là đường về duy nhất.
4. **Tên BHS / tài liệu phải unique và không tên nào là tiền tố của tên khác** — `getCauTrucRow`
   khớp theo **chuỗi con**, mà tên shortcut lại mang tiền tố `"Shortcut of "` + nguyên tên gốc → sau
   khi tạo shortcut, tra dòng theo tên phải đối chiếu **tên đã tách mã prefix**
   (`phanTichDongCauTruc`), đừng dùng `hasText`.

### 🚨 Chưa khảo sát: modal "Tạo mới Shortcut"

Phần **đã khảo sát bằng MCP** chỉ gồm mục `mni-tao-shortcut` trong menu hành động của dòng tài liệu
và `btn-tao-shortcut` trong menu `btn-more` của màn chi tiết tài liệu (`KHO-TAI-LIEU.md` mục 4.4 và
4.3). Những điểm sau **do người dùng mô tả 2026-08-14, chưa đọc DOM**:

| Điểm                                                          | Nguồn                       |
| ------------------------------------------------------------- | --------------------------- |
| Modal **không có `data-testid` nào**                          | người dùng mô tả 2026-08-14 |
| Ô tên có placeholder `"Nhập tên shortcut"`                     | người dùng mô tả 2026-08-14 |
| Tên mặc định = `"Shortcut of " + <tên gốc>`                    | người dùng mô tả 2026-08-14 |
| Dropdown chọn BHS đích (placeholder `"Vui lòng chọn"`, search) | người dùng mô tả 2026-08-14 |
| Tree-dropdown chọn vị trí lưu                                 | người dùng mô tả 2026-08-14 |
| Nút `"Lưu lại"` + toast `"Tạo shortcut thành công"`            | người dùng mô tả 2026-08-14 |

→ Chạy thật mà lệch: khảo sát bằng `/khao-sat-man-hinh`, thay bằng testId thật rồi cập nhật mục 10
của `KHO-TAI-LIEU.md`. **Đừng** vá bằng selector đoán thêm.

---

## 2. Bảng vai → cách script dựng dữ liệu

**Mục này KHÔNG có file `1.4.10.setup.ts` / `1.4.10.steps.ts`**: hiện chỉ có 1 case, phần tiền điều
kiện viết **thẳng trong spec** bằng `createBoHoSo` / `createTaiLieu`, còn thao tác màn hình nằm ở
`taoShortcutTaiLieu` trong `KHO-TAI-LIEU.functions.ts`. Có ≥ 2 case dùng chung một chuỗi bước thì
mới tách `1.4.10.steps.ts`.

| Vai QA nêu                    | Fixture     | Cách dựng                                                                                                           | Trạng thái BHS         |
| ----------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------- | ---------------------- |
| Thủ thư                       | `librarian` | Chính nó gọi `createBoHoSo` (cả 2 BHS) → tự tạo nên là **Owner**                                                     | theo yêu cầu của case  |
| ITAdmin                       | `admin`     | Như trên                                                                                                            | theo yêu cầu của case  |
| Người dùng được **Owner** BHS | `ecm05`     | người tạo dựng + `createBoHoSo(..., { peoplePickers: [{ testId: DOC_PERM.OWNER, account }] })`, rồi `chuyenHoatDong` | `Hoạt động` (bắt buộc) |
| **Nhóm** được Owner / Tạo mới | `ecm06`     | như trên với `account: GROUP.ECM06` (`AUTO_GROUP_ECM06`, thành viên `ecm06`), thao tác bằng `ecm06`                  | `Hoạt động` (bắt buộc) |

### Quy ước tên dữ liệu dùng chung cho cả mục

```
AT-1.4.10-<maCase>-<ts>-HS1        ← bộ hồ sơ 1 = ĐÍCH (nơi shortcut được tạo vào)
AT-1.4.10-<maCase>-<ts>-HS2        ← bộ hồ sơ 2 = NGUỒN
 └─ AT-1.4.10-<maCase>-<ts>-TL1    ← tài liệu gốc, nằm ở gốc BHS 2
```

Cây cụ thể của từng case xem phần đầu spec của case đó.

---

## 3. Danh sách case của mục 1.4.10

| Mã  | UC   | Nội dung testcase                                | File                                         | Trạng thái                                               |
| --- | ---- | ------------------------------------------------ | -------------------------------------------- | -------------------------------------------------------- |
| 734 | UC?? | Tạo shortcut **thành công** với dữ liệu hợp lệ    | [`1.4.10.734.spec.ts`](./1.4.10.734.spec.ts) | 2 test (Thủ thư + Admin). Viết 2026-08-14. **Chưa chạy** |

> Viết case mới → thêm 1 dòng vào bảng này (chỉ **nội dung testcase + file + trạng thái chạy**,
> không mô tả cách làm / kỳ vọng).
