📘 Guide vận hành

PHẦN 5 — CHUẨN TÀI LIỆU

5.1 PRD

Song ngữ Việt–Anh, lưu 02-requirements/prd/FE-XXX-<slug>.md, gồm 10 mục:

1.  Overview / Tổng quan
2.  User Stories
3.  Out of Scope
4.  Functional Requirements
5.  Business Rules
6.  Acceptance Criteria     ← mỗi mục phải có mã FE-XXX-AC-YY
7.  API Contract
8.  Mockup / Wireframe
9.  Non-functional Requirements
10. Open Questions

Self-review PRD (BA chạy trước khi trình):

  • Business Rules không mâu thuẫn nhau
  • Mọi actor đều có ít nhất 1 User Story
  • Out of Scope đã liệt kê rõ
  • Mọi AC đã có mã định danh
  • AC đủ để viết test case
  • Edge case đã có trong Business Rules
  • API Contract có method + endpoint + payload mẫu

5.2 Spec

Lưu 02-requirements/spec/FE-XXX-spec.md. Template đầy đủ ở Phụ lục C. Cấu trúc mỗi mục:

### FE-001-AC-03 — Chặn tạo phiếu trùng VIN trong cùng ngày

**Given**  đã tồn tại phiếu VIN "RL4TA1234" ngày 2026-07-23, trạng thái chưa hủy
**When**   tạo phiếu mới cùng VIN, cùng ngày
**Then**   trả HTTP 409, mã lỗi E_DUPLICATE_VIN, không ghi bản ghi mới

**Trường hợp biên**
| Tình huống | Kết quả |
|-----------|---------|
| Phiếu cũ đã hủy | Cho tạo |
| Khác ngày | Cho tạo |
| VIN sai định dạng | 400, E_INVALID_VIN — thuộc AC-05 |
| Hai request đồng thời | Một thành công, một 409 |

**Nguồn:** PRD mục 6, BR-07
**Test:** `[FE-001-AC-03] should_reject_duplicate_vin_same_day`

Self-review spec (DEV chạy trước khi mở MR):

  • Mỗi AC trong PRD có đúng một mục trong spec, không sót, không thừa
  • Mỗi mục có đủ Given / When / Then
  • Có dữ liệu mẫu cụ thể, không viết chung chung
  • Đã liệt kê trường hợp biên: rỗng, trùng, concurrent, timeout, permission
  • Mã lỗi và HTTP status đã xác định
  • Mọi chỗ phải đoán đã ghi vào "Câu hỏi phát sinh"