PrintUp Biz docs Yêu cầu & nghiệm thu P0
Baseline · brief v2026-09-16 (16/09/2026)

Xuất PDF toàn bộ site

Gộp toàn bộ tài liệu yêu cầu & nghiệm thu thành một trang duy nhất để in/lưu PDF (Chrome: In → Lưu dưới dạng PDF).

Mỗi trang tài liệu bắt đầu một trang PDF mới. Cửa sổ in mở ra — chọn "Lưu dưới dạng PDF" và bật tùy chọn "Đồ họa nền" để giữ màu thẻ/nhãn.

Tổng quan dự án

PrintUp P0 implementation freeze v1: mobile-first + Web storefront, Admin Web, lõi định giá, public design URL, SePay, email + push, một Production Approver duy nhất, hóa đơn/giao hàng thủ công và agent/referral một tầng.

1. Định vị

PrintUp là nền tảng vận hành ngành in theo mô hình tài sản tinh gọn, thuộc sở hữu Công ty Hoàng Thị. Khối 1 bán trực tiếp cho khách; không phải marketplace nhiều nhà cung cấp.

2. Kênh và phạm vi

Kênh/khối P0
Customer app iOS
Customer app Android
Admin/backoffice Web
Public/customer Web storefront Sau P0
PrintUp Supply multi-facility Chỉ extension point kiến trúc
PrintUp Studio mở rộng P0 chỉ agent/referral một tầng
Nội dung đã xác định
B-01PrintUp là nền tảng bán hàng/vận hành lấy ngành in làm trọng tâm, thuộc sở hữu Công ty Hoàng Thị; Khối 1 bán trực tiếp, không phải marketplace nhiều nhà cung cấp, và P0 hỗ trợ cả sản phẩm ecommerce thông thường lẫn sản phẩm in/tùy biến.
B-02P0 gồm customer app iOS + Android, Admin/backoffice Web và public/customer Web storefront. Founder yêu cầu 17/09/2026: Web storefront thực hiện trong P0, không delay.
B-03Khối 2 PrintUp Supply và Khối 3 mở rộng chỉ cần extension point kiến trúc; P0 không triển khai multi-facility routing hoặc marketplace.
B-04Email là login ID; login bằng password hoặc email OTP, không magic link/phone OTP. Guest browse/add-to-cart được nhưng checkout bắt buộc account đã xác thực.
B-05Mỗi doanh nghiệp có một account P0, không multi-user organization; tax code unique khi được nhập.
B-06DesignO/Canva chỉ là nguồn HTTPS public URL cho product/item được cấu hình cần design; không API/SDK/OAuth, không direct file upload và không auto color conversion P0. Standard ecommerce item customization_mode=none không có design/file gate.
B-07Production Approver kiểm design thủ công theo checklist khi áp dụng; chỉ một Production Approver active tại một thời điểm được approve file/production.
B-08Pricing là config-driven theo product: standard ecommerce có thể dùng fixed_unit_price; print/customizable dùng print_engine với production quantity + waste/yield, digital/offset, finishing/fixed cost, target/min margin. Cả hai dùng discount, floor/minimum-net, VAT và snapshot.
B-09Customer checkout không được thấp hơn floor/minimum-net rule đã cấu hình; chỉ Admin được one-off override manual quote/order có reason + audit.
B-10Cart/reorder dùng product behavior + pricing hiện hành; accepted quote/order giữ immutable behavior/pricing snapshot. Real catalog/product modes/fixed prices/print rates/margin/VAT là deployment config, không cần code change.
B-11Manual quote có lifecycle Draft/Sent/Accepted/Rejected/Expired/Converted, mặc định hiệu lực 7 ngày và có thể gồm nhiều item. Standard fixed-price product không bị ép qua quote.
B-12Payment P0 chỉ bank transfer + SePay; partial/over/under/unmatched/late payment vào Accounting reconciliation, không tự Paid.
B-13Refund P0 là chuyển khoản thủ công bên ngoài; after-payment cancel/change không self-service. Production approval là lock point chỉ với item có production flow.
B-14Invoice chỉ lưu info/status/reference trong PrintUp; Accounting phát hành thủ công bên ngoài, customer edit-lock sau Issued.
B-15Production order chỉ tạo cho item được product config bật production. Standard ecommerce direct-fulfilment item không cần file/production gate; production-enabled item có states approval/production/QC/Rework/Scrap.
B-16Shipping P0 hoàn toàn manual, tối đa một active shipment/order, không split shipment và không realtime/volumetric carrier API.
B-17Instant checkout không tự cộng shipping fee; nếu cần thu shipping từ customer phải đưa vào manual quote trước payment.
B-18Referral một tầng; Agent apply mở, Admin approve mới active; code unique, cấm self-referral; commission rate là config và payout một batch mỗi tháng.
B-19Commission base loại VAT/shipping/refund; chỉ Paid + Completed mới eligible; refund sau payout tạo negative adjustment kỳ sau.
B-20Transactional notification P0 là email + push; email là fallback khi push unavailable/fail, transient provider error retry tối đa 3 lần. File/production event chỉ sinh khi item có workflow tương ứng.
B-21Permission matrix v0.1 enforce server-side; sensitive actions phải audit. Management mặc định read-only.
B-22Business data mặc định giữ không thời hạn; Admin delete mặc định soft-delete, hard purge là action riêng có strong confirmation + audit.
B-23P0 UI tiếng Việt, VND integer, backend time UTC và UI Asia/Ho_Chi_Minh; kích thước mm/paper gsm chỉ khi print config áp dụng và weight có unit rõ.
B-24Không nằm P0: direct upload, DesignO/Canva API, auto preflight/color conversion, shipping API/realtime freight, split shipment, COD/card/e-wallet, invoice API, multi-user business, multi-language/currency, inventory/procurement/warehouse, rating/review, marketplace và multi-level referral. Public/customer Web storefront KHÔNG còn là non-goal; nó thuộc P0 theo Founder 17/09/2026. Bán standard ecommerce product KHÔNG nằm trong danh sách non-goal.
B-25M1–M5 giữ tỷ lệ 20/30/25/15/10; M5 gồm pilot 30 ngày và source/config/schema/runbook/account handover.
B-26Implementation freeze v1 không còn business decision mở chặn development; catalog thật, product behavior modes, fixed prices, print rates, margins, VAT, commission và credentials là deployment inputs trước pilot/release.
B-27Admin product configuration quyết định customization/pricing/fulfilment behavior per product/variant; app không được hard-code toàn bộ catalog thành print-only.
B-28Một cart/order có thể chứa cả standard ecommerce và print/customizable item; mỗi item giữ behavior/pricing snapshot riêng và chỉ chạy gate áp dụng cho chính nó.
B-29Giao hàng phân theo loại hàng (D-35, 17/09/2026): hàng nhỏ gọn hướng tới tích hợp GHN và GHTK; hàng cồng kềnh và giao hàng gấp khi khách chọn thì báo giá riêng qua manual quote, không tính realtime ở instant checkout P0.
B-30Dịch vụ thiết kế bên ngoài (D-36, 17/09/2026): khi đặt hàng hoặc tìm sản phẩm, khách có thể yêu cầu dịch vụ thiết kế; yêu cầu được chuẩn hóa và báo giá riêng qua manual quote, không instant price. Thiết kế có thể thuê ngoài; sau accept, dịch vụ là order item riêng không có design/production gate.
B-31Tracking đơn hàng hướng tới lấy data từ ERP (D-37, 17/09/2026); trong thời gian đầu chưa có data từ ERP thì chưa cần implement integration — timeline P0 dùng dữ liệu nhập tay, không dựng ETL/webhook phụ thuộc ERP.
B-32Tài khoản affiliate/agent không được đặt đơn (D-38, 17/09/2026): chặn checkout server-side trên tài khoản đã gán role Agent để tránh nhầm lẫn giữa tk mua hàng và tk affiliate; mua hàng phải dùng tài khoản mua hàng riêng đã verify email.

3. Luồng customer cốt lõi

Guest có thể browse/config/add-to-cart. Khi checkout phải login/create account bằng email. Account login bằng password hoặc email OTP, không magic link; một doanh nghiệp chỉ có một account.

Sau login: product configuration → pricing/reprice → public design URL → order/payment SePay → manual file review → production approval → production/QC → manual fulfilment → complete. Transactional notification dùng email + push.

4. Design/file

PrintUp không tích hợp DesignO/Canva API. Customer cung cấp HTTPS public URL; Production Approver kiểm thủ công. P0 không direct file upload và không auto color conversion/preflight. Mỗi URL change tạo version mới và reset approval.

Checklist baseline gồm access, product/size, bleed theo SKU, raster mục tiêu, font, crop/overflow và color rủi ro. CMYK là preferred; RGB/spot có warning và chỉ được accept thủ công có note.

5. Pricing engine

Pricing là lõi. Engine dùng production quantity + waste/yield, material, digital/offset, finishing, fixed cost, mục tiêu/minimum gross margin, quantity/customer-tier discount, tối đa một promo/coupon, VAT và floor.

  • Digital/offset đều được tính khi eligible; chọn total production cost thấp hơn.
  • Customer checkout không bypass floor.
  • Chỉ Admin được one-off floor override manual quote/order có reason + audit.
  • Cart/reorder dùng pricing hiện hành; accepted quote/order giữ snapshot.
  • Real catalog/rates/margin/VAT là configuration trước pilot, không cần code change.

6. Order/payment/refund

Checkout/order creation phải idempotent. P0 chỉ bank transfer + SePay. Full amount match được auto Paid; partial/over/under/unmatched/late payment vào Accounting reconciliation. Refund thực hiện thủ công bên ngoài và lưu reference/trạng thái.

Trước payment customer có thể edit/cancel + reprice. Sau payment không self-service edit/cancel; Production approval là lock point. Mọi change ảnh hưởng giá/design sau payment phải reprice và reset approval theo policy.

7. Production/QC

Production order theo order item. Chỉ một Production Approver active được approve file và approve production. Production staff cập nhật tiến độ; QC/Rework/Scrap lưu reason/quantity/note. Production approval yêu cầu order Paid và active design version Approved.

8. Fulfilment và invoice

P0 không shipping API. Order có thể no-shipping/pickup hoặc tối đa một active shipment; staff tạo shipment ngoài hệ thống rồi nhập carrier/service/tracking/actual fee/trạng thái. Instant checkout không tự cộng freight; nếu cần thu shipping từ customer thì đưa vào manual quote trước payment.

Invoice được phát hành thủ công bên ngoài. Customer sửa invoice info tới Issued; sau đó chỉ Accounting cập nhật/điều chỉnh.

9. Agent/referral

Referral một tầng, no self-referral. Agent apply mở nhưng Admin approve mới active. Commission rate là config; base commission loại VAT/shipping/refund và chỉ eligible khi order Paid + Completed. Payout một batch mỗi tháng; refund sau payout tạo negative adjustment kỳ sau.

10. RBAC, data, privacy

Permission matrix v1.0 tại Quyền & phân quyền. Authorization enforce server-side; sensitive action audit.

Business data giữ không thời hạn tới khi Admin xóa. Soft-delete là mặc định; hard purge riêng có strong confirmation/audit. Không gửi file/PII sang DesignO/Canva API.

11. Implementation freeze

Không còn business decision mở chặn P0. Decision register đã được bổ sung các default còn thiếu về auth security, identity/address schema, locale/units, cart/order idempotency, fulfilment fee, promotion stacking và explicit non-goals.

Những thứ còn cần trước pilot/release là deployment inputs: catalog thật, rates, margin, VAT, commission rate, provider/app-store/SePay credentials và seed data vận hành.

12. Mốc bàn giao

M1–M5 giữ 20% / 30% / 25% / 15% / 10%. Acceptance dùng FR/NFR/AC hiện hành; M5 gồm pilot thực tế 30 ngày và source/config/schema/runbook/account bàn giao.

13. Chú giải

Thuật ngữĐịnh nghĩa và trạng thái
Implementation freeze v1 Baseline P0 đã đủ rõ để team code/test mà không quay lại hỏi behavior nghiệp vụ; thay đổi behavior sau freeze phải version/change request.
Deployment input Dữ liệu/config/credential thật cần trước pilot/release như catalog, rates, margin, VAT, commission và provider credentials; có thể dùng fixture/mock an toàn khi phát triển.
Tài sản tinh gọn PrintUp sở hữu lớp giá trị lõi như brand, customer/data, platform, pricing, quality standard và routing; năng lực sản xuất có thể mở rộng dần qua mạng lưới.
Khối 1 — PrintUp App P0 bán trực tiếp: customer app iOS/Android + Admin/backoffice Web + public/customer Web storefront (P0, không delay), pricing, order, production và fulfilment.
Khối 2 — PrintUp Supply Mạng lưới nhà cung ứng chuẩn hóa và phân đơn; P0 chỉ giữ extension point kiến trúc.
Khối 3 — PrintUp Studio Mạng lưới đại lý/giới thiệu mở rộng; P0 có agent/referral một tầng, Admin approval và monthly payout.
Public design URL HTTPS URL do customer cung cấp, Production Approver mở/download được không cần customer credential. PrintUp lưu URL/version, không DesignO/Canva API và không direct file upload P0. D-06
Design version Một version của public design URL trên order item. Thay URL tạo version mới và reset file approval; lịch sử version được giữ để truy vết. D-06
Production Approver Internal user duy nhất tại một thời điểm có quyền approve active design version và approve production; Admin chỉ quản lý assignment. D-13
Production quantity Số lượng nội bộ dùng tính cost/sản xuất = ordered quantity + waste. Customer-facing ordered quantity không bị thay bằng production quantity. D-07
Gross margin Margin trên net revenue trước VAT và shipping; dùng cho target/minimum margin và floor formula của pricing engine. D-07
Giá sàn / floor floor_net_price = production_cost / (1 - minimum_margin). Customer checkout không được thấp hơn floor; chỉ Admin one-off override manual quote/order có audit. D-09
Pricing snapshot Bản chụp production cost, sale net, config version, discounts, VAT, technology và margin lưu với accepted quote/order để config tương lai không rewrite lịch sử. D-08
Golden fixture Input + expected pricing breakdown dùng kiểm engine; P0 cần tối thiểu 12 cases phủ waste/yield, print technology, finishing, discount/VAT/floor. D-07
Manual quote Quote versioned cho unsupported/special/shipping/floor-override case, lifecycle Draft/Sent/Accepted/Rejected/Expired/Converted; default validity 7 ngày. D-10
SePay reconciliation Full payment đúng reference có thể auto-match; partial/over/under/unmatched/late payment vào Accounting manual reconciliation có reason/evidence/audit. D-11
Payment lock Sau payment customer không self-service edit/cancel; price/design change phải đi qua request, reprice/reset approval và manual payment/refund handling. D-26
Manual refund Accounting chuyển tiền ngoài hệ thống và ghi amount/reference/reason/status trong Admin; P0 không refund provider API. D-11
Manual invoice PrintUp lưu invoice snapshot/status/reference; Accounting phát hành bên ngoài. Customer edit-lock khi invoice Issued. D-12
Manual shipment Tối đa một active shipment/order P0; staff tạo bên ngoài rồi nhập carrier/service/tracking/actual fee/status. Không carrier API hoặc split shipment. D-32
One-tier referral Commission chỉ cho một direct referrer; code unique, no self-referral, attribution order bị khóa sau payment. Không multi-level referral P0. D-18
Monthly payout batch Một batch chi commission mỗi calendar month; only Eligible commission được đưa vào; refund sau payout tạo negative adjustment batch sau. D-18
Transactional notification Email + push cho event P0. Email là fallback khi push không có token/permission hoặc fail; transient provider failure retry tối đa 3 lần. D-21
Soft-delete Ẩn record khỏi luồng vận hành nhưng giữ traceability; là default delete P0. Hard purge là action riêng có strong confirmation + audit. D-27
P0 non-goal Feature bị loại rõ khỏi P0 và không được tự implement, ví dụ direct upload, Design APIs, carrier APIs, COD/card/e-wallet, multi-user business, inventory, rating/review, marketplace. Public/customer Web storefront không còn trong danh sách này. D-34

Quản lý dự án

Kế hoạch triển khai PrintUp từ 17/09/2026: V1 sau 17 ngày làm việc, V2, V3 final go-live, kế hoạch công việc, người phụ trách, hạn chót, trạng thái, tiến độ, rủi ro và nhịp báo cáo khách hàng.

Trang này là bảng điều hành dự án của PrintUp. Requirement nằm ở FR/NFR/BR/AC; trang này chuyển requirement đã freeze thành kế hoạch thực thi, hạn chót, người phụ trách, release, tiến độ và báo cáo.

Execution đã bắt đầu: P-001 hoàn tất. P-002 đang thực hiện ở mức 80% để chuẩn bị kickoff chính thức ngày 17/09. Xem Kickoff V1 — 17/09/2026Biên bản họp 17/09/2026 — cập nhật phạm vi P0.

Nguyên tắc sử dụng

  • Ngày bắt đầu dự án: 17/09/2026.
  • V1 mục tiêu: 09/10/2026, tương ứng 17 ngày làm việc khi tính 17/09 là ngày số 1 và chỉ loại Thứ Bảy/Chủ Nhật.
  • V2 planning mục tiêu: 23/10/2026.
  • V3 final go-live planning mục tiêu: 06/11/2026.
  • Sau V3 bắt đầu 30-day live pilot/hypercare để hoàn tất M5/bàn giao.
  • V1 là mốc được khóa theo yêu cầu hiện tại. V2/V3 là planning baseline để team và khách hàng có lịch theo dõi; thay đổi phạm vi hoặc thay đổi lớn về hạn chót phải có note/change request.
  • Product phạm vi P0 phải giữ cả hai capability: standard ecommerce product và print/customizable product. Behavior của từng product/variant do Admin config; không hard-code toàn app thành print-only.
  • V1 demo/QA bắt buộc có ít nhất một standard ecommerce SKU, một print/customizable SKU và một mixed cart/order để chứng minh các gate được áp dụng theo từng item.
  • Không đổi một task sang Hoàn tất nếu chưa có bằng chứng tương ứng: PR/build/test/UAT/demo hoặc runbook, tùy loại công việc.
  • Điểm chặn quá một ngày làm việc phải được báo chặn ngay, không chờ báo cáo tuần.
Lọc trực tiếp kế hoạch công việc.
17/09/2026
Ngày bắt đầu
09/10/2026
V1 target · 17 ngày làm việc
06/11/2026
V3 final go-live
1/63
Task hoàn tất
0
Đang thực hiện
0
Bị chặn

Planning baseline: V1 là mốc cố định theo yêu cầu: 17 ngày làm việc, tính 17/09/2026 là ngày làm việc số 1 và chỉ loại Thứ Bảy/Chủ Nhật. V2 và V3 dùng nhịp 10 ngày làm việc/mỗi vòng làm planning baseline. Clarification product-flow ngày 16/09 không loại tính năng ecommerce thông thường: cùng catalog phải hỗ trợ standard ecommerce và print/customizable bằng Admin config, nhưng không thay release dates baseline. Ngày 17/09/2026 Founder yêu cầu đưa public/customer Web storefront vào P0, không delay: thêm WS-10/V1-20 và mở rộng V1 exit criteria cho storefront Web.

1. Release roadmap

MốcMục tiêuBắt đầuTargetNgày làm việcCam kếtStatusExit criteria
V1
Core luồng giao dịch
Có luồng customer end-to-end đầu tiên cho cả standard ecommerce và print/customizable trên mobile (iOS/Android) và public Web storefront: account → catalog/product-config flow → pricing → checkout/order → SePay → conditional approval/production → tracking; Admin Web cấu hình product behavior và vận hành control plane cốt lõi. 17/09/2026 09/10/2026 17 Fixed planning target Đã lên kế hoạch Demo iOS + Android + storefront Web trên staging với ít nhất một standard ecommerce SKU và một print/customizable SKU; fixed-unit + print pricing fixtures pass; standard product không bị ép design/production; SePay happy-path + exception cơ bản; Admin xử lý order/approval; storefront Web chạy luồng browse→cart→checkout→tracking bằng cùng API; không có blocker Severity-1.
V2
Vận hành hoàn chỉnh + vòng lặp tăng trưởng
Hoàn chỉnh backoffice operations: quote, conditional production/QC/rework, shipping thủ công, reorder, agent/referral/commission, RBAC/audit/reporting và notification đầy đủ. 12/10/2026 23/10/2026 10 Planning baseline Đã lên kế hoạch Các flow nghiệp vụ P0 còn lại chạy được trên staging; mixed standard/print order regression pass; RBAC/audit pass; V2 regression + customer UAT round 1 pass hoặc có waiver rõ.
V3
Go-live thật bản cuối
Hardening, production configuration, security/ops readiness, app release candidate, full UAT và final go-live. 26/10/2026 06/11/2026 10 Planning baseline Đã lên kế hoạch Production smoke pass; rollback/runbook sẵn sàng; release candidate được duyệt; không còn blocker go-live; hệ thống mở vận hành thực tế.
M5
Pilot 30 ngày & bàn giao
Chạy thử thực tế 30 ngày sau V3 go-live, theo dõi lỗi/vận hành và chuẩn bị nghiệm thu bàn giao cuối. 06/11/2026 05/12/2026 30 ngày lịch Contract follow-through Đã lên kế hoạch Pilot đủ 30 ngày lịch; defect/evidence được tổng hợp; source/config/schema/runbook/accounts được bàn giao; final acceptance report sẵn sàng ngày làm việc kế tiếp.

2. Work plan

Mỗi task có một owner chính, deadline, status, progress, dependency, requirement reference và note. Baseline nằm ở project.yaml; live execution update nằm ở project-progress.yaml để giữ lịch sử kế hoạch ban đầu. Khi đổi deadline, giữ deadline cũ trong note để lịch sử báo cáo khách hàng không bị mất.

