1299 lines
28 KiB
JSON
1299 lines
28 KiB
JSON
{
|
|
"generatedAt": "2026-09-06",
|
|
"unit": "MD",
|
|
"mdPerMM": 21,
|
|
"hoursPerDay": 8,
|
|
"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
|
|
},
|
|
"itemMD": 29,
|
|
"contingencyPct": 20,
|
|
"contingencyMD": 5.8
|
|
},
|
|
{
|
|
"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
|
|
},
|
|
"itemMD": 22,
|
|
"contingencyPct": 20,
|
|
"contingencyMD": 4.4
|
|
},
|
|
{
|
|
"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
|
|
},
|
|
"itemMD": 52,
|
|
"contingencyPct": 35,
|
|
"contingencyMD": 18.2
|
|
},
|
|
{
|
|
"id": "WBS-04",
|
|
"name": "Design system & khung i18n/l10n (5 ngôn ngữ)",
|
|
"group": "Xuyên suốt",
|
|
"sources": [
|
|
"§7.0",
|
|
"FR-15",
|
|
"NFR-06"
|
|
],
|
|
"complexity": "L",
|
|
"risk": "medium",
|
|
"effortMD": {
|
|
"UIUX": 15,
|
|
"FE": 12
|
|
},
|
|
"itemMD": 27,
|
|
"contingencyPct": 20,
|
|
"contingencyMD": 5.4
|
|
},
|
|
{
|
|
"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
|
|
},
|
|
"itemMD": 43,
|
|
"contingencyPct": 35,
|
|
"contingencyMD": 15.05
|
|
},
|
|
{
|
|
"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
|
|
},
|
|
"itemMD": 28,
|
|
"contingencyPct": 35,
|
|
"contingencyMD": 9.8
|
|
},
|
|
{
|
|
"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
|
|
},
|
|
"itemMD": 15,
|
|
"contingencyPct": 20,
|
|
"contingencyMD": 3
|
|
},
|
|
{
|
|
"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
|
|
},
|
|
"itemMD": 40,
|
|
"contingencyPct": 20,
|
|
"contingencyMD": 8
|
|
},
|
|
{
|
|
"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
|
|
},
|
|
"itemMD": 13,
|
|
"contingencyPct": 10,
|
|
"contingencyMD": 1.3
|
|
},
|
|
{
|
|
"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
|
|
},
|
|
"itemMD": 21,
|
|
"contingencyPct": 20,
|
|
"contingencyMD": 4.2
|
|
},
|
|
{
|
|
"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
|
|
},
|
|
"itemMD": 9,
|
|
"contingencyPct": 20,
|
|
"contingencyMD": 1.8
|
|
},
|
|
{
|
|
"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
|
|
},
|
|
"itemMD": 7,
|
|
"contingencyPct": 20,
|
|
"contingencyMD": 1.4
|
|
},
|
|
{
|
|
"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
|
|
},
|
|
"itemMD": 7,
|
|
"contingencyPct": 20,
|
|
"contingencyMD": 1.4
|
|
},
|
|
{
|
|
"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
|
|
},
|
|
"itemMD": 6,
|
|
"contingencyPct": 20,
|
|
"contingencyMD": 1.2
|
|
},
|
|
{
|
|
"id": "WBS-15",
|
|
"name": "Tích hợp Email/SMS Provider",
|
|
"group": "Xuyên suốt",
|
|
"sources": [
|
|
"§3.4",
|
|
"Notification Service §3"
|
|
],
|
|
"complexity": "S",
|
|
"risk": "low",
|
|
"effortMD": {
|
|
"BE": 4,
|
|
"QA": 2
|
|
},
|
|
"itemMD": 6,
|
|
"contingencyPct": 10,
|
|
"contingencyMD": 0.6
|
|
},
|
|
{
|
|
"id": "WBS-16",
|
|
"name": "Tích hợp Google/Facebook OAuth",
|
|
"group": "Xuyên suốt",
|
|
"sources": [
|
|
"§3.4",
|
|
"§4.1.3",
|
|
"TC-03"
|
|
],
|
|
"complexity": "S",
|
|
"risk": "medium",
|
|
"effortMD": {
|
|
"BE": 4,
|
|
"QA": 2
|
|
},
|
|
"itemMD": 6,
|
|
"contingencyPct": 20,
|
|
"contingencyMD": 1.2
|
|
},
|
|
{
|
|
"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
|
|
},
|
|
"itemMD": 9,
|
|
"contingencyPct": 35,
|
|
"contingencyMD": 3.15
|
|
},
|
|
{
|
|
"id": "WBS-18",
|
|
"name": "Định danh & tài khoản khách hàng",
|
|
"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
|
|
},
|
|
"itemMD": 36,
|
|
"contingencyPct": 20,
|
|
"contingencyMD": 7.2
|
|
},
|
|
{
|
|
"id": "WBS-19",
|
|
"name": "Danh mục & tìm kiếm sản phẩm đa seller",
|
|
"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
|
|
},
|
|
"itemMD": 56,
|
|
"contingencyPct": 35,
|
|
"contingencyMD": 19.6
|
|
},
|
|
{
|
|
"id": "WBS-20",
|
|
"name": "Giỏ hàng đa seller",
|
|
"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
|
|
},
|
|
"itemMD": 22,
|
|
"contingencyPct": 20,
|
|
"contingencyMD": 4.4
|
|
},
|
|
{
|
|
"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
|
|
},
|
|
"itemMD": 53,
|
|
"contingencyPct": 35,
|
|
"contingencyMD": 18.55
|
|
},
|
|
{
|
|
"id": "WBS-22",
|
|
"name": "Thanh toán — business logic Payment Service",
|
|
"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
|
|
},
|
|
"itemMD": 27,
|
|
"contingencyPct": 35,
|
|
"contingencyMD": 9.45
|
|
},
|
|
{
|
|
"id": "WBS-23",
|
|
"name": "Quản lý đơn hàng khách hàng",
|
|
"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
|
|
},
|
|
"itemMD": 17,
|
|
"contingencyPct": 10,
|
|
"contingencyMD": 1.7
|
|
},
|
|
{
|
|
"id": "WBS-24",
|
|
"name": "Đổi trả & khiếu nại (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
|
|
},
|
|
"itemMD": 18,
|
|
"contingencyPct": 20,
|
|
"contingencyMD": 3.6
|
|
},
|
|
{
|
|
"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
|
|
},
|
|
"itemMD": 5,
|
|
"contingencyPct": 10,
|
|
"contingencyMD": 0.5
|
|
},
|
|
{
|
|
"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
|
|
},
|
|
"itemMD": 8,
|
|
"contingencyPct": 10,
|
|
"contingencyMD": 0.8
|
|
},
|
|
{
|
|
"id": "WBS-27",
|
|
"name": "Thông báo đơn hàng",
|
|
"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
|
|
},
|
|
"itemMD": 13,
|
|
"contingencyPct": 20,
|
|
"contingencyMD": 2.6
|
|
},
|
|
{
|
|
"id": "WBS-28",
|
|
"name": "Khuyến mãi & mã giảm giá",
|
|
"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
|
|
},
|
|
"itemMD": 18,
|
|
"contingencyPct": 10,
|
|
"contingencyMD": 1.8
|
|
},
|
|
{
|
|
"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
|
|
},
|
|
"itemMD": 17,
|
|
"contingencyPct": 20,
|
|
"contingencyMD": 3.4
|
|
},
|
|
{
|
|
"id": "WBS-30",
|
|
"name": "Đa ngôn ngữ nội dung",
|
|
"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
|
|
},
|
|
"itemMD": 14,
|
|
"contingencyPct": 20,
|
|
"contingencyMD": 2.8
|
|
},
|
|
{
|
|
"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
|
|
},
|
|
"itemMD": 5,
|
|
"contingencyPct": 10,
|
|
"contingencyMD": 0.5
|
|
},
|
|
{
|
|
"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
|
|
},
|
|
"itemMD": 35,
|
|
"contingencyPct": 35,
|
|
"contingencyMD": 12.25
|
|
},
|
|
{
|
|
"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
|
|
},
|
|
"itemMD": 23,
|
|
"contingencyPct": 20,
|
|
"contingencyMD": 4.6
|
|
},
|
|
{
|
|
"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
|
|
},
|
|
"itemMD": 17,
|
|
"contingencyPct": 20,
|
|
"contingencyMD": 3.4
|
|
},
|
|
{
|
|
"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
|
|
},
|
|
"itemMD": 18,
|
|
"contingencyPct": 10,
|
|
"contingencyMD": 1.8
|
|
},
|
|
{
|
|
"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
|
|
},
|
|
"itemMD": 10,
|
|
"contingencyPct": 20,
|
|
"contingencyMD": 2
|
|
},
|
|
{
|
|
"id": "WBS-37",
|
|
"name": "Payout định kỳ & Commission engine",
|
|
"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
|
|
},
|
|
"itemMD": 35,
|
|
"contingencyPct": 35,
|
|
"contingencyMD": 12.25
|
|
},
|
|
{
|
|
"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
|
|
},
|
|
"itemMD": 14,
|
|
"contingencyPct": 20,
|
|
"contingencyMD": 2.8
|
|
},
|
|
{
|
|
"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
|
|
},
|
|
"itemMD": 14,
|
|
"contingencyPct": 10,
|
|
"contingencyMD": 1.4
|
|
},
|
|
{
|
|
"id": "WBS-40",
|
|
"name": "Xử lý tranh chấp & khiếu nại (CSR + Admin)",
|
|
"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
|
|
},
|
|
"itemMD": 28,
|
|
"contingencyPct": 35,
|
|
"contingencyMD": 9.8
|
|
},
|
|
{
|
|
"id": "WBS-41",
|
|
"name": "Vận hành kho & vận chuyển (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
|
|
},
|
|
"itemMD": 24,
|
|
"contingencyPct": 20,
|
|
"contingencyMD": 4.8
|
|
},
|
|
{
|
|
"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
|
|
},
|
|
"itemMD": 11,
|
|
"contingencyPct": 20,
|
|
"contingencyMD": 2.2
|
|
},
|
|
{
|
|
"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
|
|
},
|
|
"itemMD": 14,
|
|
"contingencyPct": 10,
|
|
"contingencyMD": 1.4
|
|
}
|
|
],
|
|
"totals": {
|
|
"baseMDByRole": {
|
|
"PM": 60,
|
|
"SA": 43,
|
|
"BE": 305,
|
|
"DEVOPS": 83,
|
|
"QA": 143,
|
|
"UIUX": 44,
|
|
"FE": 162,
|
|
"BA": 52
|
|
},
|
|
"contingencyMDByRole": {
|
|
"PM": 13,
|
|
"SA": 14.3,
|
|
"BE": 79.5,
|
|
"DEVOPS": 20.35,
|
|
"QA": 35.3,
|
|
"UIUX": 10.15,
|
|
"FE": 36.95,
|
|
"BA": 11.95
|
|
},
|
|
"overheadMD": 0,
|
|
"overheadRole": null,
|
|
"totalMDByRole": {
|
|
"PM": 73,
|
|
"BA": 63.95,
|
|
"SA": 57.3,
|
|
"UIUX": 54.15,
|
|
"BE": 384.5,
|
|
"FE": 198.95,
|
|
"QA": 178.3,
|
|
"DEVOPS": 103.35
|
|
},
|
|
"baseMD": 892,
|
|
"contingencyMD": 221.5,
|
|
"grandMD": 1113.5,
|
|
"baseMM": 42.48,
|
|
"mmByRole": {
|
|
"PM": 3.48,
|
|
"BA": 3.05,
|
|
"SA": 2.73,
|
|
"UIUX": 2.58,
|
|
"BE": 18.31,
|
|
"FE": 9.47,
|
|
"QA": 8.49,
|
|
"DEVOPS": 4.92
|
|
},
|
|
"grandMM": 53.02
|
|
},
|
|
"cost": {
|
|
"currency": "VND",
|
|
"rateCard": {
|
|
"PM": 90000000,
|
|
"BA": 60000000,
|
|
"SA": 100000000,
|
|
"UIUX": 55000000,
|
|
"BE": 65000000,
|
|
"FE": 60000000,
|
|
"QA": 45000000,
|
|
"DEVOPS": 75000000
|
|
},
|
|
"laborByRole": {
|
|
"PM": 313200000,
|
|
"BA": 183000000,
|
|
"SA": 273000000,
|
|
"UIUX": 141900000,
|
|
"BE": 1190150000,
|
|
"FE": 568200000,
|
|
"QA": 382050000,
|
|
"DEVOPS": 369000000
|
|
},
|
|
"laborTotal": 3420500000,
|
|
"nonLaborItems": [
|
|
{
|
|
"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, RDS Multi-AZ + read replica, ElastiCache Redis, OpenSearch cluster đa node, CloudFront, WAF)",
|
|
"recurring": "yearly",
|
|
"amount": null,
|
|
"currency": "VND"
|
|
},
|
|
{
|
|
"id": "NL-02",
|
|
"name": "OpenSearch cluster (Search subsystem)",
|
|
"basis": "§3.2 Search subsystem đa node cho Production",
|
|
"recurring": "yearly",
|
|
"amount": null,
|
|
"currency": "VND"
|
|
},
|
|
{
|
|
"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",
|
|
"recurring": "monthly",
|
|
"amount": null,
|
|
"currency": "VND"
|
|
},
|
|
{
|
|
"id": "NL-04",
|
|
"name": "Phí gửi Email/SMS thông báo",
|
|
"basis": "§3.4 Notification Service",
|
|
"recurring": "monthly",
|
|
"amount": null,
|
|
"currency": "VND"
|
|
},
|
|
{
|
|
"id": "NL-05",
|
|
"name": "Phí tích hợp API GHN/GHTK",
|
|
"basis": "§3.4 — phí kết nối/API theo hợp đồng đơn vị vận chuyển",
|
|
"recurring": "monthly",
|
|
"amount": null,
|
|
"currency": "VND"
|
|
},
|
|
{
|
|
"id": "NL-06",
|
|
"name": "Domain, SSL certificate, WAF rule bổ sung",
|
|
"basis": "§3.2 (WAF), §3.3",
|
|
"recurring": "yearly",
|
|
"amount": null,
|
|
"currency": "VND"
|
|
},
|
|
{
|
|
"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",
|
|
"recurring": "yearly",
|
|
"amount": null,
|
|
"currency": "VND"
|
|
},
|
|
{
|
|
"id": "NL-08",
|
|
"name": "Chi phí đào tạo & tài liệu bàn giao",
|
|
"basis": "B9 dossier-structure",
|
|
"recurring": "one-off",
|
|
"amount": null,
|
|
"currency": "VND"
|
|
}
|
|
],
|
|
"nonLaborTotal": 0,
|
|
"subtotal": 3420500000,
|
|
"vatPct": 10,
|
|
"vat": 342050000,
|
|
"total": 3762550000,
|
|
"priceComplete": false,
|
|
"missingRates": [],
|
|
"missingAmounts": [
|
|
"Hạ tầng cloud AWS năm đầu (Dev + Staging + Production)",
|
|
"OpenSearch cluster (Search subsystem)",
|
|
"Phí giao dịch cổng thanh toán VNPay/Momo",
|
|
"Phí gửi Email/SMS thông báo",
|
|
"Phí tích hợp API GHN/GHTK",
|
|
"Domain, SSL certificate, WAF rule bổ sung",
|
|
"Pentest ứng dụng hàng năm + ASV scan hàng quý",
|
|
"Chi phí đào tạo & tài liệu bàn giao"
|
|
]
|
|
},
|
|
"ucp": {
|
|
"UAW": 25,
|
|
"UUCW": 210,
|
|
"TCF": 1.13,
|
|
"EF": 0.87,
|
|
"UCP": 231.03,
|
|
"hoursPerUCP": 20,
|
|
"hours": 4620.6,
|
|
"md": 577.58,
|
|
"mm": 27.5,
|
|
"tcfSum": 52.5,
|
|
"efSum": 17.5
|
|
},
|
|
"crosscheck": {
|
|
"wbsBaseMM": 42.48,
|
|
"ucpMM": 27.5,
|
|
"variancePct": 54.47,
|
|
"thresholdPct": 25,
|
|
"flag": true
|
|
},
|
|
"timeline": {
|
|
"teamSize": 9,
|
|
"teamDerived": true,
|
|
"parallelEfficiency": 0.85,
|
|
"durationMonths": 7,
|
|
"scheduleMonths": 7,
|
|
"startDate": null,
|
|
"endDate": null,
|
|
"phases": [
|
|
{
|
|
"name": "Khởi động & chuẩn bị",
|
|
"pct": 5,
|
|
"startMonth": 0,
|
|
"endMonth": 0.5,
|
|
"startDate": null,
|
|
"endDate": null,
|
|
"effortMM": 2.65
|
|
},
|
|
{
|
|
"name": "Phân tích & thiết kế chi tiết",
|
|
"pct": 15,
|
|
"startMonth": 0.5,
|
|
"endMonth": 1.5,
|
|
"startDate": null,
|
|
"endDate": null,
|
|
"effortMM": 7.95
|
|
},
|
|
{
|
|
"name": "Phát triển",
|
|
"pct": 45,
|
|
"startMonth": 1.5,
|
|
"endMonth": 4.5,
|
|
"startDate": null,
|
|
"endDate": null,
|
|
"effortMM": 23.86
|
|
},
|
|
{
|
|
"name": "Kiểm thử hệ thống, hiệu năng, bảo mật",
|
|
"pct": 15,
|
|
"startMonth": 4.5,
|
|
"endMonth": 5.5,
|
|
"startDate": null,
|
|
"endDate": null,
|
|
"effortMM": 7.95
|
|
},
|
|
{
|
|
"name": "UAT & đào tạo",
|
|
"pct": 12,
|
|
"startMonth": 5.5,
|
|
"endMonth": 6.5,
|
|
"startDate": null,
|
|
"endDate": null,
|
|
"effortMM": 6.36
|
|
},
|
|
{
|
|
"name": "Go-live & hỗ trợ ổn định",
|
|
"pct": 8,
|
|
"startMonth": 6.5,
|
|
"endMonth": 7,
|
|
"startDate": null,
|
|
"endDate": null,
|
|
"effortMM": 4.24
|
|
}
|
|
],
|
|
"deadlineFit": {
|
|
"deadline": null,
|
|
"fits": null,
|
|
"availableMonths": null,
|
|
"suggestedTeamSize": null
|
|
}
|
|
},
|
|
"staffing": {
|
|
"unit": "FTE (MM/tháng)",
|
|
"byMonth": [
|
|
{
|
|
"month": 1,
|
|
"label": "M1",
|
|
"fte": {
|
|
"PM": 0.61,
|
|
"BA": 1.15,
|
|
"SA": 1.16,
|
|
"UIUX": 1.03,
|
|
"BE": 0.92,
|
|
"FE": 0.47,
|
|
"QA": 0.42,
|
|
"DEVOPS": 1.73
|
|
},
|
|
"total": 7.49
|
|
},
|
|
{
|
|
"month": 2,
|
|
"label": "M2",
|
|
"fte": {
|
|
"PM": 0.49,
|
|
"BA": 0.79,
|
|
"SA": 0.72,
|
|
"UIUX": 0.9,
|
|
"BE": 3.21,
|
|
"FE": 1.65,
|
|
"QA": 0.92,
|
|
"DEVOPS": 0.45
|
|
},
|
|
"total": 9.13
|
|
},
|
|
{
|
|
"month": 3,
|
|
"label": "M3",
|
|
"fte": {
|
|
"PM": 0.46,
|
|
"BA": 0.2,
|
|
"SA": 0.23,
|
|
"UIUX": 0.26,
|
|
"BE": 4.58,
|
|
"FE": 2.37,
|
|
"QA": 0.99,
|
|
"DEVOPS": 0.41
|
|
},
|
|
"total": 9.5
|
|
},
|
|
{
|
|
"month": 4,
|
|
"label": "M4",
|
|
"fte": {
|
|
"PM": 0.46,
|
|
"BA": 0.2,
|
|
"SA": 0.23,
|
|
"UIUX": 0.26,
|
|
"BE": 4.58,
|
|
"FE": 2.37,
|
|
"QA": 0.99,
|
|
"DEVOPS": 0.41
|
|
},
|
|
"total": 9.5
|
|
},
|
|
{
|
|
"month": 5,
|
|
"label": "M5",
|
|
"fte": {
|
|
"PM": 0.49,
|
|
"BA": 0.18,
|
|
"SA": 0.25,
|
|
"UIUX": 0.13,
|
|
"BE": 3.21,
|
|
"FE": 1.65,
|
|
"QA": 2.2,
|
|
"DEVOPS": 0.58
|
|
},
|
|
"total": 8.69
|
|
},
|
|
{
|
|
"month": 6,
|
|
"label": "M6",
|
|
"fte": {
|
|
"PM": 0.47,
|
|
"BA": 0.31,
|
|
"SA": 0.14,
|
|
"BE": 1.19,
|
|
"FE": 0.61,
|
|
"QA": 2.34,
|
|
"DEVOPS": 0.49
|
|
},
|
|
"total": 5.55
|
|
},
|
|
{
|
|
"month": 7,
|
|
"label": "M7",
|
|
"fte": {
|
|
"PM": 0.49,
|
|
"BA": 0.23,
|
|
"BE": 0.64,
|
|
"FE": 0.33,
|
|
"QA": 0.64,
|
|
"DEVOPS": 0.86
|
|
},
|
|
"total": 3.19
|
|
}
|
|
],
|
|
"peak": 9.5,
|
|
"peakHeadcount": 10
|
|
},
|
|
"warnings": [
|
|
"Giá tạm tính: thiếu đơn giá [], thiếu số tiền [Hạ tầng cloud AWS năm đầu (Dev + Staging + Production), OpenSearch cluster (Search subsystem), Phí giao dịch cổng thanh toán VNPay/Momo, Phí gửi Email/SMS thông báo, Phí tích hợp API GHN/GHTK, Domain, SSL certificate, WAF rule bổ sung, Pentest ứng dụng hàng năm + ASV scan hàng quý, Chi phí đào tạo & tài liệu bàn giao]",
|
|
"WBS (42.48 MM) lệch 54.47% so với UCP (27.5 MM) — vượt ngưỡng 25%, cần giải thích ở C1",
|
|
"projectStartDate chưa có — Gantt sẽ dùng tháng tương đối (M1, M2…)"
|
|
]
|
|
}
|