KHỚP 4 / KHÁC 3 (D-02, D-02, D-04) / CHỈ CÓ Ở CŨ 1 (kiểm gói dịch vụ, D-05) / CHỈ CÓ Ở MỚI 0
không
Câu DELETE T-SQL không lọc com_id (D-01), chưa chạy MSSQL thật (BatchWriter.java:33-39); nhánh 0 dòng gộp "không tồn tại" và "có chi tiết" (BatchManagementService.java:88-93); lỗi FK → 500 EXCEPTION_ERROR qua translate (BatchRelationalRepository.java:144-146)
3c. Nghi vấn bug / sai ở code cũ (đã GIỮ nguyên khi chuyển)
B-01 Xoá được lô của công ty khác
Mức nghi ngờ: CAO — API không đọc công ty của người gọi, câu xoá chỉ lọc theo id.
Ở đâu: code cũ backend:service/impl/BatchesManagementServiceImpl.java:349-350, backend:repository/BatchesRepository.java:68-77 → code mới (giữ) BatchManagementService.delete, BatchWriter.java:33-39
Code cũ đang làm gì: ai đăng nhập cũng xoá được bất kỳ lô nào chưa có tồn theo lô, chỉ cần biết số id.
Ví dụ cụ thể: nhân viên công ty 20 gọi DELETE /api/client/page/batches/5; lô 5 của công ty 10 mới tạo, chưa nhập kho → lô 5 bị xoá, trả "Xóa lô thành công". Đúng ra phải không xoá được.
Vì sao nghi là sai: các API lô khác đều kiểm công ty; id tăng dần nên dễ đoán.
Ảnh hưởng nếu đúng là bug: mất dữ liệu lô (chưa phát sinh tồn) của khách hàng khác.
Đã xử lý khi chuyển: GIỮ nguyên. Test khoá: TC-03 (BatchRelationalRepositoryTest$DeleteSql#deleteSql — chỉ bind id), TC-04 (BatchManagementServiceTest$Delete#deleteWithoutCompanyCheck).
Nếu muốn sửa:BatchManagementService.delete lấy CurrentUserPort.findCompanyId(), câu xoá thêm AND b.com_id = :comId; đổi TC-03, TC-04. Hệ thống cũ chạy song song vẫn hổng.
Liên quan: D-01, R-02
B-02 Chỉ chặn xoá khi có tồn theo lô, không xét chứng từ khác
Mức nghi ngờ: TRUNG BÌNH — chưa biết DB có khoá ngoại không.
Ở đâu:backend:repository/BatchesRepository.java:68-77 → BatchWriter.java:33-39
Code cũ đang làm gì: chỉ kiểm bảng batches_detail; không xét rs_inoutward_detail, bill_product, inventory_log, inventory_checking_detail, production_order_detail, inventory.
Ví dụ cụ thể: lô 7 không còn dòng batches_detail nhưng có phiếu nhập cũ trỏ batch_id=7 → xoá thành công (nếu không có FK), phiếu cũ mất thông tin lô.
Vì sao nghi là sai: thông báo lỗi nói "đã phát sinh giao dịch".
Ảnh hưởng nếu đúng là bug: báo cáo/chứng từ cũ hiển thị thiếu số lô.
Đã xử lý khi chuyển: GIỮ. Test khoá: TC-03.
Nếu muốn sửa: thêm NOT EXISTS cho các bảng trên trong câu xoá; đổi TC-03.
Liên quan: D-06, R-02
B-03 Lô không tồn tại báo "đã phát sinh giao dịch"
Mức nghi ngờ: THẤP
Ở đâu:backend:service/impl/BatchesManagementServiceImpl.java:351-353 → BatchManagementService.java:88-93
Code cũ đang làm gì: xoá 0 dòng luôn báo lỗi "đã phát sinh giao dịch".
Ví dụ cụ thể: xoá id=999999 (không có) → 400 "Số lô đã phát sinh giao dịch, không được xóa".
Vì sao nghi là sai: sai lý do.
Ảnh hưởng nếu đúng là bug: người dùng hiểu nhầm (thường gặp khi hai người cùng xoá).
Đã xử lý khi chuyển: GIỮ. Test khoá: TC-05 (BatchManagementServiceTest$Delete#nothingDeleted).
Nếu muốn sửa: phân biệt bằng một câu kiểm tồn tại; đổi TC-05.
Liên quan: D-03, R-03
3d. Quyết định AI tự chốt và thay đổi tự động (cần người xác nhận)
#
Nguồn
AI đã làm gì
Khác code cũ ở điểm nào (input → cũ / mới)
Người cần xác nhận gì
1
spec-review
Spec qua 1 lần review (tầng B, không CRITICAL); các mục sửa theo MINOR: mục 3, mục 5, R-02, R-03, R-04, thêm D-06
—
—
2
D-02 (ADR BẮT KHÁC)
Body lỗi theo starter
/batches/abc → cũ 400 rỗng / mới 400 starter
Chấp nhận
3
D-04 (ADR BẮT KHÁC)
417 → 500 giữ EXCEPTION_ERROR
lỗi FK → cũ 417 / mới 500
Chấp nhận
4
D-05 (PHỤ THUỘC NGOÀI)
Không kiểm gói dịch vụ
hết hạn dùng thử → cũ 400 / mới xoá
Gói kiểm ở đâu
4. Finding đã xác nhận
Không có.
5. Finding bị loại
Không có.
6. Xử lý của người
Vấn đề
Cổng
Chỉ thị
Chưa kiểm Sonar
G4
7. So với vòng trước
Vòng đầu.
8. Thay đổi trong repo đích
11 file: BatchController, BatchManagementService, BatchErrorCode, BatchRepository, BatchRelationalRepository, BatchWriter, 2 i18n, 3 file test — đều là file của các unit trước cùng lượt (thêm code, không đổi hành vi cũ). Không có file ngoài phạm vi.
9. Đề xuất bổ sung kinh nghiệm
Đề xuất
Đưa vào đâu
Checkstyle LineLength đếm ký tự Unicode: Javadoc tiếng Việt dài ~118 ký tự thường vượt 120 sau spotless — xuống dòng ở ~110
lessons.md K-15
Nguồn của trang này
Báo cáo sai lệchmigrations/batch/delete/report.mdvòng 1 · sha256 5fd48e3db2e4
v1 dựng 2026-11-09 14:46 · base commit đích 661efe9b8c