Skip to content

Delivery Index — Cải thiện UX cài đặt Mã Công Việc / Tiền Tour

FieldValue
FeatureCải thiện UX cài đặt Mã Công Việc / Tiền Tour
Version1.0
Date2026-03-26
ProfileM (Medium)
Quality Bar✅ 20/20 (M profile)

Files

#FilePathAudience
1PRDdocs/features/settings-ux-subtask-tag/prd.mdPO, Tech Lead, all
2UI Specdocs/features/settings-ux-subtask-tag/ui-spec.mdUI/UX Designer, Frontend Dev
3Dev Specdocs/features/settings-ux-subtask-tag/dev-spec.mdFrontend Dev
4QA Test Plandocs/features/settings-ux-subtask-tag/qa-test-plan.mdQA
5Design Doc (reference)docs/superpowers/specs/2026-03-26-settings-ux-subtask-tag-design.mdTech Lead (deep context)
6Handoff (this file)docs/features/settings-ux-subtask-tag/handoff.mdAll

Timeline

MilestoneTargetOwnerDependency
M1: GraphQL fragment mở rộng + codegenT+1dFE Dev
M2: TaskTagSelect enriched (chip + dropdown + tooltip)T+3dFE DevM1
M3: Trang Cấu Hình Tiền Tour (accordion + CRUD)T+7dFE DevM1
M4: SubTaskTable cải thiện (cột tag + filter + fix label)T+8dFE DevM1
M5: Blast radius ecommerce displayT+9dFE DevM2
M6: Rename + route redirectsT+9dFE DevM3
M7: QA testingT+11dQAM2-M6

Critical path: M1 → M2 → M3 → M6 → M7

Parallel work: M4 và M5 có thể làm song song với M3 (cùng depend M1/M2, không depend nhau).


RACI

DeliverablePO/BAFE DevQAUI/UX
GraphQL fragmentsIR/AI
TaskTagSelect enrichedIR/ACC
Trang Cấu Hình Tiền TourIR/ACC
SubTaskTable cải thiệnIR/AC
Blast radius ecommerceIR/AC
Rename + redirectsIR/AC
QA testingCCR/A

Open Items

IDItemOwnerDeadlineStatus
AI-01UI Designer review wireframes (accordion layout, enriched chip)UI/UX DesignerT+3dOpen
AI-02QA review test plan + confirm seed dataQA LeadT+3dOpen

Day 0 Verification (Dev chạy trước khi code)

Frontend Dev

  • [ ] pnpm codegen pass (không có type errors)
  • [ ] Verify các file sẽ sửa không có conflict:
    • src/modules/settings/components/task-tag/TaskTagSelect.tsx — 281 lines
    • src/modules/settings/components/task-tag/TaskTagDisplay.tsx — 63 lines
    • src/modules/settings/components/subtask/SubTaskForm.tsx — 209 lines
    • src/modules/settings/components/subtask/SubTaskTable.tsx — 507 lines
    • src/modules/settings/module.ts — route config
    • src/modules/settings/graphql/task-tag.graphql
    • src/modules/settings/graphql/subtask.graphql
  • [ ] Verify blast radius files:
    • src/modules/ecommerce/components/order/OrderForm/OrderTaskLimitForm.tsx
    • src/modules/ecommerce/components/service/ServiceForm/ServiceSubtaskItem.tsx
    • src/modules/projects/components/TaskForm/index.tsx — verify line 2108-2131
  • [ ] Verify TaskTagForm.tsx vẫn tồn tại (reuse trong trang mới)

QA

  • [ ] Test accounts sẵn sàng: IT Leader, IT Staff, Admin, Manager, Staff (KTV)
  • [ ] Test data verify:
    • Ít nhất 2 nhóm tiền tour active
    • Ít nhất 5 tags có tour_moneys config
    • Ít nhất 1 tag flat-rate + 1 tag multi-rate
    • Ít nhất 10 subtask configs có tags gán