IDReleaseWorkstreamCông việcPhụ tráchStartDeadlineStatusProgressDependencyRefsNote
P-001 Pre-kickoff Quản trị dự án Chốt đặc tả P0 đủ dùng cho triển khai: truy vết yêu cầu và Định nghĩa hoàn tất Product owner + Tech Lead 16/09/2026 17/09/2026 Hoàn tất 100% None Decision register, FR/NFR/BR/AC Implementation freeze v1 là baseline; behavior mới sau freeze đi qua change request. Clarification ngày 16/09 xác nhận standard ecommerce là P0 capability, không phải scope mới bị defer.
P-002 V1 Quản trị dự án Kickoff dự án: phạm vi, vai trò, nhịp báo cáo, truyền thông và quy tắc báo chặn Product owner + Tech Lead + QA 17/09/2026 17/09/2026 Đã lên kế hoạch 0% P-001 Project plan Khóa owner/assignee thực tế ngay trong kickoff.
P-003 V1 Hạ tầng Môi trường staging/dev, cổng CI, dữ liệu kiểm thử và quy ước bằng chứng phát hành Tech Lead / DevOps 17/09/2026 18/09/2026 Đã lên kế hoạch 0% P-002 NFR-05..NFR-08 Không dùng production secrets/data cho test fixtures.
P-004 V1 Sản phẩm Map giao diện/API/trạng thái cho app khách (mobile) và Admin Web theo đặc tả đã chốt Product + Tech Lead + Mobile + Admin Frontend + Backend 17/09/2026 18/09/2026 Đã lên kế hoạch 0% P-001 Journey, states, FR-01..FR-41, AC-13 Map cả standard ecommerce direct-flow và print/customizable flow cho mobile, Admin Web và public Web storefront. Public Web storefront thuộc P0 theo Founder 17/09/2026, không delay.
V1-01 V1 Xác thực Tài khoản email: đăng nhập mật khẩu/OTP email, xác thực, đặt lại mật khẩu, quản lý phiên + giới hạn tỷ lệ Backend + Mobile 21/09/2026 24/09/2026 Đã lên kế hoạch 0% P-003 FR-01, D-20, D-28 Không magic link, phone/SMS OTP hoặc social login.
V1-02 V1 Khách hàng Hồ sơ cá nhân/doanh nghiệp, một doanh nghiệp một tài khoản, sổ địa chỉ và thông tin hóa đơn Backend + Mobile + Admin Frontend 21/09/2026 24/09/2026 Đã lên kế hoạch 0% V1-01 FR-01, FR-07, FR-15, D-29 Business không có members/multi-user.
V1-03 V1 Danh mục Schema sản phẩm/phân loại + hành vi sản phẩm; Admin tạo/sửa/ẩn/publish có kiểm tra hợp lệ Backend + Admin Frontend 21/09/2026 25/09/2026 Đã lên kế hoạch 0% P-003 FR-02, FR-11, FR-41, D-01, AC-13 Config per product/variant phải hỗ trợ standard ecommerce và print/customizable; chỉ yêu cầu config đúng mode đã chọn.
V1-04 V1 Danh mục Danh mục mobile, trang chi tiết sản phẩm, chọn phân loại/tùy chọn theo hành vi sản phẩm Mobile + Backend 23/09/2026 28/09/2026 Đã lên kế hoạch 0% V1-03 FR-02, AC-13 Standard product có thể chỉ variant/phân loại + quantity; print options chỉ render khi product config bật.
V1-05 V1 Định giá Cấu hình giá theo phiên bản: đơn giá cố định + vật liệu/kỹ thuật in/hậu kỳ/chi phí cố định, hao hụt/năng suất, biên lợi nhuận, VAT Backend + Admin Frontend 21/09/2026 25/09/2026 Đã lên kế hoạch 0% V1-03 FR-12, FR-20..FR-27, D-07..D-09, AC-13 Standard product không phụ thuộc print rate table; rates thật là deployment input, development dùng fixtures.
V1-06 V1 Định giá Runtime định giá: nhánh giá cố định + nhánh engine in, chiết khấu/giá sàn/VAT và bản chụp giá bất biến Backend 23/09/2026 30/09/2026 Đã lên kế hoạch 0% V1-05 FR-04, FR-20..FR-27, AC-04, AC-13 >=12 print golden fixtures + fixed-unit fixtures; customer checkout không bypass floor/minimum-net.
V1-07 V1 Định giá Trình biên tập giá Admin, lịch sử phiên bản, phá giá sàn một lần + audit Admin Frontend + Backend 28/09/2026 01/10/2026 Đã lên kế hoạch 0% V1-05, V1-06 FR-12, FR-24, FR-26, D-09 Override chỉ Admin, bắt buộc reason/before-after; editor hỗ trợ đúng pricing mode.
V1-08 V1 Thiết kế Quản lý phiên bản public design URL có điều kiện + khách gắn/sửa trước khi khóa Backend + Mobile 23/09/2026 28/09/2026 Đã lên kế hoạch 0% V1-01, V1-03 FR-03, D-01, D-03, D-04, D-06, AC-13 Chỉ product customization_mode=public_design_url mới có field này; standard product không render/require design.
V1-09 V1 Thiết kế Checklist file/màu thủ công của Admin + reset duyệt của Production Approver khi có điều kiện Admin Frontend + Backend 25/09/2026 30/09/2026 Đã lên kế hoạch 0% V1-08 FR-19, D-05, D-06, D-13, AC-13 Checklist chỉ cho item có design workflow; standard item file state = Not required.
V1-10 V1 Giỏ hàng Giỏ hàng khách vãng lai + gộp sau đăng nhập; giỏ trộn loại sản phẩm; reprice giỏ theo cấu hình hiện hành Backend + Mobile 28/09/2026 01/10/2026 Đã lên kế hoạch 0% V1-04, V1-06 FR-01, FR-02, D-20, D-31, AC-13 Guest cannot create order; standard + print item được cùng cart nhưng giữ configuration riêng.
V1-11 V1 Thanh toán đơn Checkout/tạo đơn idempotent, mã đơn duy nhất, mã tham chiếu thanh toán, đóng băng bất biến hành vi + giá từng order item Backend + Mobile 29/09/2026 02/10/2026 Đã lên kế hoạch 0% V1-10 FR-06, FR-41, D-31, AC-13 Double tap/retry không tạo duplicate order; snapshot product behavior per item.
V1-12 V1 Thanh toán Tích hợp SePay: đối chiếu mã thanh toán, idempotency, kiểm tra webhook/xử lý retry Backend 29/09/2026 02/10/2026 Đã lên kế hoạch 0% V1-11 FR-06, NFR-15, AC-08 Production credential có thể tới sau; development dùng test/mock config.
V1-13 V1 Accounting Hàng chờ đối soát thủ công cho thanh toán thiếu/thừa/không khớp/chậm Backend + Admin Frontend + Accounting 01/10/2026 05/10/2026 Đã lên kế hoạch 0% V1-12 D-11, AC-08 Không tự đánh Paid cho exception; manual action có audit.
V1-14 V1 Đơn hàng (Admin) Danh sách/chi tiết đơn hàng Admin, dòng thời gian trạng thái theo từng item và cổng phân quyền Admin Frontend + Backend 29/09/2026 05/10/2026 Đã lên kế hoạch 0% V1-11 FR-13, FR-40, AC-13 Payment/file/production states hiển thị tách trục; gate không áp dụng phải là Not required, không phải Pending.
V1-15 V1 Sản xuất Đơn sản xuất có điều kiện + cổng duyệt của một Production Approver duy nhất Backend + Admin Frontend 01/10/2026 06/10/2026 Đã lên kế hoạch 0% V1-09, V1-13, V1-14 FR-14, FR-19, FR-40, AC-06, AC-13 Chỉ production-enabled item tạo production order. Nếu item cần design: Paid + design Approved; direct-fulfilment item bypass production.
V1-16 V1 Hóa đơn Thông tin hóa đơn lúc checkout + trạng thái/mã tham chiếu do Kế toán ghi thủ công Backend + Mobile + Admin Frontend 01/10/2026 05/10/2026 Đã lên kế hoạch 0% V1-11 FR-07, D-12, AC-09 Customer edits until Issued; after Issued only Accounting.
V1-17 V1 Theo dõi & thông báo Dòng thời gian đơn hàng cho khách + gửi thông báo email/push cơ sở Backend + Mobile 02/10/2026 06/10/2026 Đã lên kế hoạch 0% V1-14 FR-08, D-21, AC-13 Không phát/hiển thị file-production event cho standard item; full retry matrix hoàn thiện ở V2.
V1-18 V1 Kiểm thử Tích hợp/kiểm hồi quy V1: mobile + admin + web bán hàng + backend + hai luồng định giá/sản phẩm + SePay QA + toàn bộ đội kỹ thuật 05/10/2026 08/10/2026 Đã lên kế hoạch 0% V1-01..V1-20 AC-01..AC-09, AC-13 Bắt buộc test standard ecommerce, print/customizable và mixed order. Fix all Severity-1; Severity-2 phải có owner/waiver trước release.
V1-19 V1 Phát hành Phát hành V1 lên staging, demo, bản ghi phát hành và báo cáo trạng thái cho khách hàng Product owner + Tech Lead + QA 09/10/2026 09/10/2026 Đã lên kế hoạch 0% V1-18 V1 exit criteria Demo phải có standard ecommerce + print/customizable. Mốc 17 ngày làm việc, 17/09 là ngày số 1; không tính Thứ Bảy/Chủ Nhật.
V1-20 V1 Web bán hàng (storefront) MVP web bán hàng công khai: danh mục/chi tiết sản phẩm, giỏ hàng khách vãng lai, đăng nhập/OTP, checkout/đặt hàng và theo dõi đơn dùng chung backend API với mobile Frontend web bán hàng + Backend 28/09/2026 06/10/2026 Đã lên kế hoạch 0% V1-06, V1-10, V1-11 FR-01, FR-02, FR-04, FR-06, FR-08, D-02, NFR-02 Founder yêu cầu 17/09/2026: Web storefront thuộc P0, không delay. Storefront chỉ là presentation layer trên API/flow đã freeze; không nhân đôi business logic và không mở scope đã freeze.
V1-21 V1 Dữ liệu triển khai Mua domain production và cấu hình DNS (storefront/admin/api theo quy hoạch như routing production đã định) Founder 17/09/2026 30/09/2026 Đã lên kế hoạch 0% P-002 Deployment inputs, NFR-07 Nhiệm vụ thực hiện bởi Founder; output là domain đã đăng ký + DNS access trao đổi an toàn với Tech Lead. Tracking để không bị quên; không lưu credential vào repo.
V1-22 V1 Dữ liệu triển khai Đăng ký/thông báo website thương mại điện tử với Bộ Công Thương Founder 17/09/2026 30/09/2026 Đã lên kế hoạch 0% V1-21 Deployment inputs; pháp lý TMĐT Nhiệm vụ thực hiện bởi Founder (tài khoản/đăng ký chính chủ); bao gồm đăng ký website TMĐT và cập nhật nội dung/logo theo yêu cầu hiển thị. Tracking để không bị quên; pháp lý cụ thể có thể nhờ V2-17 tổng hợp.
V2-01 V2 Báo giá thủ công Vòng đời báo giá thủ công/phiên bản/hết hạn 7 ngày/chấp nhận/chuyển hóa đơn/định giá lại Backend + Admin Frontend + Mobile 12/10/2026 15/10/2026 Đã lên kế hoạch 0% V1 pricing/order FR-05, FR-16, D-10, AC-05 Hỗ trợ multi-item quote và shipping charge riêng.
V2-02 V2 Sản xuất Máy trạng thái sản xuất đầy đủ có điều kiện + dấu thời gian tiến độ Backend + Admin Frontend 12/10/2026 15/10/2026 Đã lên kế hoạch 0% V1-15 FR-14, D-13, AC-13 Production-enabled: Awaiting file/Not required → Approved → In production → QC → Ready → Completed + hold/rework/scrap. Direct-fulfilment = no production order.
V2-03 V2 Sản xuất QC, làm lại/hủy phế liệu, phiếu sản xuất/khung xem in Backend + Admin Frontend + Vận hành/Sản xuất 13/10/2026 16/10/2026 Đã lên kế hoạch 0% V2-02 D-13, AC-06 Rework/Scrap bắt buộc reason + quantity + note.
V2-04 V2 Giao hàng Giao hàng thủ công: có thể chuyển ngay hoặc chờ sản xuất; tự nhận hàng/không giao hoặc tối đa một shipment hoạt động mỗi đơn, hãng vận chuyển/tracking/phí/trạng thái Backend + Admin Frontend + Vận hành/Sản xuất 12/10/2026 16/10/2026 Đã lên kế hoạch 0% V1-14, V2-02 FR-29..FR-36, D-14, D-32, AC-07, AC-13 Không split shipment, carrier API, auto quote hoặc webhook; direct-fulfilment item không chờ production.
V2-05 V2 Giao hàng Luồng giao thất bại/hoàn trả và cập nhật dòng thời gian khách thủ công Backend + Admin Frontend 15/10/2026 19/10/2026 Đã lên kế hoạch 0% V2-04 FR-35, D-26 Refund/cancellation không tự động.
V2-06 V2 Khách hàng Đặt lại đơn cũ với hành vi sản phẩm/khả năng bán/giá hiện hành Backend + Mobile 15/10/2026 19/10/2026 Đã lên kế hoạch 0% V1 order/pricing FR-09, D-08, D-31 Không copy stale price/payment/file approval; configuration chỉ clone field còn áp dụng theo product behavior hiện hành.
V2-07 V2 Đại lý/giới thiệu Agent nộp đơn đăng ký + Admin duyệt/từ chối/tạm dừng + mã giới thiệu Backend + Admin Frontend + Mobile 12/10/2026 16/10/2026 Đã lên kế hoạch 0% V1 account/order FR-10, FR-17, D-18 Open registration nhưng chưa active trước Admin approval.
V2-08 V2 Đại lý/giới thiệu Gán nguồn giới thiệu: mã hợp lệ đầu tiên trên đơn đã trả đầu tiên; cấm tự giới thiệu Backend 15/10/2026 19/10/2026 Đã lên kế hoạch 0% V2-07 FR-10, D-18 Một tầng, no multi-level.
V2-09 V2 Hoa hồng Sổ hoa hồng, đủ điều kiện sau đã trả + hoàn thành, batch hàng tháng, điều chỉnh âm sau hoàn tiền Backend + Admin Frontend + Accounting 16/10/2026 21/10/2026 Đã lên kế hoạch 0% V2-08 FR-17, D-18, D-26, AC-10 Rate là deployment config; formula dựa net merchandise revenue sau discount, excl VAT/shipping/refund.
V2-10 V2 Phân quyền Áp thực thi ma trận phân quyền v1.0 trên UI + API + kiểm hồi quy ma trận Backend + Admin Frontend + QA 12/10/2026 20/10/2026 Đã lên kế hoạch 0% V1/V2 features FR-40, NFR-09, D-19, AC-11 Admin không tự có Production Approver privilege.
V2-11 V2 Kiểm soát/audit Audit các thao tác nhạy cảm + lịch sử sự kiện nghiệp vụ bất biến Backend + Admin Frontend 15/10/2026 21/10/2026 Đã lên kế hoạch 0% V2-10 NFR-11, BR-16 Pricing override, payment reconciliation, approvals, agent, payout, delete/purge.
V2-12 V2 Báo cáo Báo cáo doanh thu/biên lợi nhuận/thanh toán/loại sản phẩm/sản xuất/đại lý/giao hàng thủ công Backend + Admin Frontend 16/10/2026 21/10/2026 Đã lên kế hoạch 0% Core domain data FR-18, FR-27, FR-36 Report phải truy ngược được source order/payment và phân biệt fixed-unit vs print-engine khi cần.
V2-13 V2 Thông báo Ma trận sự kiện giao dịch: email + push, dự phòng email, retry, nhật ký gửi Backend + Mobile 15/10/2026 21/10/2026 Đã lên kế hoạch 0% Order/payment/conditional file-production/shipping states FR-08, D-21, BR-19 Notification failure không rollback transaction business; không sinh event cho gate Not required.
V2-14 V2 Dữ liệu/Quyền riêng tư Xóa mềm mặc định, hard purge riêng có xác nhận/audit, ngữ nghĩa lưu dữ liệu Backend + Admin Frontend 19/10/2026 21/10/2026 Đã lên kế hoạch 0% V2-10, V2-11 D-27, NFR-10, NFR-14 Order/payment/invoice/audit records không cascade-delete ngoài policy.
V2-15 V2 Kiểm thử/UAT Hồi quy V2 + vòng UAT 1 với khách hàng + phân loại lỗi QA + Product owner + toàn bộ đội kỹ thuật 20/10/2026 22/10/2026 Đã lên kế hoạch 0% V2-01..V2-20 AC-01..AC-13 Open issues phải có severity/owner/target/waiver.
V2-16 V2 Phát hành Phát hành V2, demo, bản ghi phát hành và báo cáo trạng thái cho khách hàng Product owner + Tech Lead + QA 23/10/2026 23/10/2026 Đã lên kế hoạch 0% V2-15 V2 exit criteria Checkpoint trước hardening/go-live phase.
V2-17 V2 Pháp lý/Hợp đồng Nghiên cứu chữ ký số để ký hợp đồng điện tử với khách hàng: khung pháp lý (Luật Giao dịch điện tử/Nghị định về chữ ký số, chữ ký số chuyên dùng), đánh giá NCC CA (Viettel-CA, VNPT-CA, FPT-CA…), luồng ký HĐ điện tử với khách và so sánh workflow ký khả thi Product owner + Tech Lead + Legal 12/10/2026 16/10/2026 Đã lên kế hoạch 0% P-002 Scope extension / change request Chỉ nghiên cứu/đánh giá khả thi, không implement trong sprint; output là báo cáo đề xuất: loại chữ ký số cần thiết (HSM/token/timestamp), chi phí CA, pháp lý hợp đồng điện tử với personal/business customer và yêu cầu tích hợp. Implement sau khi có change request được duyệt.
V2-18 V2 Giao hàng Nghiên cứu tích hợp GHN/GHTK (theo D-35): API tạo đơn/ký gửi, biểu phí, dịch vụ, yêu cầu trọng lượng/kích thước, label/tracking webhook và so sánh với luồng manual hiện tại cho hàng nhỏ gọn Tech Lead + Vận hành + Product owner 19/10/2026 22/10/2026 Đã lên kế hoạch 0% V2-04 D-35, FR-29..FR-31, FR-34, FR-37 Tracking task để không bị quên; chỉ nghiên cứu so sánh khả thi, không tích hợp carrier API trong P0. Output là đề xuất tích hợp GHN/GHTK cho hàng nhỏ gọn + phương án xử lý hàng cồng kềnh/giao hàng gấp bằng báo giá riêng; implement chỉ sau khi có change request được duyệt.
V2-19 V2 Thiết kế Nghiên cứu DesignO web-to-print: scope web-to-print template/editor, API khả dụng, chi phí/license và so sánh với luồng HTTPS public design URL + manual checklist hiện hành Product owner + Tech Lead 12/10/2026 16/10/2026 Đã lên kế hoạch 0% P-004 D-03, D-06, FR-03, FR-19 Tracking task để không bị quên; chỉ nghiên cứu, không tích hợp DesignO API/SDK trong P0 (D-34 non-goal giữ nguyên). Output là đề xuất web-to-print: user value, chi phí/license, data flow và yêu cầu pháp lý; implement chỉ sau khi có change request được duyệt.
V2-20 V2 Thiết kế Dịch vụ thiết kế bên ngoài (D-36, FR-42): luồng khách yêu cầu design service khi đặt hàng/tìm sản phẩm, Sales chuẩn hóa + báo giá riêng qua manual quote, convert thành order item dịch vụ Backend + Admin Frontend + Mobile + Storefront Web + Sales 19/10/2026 22/10/2026 Đã lên kế hoạch 0% V2-01 FR-05, FR-42, D-36, AC-05 Feature mới theo Founder 17/09/2026. Tái dùng manual quote lifecycle; service item không ép design/production gate. Chi phí thuê ngoài ghi như operational cost; UI tiếng Việt cho cả mobile + storefront web.
V2-21 V2 Pháp lý/Hợp đồng Đánh giá yếu tố pháp lý toàn bộ dự án (review pháp lý từ đầu đến cuối) Founder + Legal counsel (thuê ngoài) + Product owner 12/10/2026 16/10/2026 Đã lên kế hoạch 0% P-002, V1-22 Deployment inputs; pháp lý TMĐT, dữ liệu cá nhân, hợp đồng Tracking task để không bị quên. Phạm vi review: hợp đồng/milestone nghiệm thu, đăng ký website TMĐT Bộ Công Thương, bảo vệ dữ liệu cá nhân (khung pháp lý hiện hành), quyền sở hữu thương hiệu/nội dung, cơ chế agent/commission, hóa đơn/thuế, chữ ký số HĐ điện tử (liên kết V2-17), điều khoản dịch vụ và trách nhiệm với hàng thuê ngoài (design/cấu hình). Output là legal risk log + remediation plan có owner/deadline.
V2-22 V2 Pháp lý/Hợp đồng Trang pháp lý: Điều khoản sử dụng, Chính sách bảo mật, cảnh báo và miễn trừ trách nhiệm chuẩn chỉnh trên web bán hàng + mobile + Admin hoặc bản công khai dùng chung Product owner + Legal counsel (thuê ngoài) + Storefront Web + Mobile 19/10/2026 22/10/2026 Đã lên kế hoạch 0% V2-21 V2-21 remediation plan Tracking task để không bị quên. Nội dung bắt buộc: giới hạn/miễn trừ trách nhiệm đúng luật và không vượt mức pháp luật cho phép, cảnh báo về giá/quote/manual shipping/design file khách cung cấp, quy chế xử lý khiếu nại/khiếu kiện, quyền/giới hạn với hàng thuê ngoài; bản copy được soạn/review bởi pháp lý trước khi publish; link từ footer + app, versioned khi thay đổi.
V3-01 V3 Dữ liệu triển khai Nhập/kiểm chứng danh mục thật, chế độ hành vi sản phẩm, đơn giá cố định, giới hạn sản xuất, biểu giá vật liệu/in/hoàn thiện, biên lợi nhuận/giá sàn, VAT, cấu hình hoa hồng Product + Kế toán + Vận hành/Sản xuất + Admin 26/10/2026 30/10/2026 Đã lên kế hoạch 0% Customer-provided production/catalog data Deployment inputs, D-01, D-07 Sai product behavior hoặc pricing config là go-live blocker dù code đã hoàn tất.
V3-02 V3 Môi trường vận hành thật Secrets/cấu hình vận hành thật: SePay, email, push, domain, storage, database, quyền truy cập ký/tài khoản Tech Lead / DevOps + Product owner 26/10/2026 30/10/2026 Đã lên kế hoạch 0% V3-01, V1-21 NFR-05..NFR-07 Credentials không lưu vào biz-docs/repo; domain đã mua từ V1-21 sẽ trao đổi secret/access bằng kênh an toàn.
V3-03 V3 Quan sát hệ thống Giám sát trạng thái/lỗi, cảnh báo, ghi nhật ký phát hành và dashboard vận hành Tech Lead / DevOps 26/10/2026 30/10/2026 Đã lên kế hoạch 0% Production environment NFR-13 Core API + SePay failures phải observable.
V3-04 V3 Khôi phục Sao lưu + diễn tập khôi phục + sổ tay khôi phục Tech Lead / DevOps + QA 27/10/2026 30/10/2026 Đã lên kế hoạch 0% Production-like environment NFR-14 Backup success không thay restore test.
V3-05 V3 Hiệu năng Kiểm smoke/tải các luồng tới hạn và sửa lỗi hồi quy nghiêm trọng QA + Backend + Mobile/Admin 28/10/2026 02/11/2026 Đã lên kế hoạch 0% Feature complete V2 NFR-12 Test catalog, standard fixed-price path, print pricing, mixed checkout, order tracking và Admin với P0 dataset.
V3-06 V3 Bảo mật Củng cố bảo mật: lạm dụng đăng nhập, RBAC, secrets, TLS, dữ liệu cá nhân, kiểm thử âm tính với audit/xóa Tech Lead + QA 28/10/2026 02/11/2026 Đã lên kế hoạch 0% V2-10, V2-14 NFR-09..NFR-11 Không go-live với privilege escalation hoặc critical data leak.
V3-07 V3 Phát hành mobile Build bản phát hành ứng viên iOS/Android, ký số, metadata/khả năng nộp cửa hàng Mobile + Product owner 26/10/2026 02/11/2026 Đã lên kế hoạch 0% App owner accounts/signing access NFR-02, NFR-06 App Store/Google Play review time là external dependency; submit sớm, không coi review SLA là engineering guarantee.
V3-08 V3 Kiểm thử Hồi quy end-to-end đầy đủ trên cấu hình giống production QA + toàn bộ đội kỹ thuật 02/11/2026 04/11/2026 Đã lên kế hoạch 0% V3-01..V3-07 AC-01..AC-13 Bao gồm standard ecommerce, print/customizable, mixed order, pricing, payment exceptions, conditional approval gates, refund, commission, notification, delete.
V3-09 V3 UAT UAT cuối với khách hàng + phê duyệt go-live Product owner + QA + đại diện khách hàng 03/11/2026 05/11/2026 Đã lên kế hoạch 0% V3-08 Acceptance page Known issue được chấp nhận phải ghi waiver/impact/target.
V3-10 V3 Go-live Diễn tập go-live, danh sách kiểm tra/chuyển dữ liệu, kịch bản smoke và diễn tập rollback Tech Lead / DevOps + QA 04/11/2026 05/11/2026 Đã lên kế hoạch 0% V3-08 NFR-16 Không deploy production nếu rollback/owner/access chưa rõ.
V3-11 V3 Go-live Go-live thật V3 + smoke trên production + báo cáo cho khách hàng Product owner + Tech Lead + QA + toàn bộ đội kỹ thuật 06/11/2026 06/11/2026 Đã lên kế hoạch 0% V3-09, V3-10 V3 exit criteria Bắt đầu live pilot/hypercare sau go-live.
M5-01 M5 Pilot Pilot trực tiếp 30 ngày / hỗ trợ bay sát (hypercare) Tech Lead + QA + Product owner + Ops 06/11/2026 05/12/2026 Đã lên kế hoạch 0% V3-11 NFR-16 30 ngày lịch theo wording đặc tả; theo dõi incident, defects, usage và operational gaps.
M5-02 M5 Pilot Phân loại/khắc phục lỗi và báo cáo pilot hàng tuần QA + Tech Lead + All engineering 06/11/2026 05/12/2026 Đã lên kế hoạch 0% M5-01 Pilot evidence Không biến feature request mới thành defect; dùng change request cho scope mới.
M5-03 M5 Bàn giao Gói bàn giao mã nguồn/cấu hình/schema/sổ tay vận hành/tài khoản/bằng chứng Tech Lead + Product owner 30/11/2026 07/12/2026 Đã lên kế hoạch 0% M5-01 NFR-05, NFR-06, NFR-16 Không đưa secrets raw vào handover document; chuyển access bằng kênh an toàn.
M5-04 M5 Nghiệm thu Báo cáo pilot cuối, danh sách lỗi còn mở và buổi nghiệm thu/bàn giao M5 Product owner + Tech Lead + QA + Customer stakeholders 07/12/2026 07/12/2026 Đã lên kế hoạch 0% M5-01, M5-03 M5 acceptance Ngày làm việc kế tiếp sau pilot window để tổng hợp và ký report.

