Báo cáo chuyển đổi warehouse-service

batch · batch/delete · api

DELETE/api/client/page/batches/{id}

Vòng
1
Cổng G1–G6
PENDING_SONAR
Bước
sonar-check
Nhánh đích
feat/thongpd/migrate-batch2

Báo cáo sai lệch — batch/delete — vòng 1

0. Kết luận nhanh

  • Điều kiện đạt: G1 ✅ G2 ✅ G3 ✅ G4 — G5 ✅ G6 ✅ → CHỜ KIỂM SONAR
  • Trạng thái: SẴN SÀNG CHO NGƯỜI XEM
  • Tầng rủi ro: B → người cần đọc: spec + báo cáo + đoạn bị gắn cờ
  • Số quy tắc: 6 · PASS 3 · DEVIATION có chủ đích 2 (R-01/R-04 D-02, R-05 D-04) · DEVIATION KHÔNG chủ đích 0 · UNVERIFIED 1 (R-06)
  • Coverage thấp nhất: F-01 100% / 100%
  • Finding logic: 0
  • Nghi vấn bug code cũ (mục 3c): 3 (CAO 1) · Quyết định tự chốt cần xác nhận (mục 3d): 4
  • Chạy bằng: /mig-auto · Số vòng: 1 / lần sửa 0/3

1. Điều kiện đạt

Mã Mục tiêu Kết quả Bằng chứng
G1 mvnw verify ✅ verify/round-1/build.md (619 test)
G2 Test khớp test-plan ✅ verify/round-1/tc-map.md (8/8), oracle.md
G3 Coverage ✅ verify/round-1/coverage.md
G4 Sonar CHỜ NGƯỜI sonar-ide.md
G5 Finding CRITICAL/MAJOR ✅ verify/round-1/review-logic.md (0)
G6 Lách cổng ✅ verify/round-1/gates.md

Không chặn nhưng cần người: Integration test CHƯA CHẠY · Golden master CHƯA CHẠY (GM-01)

Coverage theo luồng

Luồng Tên % dòng % nhánh
F-01 Xoá một lô 100% (8/8) 100% (2/2)

2. Ma trận truy vết

Quy tắc Tầng Code mới Test Golden Kết luận
R-01 B BatchController.delete TC-01, 02 — DEVIATION có chủ đích (D-02 body 400)
R-02 B BatchWriter.deleteWithoutDetails TC-03, 04 GM-01 PASS (giữ D-01, D-06); SQL UNVERIFIED trên MSSQL
R-03 B BatchManagementService.delete TC-05 — PASS (giữ D-03)
R-04 B controller TC-06 — PASS
R-05 B translate, @Transactional TC-07, 08 — DEVIATION có chủ đích (D-04)
R-06 B — — — UNVERIFIED (D-05)

3. Người cần xem

# Vị trí Vì sao cần người xem
1 infrastructure/relational/batch/adapter/BatchWriter.java:33-39 Câu DELETE không lọc com_id (B-01, CAO)
2 application/batch/BatchManagementService.java:88-93 0 dòng gộp "không tồn tại" và "có chi tiết"
3 G4 Chưa kiểm Sonar

3b. Phân tích luồng sau chuyển

Chi tiết: verify/round-1/flow-analysis.md

Luồng Tên Số bước KHỚP / KHÁC / CHỈ CÓ Ở CŨ / CHỈ CÓ Ở MỚI Lệch luồng đã duyệt (spec mục 6) Điểm dev cần chú ý
F-01 Xoá một lô 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ệch migrations/batch/delete/report.md vòng 1 · sha256 5fd48e3db2e4

v1 dựng 2026-11-09 14:46 · base commit đích 661efe9b8c