---
description: Đọc bộ tài liệu màn "Kho tài liệu" (bản sun-ecm-update) rồi viết/sửa test case theo mô tả
---

# Màn hình "Kho tài liệu" — `sun-ecm-update`

Đọc **toàn bộ** bộ tài liệu dưới đây trước khi làm bất cứ việc gì. Đây là nguồn sự thật duy nhất
về URL, field, testId, selector và hành vi của màn `/managed-records` trong project `sun-ecm-update`.

1. `sun-ecm-update/src/screen-instructions/KHO-TAI-LIEU.md` — **đọc trước tiên** (màn danh sách,
   modal Bộ hồ sơ, màn chi tiết, các tab, phân quyền theo vai, lưu ý quan trọng)
2. `sun-ecm-update/src/screen-instructions/KHO-TAI-LIEU.functions.ts` — **danh sách hàm có sẵn**
3. Đọc thêm file con **khi case chạm tới**:
   - `KHO-TAI-LIEU.MODAL-TAO-THU-MUC.md`
   - `KHO-TAI-LIEU.MODAL-TAO-TAI-LIEU.md`
   - `KHO-TAI-LIEU.MODAL-PHAN-QUYEN-NANG-CAO.md`
   - `KHO-TAI-LIEU.MODAL-CHON-NGUOI-DUNG.md`
   - `KHO-TAI-LIEU.MODAL-CAP-NHAT-QUYEN-TAI-LIEU.md`
   - `KHO-TAI-LIEU.TAB-TAI-LIEU-SO.md` — upload file mềm ở tab "Tài liệu số" của màn chi tiết TL
   - `KHO-TAI-LIEU.MODAL-KHOI-PHUC-CAU-TRUC-DA-XOA.md` — xoá item cấu trúc + modal "Quản lý cấu
     trúc đã xóa" / khôi phục
   - `KHO-TAI-LIEU.PHAN-QUYEN-THEO-VAI.md`
4. `sun-ecm-update/tests/README.md` — fixtures/account, `TIMEOUT`, helper `PW`, quy ước prefix testId
5. `sun-ecm-update/src/default-data/khotailieu.ts` — URL + data mẫu
6. **`sun-ecm-update/tests/<mục>/<mục>.md`** — tiền điều kiện chung + danh sách case của **mục đang
   làm** (vd `tests/1.4.2/1.4.2.md`). Đọc ngay khi biết mục số; mục nào chưa có file thì **tạo mới**
   theo mẫu của `1.4.2.md`, và mỗi lần thêm case thì cập nhật lại danh sách case trong đó.
   🚨 File này **chỉ chứa tiền điều kiện chung của cả bộ case** — logic / kỳ vọng / giả định của
   từng case ghi ở **comment đầu file spec**, không ghi vào `.md` (xem `CLAUDE.md` mục
   "Phạm vi file `<mục>.md`").

---

## Nguyên tắc khi viết case

- **Ưu tiên dùng hàm có sẵn** trong `KHO-TAI-LIEU.functions.ts` (bảng hàm ở Mục 0 của file `.md`).
  Không copy code dài vào spec.
- Thao tác dài (> ~10 dòng) cần dùng ở ≥ 2 spec → **viết thành hàm mới** trong file function
  rồi cập nhật bảng ở Mục 0.
- **Không bịa testId/selector.** Nếu tài liệu không có, nói rõ là chưa khảo sát và đề xuất
  khảo sát bổ sung bằng `/khao-sat-man-hinh` — đừng đoán.
- Tôn trọng các mục đánh dấu `⚠️ chưa khảo sát`: cảnh báo người dùng trước khi viết case dựa vào chúng.
- Các cạm bẫy bắt buộc nhớ (chi tiết ở Mục 9 file `.md`):
  - Mở lại BHS phải **đi 2 bước** qua màn danh sách (`openBoHoSo`).
  - Lưu `recordUrl` **trước khi** tạo thư mục/tài liệu.
  - `btn-more` có 2 phần tử ở tab Cấu trúc hồ sơ → luôn scope.
  - Vai không phải Owner chỉ mở được BHS ở trạng thái **Hoạt động** → gọi `chuyenHoatDong` trước.
  - Khối "Phân quyền truy cập" bị `hidden` trên màn chi tiết → sửa quyền qua modal Phân quyền nâng cao.
- Bám quy ước đặt tên & cấu trúc test trong `CLAUDE.md` (spec file, tên test, fixture, data file).

Sau khi đọc xong, xác nhận ngắn gọn bạn đã nắm tài liệu rồi hỏi người dùng cần làm gì tiếp theo
(nếu không có `$ARGUMENTS`).

$ARGUMENTS