3. Nhịp báo cáo

CadenceOwnerNội dung
Hàng ngày — nội bộTech LeadTask đổi status, blocker, overdue, PR/build/release evidence và next action.
Mỗi Thứ Sáu — khách hàngProduct owner + Tech LeadExecutive status, % progress, việc đã xong, đang làm, việc tuần tới, risk/blocker, scope change và mốc release.
V1 / V2 / V3Product owner + QA + Tech LeadRelease notes, demo/evidence, known issues, UAT result, scope delivered và kế hoạch vòng tiếp theo.
Khi có blocker > 1 ngày làm việcOwner của taskEscalate ngay, ghi impact timeline, dependency và phương án unblock; không chờ báo cáo tuần.

4. Risk register

IDRiskImpactOwnerMitigationStatus
R-01 Catalog/product-mode/fixed-price/print-rate/margin/VAT/commission production data đến muộn hoặc sai. Code vẫn làm được bằng fixtures nhưng UAT/go-live có thể trễ, product đi sai flow hoặc pricing sai. Product owner + Accounting + Production/Ops Freeze schema sớm; dùng import/checklist; require sample golden orders cho cả standard + print; data verification trước V3-01. Mở
R-02 Production SePay/email/push credentials hoặc owner accounts chưa sẵn sàng. Chặn production smoke/go-live dù implementation pass. Product owner + Tech Lead Dùng sandbox/mock khi dev; checklist owner account từ V1; production credentials required trước 30/10. Mở
R-03 App Store / Google Play review mất nhiều thời gian hơn kế hoạch. Public store availability có thể lệch V3 go-live date. Mobile + Product owner Chuẩn bị signing/metadata sớm; submit RC sớm; có internal/TestFlight/closed-track fallback cho UAT/pilot nếu phù hợp. Mở
R-04 Public DesignO/Canva URL bị private/hết quyền hoặc nội dung thay đổi. Production của item cần design phải dừng ở file approval. Production Approver + Customer URL versioning, access checklist, reset approval khi URL đổi và clear customer error message; không ảnh hưởng standard ecommerce item không dùng design. Mở
R-05 Scope creep sau implementation freeze. Đẩy trễ V1/V2/V3 và làm mơ hồ acceptance. Product owner Feature ngoài freeze/non-goal phải tạo change request với impact timeline/cost trước khi nhận vào sprint. Mở
R-06 Production workflow thực tế khác state machine đã freeze. Có thể cần chỉnh Admin/domain model ở V2/V3 cho product production-enabled. Production/Ops + Product owner Walkthrough production thật trước V2; thay đổi behavior bằng version/change request, không patch âm thầm. Mở
R-07 Admin cấu hình sai product behavior khiến standard product bị yêu cầu design/production hoặc print product bỏ qua gate. Customer không checkout được, order đi sai workflow hoặc rủi ro vận hành. Product owner + Admin + QA Publish validation theo mode, fixture/UAT cho standard + print, order snapshot behavior, cảnh báo khi đổi mode trên product đã có order. Mở

5. Mẫu báo cáo khách hàng

  1. 1. Trạng thái tổng thể: Xanh / Vàng / Đỏ và lý do
  2. 2. Tiến độ: Hoàn tất / Tổng số, theo V1/V2/V3
  3. 3. Đã hoàn tất từ báo cáo trước
  4. 4. Đang thực hiện
  5. 5. Kế hoạch kỳ tiếp theo
  6. 6. Điểm chặn / quá hạn / rủi ro và người phụ trách
  7. 7. Thay đổi phạm vi/change request mới
  8. 8. Mục tiêu phát hành và độ tin cậy
  9. 9. Link demo/bằng chứng

6. Quy ước status

StatusÝ nghĩa
Đã lên kế hoạch Đã có owner, thời gian và đầu ra; chưa bắt đầu.
Đang thực hiện Đang được triển khai.
Chờ QA Implementation xong, chờ kiểm thử.
Đang QA/UAT Đang test nội bộ hoặc nghiệm thu người dùng.
Bị chặn Không thể tiếp tục vì dependency/risk cụ thể.
Hoàn tất Đã đạt Definition of Done và có evidence.

Cách cập nhật hằng ngày

Project management tách baselinelive execution để không làm mất lịch sử kế hoạch:

  • biz-docs/data/project.yaml: kế hoạch baseline, người phụ trách theo role, start/hạn chót, dependency và note gốc;
  • biz-docs/data/project-progress.yaml: trạng thái thực tế, % tiến độ, ngày bắt đầu/cập nhật thực tế, ghi chú trực tiếp và bằng chứng.

Khi task bắt đầu hoặc có thay đổi thực tế, ưu tiên cập nhật project-progress.yaml. Nếu đổi hạn chót/chuẩn cơ sở chính thức, cập nhật project.yaml đồng thời ghi hạn chót cũ + lý do trong ghi chú để báo cáo khách hàng có lịch sử rõ ràng.

Trạng thái đi theo luồng: Đã lên kế hoạch → Đang thực hiện → Chờ QA → Đang QA/UAT → Hoàn tất. Chỉ dùng Bị chặn khi có dependency cụ thể và phải ghi người phụ trách/phương án gỡ chặn.

Định nghĩa hoàn tất (Definition of Done) chung

Một task chỉ được coi là hoàn tất khi output đã merge/available ở môi trường phù hợp, acceptance/negative path cần thiết đã test, không làm yếu RBAC/data-integrity gate, và có bằng chứng đủ để người khác kiểm tra lại. Với release V1/V2/V3, cần thêm bản ghi phát hành, lỗi đã biết, demo/UAT bằng chứng và customer trạng thái report.

Hành trình nghiệp vụ

Luồng frozen P0 từ guest cart, account, pricing/quote, SePay, design approval, production/QC, manual fulfilment đến hoàn tất và exception paths.

1. Luồng chính

BướcHành độngKết quả cần có
1. Guest duyệt catalog và tạo cartCustomer chưa login xem product/variant active. Với standard ecommerce product, customer có thể chỉ chọn variant/phân loại + quantity; với print/customizable product, UI hiển thị thêm option in được Admin cấu hình.Có anonymous cart; mỗi item giữ product behavior/config riêng; chưa tạo order và chưa cần account.
2. Login / tạo verified accountKhi checkout, customer login bằng password/email OTP hoặc register + verify email OTP. Guest cart merge vào account và checkout reprice từng item theo pricing mode.Cart gắn verified personal/business account; không guest checkout.
3. Chốt item configurationCustomer xác nhận variant/quantity và các option áp dụng. Chỉ item customization_mode=public_design_url mới gắn HTTPS public design URL; standard ecommerce item customization_mode=none không có design input.Mỗi item có đủ input đúng product behavior; design version chỉ tồn tại khi áp dụng.
4. Pricing hoặc manual quotefixed_unit_price dùng giá variant/quantity config; print_engine chạy pricing engine. Unsupported/special/shipping-charge/floor-override case chuyển manual quote.Có price breakdown/floor-minimum/VAT hợp lệ hoặc Accepted quote snapshot; standard product không bị ép qua print pricing.
5. Confirm orderCheckout reprice, apply referral/promo hợp lệ, snapshot product behavior + pricing/contact/address/invoice/referral và tạo order idempotent với payment reference unique.Order Pending payment; double-tap/retry không duplicate; mixed order giữ mode riêng từng item.
6. Thanh toán SePayCustomer chuyển khoản full amount theo payment reference. SePay auto-match; exception vào Accounting reconciliation.Order Paid chỉ khi full match hoặc reconciliation hợp lệ.
7A. Standard ecommerce itemNếu customization_mode=none và fulfilment_mode=direct_fulfilment, item không qua design/file/production gate; sau Paid/order-processing chuyển tới fulfilment readiness.Standard ecommerce item không bị treo ở trạng thái chờ file hoặc chờ production.
7B. Review design/file khi áp dụngVới item customization_mode=public_design_url, Production Approver mở active public URL, kiểm size/bleed/DPI/font/color risk và ghi pass/fail/note/evidence.Design Approved hoặc Needs customer action; URL change reset approval.
8. Approve production và thực hiện khi áp dụngVới item fulfilment_mode=production_then_fulfilment, khi order Paid và file gate đã Approved/Not required, Production Approver approve production. Production staff chạy lệnh, cập nhật progress và QC/Rework/Scrap.Production-enabled item đạt Ready for fulfilment hoặc có nhánh xử lý rõ; direct-fulfilment item không tạo production order.
9. FulfilmentKhi item/order đủ điều kiện theo product flow, order được mark no-shipping/pickup hoặc staff tạo tối đa một shipment ngoài hệ thống và nhập carrier/service/tracking/actual fee/status.Fulfilment có state/tracking thủ công; không carrier API P0.
10. Invoice nếu yêu cầuAccounting dùng invoice snapshot để phát hành hóa đơn bên ngoài và cập nhật Issued/reference/status trong Admin.Customer xem trạng thái; sau Issued customer không sửa invoice info.
11. Hoàn tất và notificationOrder chỉ Completed khi mọi item-specific gate và fulfilment cần thiết đã đóng. Transactional event file/production chỉ sinh cho item có workflow tương ứng; event chung vẫn gửi email + push theo policy.Order có timeline đầy đủ nhưng không tạo state giả cho standard product, notification delivery log và audit cần thiết.
12. Ngoại lệ sau orderCancel/change/refund sau payment, failed delivery, refund commission hoặc data delete đi qua workflow manual/permission đã freeze. Thay đổi product config sau order không sửa behavior snapshot của order lịch sử.Không sửa lịch sử âm thầm; refund/commission/audit/soft-delete giữ traceability.

Customer rating/review không nằm P0. Bán standard ecommerce product không phải feature deferred: đây là P0 capability cùng print/customizable product và behavior do Admin config per product/variant. Real catalog/product modes/fixed prices/print rates/margin/VAT/commission/provider credentials là deployment inputs trước pilot.

Journey là behavior đã freeze, không còn bước rating/review trong P0. Public design URL được kiểm thủ công; payment là bank transfer + SePay; production approval cần Paid + File Approved; fulfilment và invoice manual-first.

Tester dùng AC-01 cho full end-to-end và AC-02..AC-11 cho design/file, pricing/quote, approval/QC, fulfilment, payment/refund, agent và RBAC/security.

2. Các tình huống ngoại lệ

Negative/error paths là phần của spec, không phải việc xử lý sau. Các tình huống dưới đây phải chứng minh hệ thống dừng/route đúng chỗ thay vì bypass identity, floor, payment, approval, refund hoặc audit gates:

Tình huốngHành vi yêu cầu
Email đã tồn tại / tax code doanh nghiệp trùngKhông tạo duplicate account/business. Hướng user về login/recovery hoặc liên hệ Admin để xử lý dữ liệu sai; không merge tự động hai account đã có order.
OTP sai/hết hạn/gửi quá nhanhTừ chối verify/login; áp TTL, max attempts, resend interval và rate-limit theo D-28; không tiết lộ account tồn tại qua error khác biệt không cần thiết.
Guest checkout chưa loginGiữ cart, yêu cầu login/create account; sau xác thực merge cart và reprice trước confirm. Không tạo order guest.
SKU inactive hoặc thiếu pricing/production configKhông cho instant checkout/publish. Nếu order/quote lịch sử tham chiếu SKU đó vẫn cho đọc snapshot; nhu cầu mới chuyển manual quote hoặc chọn SKU khác.
Public design URL không mở được / cần credentialĐưa active design version về Needs customer action; không duyệt file và không production. PrintUp không cố gọi provider API hay crawl backend để lấy file.
Design không đạt checklistProduction Approver ghi fail reason/note/evidence; customer cập nhật URL/version mới; version mới phải review lại.
Design là RGB/spot/khác thay vì CMYKCảnh báo trong checklist. Không auto-convert P0; chỉ Production Approver được accept risk bằng note hoặc trả customer sửa.
URL design thay đổi sau approvalTạo version mới, revoke file approval hiện tại và block production approval cho tới khi version mới được review. Nếu order đã paid và thay đổi ảnh hưởng giá/config thì reprice theo D-26.
User không phải Production Approver cố approveTừ chối ở API/server, ghi security/audit event phù hợp. Ẩn UI chỉ là convenience, không phải enforcement.
Hai Admin đồng thời đổi Production ApproverAssignment phải atomic/serialized để chỉ có một active approver; thay mới revoke assignment cũ và audit before/after.
Pricing config thiếu hoặc formula input invalidKhông trả instant price có vẻ hợp lệ. Chặn publish/checkout và hướng Admin sửa config hoặc chuyển manual quote.
Giá sau discount thấp hơn floorChặn customer checkout. Sales không tự bypass; chỉ Admin one-off override manual quote/order có reason và audit.
Promo/coupon không hợp lệ hoặc stacking vượt policyTừ chối promo, giữ price hợp lệ trước promo. P0 tối đa một promo/coupon/order sau quantity + customer-tier discount.
Manual quote hết hạnKhông convert quote Expired. Sales/Admin tạo version mới hoặc reprice lại rồi gửi.
Checkout double tap / retry networkDùng idempotency key/constraint để trả cùng kết quả hoặc cùng order; không sinh duplicate order/payment reference.
SePay event lặpXử lý idempotent; cùng transaction chỉ apply một lần.
SePay partial/over/under/unmatched/late paymentKhông tự chuyển Paid; đưa Needs reconciliation. Accounting chọn order/amount xử lý thủ công, lưu evidence/reason/audit.
Customer muốn sửa/cancel sau paymentKhông self-service. Tạo request để Admin/Accounting xử lý. Price-affecting change hoặc design URL change reset approval/reprice; refund/additional payment xử lý thủ công.
Cancel/change sau Production approvalXử lý manual; không hứa automatic refund. Admin quyết refund amount 0..paid amount theo tình trạng thực tế và Accounting chuyển khoản ngoài hệ thống.
Refund sau agent payoutKhông sửa payout batch đã khóa; tạo negative commission adjustment cho batch kế tiếp.
Production rework/scrapKhông mark production/order Completed. Bắt buộc reason, quantity, note; nếu ảnh hưởng customer price/refund thì xử lý theo D-26.
Order nhiều item nhưng một item chưa xongOrder không được Ready for fulfilment/Completed cho tới khi các item cần thiết đã qua production/QC hoặc được cancel/adjust thủ công hợp lệ.
Cần ship nhưng chưa tạo shipmentGiữ Awaiting shipment. Staff tạo shipment ngoài hệ thống rồi nhập carrier/service/tracking/actual fee/status.
Có nhu cầu thu shipping nhưng order đang instant checkoutKhông tự ước lượng freight. Chuyển manual quote để thêm shipping line/adjustment trước payment.
Giao thất bại / returnedGhi status/reason thủ công; không mark order Completed sai. Refund/cancel theo D-26; gửi email + push transactional phù hợp.
Invoice info cần đổi sau IssuedCustomer bị khóa edit. Accounting xử lý adjustment/reference/status thủ công; không giả lập invoice provider.
Agent pending/rejected hoặc self-referralKhông active quyền lợi/commission. Self-referral và invalid code bị từ chối.
Notification push không có permission/token hoặc gửi lỗiKhông block business workflow. Email vẫn được attempt; delivery log ghi skip/failure. Transient provider failure retry tối đa 3 lần với backoff.
Admin soft-delete dữ liệuẨn khỏi luồng vận hành nhưng giữ traceability theo policy. Hard purge là action riêng có strong confirmation + audit; audit record của delete không cascade.
Yêu cầu tính năng nằm trong P0 non-goalsKhông tự implement. Ghi change request/version mới nếu muốn đưa vào scope.

3. Nguyên tắc khi gặp case chưa có fixture thật

Nếu thiếu catalog/rate/margin/VAT/commission/provider credential thật, dùng fixture/config test nhưng không thay behavior đã freeze. Nếu case mới làm thay đổi business rule hoặc thuộc P0 non-goals, tạo change request/version mới.

Phạm vi P0 và lộ trình mở rộng

Implementation freeze v1: customer mobile iOS/Android + Admin Web + public Web storefront (P0, không delay), lõi định giá, public design URL, SePay, hóa đơn/giao hàng thủ công, agent/referral một tầng và kiến trúc mở cho Khối 2/3.

Ranh giới P0

Trong P0:

  • Customer app iOS + Android.
  • Admin/backoffice Web cho catalog, pricing, quote, order, payment exception, production/QC, invoice, shipping manual, agent, RBAC và reporting.
  • Guest browse/config/add-to-cart; checkout bắt buộc account.
  • Email + password/OTP; personal/business account một-một.
  • Configuration-driven catalog/SKU.
  • HTTPS public design URL + manual checklist/approval.
  • Pricing engine đầy đủ, manual quote, SePay transfer payment, manual refund.
  • Single Production Approver, production/QC/rework/scrap tracking.
  • Manual invoice và manual fulfilment.
  • Agent/referral một tầng + monthly payout.
  • Email + push transactional notification.
  • RBAC/audit, retention/privacy baseline, reporting.

Ngoài P0 / chỉ quay lại bằng change request: public/customer Web storefront; direct file upload; DesignO/Canva API/SDK/OAuth; automatic color conversion/preflight; shipping/carrier API và realtime freight/volumetric; split shipment; COD/card/e-wallet; invoice provider API; multi-user business organization; multi-language/multi-currency; offline mode; inventory/procurement/warehouse; customer rating/review; multi-vendor marketplace; multi-level referral.

Kiến trúc phải giữ đường mở: PrintUp Supply/multi-facility routing, PrintUp Studio mở rộng và provider integrations tương lai không được buộc rewrite core order/pricing/account semantics.

NhómP0 — Phạm vi ban đầuP1/P2 — Mở rộng
Kênh khách hàngCustomer app iOS + Android; guest browse/cart, account-required checkout, order tracking. Admin/backoffice Web là control plane P0. Public/customer Web storefront thuộc P0, không delay — dùng chung backend/API, account và order flow với mobile.Multi-channel extensions ngoài storefront Web nếu có change request
Account & authEmail + password hoặc email OTP; verify email; recovery qua OTP; personal/business, một account/doanh nghiệp; multiple address; no guest checkoutMulti-user business org, phone login, SSO/social login nếu có change request
Danh mục & product behaviorConfiguration-driven product/variant/SKU. Admin cấu hình standard ecommerce hoặc print/customizable per product/variant bằng behavior tương đương customization_mode, pricing_mode, fulfilment_mode. Standard product có thể chỉ variant/phân loại + quantity; print product có thể bật material/dimension/finishing/design/production.Inventory/procurement/warehouse và supply-network availability
Thiết kếChỉ product cần design mới dùng HTTPS public design URL theo order item/version + manual file/color checklist bởi Production Approver; standard product customization_mode=none không có file gate; no direct uploadDesignO/Canva API, editor, direct upload, auto preflight/color conversion
PricingHai pricing path theo product config: fixed unit price cho standard ecommerce; print engine với waste/yield, digital/offset, finishing/fixed cost, target/min gross margin. Cả hai dùng discount, floor/minimum-net, VAT, snapshot và no-code config.Multi-facility optimization, advanced promotion/loyalty
Manual quoteVersioned multi-item quote, 7-day default validity, customer accept in account, convert order; used for unsupported/special/shipping/floor-override cases. Standard fixed-price product không bị ép qua quote.Advanced approval/e-sign/template automation nếu cần
Dịch vụ thiết kế bên ngoàiKhi đặt hàng hoặc tìm sản phẩm, khách có thể yêu cầu dịch vụ thiết kế/thiết kế thuê ngoài: brief + tham khảo HTTPS URL, báo giá riêng qua manual quote (D-36); sau accept là order item dịch vụ riêng, chi phí thuê ngoài là operational cost.Marketplace designer tích hợp / DesignO web-to-print (xem V2-19)
Order/payment/refundIdempotent checkout/order; mixed standard + print item; bank transfer + SePay; full-amount auto match; manual exception reconciliation; manual bank-transfer refund; after-payment edit/cancel manualCard/e-wallet/COD/refund provider automation
InvoiceInvoice snapshot + manual status/reference; Accounting issues externally; customer edit-lock after IssuedInvoice provider API
Production/QCConditional per product: production_then_fulfilment tạo production order, single Production Approver gates, Production progress, QC/Rework/Scrap, production ticket/print view. direct_fulfilment không tạo production order.Automated production scheduling/MES, multi-facility routing
FulfilmentNo-shipping/pickup hoặc tối đa một manual shipment/order; direct-fulfilment item có thể ready sau payment, production-enabled item sau production/QC; external carrier creation, manual tracking/status/actual fee; customer shipping charge only via manual quoteCarrier/gateway API, realtime quote, volumetric, label webhook, split shipment
Agent/referralOne-tier referral, open apply/Admin approval, no self-referral, configurable commission, Paid+Completed eligibility, monthly payout batch, negative adjustment after refundExpanded Studio network; multi-level referral remains out unless separately approved
NotificationTransactional email + push; default order/payment/shipment/cancel-refund events và file/production events chỉ khi product có workflow tương ứng; email fallback; transient retry max 3; delivery logSMS, Zalo, notification inbox, marketing automation
RBAC & auditCustomer, Agent, Sales, Production, Production Approver, Accounting, Admin, Management; server-side authz; sensitive-action auditOrganization-specific custom roles/permissions nếu cần
Data & privacyIndefinite business retention until Admin delete; soft-delete default, separate audited hard purge; no DesignO/Canva outbound data flowPolicy changes driven by future legal/operational requirements
LocaleVietnamese UI, VND integer, UTC backend/Asia-Ho-Chi-Minh display, mm/gsm print units when applicable, weight units explicitMulti-language/multi-currency
ReportingRevenue/product/customer/agent, product/pricing mode, pricing/margin snapshot, payment exceptions, commission/payout, manual fulfilment, RBAC/audit metricsAdvanced BI/cohort/carrier benchmarking

Implementation freeze v1: bán sản phẩm ecommerce thông thường là capability P0, không phải phần bị loại. Product behavior được cấu hình trong Admin per product/variant; feature ngoài cột P0 chỉ quay lại bằng change request/version mới.

Mốc delivery

Tỷ lệ hợp đồng gốc giữ nguyên:

Mốc Tỷ lệ
M1 20%
M2 30%
M3 25%
M4 15%
M5 10%

Acceptance dùng FR/NFR/AC hiện hành sau implementation freeze, không dùng integration cũ đã defer làm điểm chặn. M5 vẫn gồm pilot thực tế 30 ngày và source/config/schema/runbook/account bàn giao.

Không còn câu hỏi business chặn development

data/decisions.yaml là implementation freeze hiện hành. Các giá trị cần nhập trước pilot như catalog thật, material/print/finishing rates, margin, VAT, commission rate và production credentials là deployment data/config, không phải câu hỏi thiết kế phải quay lại Founder.

Nếu phát sinh yêu cầu khác behavior đã freeze, tạo change request/version mới thay vì tự mở rộng phạm vi.

Yêu cầu chức năng (FR-01..FR-41)

