--- name: feedback-mechanism-right-data-absent description: "Lớp lỗi lặp ×6 ở SOLUTION_ERP — cơ-chế ĐÚNG nhưng thứ đi qua nó KHÔNG CÓ; UAT báo \"không chạy\" thì ĐO DỮ LIỆU trước, đừng đọc/viết code" metadata: node_type: memory type: feedback originSessionId: 85c4bae3-8755-487e-bb4b-d8d8c9135463 modified: 2026-07-28T02:57:02.204Z --- **"Cơ-chế đúng, thứ đi qua nó không có"** — lớp lỗi đã nổ **×6** ở repo này. Khi anh/UAT báo *"cái X không tự điền / không hiện / không bắt"*, **phép đầu tiên là ĐO DỮ LIỆU PROD**, không phải đọc code rồi suy, và tuyệt đối không phải viết code mới. **Why:** đây là **ĐẶC-TÍNH KIẾN-TRÚC**, không phải xui: schema DÙNG CHUNG ⟂ service/seed RIÊNG per-loại ⇒ một cột thêm cho loại này mặc-định **CÂM** ở loại kia trừ khi có người nối; và cột có thật thì vẫn có thể **rỗng data**. Cả 6 ca đều **build sạch + test xanh** — không có tín-hiệu máy nào kêu. Nguy nhất: viết code auto-fill "mới" khi code cũ **đã đúng và đang chạy** ⇒ tốn công, đẻ trùng-lặp, mà triệu-chứng y nguyên vì bảng vẫn rỗng. **6 ca (ca 6 = chiều MỚI: bug do NGƯỜI DÙNG báo, fix ngây-thơ sẽ nhân đôi code đã đúng):** 1. policy tồn tại / 11-trên-13 vai `CanDelete=0` 2. endpoint PUT sống / 0 dây FE gọi 3. policy chặn đúng approver cần dùng 4. DTO thiếu field FE đang đọc 5. PMH role `Procurement` bị 403 ở b.13/b.17 (cơ-chế phân quyền đúng, vai đi qua không có quyền) 6. **@S157 PE "Địa điểm không tự lấy"** — auto-fill `Project.Location` đã wire từ S59 và **chạy đúng cả 4 tầng** (DB cột → `ProjectFeatures.cs:51` projection → FE type → `onChange` SearchableSelect); ô trống vì **prod 57/62 dự án `Location = NULL`** (chỉ 5 dự án có địa chỉ — đúng 5 dòng có địa chỉ trong Excel nhập S55). **How to apply:** - UAT báo "không chạy" ⇒ **sqlcmd đếm dữ liệu prod TRƯỚC** (`SELECT COUNT(*), SUM(CASE WHEN