All

  • [ ] Đọc PRD section A2 "Tổng quan dễ hiểu" trước khi bắt đầu
  • [ ] Đọc design doc nếu cần deep context

Dev Task Checklist (từ dev-spec C11)

Foundation (T1-T2: ~0.75d)

  • [ ] T1 (0.5d): Mở rộng GraphQL fragments (task-tag + subtask) + pnpm codegen
  • [ ] T2 (0.25d): Utility function computeTourFeeRange() + computeTourFeeDetail()

Core — TaskTagSelect Enriched (T3-T4: ~1.5d)

  • [ ] T3 (1d): TaskTagSelect enriched: chip format + dropdown option format
  • [ ] T4 (0.5d): TaskTagSelect tooltip: hover chip → bảng tiền tour + link

Core — Trang Cấu Hình Tiền Tour (T5-T9: ~4d)

  • [ ] T5 (0.5d): TourFeeConfig page + route + sidebar
  • [ ] T6 (1.5d): TourFeeGroupAccordion (expand/collapse, search, add group)
  • [ ] T7 (1d): TourFeeTagTable (bảng tags + range + chi tiết + status + actions)
  • [ ] T8 (0.5d): TourFeeUsageExpand (lazy query + expand/collapse)
  • [ ] T9 (0.5d): Reuse TaskTagForm trong TourFeeConfig (side dialog)

Support — SubTaskTable + Rename (T10-T12: ~1.1d)

  • [ ] T10 (0.5d): SubTaskTable thêm cột "Tag tiền tour"
  • [ ] T11 (0.5d): SubTaskTable thêm filter nhóm/tag + fix label swap
  • [ ] T12 (0.1d): SubTaskForm rename labels

Blast Radius (T13-T15: ~0.75d)

  • [ ] T13 (0.25d): OrderTaskLimitForm sửa tag display format
  • [ ] T14 (0.25d): ServiceSubtaskItem sửa tag display format
  • [ ] T15 (0.25d): TaskTagDisplay enriched format

Finalize (T16-T18: ~1.85d)

  • [ ] T16 (0.25d): Route redirects + route name mapping
  • [ ] T17 (0.1d): Sidebar rename (module.ts)
  • [ ] T18 (1.5d): Testing + fix + responsive

Tổng: ~10.85d


Acceptance Criteria (Final sign-off)

#CriteriaVerify by
1Trang Cấu Hình Tiền Tour hoạt động: accordion, CRUD tag/groupQA (TC-FR-001)
2Range + Chi tiết tiền tour hiện đúng (flat/multi/empty)QA (TC-FR-002)
3"Đang dùng bởi N mã công việc" count + expand đúngQA (TC-FR-003)
4Tag chip enriched [Mã — Range] ở tất cả 5 nơiQA (TC-FR-004 + TC-BR)
5Tooltip hiện bảng tiền tour 5 cấp + link chi tiếtQA (TC-FR-005)
6Dropdown search hiện Mã + Tên + Range + NhómQA (TC-FR-006)
7SubTaskTable có cột tag + filter nhóm/tag + fix labelQA (TC-FR-007)
8Sidebar rename + route redirects + route name mappingQA (TC-FR-008)
9Blast radius: TaskForm + OrderForm + ServiceForm hiển thị đúngQA (TC-BR-001→003)
10Tiền tour auto-fill trong TaskForm KHÔNG bị ảnh hưởngQA (verify trên subtask có tag + assignee)
11Performance: page load < 1s, SubTaskTable < 500msQA (TC-NFR-001, 002)

Không ảnh hưởng (reassurance cho team)

  • Tiền tour calculation flow: ZERO coupling — event triggers (Go code) chạy server-side, đọc DB trực tiếp
  • Lương / Commission: ZERO coupling — salary dùng snapshot ecommerce_task_log.tour_fee
  • Database schema: ZERO thay đổi
  • Hasura metadata / permissions: ZERO thay đổi
  • Backend Go services: ZERO thay đổi
  • Trang cài đặt khác: ZERO ảnh hưởng