42 FR tái triển khai được của PrintUp P0: tài khoản/giỏ hàng, danh mục/định giá, SePay, duyệt thiết kế, sản xuất/QC, hóa đơn/giao hàng thủ công, agent/referral, RBAC và mô hình dữ liệu lõi.

FR-01..FR-41 là functional baseline của implementation freeze v1. Decision liên quan hiện đã được khóa; dec dùng để truy vết rationale/policy chứ không biểu thị điểm chặn còn mở.

Trạng thái thường gặp:

  • Implementation freeze v1: behavior đã đủ rõ để code/test.
  • Founder decision 16/09/2026: behavior do clarification Founder khóa.
  • Chuẩn cơ sở 16/09/2026: requirement gốc còn hiệu lực, có technical detail do team implement theo NFR/AC.
  • Simplified: phạm vi P0 đã thu gọn nhưng requirement còn hoạt động.
  • Deferred by founder: ngoài P0, chỉ quay lại qua change request/version mới.

Nhóm FR:

  • FR-01..FR-10: account/auth/guest cart, catalog/design/pricing, quote/order/SePay/invoice/tracking/referral.
  • FR-11..FR-19: Admin/backoffice Web, production/QC, customer/quote/agent/reporting/design approval.
  • FR-20..FR-28: pricing engine + extension point Khối 2.
  • FR-29..FR-39: manual fulfilment + explicit deferred shipping/COD automation.
  • FR-40..FR-41: RBAC/authz và core data model.

Real catalog/rates/margins/VAT/commission/provider credentials là deployment inputs. Fixture/config placeholder được dùng để implementation và test trước khi seed dữ liệu thật.

Bảng mã

Danh sách yêu cầu

Lọc trực tiếp trên 41 thẻ requirement.

8.1. Chức năng khách hàng — KH-01..KH-10

Implementation freeze v1: mobile-first, email password/OTP, single business account, guest cart/account-required checkout, product-config driven standard ecommerce + print/customizable flows, SePay, email + push, pricing snapshot và manual invoice/shipping.

FR-01 — [KH-01] Tài khoản, đăng nhập và checkout identity

P0 Founder decision 16/09/2026

Email là định danh account, normalize và unique case-insensitive. Registration verify email bằng OTP; login bằng password hoặc email OTP; không magic link/phone/SMS OTP. Guest browse/add-to-cart được nhưng checkout phải login/create account. Personal và business account tách loại; mỗi business chỉ có một account, không multi-user organization.

Tiêu chí nghiệm thu

  • Password và email OTP đăng nhập cùng một account.
  • Registration chưa verify email không được checkout.
  • Guest cart merge sau login và không tạo order dưới guest identity.
  • Business account không có member/invite flow.
  • Password recovery dùng email OTP.

Gợi ý kiểm thử

  • Register + verify OTP + login password.
  • Login cùng account bằng OTP.
  • Sai OTP quá limit và resend/rate-limit hoạt động.
  • Reset password bằng email OTP và kiểm session dài hạn cũ bị revoke.
  • Guest add-to-cart rồi login/create account, merge cart và checkout.
  • Tạo business account và kiểm không có member list/invite.

FR-02 — [KH-02] Duyệt danh mục và product behavior

P0 Founder clarification 16/09/2026

Khách xem product/variant active theo nhóm. Catalog configuration-driven và phải hỗ trợ cả standard ecommerce product lẫn print/customizable product trong cùng app. UI chỉ hiển thị option áp dụng theo product config: standard product có thể chỉ chọn variant/phân loại + quantity; print product có thể thêm material/dimension/finishing/design.

Tiêu chí nghiệm thu

  • Chỉ SKU active/publishable xuất hiện.
  • Không ép standard ecommerce product nhập design/print options.
  • Print/customizable product hiển thị đúng option được Admin cấu hình.
  • Catalog thật có thể nhập qua Admin không cần sửa code.
  • Một cart/order có thể chứa item khác product behavior.

Gợi ý kiểm thử

  • Tạo fixture standard product và kiểm chỉ variant + quantity.
  • Tạo fixture print/customizable product và kiểm material/dimension/finishing/design config.
  • Tạo cart mixed-mode.
  • Tạo SKU active/inactive và kiểm catalog.
  • Thử publish SKU thiếu required config của mode đã chọn và xác nhận bị chặn.

FR-03 — [KH-03] Đính kèm public design URL khi product yêu cầu

P0 Founder clarification 16/09/2026

Chỉ item có customization_mode=public_design_url mới yêu cầu khách gắn HTTPS public URL. URL có thể từ DesignO, Canva hoặc provider khác; PrintUp chỉ lưu URL/version/metadata, không API/SDK/OAuth và không direct file upload P0. Item customization_mode=none bỏ qua hoàn toàn design/file gate.

Tiêu chí nghiệm thu

  • URL version gắn đúng order item khi product yêu cầu.
  • Standard ecommerce item không bị yêu cầu URL và không có file-approval blocker.
  • Production Approver mở/download được URL mà không cần credential riêng của khách.
  • URL change sau approval reset trạng thái file.
  • Không outbound API call tới DesignO/Canva.

Gợi ý kiểm thử

  • Standard product checkout không design URL.
  • Gắn DesignO/Canva/HTTPS provider link public cho print item.
  • Gắn link private/hết quyền và kiểm trạng thái Needs action.
  • Đổi URL đã approve và kiểm tạo version mới/reset approval.

FR-04 — [KH-04] Tính giá tự động theo pricing mode

P0 Founder clarification 16/09/2026

Pricing path do product config quyết định. fixed_unit_price tính từ giá variant × quantity rồi áp discount/floor-minimum/VAT; print_engine tính từ production quantity, material/yield, digital/offset, finishing, fixed costs, target/minimum margin, discount policy và VAT theo FR-20..FR-27.

Tiêu chí nghiệm thu

  • Standard ecommerce product không cần print-cost inputs.
  • Print product vẫn có đầy đủ breakdown/config version/print technology/floor.
  • Mọi input ảnh hưởng giá làm recompute.
  • Không checkout dưới floor/minimum-net rule đã cấu hình.
  • Order snapshot lưu pricing mode và kết quả bất biến.

Gợi ý kiểm thử

  • Fixed-unit variant + quantity + promo/VAT/floor fixture.
  • Chạy tối thiểu 12 golden fixtures print engine.
  • Thay quantity/material/dimension/finishing/promo và đối chiếu breakdown khi áp dụng.
  • Kiểm digital/offset crossover và floor.

FR-05 — [KH-05] Yêu cầu báo giá riêng

P0 Implementation freeze v1

Cấu hình không instant-price được, vượt constraint, có charge đặc biệt/shipping hoặc cần floor override được chuyển sang manual quote. Standard ecommerce product có fixed-unit pricing hợp lệ không bị ép qua manual quote chỉ vì không có print config.

Tiêu chí nghiệm thu

  • Quote versioned với Draft/Sent/Accepted/Rejected/Expired/Converted.
  • Validity mặc định 7 ngày configurable.
  • Customer accept trong account; accepted quote convert thành order snapshot.

Gợi ý kiểm thử

  • Tạo quote multi-item, gửi, version lại, expire, accept và convert.
  • Thay input ảnh hưởng giá sau accept và xác nhận cần reprice/new version.
  • Standard fixed-price product checkout instant không qua quote.

FR-06 — [KH-06] Đặt hàng và thanh toán chuyển khoản

P0 Implementation freeze v1

Checkout reprice từng item theo pricing mode, tạo order idempotent với order number/payment reference duy nhất. P0 chỉ bank transfer + SePay, kỳ vọng full amount; partial/over/under/unmatched vào manual reconciliation.

Tiêu chí nghiệm thu

  • Double tap/retry không tạo duplicate order.
  • SePay replay không cộng trùng.
  • Order chỉ Paid khi match hợp lệ hoặc Accounting reconcile.
  • Payment window mặc định 24h configurable; late payment vào reconciliation.
  • Production approval chỉ được yêu cầu cho item production-enabled và khi Paid.

Gợi ý kiểm thử

  • Double-submit checkout mixed-mode.
  • Thanh toán đúng full amount.
  • Replay event.
  • Partial/over/under/unmatched/late payment.
  • Accounting reconcile có audit.

FR-07 — [KH-07] Thông tin hóa đơn VAT

P0 Implementation freeze v1

Khách nhập/lưu invoice info; một order tối đa một invoice record. Kế toán phát hành thủ công bên ngoài; customer sửa được tới trạng thái Issued.

Tiêu chí nghiệm thu

  • Snapshot invoice info gắn đúng order.
  • Sau Issued customer không sửa; Accounting được điều chỉnh reference/status.
  • Không invoice provider API P0.

Gợi ý kiểm thử

  • Checkout business/personal có invoice request.
  • Sửa trước Issued và bị chặn sau Issued.
  • Accounting cập nhật invoice ref/status.

FR-08 — [KH-08] Theo dõi đơn hàng và thông báo

P0 Implementation freeze v1

Khách xem timeline order/payment và các trục file/production/fulfilment khi áp dụng. Transactional notification P0 dùng email + push cho event áp dụng theo D-21; delivery status/error được lưu. Tracking về sau lấy data từ ERP; khi chưa có ERP data thì chưa cần implement integration (D-37).

Tiêu chí nghiệm thu

  • Timeline phản ánh state nội bộ thực và không hiển thị gate không áp dụng như đang chờ.
  • Email được attempt cho event áp dụng; push best-effort khi có token/permission.
  • Push failure không block workflow; transient provider error retry tối đa 3 lần.
  • Chưa có ERP: timeline chạy hoàn toàn bằng data nhập tay.

Gợi ý kiểm thử

  • Chạy standard ecommerce order và kiểm không có fake file/production wait state.
  • Chạy print order end-to-end và đối chiếu timeline.
  • Kích hoạt payment/file/production/shipment/cancel event khi áp dụng và kiểm email+push/delivery log.
  • Mô phỏng push/email transient failure và kiểm retry/fallback.

FR-09 — [KH-09] Đặt lại đơn cũ

P0 Implementation freeze v1

Cho phép reorder từ order cũ bằng cách clone variant/configuration/link reference khi áp dụng nhưng luôn dùng availability, product behavior và pricing hiện hành.

Tiêu chí nghiệm thu

  • Không giữ giá cũ âm thầm.
  • Không tạo design/print config cho standard product nếu product behavior hiện hành không yêu cầu.
  • SKU/config không còn active phải yêu cầu customer chọn lại hoặc manual quote.

Gợi ý kiểm thử

  • Reorder fixed-unit product sau đổi giá.
  • Reorder print product sau đổi bảng giá/config.
  • Reorder SKU inactive và kiểm flow fallback.

FR-10 — [KH-10] Mã giới thiệu

P0 Implementation freeze v1

Cho phép nhập referral code khi signup/checkout. Code unique case-insensitive; cấm self-referral; attribution snapshot vào order và khóa sau payment confirmed.

Tiêu chí nghiệm thu

  • Invalid/self code bị từ chối.
  • Referral không đổi sau payment.
  • Attribution phục vụ report/commission một tầng.

Gợi ý kiểm thử

  • Valid/invalid/self referral.
  • Thử sửa referral sau payment và bị chặn.

8.2. Quản trị nội bộ — QT-01..QT-09

Admin/backoffice Web là P0 control plane. Admin quyết định product behavior per product/variant; public/customer Web storefront thuộc P0 (Founder 17/09/2026) và dùng chung backend API/flow với mobile.

FR-11 — [QT-01] Quản lý sản phẩm, behavior và link mẫu

P0 Founder clarification 16/09/2026

Admin thêm/sửa/ẩn product/variant và cấu hình behavior tương đương customization_mode, pricing_mode, fulfilment_mode. Standard ecommerce product có thể chỉ cần variant/quantity + fixed unit price + direct fulfilment; print/customizable product có thể bật production/pricing parameters và public template/reference URL. Không sync thư viện DesignO/Canva qua API.

Tiêu chí nghiệm thu

  • Unique SKU.
  • Publish validation chỉ yêu cầu field đúng với mode đã chọn.
  • Không bắt standard product có material/print/design config.
  • Hide SKU không ảnh hưởng lịch sử order.
  • Đổi product behavior chỉ áp dụng cart/order mới; order cũ giữ snapshot.

Gợi ý kiểm thử

  • CRUD standard product và print product.
  • Publish validation theo từng mode.
  • Chuyển config trên product mới và kiểm mobile rendering/checkout path.
  • Ẩn SKU và kiểm order lịch sử còn đọc được.

FR-12 — [QT-02] Quản lý pricing configuration

P0 Founder clarification 16/09/2026

Admin cấu hình versioned fixed-unit prices cho standard ecommerce và material/print/finishing/fixed cost, waste/yield, margin cho print engine; VAT, customer tier, quantity discount và promo/coupon dùng chung mà không sửa code.

Tiêu chí nghiệm thu

  • Config có validation/version/audit.
  • Order/quote cũ giữ snapshot.
  • Floor/minimum-net logic không bypass qua discount.
  • Standard product không phụ thuộc print rate table.

Gợi ý kiểm thử

  • Đổi fixed-unit variant price và reprice cart.
  • Đổi từng nhóm print config và chạy golden fixtures.
  • Tạo promo fixed/percentage và kiểm stacking/floor.

FR-13 — [QT-03] Quản lý order/state theo product flow

P0 Founder clarification 16/09/2026

Admin/backoffice quản lý order và state; payment/refund gates dùng chung, file/production gates chỉ áp dụng cho item được product config bật. Mixed order theo dõi state từng item và chỉ Completed khi mọi item-specific gate + fulfilment đã đóng.

Tiêu chí nghiệm thu

  • Standard ecommerce item không bị block bởi file/production state.
  • Production-enabled item không bypass Paid/Production Approver gate.
  • Sau payment customer không self-edit/cancel.
  • Order change price-affecting reset/reprice/approval đúng policy khi gate áp dụng.

Gợi ý kiểm thử

  • Standard direct-fulfilment item Paid -> fulfilment without file/production.
  • Print item transition hợp lệ/không hợp lệ bằng từng role.
  • Mixed order chỉ Completed khi cả hai item hoàn tất.
  • Thử cancel/change trước và sau payment/production approval.

FR-14 — [QT-04] Điều phối sản xuất và QC khi áp dụng

P0 Founder clarification 16/09/2026

Chỉ item fulfilment_mode=production_then_fulfilment mới tạo production order. Production-enabled item có production ticket/print view; Production cập nhật progress; Production Approver duyệt file khi cần và production; QC ghi result; Rework/Scrap ghi reason/quantity/note. Direct-fulfilment item không tạo production order.

Tiêu chí nghiệm thu

  • State theo D-13.
  • Production user không approve gate.
  • Item no-design nhưng production-enabled dùng file gate Not required.
  • Direct-fulfilment item đi qua fulfilment mà không cần production state.
  • Order chỉ complete khi item-specific production/QC và fulfilment phù hợp hoàn tất.

Gợi ý kiểm thử

  • Tạo standard direct-fulfilment order và kiểm không có production order.
  • Tạo print production order.
  • Tạo production-enabled/no-design item.
  • In/view production ticket.
  • Run QC pass/rework/scrap.
  • Thử unauthorized approve.

FR-15 — [QT-05] Quản lý customer/business

P0 Implementation freeze v1

Xem account/profile/address/history theo quyền. Business account một-một với business profile, tax code unique khi có; phone là contact không phải login ID.

Tiêu chí nghiệm thu

  • RBAC đúng scope.
  • Order giữ snapshot contact/address.
  • Không organization membership P0.

Gợi ý kiểm thử

  • Personal/business profile và multiple address.
  • Duplicate tax code.
  • Cross-role access.

FR-16 — [QT-06] Quản lý manual quote

P0 Implementation freeze v1

Sales/Admin tạo/version/send/expire quote; customer accept; quote convert order; floor override chỉ Admin.

Tiêu chí nghiệm thu

  • Trace được mọi version/status.
  • Expired/rejected quote không convert.
  • Override có reason/audit.

Gợi ý kiểm thử

  • Full quote lifecycle và override approval.

FR-17 — [QT-07] Quản lý agent/referral/commission

P0 Implementation freeze v1

Open application, Admin approval, unique referral code, one-tier attribution, configurable commission rate, eligibility và monthly payout batch theo D-18. Tài khoản được approved làm agent KHÔNG được đặt đơn/checkout bằng tài khoản đó (D-38).

Tiêu chí nghiệm thu

  • Pending không active.
  • No self-referral.
  • Tài khoản agent bị chặn tạo order/checkout server-side; phải dùng tài khoản mua hàng riêng.
  • Commission base loại VAT/shipping/refund.
  • Chỉ Paid+Completed eligible.
  • Một commission không pay hai lần; refund sau payout thành negative adjustment.

Gợi ý kiểm thử

  • Apply->approve->referral->completed order->monthly payout.
  • Agent account thử checkout và bị chặn rõ ràng (D-38).
  • Cancel/refund trước payout.
  • Refund sau payout.
  • Duplicate payout guard.

FR-18 — [QT-08] Báo cáo

P0 Implementation freeze v1

Report doanh số theo ngày/product/agent/customer, margin/order/payment, commission và manual shipping data trên timezone P0. Product/pricing mode phải reportable để phân biệt standard ecommerce và print/customizable.

Tiêu chí nghiệm thu

  • Đối chiếu được với source records/snapshots.
  • Refund/adjustment không làm double count.
  • Có thể filter/group theo product behavior/pricing mode.

Gợi ý kiểm thử

  • Dataset nhiều order/payment/refund/agent với cả fixed-unit và print-engine product rồi đối chiếu report.

FR-19 — [QT-09] Kiểm/duyệt design thủ công khi áp dụng

P0 Founder clarification 16/09/2026

Chỉ item customization_mode=public_design_url mới vào file review. Production Approver mở public URL, kiểm checklist file/color, ghi pass/fail/note/evidence; URL change reset approval. Không auto color/preflight API. Item customization_mode=none có file gate Not required.

Tiêu chí nghiệm thu

  • Checklist lưu actor/time/version.
  • Chỉ one active Production Approver approve.
  • RGB/spot risk phải có warning/note nếu approve.
  • Standard ecommerce item không xuất hiện như đang chờ file.

Gợi ý kiểm thử

  • Standard product no-file flow.
  • Public/private link, size/bleed/DPI/font/color cases.
  • URL version change.
  • Unauthorized approve.

8.3. Pricing engine và extension point Khối 2

Pricing formula và policy đã freeze; product chọn fixed_unit_price hoặc print_engine. Real prices/rates/catalog là deployment data.

FR-20 — Cấu trúc giá theo pricing mode

P0 Founder clarification 16/09/2026

fixed_unit_price dùng configured unit price × quantity làm base net; print_engine dùng production cost = material + print + finishing + fixed rồi target/floor theo gross margin. Cả hai mode dùng discount/VAT/floor-minimum policy chung. Shipping không tự cộng instant checkout P0.

Tiêu chí nghiệm thu

  • Breakdown/version/pricing mode truy vết được.
  • Standard product không cần fake production cost components.
  • Manual quote có thể có shipping adjustment.

Gợi ý kiểm thử

  • Fixed-unit fixture.
  • Print-engine golden fixtures breakdown.

FR-21 — Production quantity và waste

P0 Implementation freeze v1

Với pricing_mode=print_engine, production_qty = ordered_qty + waste; waste hỗ trợ fixed và/hoặc percentage theo config. fixed_unit_price không yêu cầu production_qty.

Tiêu chí nghiệm thu

  • Print-engine item lưu ordered_qty, waste và production_qty.
  • Fixed-unit item không bị yêu cầu waste config.

Gợi ý kiểm thử

  • Fixed/percentage/combined waste cases.
  • Fixed-unit product publish/price không cần waste.

FR-22 — Hao phí khổ/yield vật liệu

P0 Implementation freeze v1

Với print_engine, material cost phản ánh yield/khổ thực và phần vật liệu không dùng được theo config. Không áp dụng cho fixed_unit_price trừ khi product đổi pricing mode.

Tiêu chí nghiệm thu

  • Không tính cost print chỉ theo diện tích thành phẩm.
  • Fixed-unit product không cần material/yield config.

Gợi ý kiểm thử

  • Hai layout/yield khác nhau cùng thành phẩm cho cost khác phù hợp.
  • Fixed-unit product no-yield case.

FR-23 — So sánh digital và offset

P0 Implementation freeze v1

Với print_engine, tính cost digital/offset độc lập khi đủ điều kiện và chọn phương án có total production cost thấp hơn. fixed_unit_price không chạy comparison này.

Tiêu chí nghiệm thu

  • Lưu cost từng phương án và lựa chọn khi print_engine.

Gợi ý kiểm thử

  • Golden fixtures quanh crossover.
  • Fixed-unit product không tạo print-tech choice giả.

FR-24 — Floor/minimum-net và override

P0 Founder clarification 16/09/2026

print_engine dùng floor_net_price theo minimum gross margin; fixed_unit_price dùng configured minimum-net/floor hoặc cost/margin rule tương đương. Check chạy sau mọi discount. Chỉ Admin override một quote/order với reason/audit.

Tiêu chí nghiệm thu

  • Customer path không bypass floor/minimum-net.
  • Không có global floor bypass.

Gợi ý kiểm thử

  • Discount/promo xuống dưới floor ở cả fixed-unit và print-engine.
  • Admin one-off override và Sales unauthorized attempt.

FR-25 — Realtime recompute và policy order

P0 Implementation freeze v1

Recompute khi input giá áp dụng cho pricing mode đổi; áp discount/VAT/rounding theo D-08/D-33; cart/reorder dùng product behavior + pricing config hiện hành.

Tiêu chí nghiệm thu

  • Không stale price/version.
  • Không yêu cầu print inputs trên fixed-unit item.

Gợi ý kiểm thử

  • Rapid variant/quantity changes fixed-unit.
  • Rapid print input changes, promo, price-version change.

FR-26 — No-code pricing configuration

P0 Founder clarification 16/09/2026

Admin thay fixed-unit price hoặc print-engine pricing params không sửa/deploy code; config versioned/audited.

Tiêu chí nghiệm thu

  • Validation và history đủ replay giá.

Gợi ý kiểm thử

  • Edit fixed price và print config rồi chạy fixtures; order cũ giữ snapshot.

FR-27 — Pricing/margin snapshot từng order

P0 Founder clarification 16/09/2026

Lưu pricing mode, base/sale net, discount, floor/minimum-net, VAT và resulting margin/cost data khi có. Print-engine thêm production cost, target/min margin, print technology; fixed-unit không cần fake các field print.

Tiêu chí nghiệm thu

  • Không đổi lịch sử khi pricing/product config đổi sau đó.
  • Snapshot đủ phân biệt standard ecommerce vs print-engine.

Gợi ý kiểm thử

  • Create fixed-unit + print order, change config, verify historical snapshot.

FR-28 — Extension point phân đơn Khối 2

Architecture Baseline 16/09/2026

Khối 1 sản xuất tại nhà máy Công ty khi item cần production, nhưng domain/data không hard-code theo cách buộc rewrite khi sau này thêm facility/routing theo product/capacity/location/quality. Direct-fulfilment product không bị ép qua facility routing.

Tiêu chí nghiệm thu

  • Architecture review có extension point hợp lý; artefact cụ thể do team kỹ thuật chọn.

Gợi ý kiểm thử

  • Review service/data contracts và giả lập thêm facility reference mà không đổi core order/pricing semantics.

8.4. Fulfilment thủ công

Manual-first, tối đa một shipment active/order; shipping fee không tự tính ở instant checkout. Định hướng carrier theo loại hàng (D-35): hàng nhỏ gọn → GHN/GHTK khi tích hợp ở phase sau; hàng cồng kềnh/giao hàng gấp → báo giá riêng qua manual quote. Direct-fulfilment và production-then-fulfilment cùng dùng module này khi item đủ điều kiện.

FR-29 — Thông tin fulfilment thủ công

P0 Founder clarification 16/09/2026

Order có thể no-shipping/pickup hoặc có một active shipment. Direct-fulfilment item có thể ready sau order/payment gates; production-enabled item chỉ ready sau production/QC. User có quyền nhập carrier/service/actual fee/note.

