[INTERNAL] Kế hoạch Phân việc, Break Task & Ước lượng Effort cho Đội Dev Spores ​
- Ngày lập:
10/11/2026 - Phạm vi lưu hành: NỘI BỘ ĐỘI DEV SPORES (INTERNAL DEV ONLY)
- Nguồn WBS gốc: Google Sheets WBS (gid=1244770703) — Lọc theo cột D (
Người thực hiện = Spore) - Target Codebase:
Gotrace-portal(commit 93d9a64e03883e55050c9a41d66da41a863c368b— Monorepo 4 Apps:apps/backend,apps/frontend,apps/zalo-be,apps/integration-gateway)
📂 Kho Tài liệu Đặc tả (SRS / Technical Specs) Đính kèm trên Cloud Nội bộ ​
Toàn bộ 10 file tài liệu SRS, Mapping chuẩn quốc tế và Báo cáo Audit từ repo liên quan trực tiếp tới 12 task của đội Dev Spores đã được trích xuất và đẩy lên Cloud nội bộ dưới đây để anh em dev mở tra cứu ngay khi code:
| Mã WBS Liên quan | Tên Tài liệu Đặc tả / SRS | Link Xem Trực tiếp trên Cloud Nội bộ |
|---|---|---|
2.36.1 & 2.37.1 |
Security Audit Report (SEC-01..SEC-16 & INFRA-01..03) — Vị trí dòng code lỗi & code mẫu vá lỗi |
Mở tài liệu ↗ |
2.41.1 |
Integration Catalog — Kiến trúc 3 modes tích hợp, Webhook HMAC, Idempotency & 12 Connectors | Mở tài liệu ↗ |
2.30.1 & 2.41.1 |
GS1 EPCIS 2.0 + Thông tư 02/2024 + EU DPP Mapping — Chuẩn JSON-LD, AI Codes & EPCIS Events | Mở tài liệu ↗ |
2.33.1 & 2.35.1 |
SRS TXNG-F45: Cấu hình Gói Dịch vụ — Schema ServicePlan, versioning & lịch sử thay đổi |
Mở tài liệu ↗ |
2.33.1, 2.34.1, 2.35.1 |
SRS TXNG-F46: Kích hoạt & Vòng đời Dịch vụ Doanh nghiệp — State machine CompanySubscription & enforceServiceGate |
Mở tài liệu ↗ |
2.30.1 |
SRS ENV-F07: Digital Product Passport (DPP) — Đặc tả hộ chiếu số sản phẩm | Mở tài liệu ↗ |
2.13.2 |
SRS TXNG-F30: Dashboard Tổng hợp TXNG — Đặc tả KPI, Charts & Export PDF/Excel/CSV | Mở tài liệu ↗ |
2.13.2 |
Bản So sánh Implementation vs Tài liệu TXNG-F30 Dashboard — Các điểm đã có & còn thiếu | Mở tài liệu ↗ |
2.28.2 & 2.29.1 |
SRS TXNG-F07: Nhật ký Sơ chế & Chế biến — Quy tắc ghi nhận nhật ký sản xuất điện tử | Mở tài liệu ↗ |
2.28.1, 2.28.2, 2.29.1 |
SRS TXNG-F09: Quản lý Danh sách Lô & Mã — Cấu trúc hồ sơ lô sản xuất & truy xuất | Mở tài liệu ↗ |
1. Tóm tắt Đánh giá Hiện trạng & Khối lượng Công việc ​
Qua rà soát toàn bộ bảng phân việc WBS và đối chiếu trực tiếp tới từng module trong codebase Gotrace-portal, đội Spore phụ trách 12 hạng mục công việc (1 hạng mục thuộc Dự án HanoiTrace và 11 hạng mục thuộc Dự án GoTrace – Hoàn thiện chức năng B2B).
📌 KẾT LUẬN TỪ VIỆC ĐỐI CHIẾU REPO HIỆN TẠI
Codebase Gotrace-portal đã có sẵn khoảng ~42% nền tảng dữ liệu, schema và business logic của 12 task này (đặc biệt là service-plans, company-subscriptions, txng-dashboard, digital-product-passports, vc / vc-anchor, và báo cáo Security Audit Report).
Đội dev Spores chỉ cần tập trung code phần Delta (Gap) theo đúng hướng dẫn dưới đây, giúp rút ngắn tổng effort từ 38.5 Man-days (ước lượng chuẩn) xuống còn ~16.0 ngày làm việc (AI-Assisted Sprint).
1.1. Ba điểm bất cập trên file Google Sheets WBS cần lưu ý ​
- Thiếu mốc thời gian ở cả 12 dòng của
Spore: Cột Ngày bắt đầu (Cột G) và Hạn hoàn thành (Cột H) của cả 12 task gán choSpoređều đang để trống, trong khi các task cha (Cấp 2) và các sub-taskQA/QC test(của Cấn Thị Việt Hà) đã có hạn hoàn thành từ20/11/2026đến17/12/2026. - Xung đột mốc thời gian (Timeline Conflict):
- WBS
2.41/2.41.1(Open API HanoiTrace): Hạn task cha ghi05/11/2026(đã quá hạn so với ngày báo cáo), ghi chú tại2.41.1là "có thể làm được luôn" → Đưa lên Ưu tiên số 1 (Wave 1). - WBS
2.13(Xuất báo cáo dashboard): Sub-task2.13.3(QA test) đang ghi hạn05/11/2026 – 07/11/2026, sớm hơn cả hạn hoàn thành tài liệu BA2.13.1của Lê Trung Hiếu (11/11/2026) và hạn task cha2.13(03/12/2026).
- WBS
- Lỗi công thức trên Sheet
"Tổng hợp"(gid=12449873): Toàn bộ các ô thống kê trên sheet"Tổng hợp"đang báo#VALUE!và danh sách người thực hiện chưa có tênSpore.
2. Bảng Đối chiếu 12 Task của Spore với Codebase & Ước lượng Effort ​
| STT | Mã WBS (Dòng Sheet) | Tên công việc trên WBS | Hạn Cha / QC trên Sheet | Hiện trạng thực tế trong Repo (Gotrace-portal) |
Độ hoàn thiện sẵn có | Effort Chuẩn (Man-Days) | Effort AI-Assisted | Đề xuất Lịch (Bắt đầu → Hoàn thành) |
|---|---|---|---|---|---|---|---|---|
| 1 | 2.41.1 (Dòng 69) |
Triển khai open API HANOITRACE và tạo bộ tài liệu hướng dẫn tích hợp | 05/11/2026 (Làm luôn) |
Đã có apps/integration-gateway SDK & connector txng-national, nhưng chưa có connectors/hanoitrace, chưa có Partner Open API (/api/v1/open/hanoitrace/*) và tài liệu hướng dẫn tích hợp riêng. |
25% | 4.0 MD | 1.5 ngày | 11/11 → 13/11/2026 |
| 2 | 2.36.1 (Dòng 61) |
Rà soát bảo mật tối thiểu trước khi nhận dữ liệu thật | 20/11/2026 |
Đã hoàn tất 100% báo cáo Audit (xem chi tiết). Chỉ cần apply code patches cho 5 CRITICAL + 5 HIGH (SEC-01..SEC-08, SEC-16) lên Gotrace-portal. |
50% | 2.5 MD | 1.0 ngày | 14/11 → 16/11/2026 |
| 3 | 2.33.1 (Dòng 55) |
Phát triển quản lý gói dịch vụ | 30/11/2026 |
Module service-plans (TXNG-F45) và company-subscriptions (TXNG-F46) đã code ~80% (CRUD, versioning, history, enforceServiceGate). Chỉ cần bổ sung API nâng/hạ gói (changePlan) và rà soát UI bảng giá. |
80% | 1.5 MD | 0.5 ngày | 17/11 → 17/11/2026 |
| 4 | 2.34.1 (Dòng 57) |
Thanh toán trực tuyến và hóa đơn điện tử | 20/11/2026 (QC: 20/11) |
Hiện kích hoạt gói đang duyệt tay qua upload chứng từ (CompanySubscriptionsService.activate). Chưa có module Payment Gateway (VietQR/PayOS/VNPay) và E-Invoice (MISA meInvoice/Viettel SInvoice). |
0% | 5.0 MD | 2.0 ngày | 18/11 → 19/11/2026 |
| 5 | 2.37.1 (Dòng 63) |
Bảo mật và vận hành đầy đủ, kiểm thử xâm nhập | 25/11/2026 (QC: 25/11) |
Đã xác định rõ 6 MEDIUM + 3 INFRA (INFRA-01 92 CVEs trong yarn.lock, INFRA-02 Dockerfiles). Cần vá nốt, viết E2E security regression tests & xuất biên bản Pentest. |
40% | 3.0 MD | 1.5 ngày | 20/11 → 21/11/2026 |
| 6 | 2.35.1 (Dòng 59) |
Quyền dùng (entitlement) tách khỏi bậc gói và đo định mức | 27/11/2026 (QC: 27/11) |
Mới có cột quota tĩnh trên ServicePlan. Cần tách bảng company_entitlements (mua thêm add-on lẻ/override quyền) và xây dựng UsageMeteringService đo real-time. |
35% | 3.5 MD | 1.5 ngày | 22/11 → 23/11/2026 |
| 7 | 1.6 (Dòng 9) |
Portal-HaNoiTRace: Xây dựng CMS quản trị và các cơ chế hiển thị bài viết trên trang | (Chưa gán) | Trang /blog trên apps/frontend đang đọc mock tĩnh _mock/_blog.ts. Cần xây dựng Prisma models (CmsCategory, CmsArticle), Backend module cms và Admin UI đa brand. |
15% | 4.5 MD | 1.5 ngày | 24/11 → 26/11/2026 |
| 8 | 2.13.2 (Dòng 28) |
Xuất báo cáo dashboard | 03/12/2026 |
txng-dashboard đã có sẵn /overview/export, /production/export, /inventory/export. Chỉ cần bổ sung export Excel/PDF cho dashboard-tong (Executive Dashboard) và nối vào dashboard-tong-scheduler. |
65% | 2.5 MD | 1.0 ngày | 27/11 → 28/11/2026 |
| 9 | 2.29.1 (Dòng 47) |
Xuất PDF hồ sơ DN/SP/lô có QR xác thực | 03/12/2026 (QA: 03/12) |
Đã có dữ liệu W3C VC (SgtinVc) & Merkle Proof (VcAnchorLeaf). Cần xây dựng VerifiablePdfService trên Backend kết xuất PDF A4 có nhúng QR xác thực chữ ký số & SHA-256 hash. |
20% | 3.0 MD | 1.5 ngày | 29/11 → 30/11/2026 |
| 10 | 2.30.1 (Dòng 50) |
Xuất dữ liệu máy đọc: JSON/EPCIS, Linkset, DPP khi có GTIN | 04/12/2026 (QC: 04/12) |
Đã có digital-product-passports (cho InputSource), route /01/[gtin14]/21/[ulid] và spec GS1_TT02_MAPPING. Cần thêm serializer GS1 EPCIS 2.0 JSON-LD, RFC 9264 Linkset và DPP cấp GTIN/Batch. |
45% | 3.5 MD | 1.5 ngày | 01/12 → 02/12/2026 |
| 11 | 2.28.1 (Dòng 42) |
Thiết kế hồ sơ số doanh nghiệp | 17/12/2026 (QA: 17/12) |
Đã có companies, company-certifications, facilities, raw-material-zones. Cần API & UI gom thành Digital Enterprise Dossier kèm trạng thái xác thực DID/Cổng QG. |
60% | 2.0 MD | 1.0 ngày | 03/12 → 05/12/2026 |
| 12 | 2.28.2 (Dòng 43) |
Thiết kế và phát triển hồ sơ số lô hàng | 17/12/2026 (QA: 17/12) |
Đã có batchs, production-logs, plan-input-links, quality-inspections. Cần bổ sung bảng ProductionLogHistory (lịch sử sửa nhật ký) và trang Nhật ký điện tử v1 xuất PDF/Excel theo lô/kỳ. |
55% | 3.5 MD | 1.5 ngày | 06/12 → 10/12/2026 |
| — | TỔNG | 12 Hạng mục WBS của Spore | — | Trung bình ~42% khối lượng đã có nền tảng trong repo | — | 38.5 MD | ~16.0 ngày | 11/11 → 10/12/2026 |
3. Lộ trình Thực thi 4 Waves & Kiến trúc Module Mới ​
3.1. Sơ đồ Lộ trình Thực thi (4 Waves theo Critical Path) ​
flowchart LR
subgraph W1["Wave 1 (11/11 – 16/11)
Ưu tiên Khẩn & Bảo mật Cốt lõi"]
T241["2.41.1: Open API HanoiTrace
& Tài liệu Tích hợp (1.5d)"]
T236["2.36.1: Vá 10 Lỗ hổng
CRITICAL/HIGH (1.0d)"]
end
subgraph W2["Wave 2 (17/11 – 23/11)
Gói Cước, Thanh toán & Pentest"]
T233["2.33.1: Hoàn thiện
Quản lý Gói dịch vụ (0.5d)"]
T234["2.34.1: Thanh toán Online
& Hóa đơn Điện tử (2.0d)"]
T237["2.37.1: Vá MEDIUM/INFRA
& Kiểm thử Xâm nhập (1.5d)"]
T235["2.35.1: Tách Lớp Entitlement
& Usage Metering (1.5d)"]
end
subgraph W3["Wave 3 (24/11 – 02/12)
CMS, Báo cáo, PDF QR & EPCIS/DPP"]
T16["1.6: CMS Quản trị & Hiển thị
Bài viết HanoiTrace (1.5d)"]
T213["2.13.2: Xuất Báo cáo
Dashboard Tổng (1.0d)"]
T229["2.29.1: Xuất PDF DN/SP/Lô
có QR Xác thực VC (1.5d)"]
T230["2.30.1: Xuất JSON/EPCIS 2.0,
Linkset & DPP theo GTIN (1.5d)"]
end
subgraph W4["Wave 4 (03/12 – 10/12)
Hồ sơ số DN/Lô & Nhật ký Điện tử v1"]
T2281["2.28.1: Hồ sơ số
Doanh nghiệp (1.0d)"]
T2282["2.28.2: Hồ sơ số Lô hàng
& Nhật ký Điện tử v1 (1.5d)"]
end
W1 --> W2 --> W3 --> W4
3.2. Sơ đồ Vị trí Các Module Mới của Spore trong Monorepo Gotrace-portal ​
flowchart TB
subgraph FE["apps/frontend (Next.js 16 — Multi-Brand Portal)"]
FE_CMS["Admin CMS & Public Blog/News
(WBS 1.6)"]
FE_BILL["Pricing, Checkout & Entitlement UI
(WBS 2.33.1, 2.34.1, 2.35.1)"]
FE_DOS["Digital Enterprise & Batch Dossier UI
(WBS 2.28.1, 2.28.2)"]
end
subgraph BE["apps/backend (NestJS 11 — Core API :3001)"]
SEC["Security Hardening & Tenant Guards
(WBS 2.36.1, 2.37.1)"]
OPEN["OpenApiHanoitraceModule
(/api/v1/open/hanoitrace/* — WBS 2.41.1)"]
ENT["Entitlements & BillingPaymentsModule
(WBS 2.33.1, 2.34.1, 2.35.1)"]
EXP["VerifiablePdf & MachineReadableExport
(EPCIS 2.0, Linkset, DPP — WBS 2.29.1, 2.30.1)"]
DOS["DigitalDossiers & DashboardTongExport
(WBS 2.13.2, 2.28.1, 2.28.2)"]
CMS["CmsModule (Multi-Brand Articles)
(WBS 1.6)"]
end
subgraph IGW["apps/integration-gateway (:3003 / :3013)"]
HN_CONN["connectors/hanoitrace
(WBS 2.41.1)"]
end
FE_CMS --> CMS
FE_BILL --> ENT
FE_DOS --> DOS
DOS --> EXP
OPEN --> HN_CONN
SEC -.->|Bảo vệ toàn bộ Controllers| BE
4. Break Task Chi tiết Từng Workstream (Hướng dẫn Code cho Dev Spores) ​
Workstream 1: Bảo mật & Kiểm thử Xâm nhập (WBS 2.36.1 & WBS 2.37.1) ​
- Tài liệu tham chiếu bắt buộc: Security Audit Report (
SEC-01..SEC-16&INFRA-01..03)
Task 1A — WBS 2.36.1: Vá 5 lỗ hổng CRITICAL & 5 lỗ hổng HIGH (Hạn: 16/11/2026) ​
- Files cần sửa trong
Gotrace-portal:apps/backend/src/modules/registrations/registrations.controller.ts:34-100®istrations.service.ts:542-690(SEC-01): Gắn@UseGuards(JwtAuthGuard, AdminGuard)cho các route duyệt đơn; chặnapprove()tự động gán owner mới vào doanh nghiệp đã có thành viên (memberCount > 0); bỏgenerated_passwordkhỏi HTTP response.apps/backend/src/modules/users/users.controller.ts:109-200,users.service.ts:343-1140,permission.guard.ts:35(SEC-02): Viết helperassertCanManageUser(actor, targetId)kiểm tracompany_idvàunit_path; chặnROLE.AGENTtự nâng quyền lênROLE.ADMIN(role: 1); bật globalomit: { password: true }.apps/backend/src/modules/companies/companies.controller.ts:28-95&companies.service.ts:488-943(SEC-03): Kiểm trauser.company_idtrênGET /api/v1/companies/:idvà/dashboard; omittokenvàwebhook_id; chặnROLE.GOVERNMENTvàROLE.AGENTghi đè các trường nhạy cảm trongPUT /api/v1/companies/:id.- 10 Modules bị Cross-Tenant BOLA/IDOR & 4 Modules bị BFLA (
SEC-04):- Bổ sung
companyHelper.getCompanyId(user)tạibatches,stamps(findOne,getHistory,suspendStamp,reactivateStamp,recallStamp,markDefective,reprintStamp),qr-codes,raw-material-zones,company-certifications,input-sources,warehouses,shipment-orders,vehicles,drivers. - Thay
AdminOrActiveCompanyGuardbằngPermissionsGuard+@CheckPermissionstạipersonnel.controller.ts,lookups.controller.ts,consultation-request.controller.ts.
- Bổ sung
apps/backend/prisma/seed.ts:29-53&deploy-prod.sh:709-718(SEC-05): Gỡ lệnh chạyseedkhỏideploy-prod.sh; đổiupdate: { password: hashedPassword }củaadmin@gmail.comthànhupdate: {}; xóa 9 bản dump.sqlkhỏi repo và enforcemust_change_password.apps/frontend/utils/public-trace-format.ts:19-22&components/common/markdown/markdown.tsx:5-14(SEC-06): Sanitize HTML bằngDOMPurify.sanitize()và thêmrehypeSanitize.apps/zalo-be/src/main.ts:36&apps/zalo-be/src/modules/auth/auth.service.ts(SEC-07&SEC-16): Sửa CORS wildcardorigin: true; đăng kýThrottlerGuard; đồng bộenforceServiceGatevà kiểm tratoken_versionsangzalo-be.apps/backend/src/main.ts:45&anti-crawl.middleware.ts(SEC-08): Đổitrust proxy: truesangTRUSTED_PROXIES, đổiincludes(HONEYPOT_ROUTE)thành===, gỡNEXT_PUBLIC_ANTI_CRAWL_SECRET.
Task 1B — WBS 2.37.1: Vá 6 lỗ hổng MEDIUM, Nâng cấp Dependencies & Pentest (Hạn: 21/11/2026) ​
- Files cần sửa:
apps/backend/src/modules/auth/jwt.strategy.ts:98-192(SEC-09): Filter(!ra.valid_from || ra.valid_from <= now) && (!ra.valid_to || ra.valid_to >= now).apps/backend/src/common/services/minio-storage.service.ts:123&s3-storage.service.ts:128(SEC-10): Bỏ toán tử short-circuit||để luôn gọithis.fileValidation.validateMimeType(buffer, options?.contentType).apps/backend/src/modules/auth/auth.service.ts:356(SEC-11): Tăngtoken_version: { increment: 1 }khichangePassword(); lưujtiRefresh Token trên Redis để revoke khilogout.SEC-12..SEC-15: Bảo vệ/api/v1/webhook, thêmALLOWED_SORT_COLUMNSchốngorderByinjection, giới hạnfileSize: 5MBcho upload đăng ký.package.json(INFRA-01) & 4Dockerfile(INFRA-02): Thêmresolutionsxử lý 92 CVEs trongyarn.lockvà thêmUSER nodevào runner stage của 4 Dockerfiles.- Viết E2E test
apps/backend/test/security-bola-bfla.e2e-spec.tsvà xuất biên bản Pentest bàn giao cho QC Việt Hà (2.37.2).
Workstream 2: Open API HanoiTrace & Tài liệu Hướng dẫn Tích hợp (WBS 2.41.1) ​
- Tài liệu tham chiếu: Integration Catalog & GS1 + TT 02/2024 Mapping
- Hạn đề xuất:
13/11/2026(Làm ngay trong Wave 1) - Files cần tạo/sửa:
- Create:
apps/backend/src/modules/open-api-hanoitrace/open-api-hanoitrace.module.ts - Create:
apps/backend/src/modules/open-api-hanoitrace/open-api-hanoitrace.controller.ts - Create:
apps/backend/src/modules/open-api-hanoitrace/open-api-hanoitrace.service.ts - Create:
apps/backend/src/modules/open-api-hanoitrace/guards/open-api-hmac.guard.ts - Create:
apps/integration-gateway/src/connectors/hanoitrace/index.ts - Modify:
apps/integration-gateway/src/connectors/registry.ts:1-15
- Create:
- Chi tiết triển khai:
OpenApiHmacGuard: Kiểm tra headersX-HanoiTrace-Api-Key,X-HanoiTrace-Timestamp(±300s),X-HanoiTrace-Signature(HMAC-SHA256(timestamp + "." + rawBody)dùngcrypto.timingSafeEqual) vàIdempotency-Key(Redis TTL 24h). Tự động pincompany_idtheo API Key.- 4 Nhóm Endpoints Open API (
@ApiTags("HanoiTrace Open API v1")):POST /api/v1/open/hanoitrace/products(Đồng bộ sản phẩm GTIN-14, phân loại GS1 GPC / VSIC 2025).POST /api/v1/open/hanoitrace/batches(Tạo/cập nhật lô sản xuất & liên kết nguyên liệu đầu vàoPlanInputLink).POST /api/v1/open/hanoitrace/events(Ghi nhận sự kiện CTE/KDE và tự động enqueue phát hành W3C VC vàovc_outbox).GET /api/v1/open/hanoitrace/trace/:code(Tra cứu chuỗi truy xuất nguồn gốc chuẩn Thông tư 02/2024/TT-BKHCN).
- Outbound Connector
hanoitrace: Đăng ký vàobuildConnectorRegistry()trongapps/integration-gatewayđể đẩy sự kiện liên thông. - Bộ Tài liệu Hướng dẫn Tích hợp: Xuất file OpenAPI 3.1 YAML + tài liệu Markdown/HTML hướng dẫn xác thực HMAC, bảng mã lỗi và Postman Collection mẫu.
Workstream 3: Quản lý Gói Dịch vụ, Entitlement Metering & Thanh toán/HĐĐT (WBS 2.33.1, 2.35.1, 2.34.1) ​
- Tài liệu tham chiếu: SRS TXNG-F45 (Cấu hình Gói Dịch vụ) & SRS TXNG-F46 (Kích hoạt & Vòng đời Gói Dịch vụ)
sequenceDiagram
autonumber
participant DN as Enterprise Admin
participant FE as apps/frontend
participant BE as BillingPayments & Subscriptions (:3001)
participant PG as PostgreSQL (Entitlement & Meter)
participant Pay as Payment Gateway (VietQR/PayOS/VNPay)
participant EInv as E-Invoice (MISA/Viettel)
DN->>FE: Chọn gói cước / Mua thêm Add-on Quota
FE->>BE: POST /api/v1/billing/checkout
BE->>PG: Tạo BillingInvoice (PENDING)
BE-->>FE: Trả mã VietQR động / Payment URL
DN->>Pay: Quét QR chuyển khoản thanh toán
Pay->>BE: POST /api/v1/billing/webhooks/:provider (HMAC Signed)
rect rgb(235, 248, 255)
Note over BE,PG: Atomic Transaction + Idempotency Check
BE->>PG: 1. Mark BillingInvoice = PAID
BE->>PG: 2. Activate/Renew CompanySubscription (2.33.1)
BE->>PG: 3. Provision/Update CompanyEntitlement & UsageMeter (2.35.1)
end
BE->>EInv: Async BullMQ Job: Phát hành Hóa đơn điện tử (2.34.1)
EInv-->>BE: Trả mã tra cứu HĐĐT & link PDF
Task 3A — WBS 2.33.1: Hoàn thiện Quản lý Gói Dịch vụ (Đã có ~80%, Hạn: 17/11/2026) ​
- Tận dụng code sẵn có:
apps/backend/src/modules/service-plans/vàapps/backend/src/modules/company-subscriptions/. - Phần code thêm: Bổ sung method
changePlan(subscriptionId, dto, actorId)trongCompanySubscriptionsServicexử lý nâng/hạ bậc gói giữa kỳ và cập nhật UI bảng giá/gói dịch vụ trênapps/frontend.
Task 3B — WBS 2.35.1: Tách Lớp Entitlement khỏi Bậc Gói & Đo Định mức Real-time (Hạn: 23/11/2026) ​
- Files cần tạo/sửa:
- Modify:
apps/backend/prisma/schema.prisma(thêm modelsCompanyEntitlementvàCompanyUsageMeter). - Create:
apps/backend/src/modules/entitlements/(entitlements.module.ts,entitlements.service.ts,entitlements.controller.ts,guards/entitlement.guard.ts).
- Modify:
- Chi tiết triển khai:
CompanyEntitlementlưu hạn mức cơ sở từServicePlancộng với hạn mức mua thêm lẻ (addon_qr_quota,addon_max_products,addon_storage_gb,feature_overridesJSONB).EntitlementsService.checkAndConsumeQuota(companyId, metric, delta)dùng câu lệnh SQL nguyên tửUPDATE company_usage_meters SET used_value = used_value + $1 WHERE company_id = $2 AND metric_code = $3 AND (used_value + $1) <= effective_limitđể chặn vượt định mức mà không bị race condition.
Task 3C — WBS 2.34.1: Thanh toán Trực tuyến & Hóa đơn Điện tử (Hạn: 20/11/2026) ​
- Files cần tạo/sửa:
- Modify:
apps/backend/prisma/schema.prisma(thêmBillingInvoice,PaymentTransaction,EInvoiceRecord). - Create:
apps/backend/src/modules/billing-payments/(billing-payments.controller.ts,billing-payments.service.ts,providers/payos-vietqr.provider.ts,providers/einvoice.provider.ts).
- Modify:
- Chi tiết triển khai:
POST /api/v1/billing/checkout: Tạo hóa đơn chờ thanh toán (tính chiết khấu chu kỳ 2 năm/3 năm từServicePlan+ VAT) và trả mã VietQR động / link thanh toán.POST /api/v1/billing/webhooks/:provider: Verify chữ ký HMAC từ cổng thanh toán, xử lý idempotent theoprovider_tx_id, tự động kích hoạtCompanySubscription/ cộngCompanyEntitlement, và đẩy BullMQ job phát hành Hóa đơn điện tử (MISA meInvoice / Viettel SInvoice).
Workstream 4: Hồ sơ số DN/Lô, Xuất PDF có QR Xác thực, EPCIS/Linkset/DPP & Báo cáo Dashboard (WBS 2.13.2, 2.28.1, 2.28.2, 2.29.1, 2.30.1) ​
Task 4A — WBS 2.13.2: Xuất Báo cáo Dashboard (Đã có ~65%, Hạn: 28/11/2026) ​
- Tài liệu tham chiếu: SRS TXNG-F30 Dashboard & Bản đối chiếu Implementation vs SRS TXNG-F30
- Tận dụng code sẵn có:
txng-dashboard.controller.tsđã có sẵn/overview/export,/production/export,/inventory/export,/module/:slug/export. - Phần code thêm: Tạo
apps/backend/src/modules/dashboard-tong/dashboard-tong-export.service.tsvà routeGET /api/v1/dashboard-tong/export?format=xlsx|pdfchoDashboardTongController, đồng thời nối vàodashboard-tong-schedulerđể gửi email báo cáo tuần định kỳ.
Task 4B — WBS 2.30.1: Xuất Dữ liệu Máy đọc JSON/EPCIS, Linkset, DPP khi có GTIN (Đã có ~45%, Hạn: 02/12/2026) ​
- Tài liệu tham chiếu: GS1 EPCIS 2.0 & EU DPP Mapping & SRS ENV-F07 (Digital Product Passport)
- Files cần tạo/sửa:
- Create:
apps/backend/src/modules/machine-readable-export/(epcis-serializer.service.ts,linkset-builder.service.ts,machine-readable-export.controller.ts). - Modify:
apps/backend/src/modules/digital-product-passports/digital-product-passports.service.ts.
- Create:
- Chi tiết triển khai:
- GS1 EPCIS 2.0 JSON-LD (
GET /api/v1/export/epcis/batch/:batchId&/public/trace/:gtin/:ulid/epcis.jsonld): Serialize các sự kiệnCTE-MATERIAL-IN(TransformationEvent),CTE-PACKAGING(AggregationEvent),CTE-PRODUCTION/CTE-SHIP/CTE-RECEIVE/CTE-SOLD(ObjectEvent). - GS1 Digital Link Linkset (
GET /api/v1/public/linkset/01/:gtin14): Trảapplication/linkset+jsonchuẩn RFC 9264 gồmgs1:pip,gs1:epcis,gs1:dpp,gs1:certificationInfo. - DPP theo GTIN/Batch (
GET /api/v1/public/dpp/01/:gtin14): Xuất JSON-LD hộ chiếu số sản phẩm khi sản phẩm cónda_gtin_code(GTIN-14).
- GS1 EPCIS 2.0 JSON-LD (
Task 4C — WBS 2.29.1, 2.28.1 & 2.28.2: Hồ sơ số DN/Lô, Nhật ký Điện tử v1 & Xuất PDF có QR Xác thực (Hạn: 30/11 – 10/12/2026) ​
- Tài liệu tham chiếu: SRS TXNG-F07 (Nhật ký Sơ chế/Chế biến) & SRS TXNG-F09 (Quản lý Lô & Mã)
- Files cần tạo/sửa:
- Modify:
apps/backend/prisma/schema.prisma(thêmProductionLogHistorylưu audit trail khi sửaProductionLog). - Create:
apps/backend/src/modules/digital-dossiers/(digital-dossiers.controller.ts,digital-dossiers.service.ts,verifiable-pdf.service.ts). - Create:
apps/frontend/app/admin/dossiers/company/page.tsx&apps/frontend/app/admin/dossiers/batches/[id]/page.tsx.
- Modify:
- Chi tiết triển khai:
2.28.1(Hồ sơ số DN): API & UI tổng hợp pháp nhân, DID/GCP, chứng nhận, vùng nguyên liệu, cơ sở sản xuất và lịch sử tuân thủ.2.28.2(Hồ sơ số Lô hàng & Nhật ký điện tử v1): Ghi lạiProductionLogHistorymỗi khi sửa nhật ký; xem timeline hợp nhất (Input Links + Production Logs + QC + VC) và xuất Excel/PDF theo lô hoặc theo kỳ kèm sheet lịch sử sửa.2.29.1(Xuất PDF có QR xác thực):VerifiablePdfServicerender PDF A4 cho Hồ sơ DN / Sản phẩm / Lô hàng, nhúng mã QR xác thực dẫn tới URL kiểm tra chữ ký số W3C VC (SgtinVc) & Merkle Proof (VcAnchorLeaf) trên Spores Blockchain kèm mã bămSHA-256.
Workstream 5: Portal HanoiTrace — CMS Quản trị & Hiển thị Bài viết (WBS 1.6) ​
- Hạn đề xuất:
26/11/2026 - Hiện trạng: Trang
apps/frontend/components/blog/blog-content.tsxvàapps/frontend/app/blog/page.tsxđang lấy dữ liệu tĩnh từapps/frontend/_mock/_blog.tsvà_mock/_category.ts. - Files cần tạo/sửa:
- Modify:
apps/backend/prisma/schema.prisma(thêmCmsCategory,CmsArticle). - Create:
apps/backend/src/modules/cms/(cms.module.ts,cms-admin.controller.ts,cms-public.controller.ts,cms.service.ts). - Create:
apps/frontend/app/admin/cms/articles/page.tsx&categories/page.tsx. - Modify:
apps/frontend/components/blog/blog-content.tsx&apps/frontend/app/blog/[slug]/page.tsx.
- Modify:
- Chi tiết triển khai:
- Hỗ trợ đa thương hiệu qua cột
brand(HANOITRACE|GOTRACE|ALL), trạng tháiDRAFT→PUBLISHED→ARCHIVED, ghim bài nổi bật (is_featured,is_pinned), sanitizecontent_htmlchống Stored XSS, và cache danh sách bài viết công khai trên Redis.
- Hỗ trợ đa thương hiệu qua cột