---
name: bkit-operate-web-app
description: "Điều khiển giao diện web BKIT nhanh, ổn định và an toàn. Dùng cho điều hướng chung, chọn đúng origin local/production, đăng nhập bằng phiên sẵn có, thao tác form/bảng/combobox, xử lý tải động hoặc khi một skill BKIT nghiệp vụ cần quy tắc tương tác nền."
---

# Điều khiển BKIT Web

## Chọn môi trường

1. Dùng tab BKIT đang mở và giữ phiên đăng nhập hiện tại.
2. Giữ nguyên origin. Nếu tab là `http://localhost:5173`, mọi route phải dùng origin local; không tự chuyển sang `https://a.bkit.vn`.
3. Chỉ đăng nhập hoặc đổi môi trường khi người dùng yêu cầu hay phiên đã hết hạn.
4. Sau điều hướng, xác minh URL và tiêu đề trang trước khi thao tác.

## Chiến lược định vị

Ưu tiên theo thứ tự:

1. ID ổn định hoặc `data-testid`.
2. Role cùng accessible name chính xác.
3. Label liên kết với input.
4. Nội dung hiển thị đã được khoanh vùng trong form, modal hoặc dòng bảng.

Không dùng `nth-child`, tọa độ màn hình hay chỉ số dòng làm danh tính nếu có mã/số chứng từ/tên để định vị.

## Chu trình thao tác

1. Đọc trạng thái DOM hiện tại ngay trước hành động.
2. Khoanh vùng container phù hợp.
3. Thực hiện một hành động có chủ đích.
4. Chờ điều kiện quan sát được: URL đổi, loading biến mất, nút hết disabled, modal xuất hiện/đóng, toast hoặc dữ liệu đổi.
5. Đọc lại DOM; không tái sử dụng tham chiếu cũ sau navigation, lọc, phân trang hoặc render lại.

Với combobox tùy biến, mở danh sách, chọn option hiển thị chính xác và xác minh giá trị đã chọn. Với form dài, điền theo từng cụm và kiểm tra lỗi validation trước khi lưu.

## An toàn khi thay đổi

- Chỉ thay đúng trường người dùng yêu cầu; giữ nguyên giá trị còn lại.
- Trước xóa, ghi sổ, bỏ ghi sổ, khóa kỳ, phân quyền hoặc thay đổi hàng loạt, nêu rõ mục tiêu và yêu cầu xác nhận tại thời điểm sắp thực hiện.
- Nếu có nhiều bản ghi khớp, dừng và đưa các thuộc tính phân biệt.
- Không bấm lặp nút lưu/xuất khi trạng thái đang xử lý.
- Xác minh thành công bằng trạng thái cuối, không suy luận từ lần click.

## Khôi phục lỗi

Nếu thao tác thất bại, đọc thông báo lỗi và trạng thái hiện tại, sửa nguyên nhân cụ thể tối đa một lần. Không retry mù quáng; giữ dữ liệu đã nhập khi có thể và báo bước còn thiếu.