Tiêu chí nghiệm thu

  • Không cần shipping API.
  • Không split shipment P0.
  • Không bắt direct-fulfilment item chờ production.

Gợi ý kiểm thử

  • Standard ecommerce direct-fulfilment flow.
  • Print production-then-fulfilment flow.
  • Pickup/no-shipping và one-shipment flow.

FR-30 — Chọn carrier/service thủ công

P0 Implementation freeze v1

Staff chọn carrier/service bằng công cụ ngoài; actual fee ghi như operational cost. Định hướng carrier: hàng nhỏ gọn → GHN/GHTK; hàng cồng kềnh/giao gấp → báo giá riêng qua manual quote (D-35).

Tiêu chí nghiệm thu

  • Carrier/service/fee lưu đúng order.

Gợi ý kiểm thử

  • Manual carrier/service/fee entry.

FR-31 — Lưu tracking reference

P0 Implementation freeze v1

Nhập tracking code/URL từ shipment tạo ngoài hệ thống.

Tiêu chí nghiệm thu

  • Tracking ref unique đủ dùng trong order và customer timeline.

Gợi ý kiểm thử

  • Create/update tracking bằng role có quyền.

FR-32 — Cập nhật trạng thái giao thủ công

P0 Implementation freeze v1

User có quyền cập nhật shipment state bằng tay; customer nhận email + push theo D-21.

Tiêu chí nghiệm thu

  • Mỗi update có actor/time.
  • Không carrier webhook P0.

Gợi ý kiểm thử

  • Shipment created/in transit/delivered/failed và notification.

FR-33 — COD

Deferred Deferred by founder 16/09/2026

Không có COD payment/reconciliation trong P0.

Tiêu chí nghiệm thu

  • Core checkout không phụ thuộc COD fields/rules.

Gợi ý kiểm thử

  • P0 E2E chạy không COD module.

FR-34 — Shipping label/API

Deferred Deferred by founder 16/09/2026

Không create label qua API; label dùng từ external carrier tool. Khi tích hợp ở phase sau theo D-35, carrier mục tiêu cho hàng nhỏ gọn là GHN và GHTK.

Tiêu chí nghiệm thu

  • Không blocker P0.

Gợi ý kiểm thử

  • Architecture không require label provider.

FR-35 — Giao thất bại/return

P0 Implementation freeze v1

Ghi failed/return reason/status thủ công; order không complete sai; cancel/refund manual theo D-26.

Tiêu chí nghiệm thu

  • Reason/actor/time lưu được.
  • Customer notification email+push.

Gợi ý kiểm thử

  • Failed + return + refund request flow.

FR-36 — Báo cáo shipping manual

P1 Simplified 16/09/2026

Tổng hợp carrier/actual fee/status từ dữ liệu nhập tay; không giả định realtime carrier data.

Tiêu chí nghiệm thu

  • Missing manual data được phân biệt rõ.

Gợi ý kiểm thử

  • Dataset shipping manual.

FR-37 — Volumetric realtime

Deferred Deferred by founder 16/09/2026

Không nằm P0. Hàng cồng kềnh/giao hàng gấp được xử lý bằng báo giá riêng qua manual quote theo D-35.

Tiêu chí nghiệm thu

  • Không dependency divisor/carrier API.

Gợi ý kiểm thử

  • Architecture check.

FR-38 — Region/COD automation

Deferred Deferred by founder 16/09/2026

Không nằm P0; payment P0 là SePay transfer.

Tiêu chí nghiệm thu

  • Checkout không region/COD rule dependency.

Gợi ý kiểm thử

  • P0 checkout without region/COD engine.

FR-39 — COD reconciliation automation

Deferred Deferred by founder 16/09/2026

Không nằm P0.

Tiêu chí nghiệm thu

  • Không remittance/COD provider dependency.

Gợi ý kiểm thử

  • P0 accounting flow without COD module.

8.5. Dữ liệu, RBAC và audit

Core schema được mở rộng đủ cho implementation freeze, gồm product behavior config để không hard-code toàn app là print-only, nhưng tránh module ngoài P0.

FR-40 — Permission matrix và authorization

P0 Implementation freeze v1

Áp dụng role Customer, Agent, Sales, Production, Production Approver, Accounting, Admin, Management; server/API enforce; chỉ một Production Approver active.

Tiêu chí nghiệm thu

  • UI/API cùng policy.
  • Action nhạy cảm audit.
  • Auth foundation dùng email/password/OTP nhưng role quyết định quyền.

Gợi ý kiểm thử

  • Matrix positive/negative tests, cross-role access, approver reassignment.

FR-41 — Mô hình dữ liệu lõi Khối 1

P0 Founder clarification 16/09/2026

Core schema gồm account/auth/profile/address/business, product/variant/catalog config + product behavior (customization/pricing/fulfilment mode), cart/item config, design link/version/file approval khi áp dụng, fixed-unit hoặc print pricing config/version/snapshot, quote/version, order/item, payment/reconciliation/refund, production/QC/rework khi áp dụng, shipment, invoice, agent/referral/commission/payout, notification delivery/device token, internal role/assignment và audit log.

Tiêu chí nghiệm thu

  • Không business membership/multi-user org.
  • Không inventory/procurement module P0 nhưng vẫn bán được standard ecommerce product.
  • Order item snapshot lưu product behavior/pricing mode để lịch sử không đổi khi Admin reconfig product.
  • Soft delete mặc định; hard purge separate/audited; audit delete record không cascade.
  • Không DesignO/Canva/shipping/invoice API dependency.
  • Money VND integer và timestamps/unit theo D-30.

Gợi ý kiểm thử

  • ERD traceability tới FR.
  • Standard + print product schema/checkout/order snapshot.
  • Mixed order conditional gates.
  • Delete/hard-purge audit.
  • Business unique tax code.
  • Order/payment idempotency constraints.
  • Commission/payout unique guards.
  • Notification delivery log.

8.6. Dịch vụ giá trị gia tăng

Dịch vụ bổ sung theo clarification Founder 17/09/2026; luồng báo giá riêng tái dùng manual quote FR-05.

FR-42 — [KH-11] Yêu cầu dịch vụ thiết kế bên ngoài

P0 Founder clarification 17/09/2026

Khi đặt hàng hoặc khi tìm sản phẩm, khách có thể yêu cầu dịch vụ thiết kế/thiết kế thuê ngoài: brief/mô tả + tham khảo HTTPS public URL (nếu có); yêu cầu không có giá instant. Sales/Admin chuẩn hóa và lập báo giá riêng qua manual quote; sau accept, dịch vụ là order item dịch vụ riêng không có design/file/production gate trừ khi item đó gắn sản phẩm in.

Tiêu chí nghiệm thu

  • Yêu cầu design service được tạo/lưu/truy vết như quote subject.
  • Báo giá riêng, không tự tính giá instant.
  • Sau convert, service item không ép design/production flow.
  • Chi phí thuê ngoài được ghi như operational cost.

Gợi ý kiểm thử

  • Tạo yêu cầu design service khi đặt hàng và khi tìm sản phẩm.
  • Quote riêng và convert thành order.
  • Service item không bị ép design URL/production gate.

Trạng thái và quy tắc chuyển bước

State machines và BR-01..BR-20 của PrintUp P0 implementation freeze v1.

1. Các trục trạng thái

PrintUp giữ các state machine riêng cho account, cart, quote, order, payment/refund, design version, production approval, production/QC, fulfilment, invoice, agent, commission và notification. Tách state giúp tránh kiểu một cột order_status cố gánh mọi sự thật nghiệp vụ.

TrụcCác trạng thái chính
Tài khoản kháchChưa xác thực email → Active → Disabled / Soft-deleted. Registration chỉ Active sau email OTP; hard purge là Admin action riêng theo D-27.
Giỏ hàngGuest cart / Account cart → Ready to checkout → Converted to order / Abandoned. Guest cart được merge khi login; checkout luôn reprice theo product/pricing mode từng item.
Báo giá tayDraft → Sent → Accepted / Rejected / Expired → Converted. Sửa nội dung sau Sent tạo version mới; Accepted snapshot khi convert order.
Đơn hàngPending payment → Paid → Processing → Ready for fulfilment → Fulfilment in progress → Completed; nhánh Payment expired / On hold / Cancelled / Refund pending / Refunded. Completed chỉ khi mọi item-specific gate và fulfilment phù hợp đã đóng; standard ecommerce item không cần production/QC nếu product config không bật.
Thanh toánPending → SePay matched / Needs reconciliation / Payment expired → Paid; sau đó Refund requested → Refund processing → Refunded / Partially refunded. Partial/over/under/unmatched không tự thành Paid.
Thiết kế / fileNot required / No URL → Awaiting review → Needs customer action → Approved. Item customization_mode=none ở Not required; item cần design tạo URL version, mỗi URL change đưa active version về Awaiting review.
Duyệt sản xuấtNot required / Blocked → Awaiting Production Approver → Approved. Direct-fulfilment item là Not required. Production-enabled item chỉ mở gate khi order Paid và nếu cần design thì active design version phải Approved; chỉ Production Approver active được chuyển Approved.
Production order / QCNot required / Awaiting file → File approved → Awaiting production approval → Approved → In production → QC → Ready for fulfilment → Completed; nhánh On hold / Rework / Scrap. Direct-fulfilment item là Not required; production-enabled/no-design item bỏ qua Awaiting file/File approved bằng Not required file gate.
FulfilmentNo-shipping/Pickup / Awaiting shipment → Shipment created → In transit → Delivered; nhánh Failed / Returned. Direct-fulfilment item có thể ready sau order/payment gates; production-enabled item chỉ ready sau production/QC. P0 tối đa một active shipment/order.
Hóa đơn VATNot requested / Info saved → Pending Accounting → Issued → Adjustment needed / Adjusted. Customer edit-lock bắt đầu tại Issued.
Đại lýNot applied → Pending Admin → Active / Rejected / Suspended. Agent application gắn vào account khách hiện hữu.
Hoa hồngNot applicable → Accruing → Eligible → Included in monthly batch → Paid / Adjusted. Refund sau payout tạo negative adjustment ở batch sau.
Thông báoQueued → Sending → Delivered / Failed terminal. Transient failure retry tối đa 3 lần; push failure không block nghiệp vụ và email là fallback transactional. Event file/production chỉ sinh khi product/item có gate tương ứng.

State chuyển bằng API/server rule và audit ở action nhạy cảm. Product behavior được snapshot per order item để standard ecommerce và print/customizable có thể chạy song song. Không có state tự động từ DesignO/Canva, shipping carrier hoặc invoice provider API trong P0.

Các transition nhạy cảm phải fail-closed:

  • checkout bắt buộc verified account và reprice;
  • Payment Paid chỉ từ SePay full-match hoặc Accounting reconciliation;
  • production approval chỉ khi Paid + active design Approved;
  • chỉ Production Approver active được approve file/production;
  • design URL change reset approval;
  • after-payment cancel/change không self-service;
  • order không Completed nếu production/QC hoặc fulfilment cần thiết chưa đóng;
  • invoice Issued, agent approval, payout và delete/hard-purge chỉ đổi bởi role có quyền.

2. Business rules (BR-01..BR-20)

Các rule dưới đây là invariant triển khai, không phải gợi ý UI.

Quy tắcĐiều kiện chuyển bước
BR-01 — Không bán dưới floor/minimum-net đã cấu hìnhMọi đường tạo giá và discount phải qua floor/minimum-net check của pricing mode tương ứng. Customer checkout không được thấp hơn ngưỡng đã cấu hình; chỉ Admin được one-off override trên manual quote/order với reason và audit.
BR-02 — Print cost dùng production quantity thựcVới pricing_mode=print_engine, chi phí vật liệu/in dùng production_qty = ordered_qty + waste và phải phản ánh yield/hao khổ; ordered quantity vẫn là số lượng customer mua. fixed_unit_price không bắt buộc production quantity/waste.
BR-03 — Digital/offset chọn theo total production cost khi áp dụngNếu product dùng print_engine và cả digital/offset đủ điều kiện, engine tính độc lập và đề xuất phương án có total production cost thấp hơn theo pricing config version hiện hành. fixed_unit_price không tạo print-tech choice giả.
BR-04 — Design URL chỉ áp dụng cho product cần designItem customization_mode=public_design_url dùng một active HTTPS public design URL/version; đổi URL sau approval tạo version mới và reset file approval. Item customization_mode=none có file gate Not required. Không có DesignO/Canva API hoặc direct file upload.
BR-05 — Một Production Approver activeTại một thời điểm chỉ một internal user được gán Production Approver; chỉ user đó được approve file/production khi gate áp dụng. Reassignment phải revoke quyền cũ và được audit.
BR-06 — Paid chỉ từ SePay hoặc Accounting reconciliationOrder chỉ được coi Paid khi SePay match đúng full amount/reference hoặc Accounting manual-reconcile ngoại lệ có evidence/audit. Partial/over/under/unmatched không tự chuyển Paid.
BR-07 — Checkout và payment idempotentCheckout/retry/double-tap không được tạo duplicate order; SePay replay không cộng trùng. Order number và payment reference phải unique.
BR-08 — Post-payment change bị khóa theo gate áp dụngTrước payment customer có thể edit/cancel và reprice. Sau payment không có self-service edit/cancel; thay đổi price-affecting input hoặc design URL khi áp dụng reset các approval liên quan và đi qua reprice/manual reconciliation hoặc refund. Direct-fulfilment item không tạo fake file/production reset.
BR-09 — Quote/order giữ snapshotAccepted quote và order phải giữ snapshot product behavior, pricing mode, pricing/contact/address/invoice/referral cần thiết. Thay product config/pricing/profile sau đó không được âm thầm sửa lịch sử.
BR-10 — Shipping manual, không split shipmentP0 không shipping API/realtime freight. Mỗi order tối đa một active shipment; shipment được tạo ngoài hệ thống và carrier/service/tracking/actual fee/status nhập thủ công.
BR-11 — Shipping charge customer chỉ qua quoteInstant checkout không tự cộng shipping fee. Nếu cần thu shipping từ customer, Sales/Admin đưa shipping thành line/adjustment của manual quote trước payment. Actual carrier fee sau đó là operational cost.
BR-12 — Referral một tầng và không self-referralAgent chỉ active sau Admin approval; referral code unique case-insensitive; không self-referral. Attribution của order bị khóa sau payment confirmation và không có multi-level referral.
BR-13 — Commission chỉ eligible khi Paid + CompletedCommission base là product net sau discount, loại VAT/shipping/refunded amount. Chỉ order Paid + Completed và không cancel/refund mới eligible; payout một batch mỗi tháng, refund sau payout tạo negative adjustment.
BR-14 — Business account một-mộtMột doanh nghiệp có một account P0; không organization members. Tax code unique khi có. Guest được browse/add-to-cart nhưng checkout bắt buộc account đã xác thực.
BR-15 — Invoice phát hành thủ công và khóa sau IssuedMột order tối đa một invoice record P0. Customer sửa invoice info trước Issued; sau Issued chỉ Accounting cập nhật/điều chỉnh. PrintUp không gọi invoice provider API.
BR-16 — Transactional notification là email + pushEmail được attempt cho các transactional event áp dụng; push gửi khi có permission/device token. Push failure không block workflow; transient provider error retry tối đa 3 lần và lưu delivery status/error. Không phát file/production event giả cho item không có gate đó.
BR-17 — Dữ liệu giữ tới khi Admin xóaBusiness data mặc định không có TTL. Admin delete mặc định soft-delete; hard purge là action riêng có strong confirmation/audit và không cascade xóa audit record của thao tác.
BR-18 — Public design URL không được biến thành integration ngầmPrintUp không gửi file/PII sang DesignO/Canva và không cần provider credential. Public URL chỉ dùng cho item được cấu hình cần design để người có quyền mở/kiểm; backend không được mặc định crawl/fetch arbitrary URL như một dependency P0.
BR-19 — Order completion theo item-specific gatesOrder không được Completed khi còn item-specific gate hoặc fulfilment đang mở. Direct-fulfilment item không cần production/QC; production-enabled item phải hoàn tất production/QC. No-shipping/pickup có thể đóng fulfilment thủ công; shipment order chỉ hoàn tất khi trạng thái delivery phù hợp được ghi nhận.
BR-20 — Thay đổi ngoài implementation freezeHạng mục nằm trong P0 explicit non-goals hoặc thay behavior đã khóa chỉ quay lại bằng change request/version mới. Team được siết chặt security/observability mà không làm giảm behavior nghiệp vụ.
BR-21 — Product config quyết định selling flowKhông được hard-code toàn app là print-only. Admin cấu hình từng product/variant để quyết định customization_mode, pricing_mode và fulfilment_mode. Standard ecommerce product chỉ variant/phân loại + quantity với fixed-unit pricing/direct fulfilment là capability P0; print/customizable product có thể bật design URL, print-engine và production.
BR-22 — Mixed order được hỗ trợCart/order có thể chứa đồng thời standard ecommerce item và print/customizable item. Mỗi item giữ behavior/pricing snapshot riêng; một item không được kế thừa design/production gate chỉ vì item khác trong cùng order cần gate đó.

3. Negative-path bắt buộc

  • Discount/promo không bypass floor.
  • Duplicate checkout/SePay replay không duplicate order/payment.
  • Private/inaccessible design URL không được approve; arbitrary public URL không trở thành backend fetch dependency.
  • Role khác Production Approver, kể cả Admin chưa được gán role, không approve gate.
  • Partial/over/under/unmatched/late payment không tự Paid.
  • Second active shipment bị chặn P0; carrier state không tự xuất hiện từ API.
  • Invoice info chưa Issued không được hiển thị như hóa đơn đã phát hành.
  • Self-referral bị chặn; commission/payout không duplicate; refund sau payout tạo adjustment.
  • Soft-delete/hard-purge phải theo role/audit và không cascade delete audit record của delete.
  • Feature thuộc P0 non-goals không được tự bật bằng hidden flag hoặc provider integration chưa được change request.

Yêu cầu phi chức năng (NFR-01..NFR-16)

Kiến trúc, quyền sở hữu tài sản, RBAC/bảo mật/audit, idempotency, độ bền vững SePay và baseline kỹ thuật P0 sau implementation freeze.

NFR không còn là danh sách câu hỏi cho Founder. Sau implementation freeze:

  • Product/runtime boundaries đã khóa: customer iOS/Android + Admin Web; no public storefront Web P0; no DesignO/Canva/shipping/invoice API; SePay + email + push là các integrations thực.
  • Security baseline đã rõ: email verification/OTP rate-limit, password recovery, RBAC server-side, audit, safe public-URL handling, không commit secret hoặc log OTP/password plaintext.
  • Data/reliability baseline đã rõ: versioned pricing snapshot, order/payment idempotency, indefinite business retention until Admin delete, backup + restore drill trước pilot.
  • Technical thresholds: performance/monitoring/backup operations do Tech team set/test theo dataset pilot và lưu bằng chứng/runbook. Không cần formal tải/availability/RPO/RTO từ Founder để bắt đầu build.
  • Deployment inputs: real catalog/rates/margin/VAT/commission/provider credentials phải seed trước pilot/release nhưng không thay behavior P0.
  • D-22..D-25 đã bỏ: các ID này không được tái sử dụng; technical bằng chứng được quản lý trực tiếp trong NFR/AC/runbook.
NFR là baseline kỹ thuật thực thi, không phải câu hỏi business mở.

NFR implementation freeze v1. Các integration DesignO/Canva, shipping carrier và invoice provider API đã defer. D-22..D-25 không còn là decision card; technical baselines dưới đây do team implement/test trực tiếp và không cần quay lại hỏi Founder.

NFR-01 — Khả năng mở rộng Khối 2/3

P0 Implementation freeze v1

Core account/catalog/pricing/order/payment/production không hard-code single-facility/provider assumption theo cách buộc rewrite khi sau này thêm PrintUp Supply/Studio.

Gợi ý kiểm thử

  • Architecture review service/data/contracts; giả lập thêm facility/reference/routing adapter mà không đổi core order/pricing semantics.

NFR-02 — Mobile-first, Admin Web + storefront Web P0

P0 Implementation freeze v1

Customer iOS/Android ra mắt trước; Admin/backoffice Web là P0 control plane. Public/customer Web storefront thuộc P0, không delay (Founder 17/09/2026) và phải dùng chung domain/backend/API với mobile, không nhân đôi business logic. Shared domain/network/data logic khi hợp lý.

Gợi ý kiểm thử

  • Build/test iOS, Android, Admin và storefront Web độc lập; storefront Web chạy cùng P0 end-to-end flow bằng cùng API với mobile.

NFR-03 — Không phụ thuộc shipping provider

P0 Founder decision 16/09/2026

P0 không shipping/carrier API. Core chỉ lưu manual fulfilment data và extension point tương lai, tối đa một active shipment/order.

Gợi ý kiểm thử

  • E2E fulfilment không network call carrier; schema không provider-specific bắt buộc.

NFR-04 — Pricing configuration/versioning

P0 Implementation freeze v1

Material/print/finishing/waste/yield/margin/VAT/discount/promo parameters chỉnh qua Admin không sửa code; versioned/audited và order/quote giữ snapshot.

Gợi ý kiểm thử

  • Thay config rồi chạy golden fixture; verify historical snapshot không đổi.

NFR-05 — Quyền sở hữu mã nguồn, dữ liệu và IP

Contract Baseline 16/09/2026

Chủ đầu tư sở hữu mã nguồn, dữ liệu và tài sản trí tuệ theo phần đã thanh toán ở từng mốc.

Gợi ý kiểm thử

  • Mỗi mốc có checklist source/schema/config/assets/evidence bàn giao tương ứng.

NFR-06 — Tài khoản production do chủ đầu tư kiểm soát

Contract Baseline 16/09/2026

Domain, hạ tầng, app-store, email/push/SePay production account và billing phải do chủ đầu tư sở hữu/kiểm soát; secret không commit vào repo.

Gợi ý kiểm thử

  • Kiểm owner/admin/billing access và secret injection trước release/handover.

NFR-07 — Giảm dependency bên thứ ba

P0 Implementation freeze v1

Runtime P0 không cần DesignO/Canva/shipping/invoice provider API. SePay, email và push là integrations thực; mọi provider failure phải degrade theo business rules chứ không giả thành công.

Gợi ý kiểm thử

  • E2E không DesignO/Canva/shipping/invoice API; simulate SePay/email/push unavailable/error paths.

NFR-08 — Nghiệm thu theo requirement và evidence

Contract Implementation freeze v1

M1–M5 pass bằng FR/NFR/AC hiện hành và evidence quan sát được; integration/non-goal đã defer không được dùng làm blocker.

Gợi ý kiểm thử

  • Mỗi mốc có checklist test/evidence/waiver và handover tương ứng.

NFR-09 — RBAC server-side

P0 Implementation freeze v1

Permission matrix v1.0 enforce tại API/server; UI hiding không thay authorization. Chỉ một Production Approver active; internal disabled account không được tiếp tục thao tác.

Gợi ý kiểm thử

  • Positive/negative matrix tests, direct API unauthorized attempts, approver reassignment atomicity, disabled internal user access.

NFR-10 — Security và privacy baseline

P0 Implementation freeze v1

TLS/transport encryption, secure credential storage, password hashing, email/OTP rate-limit, least privilege, PII minimization, privacy notice và safe handling public URLs. Backend không mặc định crawl/fetch arbitrary design URL P0; nếu sau này có server fetch phải có SSRF protection/allowlist/sandbox phù hợp.

Gợi ý kiểm thử

  • Auth rate-limit/OTP expiry/password reset tests; TLS/secret scan; authorization; public URL flow không server-side arbitrary fetch; privacy/delete behavior review.

NFR-11 — Audit và truy vết

P0 Implementation freeze v1

Audit tối thiểu pricing config/floor override, role/approver assignment, file/production approvals, payment reconciliation/refund, agent approval, commission payout/adjustment, invoice status và delete/hard purge.

Gợi ý kiểm thử

  • Thực hiện từng sensitive action và xác nhận actor/time/action/target/reason/before-after khi phù hợp; audit delete không cascade theo hard purge.

NFR-12 — Hiệu năng baseline P0

P0 Technical baseline

