{ "unit": "MD", "roles": ["PM", "BA", "SA", "UIUX", "BE", "FE", "QA", "DEVOPS"], "items": [ { "id": "WBS-01", "name": "Thiết lập dự án & môi trường (Dev/Staging/Production trên AWS)", "group": "Xuyên suốt", "sources": ["§3.2", "§3.3"], "complexity": "L", "risk": "medium", "effortMD": { "PM": 2, "SA": 2, "BE": 5, "DEVOPS": 20 }, "rationale": "3 môi trường tách biệt (Dev/Staging/Production Multi-AZ), VPC/network, WAF/ALB, khung API Gateway + 3 BFF (Customer/Seller/Admin) theo §3.2/§3.3.", "assumptions": [] }, { "id": "WBS-02", "name": "Pipeline CI/CD (build → test → SAST/SCA → deploy nhiều môi trường)", "group": "Xuyên suốt", "sources": ["§9.3"], "complexity": "L", "risk": "medium", "effortMD": { "DEVOPS": 18, "QA": 4 }, "rationale": "Pipeline nhiều bước cho ~11 service độc lập, cổng phê duyệt thủ công trước Production, canary rollout theo §9.3.1/9.3.2.", "assumptions": [] }, { "id": "WBS-03", "name": "Kiến trúc nền tảng dịch vụ & event backbone (Kafka/MSK, database-per-service)", "group": "Xuyên suốt", "sources": ["§3.1", "§3.2"], "complexity": "XL", "risk": "high", "effortMD": { "PM": 2, "SA": 15, "BE": 25, "DEVOPS": 10 }, "rationale": "Scaffolding cho ~11 service theo bounded-context, thiết lập message broker cho các luồng saga (OrderPlaced→PaymentConfirmed→CommissionCalculated...), database-per-service trên RDS Multi-AZ.", "assumptions": [] }, { "id": "WBS-04", "name": "Design system & khung i18n/l10n (5 ngôn ngữ) cho toàn bộ UI", "group": "Xuyên suốt", "sources": ["§7.0", "FR-15", "NFR-06"], "complexity": "L", "risk": "medium", "effortMD": { "UIUX": 15, "FE": 12 }, "rationale": "Component library dùng chung cho 32 màn hình (SCR-01..SCR-32), LanguageSwitcher/CurrencyToggle, layout co giãn cho ZH/KO/JA.", "assumptions": [] }, { "id": "WBS-05", "name": "Bảo mật xuyên suốt (OWASP, chống IDOR, mã hoá KMS, MFA, audit log)", "group": "Xuyên suốt", "sources": ["§8", "§4.1.1", "§4.1.13", "§9.1.5"], "complexity": "XL", "risk": "high", "effortMD": { "SA": 10, "BE": 20, "QA": 8, "DEVOPS": 5 }, "rationale": "Middleware ownership/IDOR toàn API, mã hoá at-rest KMS cho KYC/PII, hạ tầng MFA (TOTP), Audit & Compliance Service (audit_log polymorphic), account lockout policy §8.1.1a.", "assumptions": [] }, { "id": "WBS-06", "name": "Hiệu năng & khả năng mở rộng (cache Redis, CDN, load/chaos test)", "group": "Xuyên suốt", "sources": ["NFR-01", "NFR-02", "NFR-03", "§9.1.4"], "complexity": "L", "risk": "high", "effortMD": { "BE": 10, "DEVOPS": 10, "QA": 8 }, "rationale": "Cache Redis/CDN CloudFront, cấu hình hấp thụ tải qua queue, kịch bản load test flash sale (chục nghìn concurrent) và chaos/failover test theo §9.1.4.", "assumptions": [] }, { "id": "WBS-07", "name": "Giám sát, logging tập trung & DR/backup", "group": "Xuyên suốt", "sources": ["§9.4", "§9.5", "§5.3.2"], "complexity": "M", "risk": "medium", "effortMD": { "DEVOPS": 12, "BE": 3 }, "rationale": "CloudWatch/APM, alert theo NFR, PII masking log, PITR/backup cross-region cho service tài chính, runbook rollback/DR.", "assumptions": [] }, { "id": "WBS-08", "name": "Quản lý dự án & PMO (ceremonies, báo cáo, rủi ro/thay đổi)", "group": "Xuyên suốt", "sources": ["bid-config methodology", "§9"], "complexity": "L", "risk": "medium", "effortMD": { "PM": 40 }, "rationale": "Điều phối Agile/Scrum hybrid xuyên suốt dự án quy mô lớn (~9-12 tháng giả định #7 §1.4), quản lý rủi ro/thay đổi/cấu hình, báo cáo tiến độ.", "assumptions": ["Số MD dựa trên giả định thời lượng dự án ~9-12 tháng (giả định #7 SAD §1.4); cần điều chỉnh khi chốt timeline thực tế."] }, { "id": "WBS-09", "name": "Đào tạo & bàn giao (tài liệu vận hành, workshop Admin/Seller/CSR/Ops)", "group": "Xuyên suốt", "sources": ["B9 dossier-structure", "bid-config warrantyMonths"], "complexity": "M", "risk": "low", "effortMD": { "BA": 5, "PM": 5, "QA": 3 }, "rationale": "Tài liệu vận hành/bàn giao, đào tạo trực tiếp cho các nhóm người dùng nội bộ (Admin, Ops, CSR) và hướng dẫn Seller.", "assumptions": [] }, { "id": "WBS-10", "name": "Hỗ trợ go-live & bảo hành giai đoạn đầu (hypercare)", "group": "Xuyên suốt", "sources": ["bid-config warrantyMonths=12", "NFR-08"], "complexity": "M", "risk": "medium", "effortMD": { "PM": 3, "BE": 6, "QA": 4, "DEVOPS": 8 }, "rationale": "Hỗ trợ vận hành tăng cường giai đoạn đầu sau go-live, escalation 24/7 cho sự cố nghiêm trọng theo NFR-08; nằm trong 12 tháng bảo hành theo bid-config.", "assumptions": [] }, { "id": "WBS-11", "name": "Tích hợp VNPay (redirect + IPN, chống replay, đối soát)", "group": "Xuyên suốt", "sources": ["§3.4", "§4.1.6", "TC-09", "TC-10"], "complexity": "M", "risk": "medium", "effortMD": { "BE": 6, "QA": 3 }, "rationale": "Adapter redirect/callback, idempotency theo gatewayTransactionRef, job đối soát định kỳ.", "assumptions": [] }, { "id": "WBS-12", "name": "Tích hợp Momo (redirect + IPN, chống replay, đối soát)", "group": "Xuyên suốt", "sources": ["§3.4", "§4.1.6"], "complexity": "M", "risk": "medium", "effortMD": { "BE": 5, "QA": 2 }, "rationale": "Tương tự VNPay, tái sử dụng phần lớn khung chống replay/đối soát đã xây ở WBS-11.", "assumptions": [] }, { "id": "WBS-13", "name": "Tích hợp GHN (tạo vận đơn, webhook, retry)", "group": "Xuyên suốt", "sources": ["§3.4", "§4.1.12", "TC-29"], "complexity": "M", "risk": "medium", "effortMD": { "BE": 5, "QA": 2 }, "rationale": "Adapter tạo vận đơn/tra cứu/webhook idempotent, timeout 8s + retry 3 lần theo §3.4.", "assumptions": [] }, { "id": "WBS-14", "name": "Tích hợp GHTK (tạo vận đơn, webhook, fallback từ GHN)", "group": "Xuyên suốt", "sources": ["§3.4", "§4.1.12", "BR-15", "TC-29b"], "complexity": "M", "risk": "medium", "effortMD": { "BE": 4, "QA": 2 }, "rationale": "Adapter tương tự GHN, thêm logic fallback chéo GHN↔GHTK theo BR-15.", "assumptions": [] }, { "id": "WBS-15", "name": "Tích hợp Email/SMS Provider (SES/SNS hoặc nhà cung cấp nội địa)", "group": "Xuyên suốt", "sources": ["§3.4", "Notification Service §3"], "complexity": "S", "risk": "low", "effortMD": { "BE": 4, "QA": 2 }, "rationale": "Gửi bất đồng bộ qua queue, retry exponential backoff, dead-letter queue cho lỗi gửi.", "assumptions": ["Nhà cung cấp SMS/Email cụ thể chưa chốt (đề xuất SES/SNS) — xem openQuestions."] }, { "id": "WBS-16", "name": "Tích hợp Google/Facebook OAuth (đăng nhập mạng xã hội)", "group": "Xuyên suốt", "sources": ["§3.4", "§4.1.3", "TC-03"], "complexity": "S", "risk": "medium", "effortMD": { "BE": 4, "QA": 2 }, "rationale": "Authorization Code flow, xác thực state chống CSRF, luồng không auto-merge tài khoản trùng email (409 ERR_ACCOUNT_LINK_REQUIRED).", "assumptions": [] }, { "id": "WBS-17", "name": "Tích hợp ngân hàng cho payout (batch file/API, không tự động retry)", "group": "Xuyên suốt", "sources": ["§3.4", "§4.1.8", "TC-25b"], "complexity": "M", "risk": "high", "effortMD": { "BE": 6, "QA": 3 }, "rationale": "Sinh batch file chuẩn ngân hàng (giả định NAPAS) hoặc gọi API đối tác, xử lý trạng thái thất bại yêu cầu retry thủ công để tránh double-payout.", "assumptions": ["Ngân hàng đối tác và chuẩn kết nối (batch file/API) chưa chốt theo SAD §9.7 — effort có thể thay đổi khi có quyết định cụ thể."] }, { "id": "WBS-18", "name": "Định danh & tài khoản khách hàng (đăng ký/đăng nhập, hồ sơ & địa chỉ)", "group": "Khách hàng", "sources": ["FR-01", "FR-02", "FR-03", "§4.1.3", "SCR-08", "SCR-09"], "complexity": "L", "risk": "medium", "effortMD": { "BA": 3, "SA": 2, "BE": 12, "FE": 10, "UIUX": 4, "QA": 5 }, "rationale": "11 endpoint Identity Service (register/login/refresh/logout/profile/address), 2 màn hình wizard tab đăng nhập/đăng ký + hồ sơ/sổ địa chỉ.", "assumptions": [] }, { "id": "WBS-19", "name": "Danh mục & tìm kiếm sản phẩm đa seller (Catalog + Search subsystem)", "group": "Khách hàng", "sources": ["FR-04", "§3.1 Catalog & Search", "§4.1.4", "SCR-01", "SCR-02", "SCR-03"], "complexity": "XL", "risk": "high", "effortMD": { "BA": 4, "SA": 3, "BE": 20, "FE": 15, "UIUX": 6, "QA": 8 }, "rationale": "Mô hình Product/ProductVariant/Category, tích hợp OpenSearch cho tìm kiếm/lọc đa chiều, 3 màn hình chính (trang chủ, kết quả tìm kiếm, chi tiết sản phẩm) đáp ứng NFR-01 (<2s).", "assumptions": [] }, { "id": "WBS-20", "name": "Giỏ hàng đa seller (Cart Service)", "group": "Khách hàng", "sources": ["FR-05", "§4.1.5", "SCR-04"], "complexity": "M", "risk": "medium", "effortMD": { "BA": 2, "BE": 8, "FE": 6, "UIUX": 2, "QA": 4 }, "rationale": "Giỏ hàng nhóm theo seller, hỗ trợ Guest qua X-Guest-Session-Id, cache Redis độ trễ thấp.", "assumptions": [] }, { "id": "WBS-21", "name": "Checkout & tách đơn theo seller (saga đặt hàng)", "group": "Khách hàng", "sources": ["FR-06", "§6 Luồng 1", "BR-01", "BR-02", "SCR-05", "SCR-06", "SCR-07"], "complexity": "XL", "risk": "high", "effortMD": { "PM": 2, "BA": 4, "SA": 3, "BE": 18, "FE": 12, "UIUX": 4, "QA": 10 }, "rationale": "Nghiệp vụ phức tạp nhất: giữ tồn kho, tách 1 Order thành nhiều OrderSeller, idempotency checkout, 3 màn hình (checkout/thanh toán/xác nhận).", "assumptions": [] }, { "id": "WBS-22", "name": "Thanh toán — business logic Payment Service (khởi tạo, tra cứu, COD, đối soát)", "group": "Khách hàng", "sources": ["FR-07", "§3 Payment Service", "§4.1.6", "NFR-05", "SCR-06"], "complexity": "L", "risk": "high", "effortMD": { "PM": 1, "BA": 2, "SA": 2, "BE": 12, "FE": 4, "QA": 6 }, "rationale": "Logic cô lập thanh toán (giảm phạm vi PCI-DSS), xử lý COD nội bộ, job đối soát định kỳ; không gồm adapter cổng cụ thể (xem WBS-11/12).", "assumptions": [] }, { "id": "WBS-23", "name": "Quản lý đơn hàng khách hàng (tạo, theo dõi, huỷ)", "group": "Khách hàng", "sources": ["FR-08", "§4.1.5", "SCR-10"], "complexity": "M", "risk": "low", "effortMD": { "BA": 2, "BE": 6, "FE": 6, "QA": 3 }, "rationale": "Danh sách/chi tiết đơn với timeline trạng thái, điều kiện huỷ theo BR-10.", "assumptions": [] }, { "id": "WBS-24", "name": "Đổi trả & khiếu nại (khởi tạo từ khách hàng)", "group": "Khách hàng", "sources": ["FR-09", "§4.1.5", "SCR-11"], "complexity": "M", "risk": "medium", "effortMD": { "BA": 2, "BE": 6, "FE": 5, "UIUX": 2, "QA": 3 }, "rationale": "Form đổi trả kèm upload minh chứng, liên kết PayoutHold sang disputed_frozen (BR-14a).", "assumptions": [] }, { "id": "WBS-25", "name": "Danh sách yêu thích (Wishlist)", "group": "Khách hàng", "sources": ["FR-10", "SCR-12"], "complexity": "S", "risk": "low", "effortMD": { "BE": 2, "FE": 2, "QA": 1 }, "rationale": "CRUD đơn giản, ràng buộc UNIQUE customer_id/product_id.", "assumptions": [] }, { "id": "WBS-26", "name": "Đánh giá & nhận xét sản phẩm", "group": "Khách hàng", "sources": ["FR-11", "SCR-13", "BR-11"], "complexity": "S", "risk": "low", "effortMD": { "BE": 3, "FE": 3, "QA": 2 }, "rationale": "Chỉ cho phép đánh giá khi đơn đã giao, 1 lần/order_item.", "assumptions": [] }, { "id": "WBS-27", "name": "Thông báo đơn hàng (Notification Service + trung tâm thông báo in-app)", "group": "Khách hàng", "sources": ["FR-12", "§3 Notification Service", "SCR-15"], "complexity": "M", "risk": "medium", "effortMD": { "BA": 1, "BE": 6, "FE": 3, "QA": 3 }, "rationale": "Consumer sự kiện domain (OrderPlaced, PaymentConfirmed...) gửi email/SMS không chặn luồng chính; SCR-15 là bổ sung giả định cần BA xác nhận.", "assumptions": ["SCR-15 (trung tâm thông báo trong-app) là giả định bổ sung của thiết kế, chưa xác nhận có bắt buộc ở MVP hay không (SAD §7.3)."] }, { "id": "WBS-28", "name": "Khuyến mãi & mã giảm giá (cấu hình Admin + áp dụng khách hàng)", "group": "Khách hàng", "sources": ["FR-13", "§3 Promotion & Loyalty", "SCR-26"], "complexity": "M", "risk": "low", "effortMD": { "BA": 2, "BE": 6, "FE": 5, "UIUX": 2, "QA": 3 }, "rationale": "CRUD coupon phía Admin (SCR-26) và áp dụng tại checkout (BR-09), UNIQUE theo (promotion_id, order_id).", "assumptions": [] }, { "id": "WBS-29", "name": "Chương trình loyalty & hạng thành viên", "group": "Khách hàng", "sources": ["FR-14", "§3 Promotion & Loyalty", "SCR-14", "BR-06", "BR-07", "BR-08"], "complexity": "M", "risk": "medium", "effortMD": { "BA": 2, "BE": 7, "FE": 5, "QA": 3 }, "rationale": "Tích/đổi điểm theo sự kiện OrderDelivered, xếp hạng thành viên theo chi tiêu 12 tháng; công thức tính điểm còn là giả định cần BA xác nhận.", "assumptions": ["Công thức tính điểm (trên Order cha hay từng OrderSeller) là giả định của SAD §6.8, chưa xác nhận — xem openQuestions."] }, { "id": "WBS-30", "name": "Đa ngôn ngữ nội dung (product/notification i18n, 5 ngôn ngữ)", "group": "Khách hàng", "sources": ["FR-15", "§4.1.1", "§5 product_i18n"], "complexity": "M", "risk": "medium", "effortMD": { "BA": 2, "BE": 5, "FE": 4, "QA": 3 }, "rationale": "Mô hình dữ liệu đa ngôn ngữ cho nội dung sản phẩm/thông báo, fallback về vi-VN; không gồm chi phí dịch thuật thực tế.", "assumptions": ["Không bao gồm chi phí dịch thuật nội dung thực tế (biên dịch viên) — chỉ effort kỹ thuật khung i18n."] }, { "id": "WBS-31", "name": "Hiển thị đa tiền tệ tham khảo", "group": "Khách hàng", "sources": ["FR-16", "§4.1.1", "§4.1.2"], "complexity": "S", "risk": "low", "effortMD": { "BE": 2, "FE": 2, "QA": 1 }, "rationale": "Endpoint cấu hình tỷ giá + hiển thị displayPrices[], không ảnh hưởng luồng giao dịch VND.", "assumptions": [] }, { "id": "WBS-32", "name": "Đăng ký & KYC người bán", "group": "Merchant", "sources": ["FR-17", "§3 Seller Management", "§4.1.7", "SCR-16", "SCR-23"], "complexity": "L", "risk": "high", "effortMD": { "PM": 2, "BA": 3, "SA": 2, "BE": 12, "FE": 8, "UIUX": 3, "QA": 5 }, "rationale": "Wizard đăng ký 4 bước, upload KYCDocument lên S3 mã hoá riêng, luồng duyệt thủ công của Admin (BR-13).", "assumptions": [] }, { "id": "WBS-33", "name": "Quản lý sản phẩm & tồn kho (Seller)", "group": "Merchant", "sources": ["FR-18", "§4.1.4", "SCR-18"], "complexity": "M", "risk": "medium", "effortMD": { "BA": 2, "BE": 8, "FE": 7, "UIUX": 2, "QA": 4 }, "rationale": "CRUD Product/ProductVariant/tồn kho, trạng thái bị gỡ do vi phạm (liên kết FR-24).", "assumptions": [] }, { "id": "WBS-34", "name": "Quản lý đơn hàng (Seller)", "group": "Merchant", "sources": ["FR-19", "§4.1.5", "SCR-19"], "complexity": "M", "risk": "medium", "effortMD": { "BA": 2, "BE": 6, "FE": 6, "QA": 3 }, "rationale": "Danh sách/chi tiết đơn con theo seller, kiểm soát ownership (sellerId khớp JWT) chống IDOR.", "assumptions": [] }, { "id": "WBS-35", "name": "Dashboard doanh thu & payout (Seller)", "group": "Merchant", "sources": ["FR-20", "§4.1.7", "SCR-17", "SCR-20"], "complexity": "M", "risk": "low", "effortMD": { "BA": 2, "BE": 5, "FE": 6, "UIUX": 2, "QA": 3 }, "rationale": "Dashboard tổng quan + báo cáo chi tiết doanh thu/hoa hồng/payout, chỉ lọc theo sellerId trong JWT.", "assumptions": [] }, { "id": "WBS-36", "name": "Cấu hình hoa hồng theo ngành hàng", "group": "Admin", "sources": ["FR-21", "§4.1.8", "SCR-25", "BR-04"], "complexity": "S", "risk": "medium", "effortMD": { "BA": 1, "BE": 4, "FE": 3, "QA": 2 }, "rationale": "CRUD CommissionRule kèm holdDays theo category, audit log thay đổi.", "assumptions": [] }, { "id": "WBS-37", "name": "Payout định kỳ & Commission engine (tính hoa hồng, hold, batch)", "group": "Admin", "sources": ["FR-22", "§3 Commission & Payout", "§4.1.8", "§6.1.4", "SCR-27", "TC-25"], "complexity": "XL", "risk": "high", "effortMD": { "PM": 2, "BA": 3, "SA": 2, "BE": 15, "FE": 6, "QA": 7 }, "rationale": "Luồng tài chính nhạy cảm nhất: tính hoa hồng, kỳ giữ tiền (hold 3-7 ngày), tạo đợt payout hàng tuần, audit trail độc lập.", "assumptions": [] }, { "id": "WBS-38", "name": "Quản trị người bán (duyệt/khoá)", "group": "Admin", "sources": ["FR-23", "§4.1.7", "SCR-23"], "complexity": "M", "risk": "medium", "effortMD": { "BA": 1, "BE": 5, "FE": 5, "QA": 3 }, "rationale": "Duyệt/từ chối/khoá/mở khoá tài khoản seller, ghi audit_log.", "assumptions": [] }, { "id": "WBS-39", "name": "Quản trị catalog toàn sàn", "group": "Admin", "sources": ["FR-24", "§4.1.4", "SCR-24"], "complexity": "M", "risk": "low", "effortMD": { "BA": 1, "BE": 5, "FE": 5, "QA": 3 }, "rationale": "Giám sát/ẩn/gỡ/khôi phục sản phẩm vi phạm toàn sàn, đồng bộ trạng thái sang Seller Portal.", "assumptions": [] }, { "id": "WBS-40", "name": "Xử lý tranh chấp & khiếu nại (CSR + Admin escalation)", "group": "Admin", "sources": ["FR-25", "§3 Dispute/CSR handling", "§4.1.5", "SCR-28", "SCR-32", "BR-14"], "complexity": "L", "risk": "high", "effortMD": { "PM": 1, "BA": 3, "SA": 1, "BE": 10, "FE": 8, "QA": 5 }, "rationale": "Hàng đợi CSR + escalation Admin, liên kết PayoutHold (reversed/holding), công thức hoàn tiền còn là giả định.", "assumptions": ["Công thức/mức hoàn tiền dispute (toàn phần hay theo tỷ lệ) chưa chốt (BR-14, SAD §9.7) — có thể ảnh hưởng effort khi có quyết định nghiệp vụ."] }, { "id": "WBS-41", "name": "Vận hành kho & vận chuyển (Shipping & Fulfillment — business logic)", "group": "Admin", "sources": ["FR-26", "§3 Shipping & Fulfillment", "§4.1.12", "SCR-30", "SCR-31", "BR-15"], "complexity": "L", "risk": "medium", "effortMD": { "BA": 2, "SA": 1, "BE": 10, "FE": 6, "QA": 5 }, "rationale": "Điều phối đóng gói/tạo lô hàng, đồng bộ trạng thái vận chuyển; không gồm adapter GHN/GHTK cụ thể (xem WBS-13/14).", "assumptions": [] }, { "id": "WBS-42", "name": "Xác thực đa yếu tố (MFA) cho Admin/Seller", "group": "Admin", "sources": ["FR-27", "§4.1.3", "§8.1.1a", "SCR-21", "SCR-29"], "complexity": "M", "risk": "medium", "effortMD": { "BE": 5, "FE": 3, "QA": 3 }, "rationale": "MFA bắt buộc cho Admin (chặn hoàn toàn scope admin:* nếu chưa enroll), khuyến khích cho Seller; dùng chung hạ tầng TOTP xây ở WBS-05.", "assumptions": [] }, { "id": "WBS-43", "name": "Admin Dashboard tổng quan vận hành", "group": "Admin", "sources": ["SCR-22"], "complexity": "M", "risk": "low", "effortMD": { "BA": 1, "BE": 4, "FE": 5, "UIUX": 2, "QA": 2 }, "rationale": "Dashboard tổng hợp GMV/đơn hàng/seller chờ duyệt/tranh chấp mở; không truy vết trực tiếp 1 FR cụ thể theo ghi chú SAD §7.3.", "assumptions": ["Màn hình không gắn trực tiếp với 1 FR cụ thể (SAD §7.3 ghi nhận cần BA xác nhận phạm vi chính thức) — effort giả định theo dashboard tổng hợp tiêu chuẩn."] } ], "ucp": { "actors": { "simple": 7, "average": 0, "complex": 6 }, "useCases": { "simple": 4, "average": 13, "complex": 4 }, "tcf": [ { "id": "T1", "name": "Hệ thống phân tán", "score": 5, "why": "Kiến trúc ~11 service độc lập database-per-service giao tiếp qua REST + event broker (§3.1/§3.2)." }, { "id": "T2", "name": "Yêu cầu hiệu năng/thời gian phản hồi", "score": 5, "why": "NFR-01 yêu cầu catalog/search <2s, checkout <3s kể cả tải đỉnh flash sale." }, { "id": "T3", "name": "Hiệu quả cho người dùng cuối", "score": 4, "why": "5 nhóm người dùng (Guest/Customer/Seller/Admin/Ops/CSR), mỗi nhóm có UI tối ưu riêng theo §7." }, { "id": "T4", "name": "Xử lý nội bộ phức tạp", "score": 5, "why": "Saga checkout tách đơn theo seller, tính hoa hồng/kỳ giữ tiền payout, loyalty tiered theo chi tiêu 12 tháng (BR-01..BR-08)." }, { "id": "T5", "name": "Khả năng tái sử dụng", "score": 3, "why": "Có design system dùng chung (§7.0) nhưng logic nghiệp vụ mỗi service khá đặc thù." }, { "id": "T6", "name": "Dễ cài đặt", "score": 2, "why": "Triển khai container hoá theo IaC trên AWS, quy trình cài đặt khá chuẩn hoá (§3.3)." }, { "id": "T7", "name": "Dễ sử dụng", "score": 3, "why": "Thiết kế UI có trạng thái loading/empty/error rõ ràng theo §7.0 nhưng nhiều luồng nghiệp vụ phức tạp (checkout đa seller, KYC)." }, { "id": "T8", "name": "Khả năng chuyển đổi nền tảng (portability)", "score": 2, "why": "Gắn khá chặt với dịch vụ AWS cụ thể (RDS, MSK, OpenSearch, S3, CloudFront) theo §3.2." }, { "id": "T9", "name": "Dễ thay đổi", "score": 3, "why": "Ranh giới service theo domain hỗ trợ phát triển độc lập (NFR-07) nhưng có ràng buộc event schema giữa các service." }, { "id": "T10", "name": "Xử lý đồng thời (concurrency)", "score": 5, "why": "NFR-02 yêu cầu scale-out, hỗ trợ hàng chục nghìn concurrent user mùa flash sale." }, { "id": "T11", "name": "Tính năng bảo mật", "score": 5, "why": "PII/KYC, MFA bắt buộc Admin, mã hoá KMS, PCI-DSS scope giảm, chống IDOR toàn API (§8, §4.1.1)." }, { "id": "T12", "name": "Truy cập trực tiếp cho bên thứ ba", "score": 3, "why": "7 tích hợp bên ngoài (VNPay/Momo/GHN/GHTK/OAuth/Email-SMS/Ngân hàng) nhưng không có Public/Partner API (§3.4, §4)." }, { "id": "T13", "name": "Yêu cầu đào tạo đặc biệt", "score": 3, "why": "5 nhóm người dùng với 32 màn hình khác nhau (Customer/Seller/Admin/Ops/CSR portal) cần đào tạo riêng theo vai trò." } ], "ef": [ { "id": "E1", "name": "Quen thuộc với mô hình dự án (UCP/RUP)", "score": 3, "why": "Giả định đội có kinh nghiệm trung bình với phương pháp ước lượng UCP, chưa xác nhận cụ thể." }, { "id": "E2", "name": "Kinh nghiệm ứng dụng (domain e-commerce/marketplace)", "score": 4, "why": "Giả định đội có kinh nghiệm triển khai hệ thống thương mại điện tử tương tự quy mô lớn." }, { "id": "E3", "name": "Kinh nghiệm hướng đối tượng/microservices", "score": 4, "why": "Kiến trúc yêu cầu kinh nghiệm thiết kế service theo domain, event-driven, database-per-service." }, { "id": "E4", "name": "Năng lực chuyên viên phân tích chủ trì", "score": 4, "why": "Giả định có SA/BA chủ trì đủ năng lực điều phối 11 service và nhiều tích hợp bên thứ ba." }, { "id": "E5", "name": "Động lực đội dự án", "score": 4, "why": "Giả định đội ngũ ổn định, động lực cao cho dự án dài hạn 9-12 tháng." }, { "id": "E6", "name": "Yêu cầu ổn định", "score": 3, "why": "Còn nhiều điểm giả định/chưa chốt (SLA, ngân hàng payout, công thức loyalty/dispute) — xem openQuestions của SAD." }, { "id": "E7", "name": "Nhân sự bán thời gian (part-time)", "score": 3, "why": "Giả định một số vai trò hỗ trợ (BA/PM/UIUX) làm việc bán thời gian/kiêm nhiệm nhiều hạng mục." }, { "id": "E8", "name": "Ngôn ngữ lập trình khó", "score": 2, "why": "Không có ràng buộc ngôn ngữ đặc biệt, giả định dùng stack phổ biến (Node.js/Java/Go) theo §9.6." } ], "notes": "Actors: 6 actor người dùng qua GUI (Guest/Customer/Seller/PlatformAdmin/OpsStaff/CSR) tính là complex; 7 hệ thống bên ngoài (VNPay, Momo, GHN, GHTK, Google/Facebook OAuth, Email/SMS Provider, Ngân hàng) tương tác qua API tính là simple, theo §3.4. Use case đếm từ sơ đồ use case tổng quan SAD §2.3 (UC1-UC21), phân loại theo số bước giao dịch ước lượng từ đặc tả API/luồng nghiệp vụ liên quan (§4, §6)." }, "nonLabor": [ { "id": "NL-01", "name": "Hạ tầng cloud AWS năm đầu (Dev + Staging + Production)", "basis": "Sizing 3 môi trường theo §3.3 (ECS Fargate/EKS auto-scaling, RDS Multi-AZ + read replica, ElastiCache Redis, OpenSearch cluster đa node, CloudFront, WAF)", "amount": null, "currency": "VND", "recurring": "yearly", "note": "[[CẦN ĐIỀN]] — bid-config.nonLabor rỗng, chưa có báo giá AWS cụ thể theo sizing thực tế" }, { "id": "NL-02", "name": "OpenSearch cluster (Search subsystem)", "basis": "§3.2 Search subsystem đa node cho Production", "amount": null, "currency": "VND", "recurring": "yearly", "note": "[[CẦN ĐIỀN]]" }, { "id": "NL-03", "name": "Phí giao dịch cổng thanh toán VNPay/Momo", "basis": "§3.4 — phí theo % giao dịch hoặc phí cố định theo hợp đồng với VNPay/Momo", "amount": null, "currency": "VND", "recurring": "monthly", "note": "[[CẦN ĐIỀN]] — phụ thuộc hợp đồng thương mại giữa chủ dự án và VNPay/Momo, ngoài phạm vi nhà thầu" }, { "id": "NL-04", "name": "Phí gửi Email/SMS thông báo", "basis": "§3.4 Notification Service — phí theo số lượng email/SMS gửi (SES/SNS hoặc nhà cung cấp nội địa)", "amount": null, "currency": "VND", "recurring": "monthly", "note": "[[CẦN ĐIỀN]] — nhà cung cấp cụ thể chưa chốt theo SAD §3.4" }, { "id": "NL-05", "name": "Phí tích hợp API GHN/GHTK", "basis": "§3.4 — phí kết nối/API (nếu có) theo hợp đồng đơn vị vận chuyển", "amount": null, "currency": "VND", "recurring": "monthly", "note": "[[CẦN ĐIỀN]]" }, { "id": "NL-06", "name": "Domain, SSL certificate, WAF rule bổ sung", "basis": "§3.2 (WAF), §3.3", "amount": null, "currency": "VND", "recurring": "yearly", "note": "[[CẦN ĐIỀN]]" }, { "id": "NL-07", "name": "Pentest ứng dụng hàng năm + ASV scan hàng quý", "basis": "§9.1.5 DAST/Penetration test cho phạm vi PCI-DSS SAQ A", "amount": null, "currency": "VND", "recurring": "yearly", "note": "[[CẦN ĐIỀN]] — thường thuê dịch vụ bên thứ ba" }, { "id": "NL-08", "name": "Chi phí đào tạo & tài liệu bàn giao (in ấn, workshop trực tiếp nếu có)", "basis": "B9 dossier-structure — kế hoạch đào tạo/chuyển giao", "amount": null, "currency": "VND", "recurring": "one-off", "note": "[[CẦN ĐIỀN]]" } ], "assumptions": [ "Ước lượng dựa trên toàn bộ 27 FR + 8 NFR đã chốt trong docs/SAD.md, chưa có HSMT/RFP cụ thể để đối chiếu (xem bid/01-compliance-matrix.md).", "Năng suất giả định theo đội ngũ có kinh nghiệm trung bình-cao với kiến trúc microservices/event-driven, chưa tính rủi ro do đội mới hình thành hoặc luân chuyển nhân sự.", "QA effort ước lượng khoảng 25-40% effort BE/FE theo từng hạng mục.", "PM/BA effort phân bổ theo từng hạng mục (overheadMode=itemized theo bid-config), có thêm 1 dòng PM riêng (WBS-08) cho quản lý dự án tổng thể xuyên suốt.", "Không tính chi phí dịch thuật nội dung 5 ngôn ngữ (chỉ tính effort kỹ thuật xây khung i18n).", "Không có yêu cầu di trú dữ liệu từ hệ thống cũ (dự án greenfield theo SAD §1.5)." ], "exclusions": [ "Không bao gồm phí license/giao dịch bên thứ ba (cổng thanh toán, SMS/Email, ngân hàng) — xem nonLabor, cần chủ dự án/nhà thầu xác nhận số liệu thực tế.", "Không bao gồm phát triển ứng dụng mobile app native (ngoài phạm vi MVP theo SAD §1.1/§7.0, dự kiến giai đoạn 2).", "Không bao gồm affiliate marketing, subscription/bán hàng định kỳ, hoá đơn điện tử tự động cho seller, SSO doanh nghiệp (ngoài phạm vi MVP theo SAD §2.2/B2.2).", "Không bao gồm chi phí dịch thuật nội dung đa ngôn ngữ (chỉ effort kỹ thuật khung i18n)." ], "openQuestions": [ "Ngân sách và thời hạn dự án chưa được chủ dự án/bên mời thầu xác định chính thức (SAD giả định #7, §1.4) — ảnh hưởng trực tiếp đến khả năng chốt lịch trình và quy mô đội ngũ.", "SLA hiệu năng/uptime (NFR-01 <2s/<3s, NFR-03 uptime 99.9%) là giả định mặc định chưa có xác nhận hợp đồng thực tế — có thể cần điều chỉnh lại effort test hiệu năng (WBS-06) sau khi chốt.", "Ngân hàng đối tác và chuẩn kết nối payout (batch file NAPAS hay API) chưa chốt (SAD §9.7) — ảnh hưởng effort WBS-17 và chi phí phi nhân công liên quan.", "Nhà cung cấp Email/SMS cụ thể chưa chốt (SES/SNS hay bên thứ ba nội địa) — ảnh hưởng effort WBS-15 và NL-04.", "Công thức tính điểm loyalty (trên Order cha hay từng OrderSeller, có gồm phí vận chuyển/thuế hay không) và ngưỡng chi tiêu VND cho từng hạng thành viên chưa chốt (FR-14, SAD §9.7) — có thể ảnh hưởng effort WBS-29.", "Công thức/mức hoàn tiền dispute (toàn phần hay theo tỷ lệ), ai chịu phí vận chuyển hoàn trả chưa chốt (FR-25/BR-14, SAD §9.7) — có thể ảnh hưởng effort WBS-40.", "Màn hình Admin Dashboard tổng quan (SCR-22/WBS-43) không truy vết trực tiếp 1 FR cụ thể — cần BA/Product Owner xác nhận phạm vi chính thức trước khi triển khai chi tiết.", "bid-config.md có rateCard theo vai trò nhưng nonLabor rỗng và nhiều trường bidder/client/package/ngày còn [[CẦN ĐIỀN]] — cần điền đầy đủ trước khi hồ sơ tài chính (Phần C) có thể hoàn chỉnh." ] }