# QA Report

## 1. Mục đích

QA Report dùng để ghi nhận kết quả kiểm thử thực tế. Đây là tài liệu bằng chứng, không phải chỉ là checklist.

**Ghi chú:** Hiện tại báo cáo đang ở trạng thái `NOT EXECUTED` vì chưa chạy build/test thật trong môi trường. Sau khi QA chạy test, cần cập nhật status, evidence và bug list.

## 2. Thông tin phiên test

| Trường | Giá trị |
|---|---|
| Dự án | LDA |
| Ngày lập tài liệu | 2026-07-08 |
| Người lập | Codex |
| Nguồn review | Source zip trong `C:\Users\Admin\Downloads\LDA\LDA` |
| Trạng thái | `NOT EXECUTED - Documentation prepared from source review` |
| Kết luận hiện tại | Chưa đủ điều kiện GO |

## 3. Phạm vi đã review

| Thành phần | Trạng thái review | Ghi chú |
|---|---|---|
| Admin frontend | Reviewed from source/docs | Next.js 15, React 19, nhiều module admin/CDP, có stocktake test docs |
| Website public | Reviewed from source/docs | Next.js 16, React 19, ecommerce routes đầy đủ |
| Backend Go | Reviewed from source/docs | Gin/GORM/PostgreSQL, module catalog/collection/homepage/productext/SEO/user |
| Existing QA docs | Reviewed | Có `NV_TEST_GUIDE.md` và `e2e-per-ticket-report.md` cho stocktake |

## 4. Kết quả thực thi hiện tại

| Nhóm test | Status | Ghi chú |
|---|---|---|
| Build website | Not Run | Cần Node >= 24 và dependency |
| Build admin | Not Run | Cần pnpm install |
| Backend build | Not Run | Cần Go deps |
| Backend tests | Not Run | Cần config/DB |
| API smoke | Not Run | Cần start server |
| Browser smoke | Not Run | Cần dev server |
| E2E core flow | Not Run | Cần dữ liệu test |
| Permission test | Not Run | Cần account/role |

## 4A. Kết quả test thực tế - Mục đặt hàng

| Test Case | Khu vực | Status | Ghi chú |
|---|---|---|---|
| ORDER-RT-001 | Website checkout - Đặt mua hàng | Fail | Khi bấm `Đặt mua hàng`, hệ thống hiển thị lỗi database `ERROR: value too long for type character varying(20) (SQLSTATE 22001)` |

### Chi tiết lỗi ORDER-RT-001

| Mục | Nội dung |
|---|---|
| Màn hình | Website v2 - Giỏ hàng/Xác nhận đơn hàng |
| Bước test | 1. Vào giỏ hàng. 2. Đi đến bước xác nhận đơn hàng. 3. Nhập thông tin khách hàng. 4. Bấm `Đặt mua hàng`. |
| Dữ liệu gây lỗi | Số điện thoại nhập quá dài và có ký tự chữ: `789788888888888khtukth7857` |
| Actual | UI hiển thị lỗi kỹ thuật từ database: `ERROR: value too long for type character varying(20) (SQLSTATE 22001)` |
| Expected | FE/BE phải validate số điện thoại trước khi lưu; hiển thị lỗi nghiệp vụ dễ hiểu như `Số điện thoại không hợp lệ`; không được leak lỗi database ra UI. |
| Mục bị lỗi | Validation field `Số điện thoại` trong flow đặt hàng |
| Phân loại | Bug thực tế, không phải cảnh báo có sẵn trong code |
| Severity | High |
| Tác động | Người dùng không đặt hàng được; hệ thống lộ lỗi database; dữ liệu sai không được chặn ở form/API. |
| Evidence | Screenshot: `C:\Users\Admin\Pictures\Screenshots\Screenshot 2026-07-08 161708.png` |
| Kết luận | Fail - cần fix validation FE và BE cho phone/name/email/address trước khi cho submit order. |

## 5. Risk phát hiện từ source/docs

| Severity | Khu vực | Mô tả | Tác động | Khuyến nghị |
|---|---|---|---|---|
| High | Stocktake variance | Existing e2e report ghi nhận role gating fail | User sai role có thể thấy/ấn action không đúng | Test lại và fix trước release nếu stocktake thuộc scope |
| High | Accounting stocktake | Trang kế toán thiếu timeline/context | KT không đủ thông tin xử lý | Bổ sung timeline/history/context |
| Medium | Local setup | Backend và website có thể cùng port 3000 | Khó chạy local cùng lúc | Quy định port rõ |
| Medium | ERP dependency | Catalog phụ thuộc `ERP_DB_DSN` | Không test đủ catalog nếu thiếu ERP | Có DSN staging hoặc mark skip |
| Medium | Mock/fallback | Admin có nhiều mock/fallback | Dễ nhầm mock pass với real pass | Tách report mock và real integration |

## 6. Bug list template

| Bug ID | Severity | Module | Summary | Steps | Expected | Actual | Owner | Status |
|---|---|---|---|---|---|---|---|---|
| BUG-ORDER-001 | High | Website checkout / Order API | Lỗi đặt hàng do số điện thoại vượt giới hạn DB và leak lỗi SQL ra UI | 1. Vào giỏ hàng. 2. Đi đến xác nhận đơn hàng. 3. Nhập số điện thoại quá dài có chữ. 4. Bấm `Đặt mua hàng`. | Hiển thị lỗi validation rõ ràng, không submit dữ liệu sai, không leak SQL. | Hiển thị `ERROR: value too long for type character varying(20) (SQLSTATE 22001)` trên UI. | TBD | Open |

**Ghi chú:** Không ghi bug chung chung như “lỗi giao diện”. Mỗi bug phải có steps, expected, actual và evidence.

## 7. Evidence cần thu thập

| Evidence | Áp dụng cho | Ghi chú |
|---|---|---|
| Screenshot desktop/mobile | Website, admin | Chụp full page khi có lỗi layout |
| Network log | API/FE integration | Chụp request/response khi API sai |
| Console log | UI crash | Ghi error stack nếu có |
| API response JSON | API contract | Lưu success/error samples |
| Build logs | Build/lint/type-check | Copy phần lỗi quan trọng |
| Video E2E | Flow dài như checkout/stocktake | Hữu ích khi bug khó mô tả |

## 8. Kết luận tạm thời

| Hạng mục | Kết luận |
|---|---|
| Release readiness | Chưa đủ dữ liệu để GO |
| Lý do | Chưa chạy build/test/runtime |
| Điều kiện tiếp theo | Setup môi trường, chạy smoke/build/API/browser tests, cập nhật report |

## 9. Ghi chú cho QA khi chạy thật

- Không kết luận `Pass` nếu chỉ đọc source.
- Nếu API phụ thuộc ERP và không có DSN, ghi `Blocked` hoặc `Skipped with reason`, không ghi `Pass`.
- Nếu test bằng mock, ghi rõ `Mock Environment`.
- Nếu có lỗi quyền/role, nâng severity tối thiểu High.
- Nếu checkout hoặc tổng tiền sai, coi là P0/P1 tùy mức ảnh hưởng.