Mobile API/catalog/pricing/checkout/tracking và Admin phải đủ nhanh cho pilot. Team kỹ thuật đặt/test ngưỡng thực dụng trên dataset P0, theo dõi regression; không cần Founder chốt formal load target.

Gợi ý kiểm thử

  • Smoke/load test main read/write/pricing/checkout endpoints và lưu observed latency/concurrency/error rate trước pilot.

NFR-13 — Monitoring, error tracking và alerting

P0 Technical baseline

Backend/Admin/mobile critical errors, health checks, SePay/email/push failures và queue/retry health phải có logging/monitoring đủ để support pilot. Không log password/OTP/secret/raw sensitive payload không cần thiết.

Gợi ý kiểm thử

  • Simulate core/SePay/email/push failure; xác nhận error captured/alerted theo runbook và sensitive data không lộ trong log.

NFR-14 — Backup, retention và restore

P0 Implementation freeze v1

Business data không auto-TTL theo D-27. Production database/media cần backup và ít nhất một restore drill trước pilot; formal RPO/RTO có thể do team vận hành đặt/runbook, không là Founder blocker.

Gợi ý kiểm thử

  • Verify no unintended purge, soft/hard-delete behavior, backup health và successful restore drill evidence.

NFR-15 — Idempotency và độ bền payment/order

P0 Implementation freeze v1

Order creation và SePay application phải idempotent; unique order number/payment reference, event verification/replay protection, retry phù hợp và manual reconciliation queue cho exception.

Gợi ý kiểm thử

  • Double-submit checkout, replay/delayed/duplicate SePay events, concurrent match attempts và unique-constraint behavior.

NFR-16 — Pilot 30 ngày và handover

M5 Baseline 16/09/2026

M5 gồm pilot thực tế 30 ngày và bàn giao source/config/schema/runbook/production account access/evidence. Real deployment inputs phải được seed trước pilot nhưng không làm thay đổi implementation behavior đã freeze.

Gợi ý kiểm thử

  • Pilot checklist, known-issue/waiver log, restore evidence, source/config/schema/runbook/account access handover verification.

Retention và backup vẫn là hai bài toán khác nhau: không auto purge dữ liệu business không thay thế cho backup/restore. Tương tự, public design URL là input do customer cung cấp, không có nghĩa backend được tự crawl arbitrary URL. Các ranh giới này phải được giữ trong implementation và security review.

Nghiệm thu & kiểm thử

M1–M5 và các kịch bản nghiệm thu (AC) của PrintUp P0 implementation freeze v1.

1. Nguyên tắc nghiệm thu

Mỗi mốc pass bằng bằng chứng bám FR/NFR/AC hiện hành. Không dùng wording/integration cũ đã defer hoặc P0 non-goals làm điểm chặn. Decision register hiện không còn business decision mở chặn development.

Vai trò Trách nhiệm
Chủ đầu tư / Product người phụ trách Duyệt phạm vi/change request và nghiệm thu business behavior đã freeze
Tech lead / đơn vị phát triển Implementation, architecture/schema, test bằng chứng, technical baseline, runbook và bàn giao
Tester / QA Chạy AC + test FR/NFR, negative/error paths và lưu bằng chứng
Production Approver Xác nhận file/production approval gates
Sản xuất Xác nhận production/QC/Rework/Scrap workflow
Kế toán SePay exception/refund, invoice, commission/payout
Admin / vận hành Catalog/pricing config, RBAC, agent approval, manual fulfilment, data delete/audit

2. Mốc M1–M5

Tỷ lệ hợp đồng giữ 20 / 30 / 25 / 15 / 10.

Mốc Bằng chứng tối thiểu theo freeze
M1 — 20% Customer mobile + Admin Web UX/flow, architecture, ERD/schema, auth/RBAC model, pricing/config model, extension point Khối 2/3
M2 — 30% Account/auth/guest-cart/checkout, config-driven catalog, public-design URL/version, pricing ≥12 golden fixtures, manual quote, SePay happy path + exception
M3 — 25% Admin order/payment/refund, single Production Approver, production/QC/rework, invoice manual, email+push notification, audit/RBAC
M4 — 15% Reorder, agent/referral/commission/monthly payout, reporting, manual fulfilment/pickup/return, data deletion/privacy paths
M5 — 10% Pilot thực tế 30 ngày, smoke/load/security/monitoring/restore bằng chứng, lỗi đã biết/miễn trừ có ghi nhận log, source/config/schema/runbook/production-account bàn giao

D-22..D-25 đã bị loại khỏi decision register và không được tái sử dụng. Technical artefact/threshold cụ thể do Tech team chọn miễn đáp ứng FR/NFR/AC và có bằng chứng.

3. Kịch bản nghiệm thu (AC-01..AC-12)

12 AC bao phủ frozen P0 end-to-end và negative/error paths.

AC-01..AC-13 là acceptance baseline của implementation freeze v1. Không còn AC nào phụ thuộc một business decision đang mở; deployment inputs có thể dùng fixture/config test trước khi dữ liệu thật được seed.

AC-01 — Customer mobile end-to-end + identity

Đề xuất

Kịch bản: Guest bắt đầu trên iOS/Android, tạo cart, xác thực account, checkout và theo dõi order đến hoàn tất.

Kết quả đạt

Guest cart hoạt động nhưng checkout bắt buộc verified account; email password/OTP đều dùng được; một business = một account; order tạo idempotent; timeline/notification nhất quán; item follow đúng product-config flow; public Web storefront thuộc P0 và chạy cùng luồng browse→cart→checkout→tracking bằng cùng backend API với mobile.

Thủ tục kiểm thử (đề xuất)

  1. Guest browse/config/add-to-cart với ít nhất một standard ecommerce fixture và một print/customizable fixture.
  2. Checkout bị chặn bằng login/create account; verify email OTP.
  3. Login bằng password rồi email OTP; test password recovery.
  4. Merge guest cart, reprice, tạo order; double-submit không duplicate.
  5. Tạo personal và business account, duplicate tax code bị xử lý đúng.
  6. Standard item không cần design/production; print item đi qua design/payment/production/fulfilment theo config.
  7. Kiểm transactional email + push và customer timeline chỉ hiển thị state áp dụng.
Kết quả chạy: ☐ Đạt  ·  ☐ Không đạt  —  Người kiểm: ________ Ngày: ________ Bằng chứng (link/ảnh): ________

AC-02 — Public design URL và versioning

Đề xuất

Kịch bản: Customer gắn HTTPS public URL cho order item được cấu hình cần design, Production Approver review, sau đó URL được thay.

Kết quả đạt

Không provider API/direct upload; public URL accessibility/checklist được xử lý thủ công; URL change tạo version mới và reset approval; item customization_mode=none không có design gate.

Thủ tục kiểm thử (đề xuất)

  1. Gắn DesignO/Canva/other HTTPS public URL cho item có customization_mode=public_design_url.
  2. Kiểm link private/hết quyền thành Needs customer action.
  3. Approve valid version; lưu actor/time/version/note.
  4. Đổi URL và xác nhận active version quay lại Awaiting review.
  5. Kiểm standard ecommerce item không bị yêu cầu URL.
  6. Kiểm backend không cần arbitrary server-side fetch/provider credential.
Kết quả chạy: ☐ Đạt  ·  ☐ Không đạt  —  Người kiểm: ________ Ngày: ________ Bằng chứng (link/ảnh): ________

AC-03 — File/color checklist thủ công

Đề xuất

Kịch bản: Production Approver kiểm các case size/bleed/DPI/font/color khác nhau cho item có design workflow.

Kết quả đạt

Checklist dùng default/config SKU; không auto-convert color; RGB/spot có warning và cần explicit note nếu vẫn approve; no-design item là Not required.

Thủ tục kiểm thử (đề xuất)

  1. Test đúng/sai product-size.
  2. Test bleed default/override, raster target và font/crop issue.
  3. Test CMYK pass và RGB/spot warning/accept-with-note.
  4. Role khác thử approve phải bị từ chối.
  5. Standard ecommerce product không tạo file-review task.
Kết quả chạy: ☐ Đạt  ·  ☐ Không đạt  —  Người kiểm: ________ Ngày: ________ Bằng chứng (link/ảnh): ________

AC-04 — Pricing modes, discount, VAT và floor

Đề xuất

Kịch bản: Chạy fixed-unit ecommerce fixtures và tối thiểu 12 print-engine golden fixtures phủ production quantity/waste, yield, digital-offset crossover, finishing/fixed, discount/promo, VAT và floor.

Kết quả đạt

Standard product dùng configured unit price mà không cần print cost inputs; print breakdown/config version khớp expected; chọn lower production cost khi áp dụng; customer không dưới floor/minimum-net; Admin config không cần deploy code; historical snapshot bất biến.

Thủ tục kiểm thử (đề xuất)

  1. Chạy fixed-unit variant + quantity + discount/VAT/floor cases.
  2. Chạy waste/yield/material print-engine fixtures.
  3. Chạy digital/offset crossover.
  4. Chạy finishing/fixed cost.
  5. Áp quantity + customer-tier + tối đa một promo/coupon.
  6. Floor/minimum-net check trước VAT; test Admin one-off override và Sales denial.
  7. Đổi product/pricing config sau order và xác nhận historical snapshot không đổi.
Kết quả chạy: ☐ Đạt  ·  ☐ Không đạt  —  Người kiểm: ________ Ngày: ________ Bằng chứng (link/ảnh): ________

AC-05 — Manual quote lifecycle

Đề xuất

Kịch bản: Cấu hình không instant-price được chuyển thành quote multi-item, có shipping/special pricing và convert order.

Kết quả đạt

Draft/Sent/Accepted/Rejected/Expired/Converted versioned; validity default 7 ngày configurable; customer accept trong account; accepted quote snapshot; floor override chỉ Admin; standard fixed-price product không bị ép qua quote.

Thủ tục kiểm thử (đề xuất)

  1. Tạo quote unsupported config.
  2. Thêm shipping line/adjustment nếu cần.
  3. Send, version, expire/reject và accept cases.
  4. Convert Accepted quote; edit price-affecting input phải reprice/new version.
  5. Standard fixed-unit product instant checkout không tạo quote.
Kết quả chạy: ☐ Đạt  ·  ☐ Không đạt  —  Người kiểm: ________ Ngày: ________ Bằng chứng (link/ảnh): ________

AC-06 — Payment + conditional file/production approval gates

Đề xuất

Kịch bản: Production-enabled order đi qua payment, file approval khi cần và production approval với nhiều role; direct-fulfilment item bypass các gate không áp dụng.

Kết quả đạt

Production approval chỉ khi Paid + design Approved nếu item cần design; chỉ một Production Approver active; reassignment atomic; Production staff không bypass; standard direct-fulfilment product không bị block bởi file/production.

Thủ tục kiểm thử (đề xuất)

  1. Standard ecommerce order Paid và xác nhận chuyển fulfilment readiness không cần file/production approval.
  2. Print order chưa Paid/file chưa approved thử production approval và bị chặn.
  3. SePay Paid + file Approved, Production Approver A approve production.
  4. Production user/Admin không có approver role thử approve và bị chặn.
  5. Admin reassign A→B; A mất quyền, B có quyền, audit đầy đủ.
  6. Run In production→QC→Ready; test Rework/Scrap reason/quantity/note.
Kết quả chạy: ☐ Đạt  ·  ☐ Không đạt  —  Người kiểm: ________ Ngày: ________ Bằng chứng (link/ảnh): ________

AC-07 — Manual fulfilment, pickup và shipping failure

Đề xuất

Kịch bản: Order/item đủ điều kiện fulfil bằng pickup/no-shipping hoặc một shipment external.

Kết quả đạt

Không carrier API/split shipment; tracking/status/actual fee nhập tay; instant checkout không tự estimate freight; customer shipping charge nếu có đến từ manual quote; direct-fulfilment item không cần chờ production.

Thủ tục kiểm thử (đề xuất)

  1. Case standard ecommerce direct-fulfilment sau Paid.
  2. Case production-enabled item chỉ fulfil sau production/QC.
  3. Case pickup/no-shipping.
  4. Case one shipment: carrier/service/tracking/actual fee.
  5. Update created/in-transit/delivered và kiểm email+push.
  6. Failure/return giữ order chưa Completed và đi cancel/refund policy.
  7. Thử tạo second active shipment và bị chặn P0.
Kết quả chạy: ☐ Đạt  ·  ☐ Không đạt  —  Người kiểm: ________ Ngày: ________ Bằng chứng (link/ảnh): ________

AC-08 — SePay idempotency và payment exceptions

Đề xuất

Kịch bản: Nhận full payment, replay, partial, over, under, unmatched và late payment.

Kết quả đạt

Chỉ full match đúng reference tự Paid; replay không duplicate; exception vào Accounting reconciliation; order creation/payment application idempotent.

Thủ tục kiểm thử (đề xuất)

  1. Full amount happy path.
  2. Replay same transaction/event.
  3. Partial/over/under/unmatched/late cases.
  4. Accounting reconcile với reason/evidence/audit.
  5. Kiểm unique payment reference/order constraint.
Kết quả chạy: ☐ Đạt  ·  ☐ Không đạt  —  Người kiểm: ________ Ngày: ________ Bằng chứng (link/ảnh): ________

AC-09 — Invoice, cancel/change và manual refund

Đề xuất

Kịch bản: Customer yêu cầu invoice và sau payment có change/cancel/refund request.

Kết quả đạt

Invoice snapshot editable tới Issued; sau đó Accounting-only. After-payment edit/cancel không self-service; refund external/manual và tracked; price/design change reset approval/reprice khi gate áp dụng.

Thủ tục kiểm thử (đề xuất)

  1. Create order với invoice info, edit trước Issued, block customer edit sau Issued.
  2. Cancel/edit trước payment và reprice.
  3. Post-payment request; Admin quyết refund amount/reason.
  4. Accounting ghi refund transfer reference/status.
  5. Post-payment design/config change trên print item reset file/production approval; handle increase/decrease difference.
  6. Post-payment change trên standard item không tạo fake file reset.
Kết quả chạy: ☐ Đạt  ·  ☐ Không đạt  —  Người kiểm: ________ Ngày: ________ Bằng chứng (link/ảnh): ________

AC-10 — Agent/referral/commission/monthly payout

Đề xuất

Kịch bản: Account apply agent, được approve, referral order phát sinh commission rồi payout/refund adjustment.

Kết quả đạt

One-tier, no self-referral, unique code, attribution locked after payment; tài khoản agent không đặt được đơn/checkout (D-38); base loại VAT/shipping/refund; chỉ Paid+Completed eligible; monthly batch không duplicate; post-payout refund tạo negative adjustment.

Thủ tục kiểm thử (đề xuất)

  1. Apply Pending→Admin Approved.
  2. Valid/invalid/self referral.
  3. Agent account thử đặt đơn/checkout và bị chặn server-side (D-38).
  4. Paid+Completed order tính commission với configured rate.
  5. Cancel/refund trước payout không trả sai.
  6. Monthly batch + duplicate guard + payout info requirement.
  7. Refund sau payout tạo negative adjustment kỳ sau.
Kết quả chạy: ☐ Đạt  ·  ☐ Không đạt  —  Người kiểm: ________ Ngày: ________ Bằng chứng (link/ảnh): ________

AC-11 — RBAC, security, retention và audit

Đề xuất

Kịch bản: Chạy permission matrix v1.0, auth abuse cases, soft-delete/hard-purge và sensitive actions.

Kết quả đạt

Unauthorized API action bị chặn; auth rate-limit/recovery an toàn; sensitive action audit; business data không auto purge; hard purge explicit và không xóa audit delete record.

Thủ tục kiểm thử (đề xuất)

  1. Positive/negative RBAC matrix.
  2. OTP expiry/wrong-attempt/resend/rate-limit + password reset/session revoke.
  3. Audit pricing override, approver assignment, approvals, reconciliation/refund, agent/payout, invoice/delete.
  4. Soft-delete rồi hard-purge test với strong confirmation.
  5. Verify no DesignO/Canva outbound PII/file flow và no arbitrary backend URL fetch dependency.
Kết quả chạy: ☐ Đạt  ·  ☐ Không đạt  —  Người kiểm: ________ Ngày: ________ Bằng chứng (link/ảnh): ________

AC-12 — Milestones, technical baseline và handover

Đề xuất

Kịch bản: Nghiệm thu M1–M5 theo frozen P0 thay vì wording integration cũ.

Kết quả đạt

iOS/Android + Admin Web P0 có evidence; standard ecommerce capability và print/customizable capability đều có test evidence; non-goals không chặn; M5 pilot 30 ngày; source/config/schema/runbook/account access được bàn giao.

Thủ tục kiểm thử (đề xuất)

  1. M1: mobile/Admin UX, architecture, ERD/schema, RBAC approach, product-behavior config, extension point Khối 2/3.
  2. M2–M4: FR/AC P0 theo frozen scope, không yêu cầu deferred integration.
  3. Smoke/load/security/monitoring/backups có technical evidence phù hợp.
  4. Thực hiện ít nhất một restore drill trước pilot.
  5. M5: pilot 30 ngày + known issue/waiver log + handover source/config/schema/runbook/production-account access.
Kết quả chạy: ☐ Đạt  ·  ☐ Không đạt  —  Người kiểm: ________ Ngày: ________ Bằng chứng (link/ảnh): ________

AC-13 — Admin-configured standard ecommerce + print/customizable product flows

Đề xuất

Kịch bản: Admin tạo hai product fixture trong cùng catalog: A là standard ecommerce chỉ variant + quantity; B là print/customizable có design URL + print-engine + production. Customer mua riêng từng loại và tạo một mixed cart/order.

Kết quả đạt

Behavior hoàn toàn theo product config, không theo app-wide hard-code. Product A dùng fixed-unit price, không design/file/production gate và đi direct fulfilment sau payment. Product B giữ print pricing/design/production flow. Mixed order snapshot từng item mode và chỉ Completed khi mọi item-specific gate + fulfilment đóng.

Thủ tục kiểm thử (đề xuất)

  1. Admin tạo Product A với customization_mode=none, pricing_mode=fixed_unit_price, fulfilment_mode=direct_fulfilment; publish không yêu cầu material/print/design config.
  2. Admin tạo Product B với customization_mode=public_design_url, pricing_mode=print_engine, fulfilment_mode=production_then_fulfilment; publish validation yêu cầu print config tương ứng.
  3. Mobile Product A chỉ hiển thị variant/phân loại + quantity; add cart, price, checkout, SePay Paid, fulfilment without design/production.
  4. Mobile Product B hiển thị print options/design; chạy pricing engine, file approval, production/QC, fulfilment.
  5. Tạo mixed cart/order A+B; pricing snapshot lưu mode từng item, không làm A chờ design/production của chính A.
  6. Đổi Admin config sau khi order được tạo và xác nhận order lịch sử không đổi behavior snapshot.
Kết quả chạy: ☐ Đạt  ·  ☐ Không đạt  —  Người kiểm: ________ Ngày: ________ Bằng chứng (link/ảnh): ________

4. Readiness checklist trước pilot

  • iOS + Android + Admin Web chạy được P0 end-to-end; public storefront Web không required.
  • Email registration/OTP/password recovery/rate-limit và guest-cart→account checkout đạt.
  • Catalog SKU publish validation hoạt động; catalog thật/rates/margin/VAT đã seed hoặc có approved pilot fixtures.
  • ≥12 pricing golden fixtures pass; floor không bypass ngoài Admin one-off override có audit.
  • Public design URL/version/checklist pass; no DesignO/Canva API, direct upload hay arbitrary backend URL fetch dependency.
  • SePay full-match/replay/partial/over/under/unmatched/late cases đạt; checkout/order/payment idempotency đạt.
  • Paid + File Approved là điều kiện Production approval; chỉ một Production Approver active; reassign atomic/audited.
  • Production/QC/Rework/Scrap và production ticket/print view đã test.
  • Invoice edit-lock/manual issuance và cancel/change/refund manual flow đã test.
  • Manual fulfilment: pickup/no-shipping, one shipment, failed/return, email+push events đã test; no split shipment.
  • Agent approval/referral/no-self-referral/commission/monthly payout/negative adjustment đã test với commission config pilot.
  • Permission matrix v1.0 positive + negative API tests pass; sensitive actions có audit.
  • Soft-delete/hard-purge behavior và privacy notice đạt; hard purge không cascade delete audit record.
  • Monitoring/error tracking và ít nhất một successful restore drill có bằng chứng.
  • Production credentials/app-store/SePay/email/push quyền sở hữu và cách đưa secret vào hệ thống được kiểm tra.

5. Deployment inputs không phải điểm chặn code

Trước pilot/release cần nhập catalog thật, rates, mục tiêu/min margin, VAT config, commission rate, bank/SePay/email/push/app-store credentials và seed data vận hành. Thiếu các giá trị thật này có thể chặn pilot/release tương ứng, nhưng không phải lý do thay đổi domain behavior hoặc quay lại hỏi lại spec.

6. Biểu mẫu nghiệm thu mốc

Mốc Phiên bản Ngày Người ký chủ đầu tư Người bàn giao Kết quả Bằng chứng Lỗi còn mở/miễn trừ có ghi nhận
M1
M2
M3
M4
M5

7. Biểu mẫu chạy kịch bản

Kịch bản Lần Ngày Người kiểm Môi trường/dữ liệu Kết quả Bằng chứng Lỗi liên quan Ghi chú
AC-01 1

Đo lường vận hành

Chỉ số P0 sau implementation freeze: giá/biên lợi nhuận, duyệt thiết kế, sản xuất, SePay, thông báo, chi trả đại lý, giao hàng thủ công, xác thực và RBAC/audit.

1. Chỉ số baseline

Chỉ sốĐịnh nghĩa đề xuất
Doanh số netDoanh số theo ngày/product/agent/customer trên VND, đối chiếu order/payment/refund; tránh double-count refund/adjustment.
Biên lợi nhuận snapshotProduction cost, sale net và resulting margin tại thời điểm order; không bị thay đổi bởi pricing config mới.
Pricing golden-case accuracyTỷ lệ golden fixtures có breakdown/final price đúng expected; P0 dùng tối thiểu 12 cases phủ waste, yield, digital/offset, finishing, discount, VAT và floor.
Floor overrideSố manual quote/order được Admin override floor, kèm reason/actor/amount; customer path phải bằng 0 bypass ngoài policy.
Design needs-action rateOrder item bị trả về vì inaccessible link hoặc checklist fail / tổng design version được review; breakdown theo reason.
Design approval lead timeTừ lúc active public URL version sẵn sàng tới pass/fail; tách thời gian chờ customer update.
Production lead time & reworkTimestamp qua production states, số Rework/Scrap và reason/quantity; dùng để vận hành tối ưu, không hard-code SLA business.
SePay auto-match rateSePay transaction match đúng full order tự động / tổng incoming transaction liên quan; replay không tính transaction mới.
Payment exception queueSố partial/over/under/unmatched/late payment đang Needs reconciliation, aging và reason.
Checkout/order duplicate guardSố duplicate-attempt/idempotency retry được absorb; mục tiêu không có duplicate order/payment application do retry/double tap.
Agent funnelApplication Pending/Approved/Rejected/Suspended, thời gian approval và số active agent.
Commission & payoutAccruing/Eligible/Paid/Adjusted theo monthly batch; theo dõi duplicate guard và negative adjustment do refund.
Manual fulfilment completenessOrder cần delivery có carrier/service/tracking/status/actual fee đầy đủ; phân biệt pickup/no-shipping và missing manual data.
Notification deliveryEmail/push queued/delivered/failed/retried theo event; push unavailable không tính business-flow failure nếu email path hoạt động.
RBAC/audit coverageUnauthorized sensitive action bị chặn và sensitive action hợp lệ có audit actor/time/action/target/reason/before-after khi phù hợp.
Auth abuse/errorOTP wrong/expired/rate-limited, password reset và suspicious login failures; không lưu OTP/password plaintext vào log.
Backup/restore evidenceKết quả restore drill và backup health do team kỹ thuật quản lý trong runbook; không cần founder đặt formal RPO/RTO để bắt đầu P0.

