# Mục 1.4.7 — Xóa thư mục / tài liệu trong Cấu trúc hồ sơ (UC??)

> ⚠️ **Mã UC chưa được chốt** (2026-08-05). Đã biết: 1.4.1 = UC22, 1.4.2 = UC23, 1.4.6 = UC25;
> 1.4.4, 1.4.5 và 1.4.7 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.7-<mã case>-<ts>`. Khi QA chốt: sửa tên test + prefix ở
> [`1.4.7.setup.ts`](./1.4.7.setup.ts) 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.7.<mã case>.spec.ts` của chính case đó (hàm dùng chung thì tự mô tả bằng JSDoc trong
> [`1.4.7.steps.ts`](./1.4.7.steps.ts) / `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.7.**
>
> 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 & **2 dialog xóa**, `MODAL-TAO-THU-MUC.md`, `MODAL-TAO-TAI-LIEU.md`, `PHAN-QUYEN-THEO-VAI.md`).
> 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.7

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.4 / 1.4.6 (cùng màn, cùng nhóm vai, cùng đối tượng là thư mục /
tài liệu); **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** của Bộ hồ sơ / thư mục / tài liệu: BHS
  **"Đang hoạt động"**.

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. **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) → `chuyenSangHoatDong: true` khi có vai như vậy.
2. **`recordUrl` của BHS phải lưu TRƯỚC khi tạo thư mục/tài liệu** (`KHO-TAI-LIEU.md` mục 9.3): tạo
   tài liệu xong `page.url()` bị thay bằng URL của tài liệu vừa tạo.
3. **Cấp quyền trực tiếp lên 1 thư mục buộc phải tách kế thừa trước** → setup dùng
   `createThuMuc({ quyenDocLap: true, perm })` (`PHAN-QUYEN-THEO-VAI.md` mục 4).
   Setup **không** xoá chip kế thừa → người tạo BHS + người được quyền cấp BHS **vẫn giữ quyền** tại
   thư mục đó (`MODAL-TAO-THU-MUC.md` mục 4b).
4. **Tên thư mục / tài liệu không tên nào là tiền tố của tên khác** (`-TM1`…`-TM4`, `-TL1`…`-TL4`):
   `getCauTrucRow` / `getCodeCuaItemPhanQuyen` khớp theo **chuỗi con**.

---

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

Dựng qua `dungDuLieuXoaThuMuc()` trong [`1.4.7.setup.ts`](./1.4.7.setup.ts); mỗi test **tự dựng BHS
riêng** để chạy song song được.

| Vai QA nêu                        | Fixture     | Cách dựng                                                                                                               | Trạng thái BHS |
| --------------------------------- | ----------- | ----------------------------------------------------------------------------------------------------------------------- | -------------- |
| Thủ thư                           | `librarian` | Chính nó gọi `dungDuLieuXoaThuMuc` → tự tạo BHS nên là **Owner**                                                         | `Khai báo`     |
| ITAdmin                           | `admin`     | Như trên                                                                                                                | `Khai báo`     |
| Người dùng được **Owner** BHS     | `ecm05`     | người tạo dựng + `quyenBoHoSo: { permTestId: DOC_PERM.OWNER, account: "ecm05" }` + `chuyenSangHoatDong: true`             | `Hoạt động`    |
| Người dùng được **Owner** thư mục | `ecm07`     | `quyenThuMuc: [{ thuMucSo, permTestId: FOLDER_PICKER.OWNER, account: "ecm07" }]` — thư mục đó **đặt quyền độc lập**       | `Hoạt động`    |
| **Nhóm** được Owner thư mục       | `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`    |
| Người dùng được **Owner** tài liệu | `ecm08`    | `taiLieuGoc: { permTestId: DOC_PERM.OWNER, account: "ecm08" }` — tài liệu ở gốc BHS, tick **"Break quyền riêng"**          | `Hoạt động`    |

### Dữ liệu `dungDuLieuXoaThuMuc` tạo ra

Ví dụ với `soThuMuc: 4` + `quyenThuMuc` cho thư mục 3 và 4 + `taiLieuGoc`:

```
BHS  AT-1.4.7-<maCase>-<ts>                  (Owner = người gọi; + quyenBoHoSo nếu có)
 ├─ AT-1.4.7-<maCase>-<ts>-TM1               ← KẾ THỪA quyền BHS
 │   └─ AT-1.4.7-<maCase>-<ts>-TL1
 ├─ AT-1.4.7-<maCase>-<ts>-TM2               ← KẾ THỪA quyền BHS
 │   └─ AT-1.4.7-<maCase>-<ts>-TL2
 ├─ AT-1.4.7-<maCase>-<ts>-TM3               ← quyền ĐỘC LẬP (thêm Owner theo quyenThuMuc)
 │   └─ AT-1.4.7-<maCase>-<ts>-TL3
 ├─ AT-1.4.7-<maCase>-<ts>-TM4               ← quyền ĐỘC LẬP (thêm Owner theo quyenThuMuc)
 │   └─ AT-1.4.7-<maCase>-<ts>-TL4
 └─ AT-1.4.7-<maCase>-<ts>-TL-GOC            ← tài liệu ở GỐC BHS, quyền ĐỘC LẬP (chỉ khi có taiLieuGoc)
```

`soThuMuc` quyết định số nhánh; case nào chỉ cần 1 thư mục thì truyền `soThuMuc: 1`.
Thứ tự tạo: toàn bộ thư mục → tài liệu ở gốc BHS → tài liệu bên trong từng thư mục →
`chuyenHoatDong` (nếu có).

---

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

| Mã  | UC   | Nội dung testcase                                          | File                                       | Trạng thái                                     |
| --- | ---- | ---------------------------------------------------------- | ------------------------------------------ | ---------------------------------------------- |
| 616 | UC?? | Kiểm tra chức năng **xóa 1 Thư mục có tài liệu bên trong** | [`1.4.7.616.spec.ts`](./1.4.7.616.spec.ts) | 1 test (4 vai trong 1 test). Viết 2026-08-05. **Chưa chạy** |
| 618 | UC?? | Kiểm tra chức năng **xóa 1 Tài liệu trong cấu trúc hồ sơ** | [`1.4.7.618.spec.ts`](./1.4.7.618.spec.ts) | 1 test (5 vai trong 1 test). Viết 2026-08-05. **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).