Metric phải có nguồn dữ liệu, window/timezone, cách xử lý retry/refund/adjustment và không được biến thiếu dữ liệu manual thành dữ liệu tự động giả. SePay replay không phải giao dịch mới; shipping manual không phải carrier realtime; refund adjustment không phải revenue mới.

2. Golden datasets cần chuẩn bị

  • Pricing: tối thiểu 12 fixtures phủ waste/yield, digital/offset crossover, finishing/fixed, quantity + customer-tier discount, one promo/coupon, VAT và floor/override.
  • Auth/account: email verify OTP, password/OTP login, recovery/session revoke, duplicate email/tax code, guest cart merge.
  • Design: public/private URL, URL version change, size/bleed/DPI/font/color pass/fail và RGB/spot accept-with-note.
  • Order/SePay: idempotent double-submit, full payment, replay, partial/over/under/unmatched/late và Accounting reconciliation.
  • Production: Paid/File-approved gates, approver reassignment, QC/Rework/Scrap, multi-item order completion.
  • Notification: email+push happy path, missing push token, transient failure/retry, delivery log.
  • RBAC: permission matrix v1.0 positive/negative tests, floor override, payment/refund, agent approval/payout, delete/hard purge.
  • Agent: apply→approve→referral→commission→monthly payout; cancel/refund trước payout và negative adjustment sau payout.
  • Fulfilment: pickup/no-shipping, one manual shipment, delivered/failed/return, shipping charge qua manual quote.

3. Performance/ops bằng chứng

NFR-12..NFR-15 là technical baseline do team đặt/test theo pilot dataset. Không cần formal load/availability/RPO/RTO từ Founder để bắt đầu implementation, nhưng M5 vẫn cần smoke/load/error-monitoring/backup-restore bằng chứng phù hợp.

4. Không dùng deferred/non-goal metric làm điểm chặn

Không yêu cầu DesignO/Canva API success rate, carrier webhook/volumetric quote accuracy, COD remittance SLA, invoice-provider SLA hay public storefront Web metrics ở P0.

Quyền & phân quyền

Permission matrix v1.0 cho PrintUp P0 sau implementation freeze; authorization enforce tại API/server.

1. Nguyên tắc

Matrix này là implementation baseline v1.0. Guest là trạng thái chưa xác thực, không phải role: guest chỉ browse catalog, cấu hình sản phẩm và giữ cart cục bộ; mọi checkout/order/account data yêu cầu account đã xác thực.

Các invariant:

  1. Chỉ một Production Approver active tại một thời điểm.
  2. Chỉ Production Approver được approve fileapprove production.
  3. Admin gán/thay Production Approver nhưng không tự có quyền approve nếu chưa được gán role đó.
  4. Accounting xác nhận/manual-reconcile payment, ghi refund execution, invoice và payout; Sales/Production không tự xác nhận tiền.
  5. Mọi account có thể apply Agent; chỉ Admin approve/reject/suspend.
  6. Management mặc định read-only.
  7. Authorization kiểm tại API/server, không dựa vào việc ẩn nút UI.
  8. Action nhạy cảm phải audit actor/time/action/mục tiêu/reason và before-after khi phù hợp.

2. Ký hiệu

  • Own: chỉ dữ liệu của account.
  • R: read.
  • RW: read/write theo state rule.
  • A: approval/gate action.
  • Admin: quản trị cấu hình/quyền.
  • Request: gửi yêu cầu, không tự thực thi.
  • : không có quyền mặc định.

3. Permission matrix v1.0

Tài nguyên / hành động Customer Agent Sales Production Production Approver Accounting Admin Management
Profile cá nhân/doanh nghiệp Own RW Own RW R R R RW R
Address/contact Own RW Own RW R R khi fulfilment R R RW R
Cart Own RW Own RW R support
Order Own R; RW/cancel trước payment Own R + referral phạm vi RW theo state R R R RW theo state R
Cancel/change sau payment Request Request Request R A/RW R
Refund amount/decision Request Request R A/RW R
Refund execution/reference Own R R RW/A R R
Catalog/product/variant R R R R R R Admin R
Pricing config/margin/promo R R R R Admin R
Floor override one-off Request R A R
Manual quote Own R/Accept Own R/Accept RW R R RW R
Public design URL Own RW trước lock R R RW note R
File checklist result Own R R R RW/A R R
Approve file A
Production order/ticket Own trạng thái R R RW RW R RW R
Approve production A
QC/Rework/Scrap record Own trạng thái R R RW RW R RW R
Payment/SePay Own R R R R RW R R
Manual payment reconciliation RW/A R R
Invoice info trước Issued Own RW R RW R R
Invoice Issued/adjustment ref/trạng thái Own R R RW R R
Shipment/tracking/trạng thái Own R R RW RW R RW R
Agent application Own Own R R R
Agent approve/reject/suspend R A R
Referral attribution Own R Own R R R RW correction trước lock R
Commission Own R R RW R R
Monthly payout batch Own R RW/A R R
Notification delivery log Own R Own R R R R R RW/support R
Internal user activation/role Admin R
Gán Production Approver Admin R
Report tổng hợp Own Own phạm vi R R R R R R
Yêu cầu xóa account/data Request Request RW process
Soft-delete business data Admin
Hard purge Admin + strong confirm

4. Ràng buộc kỹ thuật

  • Reassign Production Approver phải atomic hoặc có cơ chế tương đương để không tồn tại hai approver active.
  • File approval và production approval là hai action riêng dù cùng một người thực hiện.
  • Production approval chỉ được phép khi payment = Paid và active design version = Approved.
  • Manual SePay reconciliation lưu actor, time, source transaction, mục tiêu order, amount và reason.
  • Floor override chỉ one-off manual quote/order, không có global bypass flag.
  • Admin quyết refund amount; Accounting ghi execution/reference sau khi chuyển tiền bên ngoài.
  • Customer/business/account/address/order/invoice data lịch sử dùng snapshot phù hợp để profile update không rewrite history.
  • Soft-delete là mặc định; hard purge không cascade audit record của delete.
  • Internal user bị disable phải mất quyền truy cập và long-lived session theo auth implementation hiện hành.

5. Thay đổi sau freeze

Matrix có thể được version hóa khi tổ chức thay đổi, nhưng thay đổi quyền nhạy cảm phải có regression test RBAC. Việc một người kiêm nhiều role được phép nếu Admin gán rõ; ví dụ Admin có thể đồng thời được gán Production Approver, nhưng quyền approve đến từ role Production Approver chứ không từ Admin.

Decision register — implementation freeze v1

Các quyết định P0 đã được khóa để team có thể bắt đầu build mà không quay lại hỏi behavior nghiệp vụ.

Decision register này là source of truth cho behavior P0 đã khóa. Sau vòng rà soát cuối, không còn decision nghiệp vụ ở trạng thái mở chặn development. Những con số/dữ liệu thật như catalog, bảng giá, margin, VAT, commission rate và credentials là deployment configuration cần trước pilot/release, không phải lý do dừng implementation.

Quy ước ID

  • D-22, D-23, D-24, D-25 đã bị bỏ theo quyết định Founder và không được tái sử dụng.
  • D-26/D-27 giữ nguyên ID để không phá traceability lịch sử.
  • D-28..D-34 là các decision bổ sung từ final-gap review: auth security, identity/address schema, locale/units, cart/order idempotency, fulfilment fee policy, promotion stacking và explicit P0 non-goals.

Những điểm khóa quan trọng

  • D-01: catalog configuration-driven; SKU thiếu required config không publish instant pricing.
  • D-05/D-06: public design URL + checklist thủ công; không direct upload/auto color conversion.
  • D-07..D-09: pricing formula, policy order, floor/margin/override đã có implementation default.
  • D-10: manual quote lifecycle và 7-day default validity.
  • D-11: bank transfer + SePay, full-amount match; exception/refund manual.
  • D-13: production/QC/rework state machine và single Production Approver gate.
  • D-18: one-tier referral, commission eligibility/base và monthly payout.
  • D-20: email auth, single business account, guest cart nhưng no guest checkout.
  • D-21: email + push với default transactional events/retry/fallback.
  • D-26: cancel/change/refund lock points.
  • D-27: retention + soft-delete/hard-purge semantics.
  • D-28..D-34: implementation details cần để schema/API/mobile/admin không mơ hồ.

Nguyên tắc khi code

  1. Không hỏi lại Founder về behavior đã có trong decision register.
  2. Nếu thiếu deployment value, dùng fixture/config default để build và để business nhập dữ liệu thật trước pilot.
  3. Nếu chi tiết thuần kỹ thuật không đổi behavior business, Tech lead được chọn phương án an toàn, đơn giản, testable và ghi trong ADR/runbook khi cần.
  4. Nếu yêu cầu mới mâu thuẫn freeze hoặc nằm trong P0 non-goals, tạo change request/version mới.
Tất cả decision P0 hiện hành phải ở trạng thái Đã chốt.

Implementation freeze v1 — 16/09/2026. Founder đã yêu cầu rà soát để spec đủ tường minh cho team bắt đầu làm mà không quay lại hỏi các chi tiết P0. Các mục D-22..D-25 đã bị loại khỏi register theo quyết định trước đó và không được tái sử dụng. Các giá trị nghiệp vụ có thể cấu hình như catalog thật, product behavior mode, fixed unit price, giá vật liệu, margin, VAT, commission rate là deployment data, không phải blocker thiết kế. Nếu sau này muốn đổi behavior đã khóa thì dùng change request/version mới.

D-01 — Danh mục, SKU và product behavior

Đã chốt

Đã ghi nhận: Catalog P0 là configuration-driven, không hard-code danh sách SKU và không giả định mọi sản phẩm đều là sản phẩm in/tùy biến. Mỗi product/variant có mã duy nhất, tên/nhóm, active, variant/options, quantity rule/MOQ, pricing config và behavior config. Semantics tối thiểu gồm customization_mode = none/public_design_url, pricing_mode = fixed_unit_price/print_engine, fulfilment_mode = direct_fulfilment/production_then_fulfilment. Standard ecommerce product có thể chỉ cho khách chọn variant/phân loại + quantity, không design/file/print options; print/customizable product có thể bật dimensions/print area, material, finishing, print technology, design URL và production checklist. Một cart/order có thể mix các mode. SKU thiếu parameter bắt buộc cho mode đã chọn không được publish. Team dùng fixture SKU đại diện cho cả standard ecommerce và print/customizable; catalog thật do Admin nhập trước pilot và không cần thay code.

Vai trò chốt: Founder + Sản xuất + Sales + Tech lead  ·  Thời điểm: Đã khóa implementation baseline 16/09/2026; clarified dual commerce mode 16/09/2026

D-02 — Kênh ra mắt

Đã chốt

Đã ghi nhận: P0 gồm customer app iOS, customer app Android, Admin/backoffice Web và public/customer Web storefront. Founder yêu cầu 17/09/2026: Web storefront thực hiện trong P0, không delay sang sau P0. Storefront Web dùng chung backend/API, account, pricing, order và workflow đã freeze với mobile; chỉ khác presentation layer. Admin/backoffice Web vẫn là control plane cho catalog, pricing, order, production, accounting và RBAC.

Vai trò chốt: Founder + Tech lead  ·  Thời điểm: Đã chốt 16/09/2026; làm rõ Admin Web trong implementation freeze; Founder cập nhật Web storefront vào P0 17/09/2026

D-03 — DesignO trong phạm vi hiện tại

Đã chốt

Đã ghi nhận: Không tích hợp DesignO API/SDK. Khách chỉ đính kèm HTTPS public URL cho product/item được cấu hình cần design; PrintUp lưu URL và metadata nội bộ, người có quyền mở link để kiểm thủ công. Standard ecommerce product có customization_mode=none không yêu cầu DesignO/design URL.

Vai trò chốt: Founder + Tech lead  ·  Thời điểm: Đã chốt 16/09/2026

D-04 — Canva trong phạm vi hiện tại

Đã chốt

Đã ghi nhận: Không tích hợp Canva API/OAuth. Với product/item cần design, khách chỉ đính kèm HTTPS public URL; PrintUp lưu URL, không tự đọc/chỉnh/export dữ liệu qua Canva. Product customization_mode=none không có design gate.

Vai trò chốt: Founder + Tech lead  ·  Thời điểm: Đã chốt 16/09/2026

D-05 — Chuẩn quản lý màu

Đã chốt

Đã ghi nhận: P0 không tự chuyển đổi hệ màu. Production Approver kiểm màu thủ công cho item có design/file workflow. CMYK là trạng thái ưu tiên; RGB/spot/khác phải được cảnh báo trong checklist và chỉ được approve khi Production Approver chấp nhận rủi ro bằng note. Color profile được cấu hình theo máy/sản phẩm khi có, không hard-code một profile toàn hệ thống. Kết quả kiểm lưu actor, time, link-version, pass/fail, note và evidence tùy chọn.

Vai trò chốt: Sản xuất + Production Approver + Tech lead  ·  Thời điểm: Đã khóa implementation baseline 16/09/2026

D-06 — Chuẩn file/link đầu vào

Đã chốt

Đã ghi nhận: Với product/item có customization_mode=public_design_url, P0 nhận design bằng HTTPS public URL từ bất kỳ provider nào nếu Production Approver mở/download được mà không cần credential riêng của khách; không có direct file upload. PDF production-ready là format ưu tiên, format khác có thể được Production Approver chấp nhận thủ công. Checklist mặc định: link truy cập được; đúng sản phẩm/kích thước; bleed mặc định 3 mm khi SKU yêu cầu và có thể override theo SKU; raster mục tiêu 300 DPI ở kích thước cuối; font embedded/outlined khi áp dụng; không lỗi crop/overflow; rủi ro màu đã được kiểm. Bất kỳ thay đổi URL nào sau approval đều tạo version mới và reset file approval. Product customization_mode=none bỏ qua toàn bộ file gate.

Vai trò chốt: Sản xuất + Product + Tech lead  ·  Thời điểm: Đã khóa implementation baseline 16/09/2026

D-07 — Pricing modes, công thức print engine và golden cases

Đã chốt

Đã ghi nhận: pricing_mode được cấu hình theo product/variant. fixed_unit_price dùng giá bán theo variant/quantity config, sau đó đi qua discount, floor/minimum-net, VAT và snapshot chung. print_engine dùng rule/config versioned: production_qty = ordered_qty + waste; material cost phản ánh lượng vật liệu thực, yield và hao khổ; digital và offset tính độc lập khi đủ điều kiện; finishing gồm fixed + variable component; fixed order cost cộng riêng; production_cost = material + print + finishing + fixed; target_net_price = production_cost / (1 - target_margin); floor_net_price = production_cost / (1 - minimum_margin). Nếu cả digital/offset hợp lệ, chọn phương án total production cost thấp hơn. Standard ecommerce fixed-price product không cần material/yield/print/finishing input. Giá/rate thật là Admin deployment data; development dùng ít nhất 12 golden fixtures cho print engine và fixture riêng cho fixed-unit variant/quantity/discount/VAT/floor.

Vai trò chốt: Founder + Sản xuất + Kế toán + Tech lead  ·  Thời điểm: Đã khóa implementation baseline 16/09/2026; clarified dual pricing mode 16/09/2026

D-08 — Thứ tự chính sách giá, VAT và version

Đã chốt

Đã ghi nhận: P0 dùng VND integer. Sau khi pricing mode tạo base net price, pipeline chung là base net price -> quantity discount -> customer-tier discount -> tối đa một promo/coupon -> floor/minimum-net check -> VAT -> rounding final. Floor/minimum-net check luôn chạy sau mọi discount. VAT rate và cờ price-includes-VAT là cấu hình; UI phải luôn hiển thị rõ subtotal, VAT và total. Cart/reorder luôn reprice theo config hiện hành; quote/order lưu price snapshot. Thay đổi bảng giá chỉ áp dụng cho cart/quote/order mới hoặc order chưa khóa được chủ động reprice, không âm thầm đổi order đã thanh toán/quote đã accept.

Vai trò chốt: Founder + Kế toán + Sales + Tech lead  ·  Thời điểm: Đã khóa implementation baseline 16/09/2026

D-09 — Biên lợi nhuận và quyền override

Đã chốt

Đã ghi nhận: Print-engine product dùng target margin và minimum margin config theo product group/SKU. Fixed-unit product dùng minimum-net/floor config hoặc cost/margin rule tương đương. Customer checkout không bao giờ được thấp hơn floor/minimum-net đã cấu hình. Chỉ Admin được override floor trên một manual quote/order cụ thể; bắt buộc nhập reason, lưu actor/time/before-after và không tạo bypass global. Sales có thể đề nghị nhưng không tự approve.

Vai trò chốt: Founder + Kế toán + Admin  ·  Thời điểm: Đã khóa implementation baseline 16/09/2026

D-10 — Luồng báo giá tay

Đã chốt

Đã ghi nhận: Manual quote dùng khi cấu hình không hỗ trợ instant pricing, vượt constraint SKU, cần giá/finishing đặc biệt, cần charge shipping riêng hoặc cần floor override. Standard ecommerce product có fixed-unit pricing hợp lệ không bị ép vào manual quote chỉ vì không có print configuration. Quote có version, trạng thái Draft -> Sent -> Accepted/Rejected/Expired -> Converted; validity mặc định 7 ngày và Admin/Sales có thể chỉnh trước khi gửi. Customer accept bằng action trong account, không cần e-signature. Accepted quote tạo order snapshot; sửa input ảnh hưởng giá sau đó phải tạo version/reprice mới. Mỗi quote có thể gồm nhiều item.

Vai trò chốt: Sales + Product + Kế toán  ·  Thời điểm: Đã khóa implementation baseline 16/09/2026

D-11 — Thanh toán và ngoại lệ

Đã chốt

Đã ghi nhận: P0 chỉ thanh toán chuyển khoản và đối chiếu bằng SePay. Mỗi order có payment reference duy nhất và kỳ vọng full amount; partial/over/under/unmatched payment không tự đổi order sang Paid mà vào manual reconciliation cho Accounting. Production approval, khi product/item có production flow, yêu cầu Paid. Payment window mặc định 24 giờ và cấu hình được; payment đến sau khi order hết hạn vào manual reconciliation. Refund không tự động qua provider: Accounting chuyển khoản thủ công bên ngoài và ghi amount/reference/reason/status trong Admin. Không có card, ví điện tử hoặc COD trong P0.

Vai trò chốt: Founder + Kế toán + Tech lead  ·  Thời điểm: Đã khóa implementation baseline 16/09/2026

D-12 — Hóa đơn VAT

Đã chốt

Đã ghi nhận: App chỉ thu/lưu invoice info và trạng thái/tham chiếu; Accounting phát hành hóa đơn thủ công bên ngoài. Một order có tối đa một invoice record trong P0. Khách được sửa invoice info cho tới khi invoice được đánh dấu Issued; sau đó chỉ Accounting được cập nhật/điều chỉnh.

Vai trò chốt: Kế toán + Founder  ·  Thời điểm: Đã chốt 16/09/2026; làm rõ edit-lock trong implementation freeze

D-13 — Workflow sản xuất, QC và rework

Đã chốt

Đã ghi nhận: Production workflow áp dụng theo product/item config. Item có fulfilment_mode=production_then_fulfilment tạo production order; state tối thiểu Awaiting file (nếu cần design) -> File approved (nếu áp dụng) -> Awaiting production approval -> Approved -> In production -> QC -> Ready for fulfilment -> Completed, có On hold/Rework/Scrap. Item có customization_mode=none nhưng vẫn production-enabled dùng file gate Not required. Standard ecommerce item có fulfilment_mode=direct_fulfilment không tạo production order và sau Paid/order-processing có thể đi thẳng tới fulfilment readiness. Chỉ Production Approver active được chuyển File approved/Approved khi gate áp dụng. Production staff cập nhật progress; Admin có thể quản lý dữ liệu nhưng không bypass approval role. Rework/Scrap bắt buộc reason, quantity và note. Có production ticket/print view cho item production-enabled. Order mixed-mode chỉ Completed khi mọi item-specific gate và fulfilment đã đóng.

Vai trò chốt: Founder + Sản xuất + Product + Tech lead  ·  Thời điểm: Đã khóa implementation baseline 16/09/2026; clarified conditional production 16/09/2026

D-14 — Vận chuyển trong phạm vi hiện tại

Đã chốt

Đã ghi nhận: Không tích hợp shipping gateway/carrier API. Khi item/order đủ điều kiện fulfilment theo product flow, nhân sự tạo shipment thủ công bên ngoài nếu cần và nhập carrier/service/tracking/actual fee/status vào Admin.

Vai trò chốt: Founder + Vận hành + Tech lead  ·  Thời điểm: Đã chốt 16/09/2026

D-15 — Tính cước tự động / volumetric

Đã chốt

Đã ghi nhận: Không tính cước realtime/volumetric trong app P0. Dùng công cụ hãng bên ngoài khi tạo shipment thủ công; chỉ tích hợp lại bằng change request phase sau.

Vai trò chốt: Founder + Vận hành  ·  Thời điểm: Deferred

D-16 — Phân vùng và điều kiện COD

Đã chốt

Đã ghi nhận: Không xây region/COD automation; payment baseline là chuyển khoản/SePay.

Vai trò chốt: Founder + Kế toán + Vận hành  ·  Thời điểm: Deferred

D-17 — Đối soát COD

Đã chốt

Đã ghi nhận: Không tích hợp COD reconciliation. Nếu phát sinh ngoại lệ thực tế ngoài scope, Accounting xử lý thủ công và không làm thay đổi baseline P0.

Vai trò chốt: Kế toán + Vận hành  ·  Thời điểm: Deferred

D-18 — Đại lý, referral và hoa hồng

Đã chốt

Đã ghi nhận: Referral một tầng. Mọi account có thể apply; chỉ Admin approve mới active. Referral code unique, case-insensitive; cấm self-referral. Attribution được snapshot vào order khi tạo và không sửa sau khi payment confirmed. Commission rate là Admin config, seed mặc định 0% cho tới khi business nhập rate thật. Base commission = product net amount sau discount, loại VAT, shipping và refunded amount. Commission chỉ Eligible khi order Paid + Completed và không bị cancel/refund; payout theo một batch duy nhất mỗi calendar month. Refund sau payout tạo negative adjustment ở batch sau. Agent phải có payout/bank info trước khi mark Paid; Accounting có thể ghi tax/withholding note thủ công.

Vai trò chốt: Founder + Kế toán + Admin  ·  Thời điểm: Đã khóa implementation baseline 16/09/2026

D-19 — Permission matrix

Đã chốt

Đã ghi nhận: Dùng permission matrix v0.1 làm baseline. Chỉ một Production Approver active tại một thời điểm. Authorization enforce ở server/API; action nhạy cảm audit. Thay đổi role/matrix sau này là version mới, không chặn P0.

Vai trò chốt: Founder + Vận hành + Tech lead  ·  Thời điểm: Đã chốt tạm 16/09/2026

D-20 — Tài khoản khách và doanh nghiệp

Đã chốt

Đã ghi nhận: Email là định danh. Login bằng password hoặc email OTP; không magic link và không phone/SMS OTP. Một doanh nghiệp có một account, không organization members. Guest browse/add-to-cart được nhưng checkout phải login/create account. Business account dùng tax code để chống tạo trùng khi tax code có mặt.

Vai trò chốt: Founder + Product + Tech lead  ·  Thời điểm: Đã chốt 16/09/2026

D-21 — Thông báo giao dịch

Đã chốt

Đã ghi nhận: Kênh transactional P0 là email + push. Event customer mặc định: quote sent/updated; order created/pending payment; payment confirmed/payment needs action; file needs action/file approved khi item có file workflow; production started/production completed khi item có production workflow; shipment created/in transit/delivered/failed; cancel/refund status. Email được attempt cho mọi event áp dụng; push gửi khi có permission/device token. Push failure không block workflow; email là fallback. Lỗi provider tạm thời retry tối đa 3 lần với backoff và lưu delivery status/error. OTP/password recovery chỉ qua email, không qua push. Không có SMS, Zalo hoặc notification inbox riêng trong P0.

Vai trò chốt: Founder + Product + Vận hành + Tech lead  ·  Thời điểm: Đã khóa implementation baseline 16/09/2026

D-26 — Hủy, đổi đơn và hoàn tiền

Đã chốt

Đã ghi nhận: Trước payment, customer có thể sửa/cancel order và hệ thống reprice. Sau payment, không có self-service cancel/edit; customer gửi request và Admin/Accounting xử lý. Với item production-enabled, production approval là lock point; sau mốc này mọi cancel/change đều manual và không có cam kết refund tự động. Với direct-fulfilment item, dispatch/operational lock được xử lý manual theo policy hiện hành. Admin nhập refund amount từ 0..paid amount, reason và Accounting xử lý transfer thủ công theo D-11. Bất kỳ thay đổi price-affecting input hoặc design URL (khi áp dụng) sau payment đều reset các approval liên quan và yêu cầu reprice; chênh lệch tăng đi qua additional manual reconciliation, chênh lệch giảm đi qua refund/credit manual.

Vai trò chốt: Founder + Kế toán + Sản xuất + Product  ·  Thời điểm: Đã khóa implementation baseline 16/09/2026

D-27 — Dữ liệu, riêng tư và thời hạn lưu

Đã chốt

Đã ghi nhận: File/link metadata khi áp dụng, dữ liệu khách, chứng từ và logs mặc định giữ không thời hạn cho tới khi Admin xóa hoặc policy mới thay thế. Không gửi dữ liệu/file sang DesignO/Canva API. Admin delete mặc định là soft-delete khỏi vận hành để giữ traceability; hard purge là action riêng có xác nhận mạnh và audit. Audit record của thao tác delete không bị cascade xóa. Privacy notice nêu dữ liệu thu thập, mục đích, quyền truy cập/xóa và processor.

Vai trò chốt: Founder + Tech lead + Kế toán/Pháp chế  ·  Thời điểm: Đã chốt tạm 16/09/2026; làm rõ delete semantics trong implementation freeze

D-28 — Authentication security và account recovery

Đã chốt

Đã ghi nhận: Email được normalize lowercase/trim và unique case-insensitive. Registration phải verify email bằng OTP. OTP mặc định 6 số, TTL 10 phút, tối đa 5 lần nhập sai, resend tối thiểu 60 giây và có rate-limit theo email/IP. Password tối thiểu 8 ký tự; reset password qua email OTP. Password change/reset revoke các session dài hạn cũ. Internal users dùng cùng auth foundation nhưng quyền theo RBAC. Các security threshold có thể được team siết chặt mà không cần change request nếu không làm giảm bảo mật.

Vai trò chốt: Product + Tech lead  ·  Thời điểm: Implementation freeze v1

D-29 — Customer, business, address và invoice identity

Đã chốt

Đã ghi nhận: Personal account tối thiểu có full name + email. Business account tối thiểu có company name + tax code + email; tax code unique khi đã nhập. Phone là contact/fulfilment field, không phải login ID. Account được lưu nhiều address; delivery address tối thiểu có recipient name, phone, address line và province/city, các subdivision khác để text/configurable thay vì hard-code hierarchy. Order snapshot contact/address. Invoice info snapshot tối thiểu company name, tax code, invoice address, invoice email và note; editable tới khi invoice Issued theo D-12.

Vai trò chốt: Product + Kế toán + Tech lead  ·  Thời điểm: Implementation freeze v1

D-30 — Locale, tiền tệ, đơn vị và thời gian

Đã chốt

Đã ghi nhận: P0 UI tiếng Việt; currency VND, lưu tiền dạng integer không decimal; timezone hiển thị Asia/Ho_Chi_Minh trong khi timestamp backend lưu chuẩn UTC. Kích thước in dùng mm, định lượng giấy g/m² khi product có print config; weight lưu theo gram hoặc kilogram có unit rõ. Không có multi-language/multi-currency trong P0.

Vai trò chốt: Founder + Product + Tech lead  ·  Thời điểm: Implementation freeze v1

D-31 — Cart, order number và checkout idempotency

Đã chốt

Đã ghi nhận: Guest cart dùng anonymous cart token/device storage và được merge vào account sau login; item cùng SKU+configuration được cộng quantity, khác config giữ line riêng. Configuration chỉ chứa field áp dụng cho product behavior. Checkout luôn reprice trước khi confirm. Tạo order phải idempotent để double tap/retry không sinh order trùng. Order có human-readable unique order number và unique payment reference dùng cho SePay. Một order có thể có nhiều item và có thể mix standard ecommerce + print/customizable; reorder clone variant/configuration/link reference khi áp dụng nhưng dùng availability/pricing/product behavior hiện hành.

Vai trò chốt: Product + Tech lead  ·  Thời điểm: Implementation freeze v1

D-32 — Fulfilment và phí vận chuyển P0

Đã chốt

Đã ghi nhận: P0 không tự cộng shipping fee vào instant checkout. Actual carrier fee được nhập sau như operational cost. Nếu cần thu shipping từ customer, Sales/Admin đưa shipping thành line/adjustment trong manual quote trước payment. P0 hỗ trợ tối đa một shipment record active cho mỗi order; không có split/partial shipment. Order có thể được mark no-shipping/pickup bởi user có quyền. Tracking/status vẫn manual theo D-14. Direct-fulfilment item có thể sẵn sàng fulfil sau order/payment gates; production-enabled item chỉ sẵn sàng sau production/QC.

Vai trò chốt: Founder + Sales + Vận hành + Kế toán  ·  Thời điểm: Implementation freeze v1

D-33 — Promotion, coupon và discount stacking

Đã chốt

Đã ghi nhận: P0 hỗ trợ quantity discount và customer-tier discount theo config, sau đó tối đa một promo/coupon trên một order. Promo/coupon hỗ trợ percentage hoặc fixed VND, active window và optional minimum order value; code case-insensitive. Không có loyalty points/gamification. Mọi discount đều phải qua floor/minimum-net check của pricing mode tương ứng; không discount VAT hoặc refund trực tiếp.

Vai trò chốt: Founder + Sales + Kế toán + Product  ·  Thời điểm: Implementation freeze v1

D-34 — P0 explicit non-goals

Đã chốt

Đã ghi nhận: Ngoài scope P0: direct file upload; DesignO/Canva API/SDK/OAuth; automatic color conversion/preflight; shipping/carrier API; realtime freight/volumetric quote; split shipment; COD/card/e-wallet; invoice provider API; multi-user business organization; multi-language/multi-currency; offline mode; inventory/procurement/warehouse management; customer rating/review; marketplace multi-vendor; multi-level referral. Public/customer Web storefront KHÔNG còn là non-goal: theo Founder 17/09/2026 nó thuộc P0 và không được delay (xem D-02). Bán sản phẩm ecommerce thông thường bằng product/variant + quantity + fixed-unit pricing/direct fulfilment KHÔNG phải non-goal và phải được giữ trong P0. Chỉ đưa các non-goal thật sự quay lại bằng change request/version mới.

Vai trò chốt: Founder + Product + Tech lead  ·  Thời điểm: Implementation freeze v1; clarified standard ecommerce capability 16/09/2026; moved public Web storefront into P0 17/09/2026

D-35 — Định hướng carrier theo loại hàng

Đã chốt

Đã ghi nhận: Giao hàng phân theo loại hàng: hàng **nhỏ gọn** hướng tới tích hợp Giao Hàng Nhanh (GHN) và Giao Hàng Tiết Kiệm (GHTK). Hàng **cồng kềnh** và tùy chọn **giao hàng gấp**: khi khách chọn thì được báo giá riêng qua manual quote (theo D-32), không tính tự động/realtime ở instant checkout P0. Việc tích hợp GHN/GHTK là phase sau qua change request; trong P0 vẫn nhập carrier/service/tracking/fee thủ công theo D-14.

Vai trò chốt: Founder + Vận hành + Sales  ·  Thời điểm: Founder clarification 17/09/2026

D-36 — Dịch vụ thiết kế bên ngoài (design-as-a-service)

Đã chốt

Đã ghi nhận: Khi đặt hàng hoặc khi tìm sản phẩm, khách có thể yêu cầu **dịch vụ thiết kế/thiết kế thuê ngoài**: nộp brief/mô tả yêu cầu (và tham khảo HTTPS public URL nếu có), yêu cầu không có giá instant. Sales/Admin chuẩn hóa yêu cầu và làm **báo giá riêng qua manual quote** (FR-05) — báo giá gồm phí thiết kế và sản phẩm liên quan như item riêng. Sau khi quote được accept, dịch vụ thiết kế là order item dịch vụ, không có design/file approval gate hay production gate nếu item đó không bán sản phẩm in. Việc thực hiện thiết kế có thể thuê ngoài; chi phí thuê ngoài được ghi như operational cost tương tự actual carrier fee, không bypass floor/minimum-net rule hiện hành của quote/order.

Vai trò chốt: Founder + Sales + Product + Tech lead  ·  Thời điểm: Founder clarification 17/09/2026

D-37 — Nguồn dữ liệu tracking đơn hàng — ERP

Đã chốt

Đã ghi nhận: Hướng tới: data tracking đơn hàng là nguồn từ **ERP** (ERP là source of truth cho trạng thái production/fulfilment khi triển khai). Trong **thời gian đầu chưa có data từ ERP thì không cần implement integration**: customer timeline P0 vẫn dùng dữ liệu nhập tay nội bộ (FR-08/FR-32), không dựng ETL/webhook phụ thuộc ERP trước khi có dữ liệu. Tích hợp ERP là phase sau qua change request khi ERP sẵn sàng; schema/order timeline phải giữ extension point để nối ERP không buộc rewrite.

Vai trò chốt: Founder + Tech lead + Vận hành  ·  Thời điểm: Founder clarification 17/09/2026

D-38 — Tài khoản affiliate/agent không được đặt đơn

Đã chốt

Đã ghi nhận: Tài khoản được approved làm **agent/affiliate KHÔNG được đặt đơn/checkout** bằng tài khoản đó — tách để tránh nhầm lẫn giữa tài khoản mua hàng và tài khoản affiliate, và tránh agent theo dõi attribution/commission của chính mình. Enforcement server-side: khi account đã gán role Agent, API create order/checkout bị từ chối với message rõ ràng; khách muốn mua hàng phải dùng **tài khoản mua hàng riêng** (đã verify email). Referral attribution của khách vẫn hoạt động bình thường qua referral code; không tồn tại đơn do agent tự đặt để sinh attribution.

Vai trò chốt: Founder + Product + Tech lead  ·  Thời điểm: Founder clarification 17/09/2026

Mỗi quyết định được chốt cần ghi ngày, người quyết định, nội dung, lý do, yêu cầu bị ảnh hưởng và phiên bản chính sách. Thay đổi sau đó cần đánh giá ảnh hưởng đến đơn đang xử lý trước khi áp dụng.

Ma trận truy vết

Bảng đối chiếu kịch bản nghiệm thu với yêu cầu chức năng phủ nó, và mỗi quyết định D-xx với các yêu cầu bị ảnh hưởng.

Dùng trang này để kiểm tra độ phủ: không có kịch bản nào thiếu yêu cầu bảo trợ, và mỗi quyết định chốt phải được đánh giá tác động tới đúng tập yêu cầu liệt kê dưới đây.

Kịch bản nghiệm thu → Yêu cầu chức năng

Kịch bảnFR phủ kịch bảnPhụ thuộc D-xx
AC-01 — Customer mobile end-to-end + identity FR-01 FR-02 FR-06 FR-08 FR-09 FR-11 FR-13 FR-15 FR-41 không phụ thuộc
AC-02 — Public design URL và versioning FR-03 FR-11 FR-19 không phụ thuộc
AC-03 — File/color checklist thủ công FR-03 FR-11 FR-19 không phụ thuộc
AC-04 — Pricing modes, discount, VAT và floor FR-02 FR-04 FR-11 FR-12 FR-20 FR-21 FR-22 FR-23 FR-24 FR-25 FR-26 FR-27 FR-41 không phụ thuộc
AC-05 — Manual quote lifecycle FR-05 FR-16 FR-20 FR-24 FR-42 không phụ thuộc
AC-06 — Payment + conditional file/production approval gates FR-03 FR-13 FR-14 FR-19 FR-40 không phụ thuộc
AC-07 — Manual fulfilment, pickup và shipping failure FR-08 FR-29 FR-30 FR-31 FR-32 FR-34 FR-35 FR-36 FR-37 không phụ thuộc
AC-08 — SePay idempotency và payment exceptions FR-06 FR-13 FR-33 FR-38 FR-41 không phụ thuộc
AC-09 — Invoice, cancel/change và manual refund FR-07 FR-33 FR-35 FR-39 không phụ thuộc
AC-10 — Agent/referral/commission/monthly payout FR-10 FR-17 FR-18 FR-41 không phụ thuộc
AC-11 — RBAC, security, retention và audit FR-07 FR-13 FR-14 FR-15 FR-17 FR-18 FR-19 FR-27 FR-36 FR-40 FR-41 không phụ thuộc
AC-12 — Milestones, technical baseline và handover FR-28 FR-41 không phụ thuộc
AC-13 — Admin-configured standard ecommerce + print/customizable product flows FR-02 FR-03 FR-04 FR-05 FR-06 FR-08 FR-09 FR-11 FR-12 FR-13 FR-14 FR-18 FR-19 FR-20 FR-21 FR-22 FR-23 FR-24 FR-25 FR-26 FR-27 FR-28 FR-29 FR-41 không phụ thuộc

Quyết định → Yêu cầu bị ảnh hưởng

Quyết địnhFRNFRBR / AC
D-01 — Danh mục, SKU và product behavior FR-02 FR-03 FR-04 FR-11 FR-13 FR-14 FR-19 FR-20 FR-27 FR-41 AC-01 AC-04 AC-06 AC-13
D-02 — Kênh ra mắt FR-11 FR-12 FR-13 FR-14 FR-15 FR-16 FR-17 FR-18 FR-19 NFR-02 AC-12
D-03 — DesignO trong phạm vi hiện tại FR-03 FR-11 FR-19 FR-41 AC-02 AC-13
D-04 — Canva trong phạm vi hiện tại FR-03 FR-11 FR-19 FR-41 AC-03 AC-13
D-05 — Chuẩn quản lý màu FR-19 FR-41 AC-02 AC-03 AC-06
D-06 — Chuẩn file/link đầu vào FR-03 FR-19 FR-41 AC-02 AC-03 AC-06 AC-13
D-07 — Pricing modes, công thức print engine và golden cases FR-04 FR-12 FR-20 FR-21 FR-22 FR-23 FR-24 FR-25 FR-26 FR-27 AC-04 AC-13
D-08 — Thứ tự chính sách giá, VAT và version FR-04 FR-09 FR-12 FR-20 FR-24 FR-25 FR-27 AC-04 AC-13
D-09 — Biên lợi nhuận và quyền override FR-12 FR-16 FR-24 FR-27 NFR-11 AC-04 AC-05 AC-13
D-10 — Luồng báo giá tay FR-05 FR-16 AC-05 AC-13
D-11 — Thanh toán và ngoại lệ FR-06 FR-13 FR-41 NFR-15 AC-01 AC-08 AC-09
D-12 — Hóa đơn VAT FR-07 FR-13 FR-41 AC-09 AC-11
D-13 — Workflow sản xuất, QC và rework FR-13 FR-14 FR-19 FR-40 FR-41 AC-01 AC-06 AC-11 AC-13
D-14 — Vận chuyển trong phạm vi hiện tại FR-29 FR-30 FR-31 FR-32 FR-34 FR-35 FR-36 NFR-03 AC-07 AC-13
D-15 — Tính cước tự động / volumetric FR-29 FR-37 AC-07
D-16 — Phân vùng và điều kiện COD FR-38 AC-08
D-17 — Đối soát COD FR-33 FR-39 AC-09
D-18 — Đại lý, referral và hoa hồng FR-10 FR-17 FR-18 FR-41 AC-10 AC-11
D-19 — Permission matrix FR-40 FR-41 NFR-09 NFR-10 NFR-11 AC-06 AC-11
D-20 — Tài khoản khách và doanh nghiệp FR-01 FR-15 FR-41 AC-01 AC-11
D-21 — Thông báo giao dịch FR-08 FR-13 FR-32 FR-35 FR-41 AC-01 AC-07 AC-13
D-26 — Hủy, đổi đơn và hoàn tiền FR-06 FR-13 FR-14 FR-19 FR-35 AC-01 AC-06 AC-08 AC-09 AC-13
D-27 — Dữ liệu, riêng tư và thời hạn lưu FR-15 FR-41 NFR-10 NFR-11 NFR-14 AC-11
D-28 — Authentication security và account recovery FR-01 FR-40 FR-41 NFR-10 AC-01 AC-11
D-29 — Customer, business, address và invoice identity FR-01 FR-07 FR-15 FR-41 AC-01 AC-09 AC-11
D-30 — Locale, tiền tệ, đơn vị và thời gian FR-02 FR-04 FR-07 FR-18 FR-20 FR-41 AC-01 AC-04 AC-11
D-31 — Cart, order number và checkout idempotency FR-01 FR-06 FR-09 FR-41 NFR-15 AC-01 AC-08 AC-13
D-32 — Fulfilment và phí vận chuyển P0 FR-05 FR-20 FR-29 FR-30 FR-31 FR-32 FR-35 FR-36 FR-41 AC-05 AC-07 AC-11 AC-13
D-33 — Promotion, coupon và discount stacking FR-04 FR-12 FR-20 FR-24 FR-25 AC-04 AC-13
D-34 — P0 explicit non-goals FR-01 FR-02 FR-03 FR-04 FR-11 FR-13 FR-14 FR-17 FR-28 FR-29 FR-33 FR-34 FR-37 FR-38 FR-39 FR-41 NFR-01 NFR-02 NFR-03 NFR-07 AC-01 AC-02 AC-03 AC-04 AC-07 AC-08 AC-09 AC-10 AC-12 AC-13
D-35 — Định hướng carrier theo loại hàng FR-05 FR-29 FR-30 FR-34 FR-37 AC-05 AC-07
D-36 — Dịch vụ thiết kế bên ngoài (design-as-a-service) FR-05 FR-42 AC-05
D-37 — Nguồn dữ liệu tracking đơn hàng — ERP FR-08 FR-32 AC-07
D-38 — Tài khoản affiliate/agent không được đặt đơn FR-06 FR-17 FR-40 AC-10

Phủ nghiệm thu: 42/42 FR được gắn với ít nhất một kịch bản AC. Các FR còn lại (nếu có) được kiểm qua kịch bản tổng hợp AC-01 hoặc kiểm thử riêng theo gợi ý ở từng thẻ FR.

Phụ thuộc và deployment inputs

P0 dependency đã freeze: SePay, email/push, public design URL, manual invoice/shipping và business configuration trước pilot.

Phụ thuộcCần thống nhấtPhương án khi gián đoạn
Email deliveryProvider/SMTP/API account để gửi email verification OTP, password recovery và transactional email. Credential/config cụ thể là deployment data, không phải business decision.Provider failure không đổi business state; retry theo D-21. OTP/email flow phải báo gửi lỗi rõ và không giả thành công.
Push notificationAPNs/FCM hoặc push abstraction phù hợp mobile stack, device-token/permission handling và production credentials trước release. Provider là technical choice.Không có permission/token hoặc push fail thì không block workflow; transactional email là fallback và delivery status được lưu.
Design public URLCustomer cung cấp HTTPS URL public mà Production Approver có thể mở/download không cần customer credential. Không DesignO/Canva API/SDK/OAuth.Link private/hết quyền → Needs customer action; không backend crawl/fetch arbitrary URL như dependency P0.
Checklist file/màuChecklist baseline D-05/D-06 với dimension/bleed/DPI/font/color risk; SKU có thể override production-specific value qua config.Không tự suy diễn pass. Chỉ Production Approver quyết định pass/fail và lưu note/evidence.
Catalog và pricing seedTrước pilot, business nhập catalog thật, material/print/finishing rates, waste/yield, target/min margin, VAT config, customer-tier/quantity discount và promo data.Development dùng fixture + tối thiểu 12 golden pricing cases. SKU thiếu required config không được publish instant pricing.
SePayReceiving bank/account, SePay credentials/webhook/API config, unique order payment reference và reconciliation access cho Accounting.Partial/over/under/unmatched/late payment vào manual reconciliation; SePay/provider failure không tự mark Paid.
Ngân hàng / refund thủ côngAccounting có quy trình chuyển khoản refund bên ngoài và ghi reference/status trong Admin.PrintUp không tự gọi refund/payment provider P0; refund không được mark complete nếu chưa có manual evidence.
Hóa đơn thủ côngBusiness/Accounting có công cụ hoặc quy trình phát hành hóa đơn bên ngoài; app cung cấp invoice snapshot và status/reference.Không invoice API P0; chỉ Accounting mark Issued/Adjusted.
Vận chuyển thủ côngStaff có công cụ/website/app carrier bên ngoài để tạo shipment và lấy carrier/service/tracking/actual fee.Order ở Awaiting shipment hoặc được mark no-shipping/pickup; không fake tracking.
Agent payoutCommission rate thực, payout/bank info của agent và quy trình Accounting chi batch tháng trước khi production payout.Seed commission rate 0%; không mark Paid nếu thiếu payout info; refund sau payout thành negative adjustment.
ERP / data tracking đơn hàngKhi triển khai, tracking state giao/upload từ ERP là nguồn dữ liệu. Trong giai đoạn chưa có ERP data, integration này KHÔNG cần implement.Customer timeline dùng dữ liệu nhập tay theo FR-08/FR-32; không fake trạng thái như ERP-sync. Schema giữ extension point để nối ERP sau qua change request.
Owner accounts và release credentialsInfrastructure, domain, app-store, email/push/SePay accounts và billing production đứng tên/chịu kiểm soát bởi chủ đầu tư theo NFR ownership.Không lưu secret trong repo; thiếu production credential chỉ chặn release/integration test tương ứng, không chặn domain implementation bằng fixture/mock.

Implementation freeze không còn dependency business chưa quyết. Các giá trị thật/credential ở trên là deployment inputs cần trước pilot/release, không phải lý do quay lại hỏi lại behavior P0.

Phân loại dependency

  1. Runtime integrations P0: SePay, email delivery và push notification. Provider cụ thể của email/push là technical/deployment choice; failure behavior đã được khóa.
  2. External tool dùng thủ công: customer public design URL, công cụ phát hành hóa đơn và carrier tool. PrintUp không phụ thuộc API của các tool này.
  3. Deployment configuration: catalog thật, material/print/finishing rates, waste/yield, mục tiêu/min margin, VAT, commission rate, bank/SePay/email/push/app-store credentials và seed data.
  4. Technical baseline: monitoring, backup/restore, performance bằng chứng, security checks. Tech team tự đặt threshold thực dụng và lưu runbook/bằng chứng.

Không còn dependency business cần Founder chốt để bắt đầu code. Khi thiếu deployment input thật, team dùng fixture/mock/config placeholder an toàn và giữ publish/release gate phù hợp. Ví dụ SKU thiếu required pricing config không được publish, commission seed có thể 0%, provider credential thiếu chỉ chặn integration test/release tương ứng.

Tester không tạo acceptance test cho API/non-goal đã defer; manual flow hiện là phạm vi chính thức và phải test role, audit, state, retry/error path thực tế.

Ghi chú implementation backend

Chuẩn cơ sở nghiệp vụ không đổi vì việc hiện đại hóa backend. Django + PostgreSQL hiện vẫn là implementation/runtime authority của API production.

Repo có thêm backend_hono/ dùng Hono + Cloudflare Workers + D1 để migrate dần. Trong giai đoạn đầu, toàn bộ /api/... đi qua compatibility proxy về Django; chưa được xem một endpoint là native D1 nếu chưa có contract/data/rollback bằng chứng. Quyết định kỹ thuật và migration gate nằm ở docs/adr/0002-hono-cloudflare-workers-d1-backend.mddocs/backend/hono-d1-migration.md, không tạo thêm business requirement giả trong FR/NFR/AC.

Xuất PDF toàn bộ site

Gộp toàn bộ tài liệu yêu cầu & nghiệm thu thành một trang duy nhất để in/lưu PDF (Chrome: In → Lưu dưới dạng PDF).