Skip to content

Bàn giao triển khai (Delivery Index) — Chấm công đa đơn vị trên shared tenant

v3.1.4 — 21/04/2026

Thay đổiSectionẢnh hưởng
Chốt T-06: Day-1 không thêm flag remote ở shift, không auto-approve, nhóm nhỏ tiếp tục dùng flow legacy khi đã approvedQuyết định chờ xử lýTL, FE, BE, QA
Làm rõ trong handoff rằng Daisy break linh hoạt Day-1 chỉ là metadata + export 4 mốc, không hard-validate theo tolerance windowĐiều đã chốtTL, FE, BE, QA
Trường (Field)Giá trị (Value)
FeatureChấm công đa đơn vị chấm công trên shared tenant
Version3.1.4
Date21/04/2026
ComplexityM-L

Changelog

VersionDateAuthorThay đổi
3.1.421/04/2026PO/BAĐóng T-06 theo contract remote legacy Day-1 và làm rõ trong handoff rằng Daisy break linh hoạt chỉ là metadata + export 4 mốc để HR đối soát
3.1.315/04/2026PO/BAĐổi Công chuẩn sang model nhóm áp dụng công chuẩn + map department -> scope, để PN/Daisy triển khai đúng theo xác nhận HCNS mới nhất
3.007/04/2026PO/BAInitial delivery index cho package multi-unit timekeeping
3.0.107/04/2026PO/BAĐồng bộ blockers canonical và wording rollout
3.113/04/2026PO/BACập nhật delivery handoff theo contract triển khai mới: assignment đủ branch/department, soft-disable mapping, readiness checklist và tab Triển khai
3.1.113/04/2026PO/BALàm rõ handoff GPS: branch coordinates tiếp tục dùng branch master data hiện có, còn bán kính là override per-unit trong SCR-00 và có fallback global
3.1.214/04/2026PO/BAChuyển contract tính công xuống Ca làm việc: reuse workday làm công tối đa của ca, thêm workday_calculation_mode + standard_hours ở shift; đồng thời chuyển yêu cầu GPS của ca sang gps_required ở shift

Danh sách tài liệu (Files)

Tài liệuMục đích
PRDScope nhỏ, an toàn, timekeeping-only
Đặc tả giao diện (UI Spec)Delta UI trên shell timekeeping/settings/mobile hiện có
Đặc tả kỹ thuật (Dev Spec)Data model, runtime, migration, rollout
Kế hoạch kiểm thử (QA Test Plan)Coverage và regression cho timekeeping
Checklist triển khai (Go-Live Checklist)Gates và evidence pilot
Báo cáo StakeholderTổng hợp cho Ban GĐ: bối cảnh, yêu cầu, phương án, timeline, ảnh hưởng
Câu hỏi Daisy4 câu hỏi xác nhận — đã nhận phản hồi
Câu hỏi Phương Nam4 câu hỏi xác nhận — đã nhận phản hồi

Điều đã chốt (v3.1.2)

  1. Dùng timekeeping_unit, không dùng business_unit global.
  2. Không đụng dashboard/report/payroll legacy.
  3. Daisy và PN dùng app Diva để chấm công.
  4. Day-1 GPS on-site. Remote hỗ trợ nhóm nhỏ (Daisy Ca 3 Marketing + PN 3-4 NV).
  5. PN và Daisy cùng rollout 1B — cả 2 đều cần 4 mốc (PN ca gãy, Daisy khối DV).
  6. PN mặc định dùng ca tính công theo giờ thực tế (workday = actual_hours / standard_hours × max_workday). Daisy mặc định dùng ca fixed 0/0.5/1.0.
  7. Báo cáo phép năm bắt buộc Day-1 cho PN.
  8. Daisy break BS/Phụ tá: 12:00–14:00, break_flex_minutes = 60 chỉ là metadata Day-1; hệ thống không phạt/block theo khung nghỉ linh hoạt, chỉ yêu cầu đủ 4 mốc và export đủ 4 mốc.
  9. Daisy Tạp vụ: 6 ca cố định mới, 7 NV.
  10. Daisy "hạn chế update" = gộp release, không deploy lẻ tẻ.
  11. Settings Module toàn diện: tất cả config per unit trên UI, backend đọc DB, không hardcode (DEC-026).
  12. Penalty engine Day-1: timekeeping_penalty_rule per unit, exempt_pool = 'individual' (PN) / 'shared' (Daisy) (DEC-012 v3, DEC-027).
  13. Công chuẩn Day-1: dùng nhóm áp dụng công chuẩn + map department -> scope. PN có PN_OFFICE / PN_SERVICE; Daisy có ít nhất DAISY_OFFICE_ACCOUNTING, DAISY_OFFICE_TELE_CSKH_PAGE_BRANCH, DAISY_SERVICE.
  14. OT rate Day-1: PN 50k/BS 150k, Daisy 35k/BS 150k.
  15. Entry point quản lý assignment/unit là SettingsInternal SettingsĐơn vị chấm công (SCR-00), không đặt trong màn tạo/sửa nhân viên.
  16. Assignment Day-1 phải lưu primary_branch_id + primary_department_id + ngày hiệu lực.
  17. Chi nhánh áp dụng / Phòng ban áp dụng dùng soft-disable, không xóa cứng.
  18. SCR-00Readiness Checklist + tab Triển khai; chỉ bật rollout khi không còn badge .
  19. GPS Day-1 không build màn master riêng: tọa độ chi nhánh tiếp tục quản lý ở branch master data, còn bán kính/rule GPS nằm trong SCR-00 > Quy định.
  20. Cách tính công không cấu hình ở Đơn vị chấm công; Day-1 đặt ở Ca làm việc, đổi label Số ngày công thành Công tối đa của ca, và thêm Giờ chuẩn của ca khi chọn mode Theo giờ.
  21. Yêu cầu GPS không cấu hình ở Đơn vị chấm công; Day-1 đặt ở Ca làm việc dưới dạng gps_required = Bắt buộc / Không bắt buộc, còn unit chỉ giữ bán kính mặc định. Logic remote_onetime / remote_weekly tiếp tục là flow riêng.

Kế hoạch rollout (v3.1.2)

WaveScope
1A — FoundationSchema + canonical_key migration + Settings Module + non-regression Diva. Không feature mới cho end-user
1B — PN + Daisy đồng thờiRuntime 4 mốc + 2 mốc, GPS, admin, mobile, export, approver scope, báo cáo phép năm PN, tính công theo giờ PN, remote nhóm nhỏ, penalty engine, công chuẩn per unit, OT rate per unit
1C — HardeningBugfix, tối ưu performance, mở rộng rollout

Thay đổi vs v2.0: PN ca gãy cần 4 mốc → PN + Daisy cùng rollout 1B. Settings Module toàn diện đưa penalty + công chuẩn + OT rate vào Day-1 (1B).


Blocker trước khi bắt đầu (Start)

IDHạng mục (Item)Người phụ trách (Owner)Trạng thái (Status)
BLK-001Chốt schema timekeeping_unit* + overlap constraint cho assignment + primary_department_idTL + BE
BLK-002Chốt runtime time_slot_user_id + segment_index + GPS validationTL + BE
BLK-003Chốt backfill canonical_key và bỏ propagation theo nameTL + BE
BLK-004Chốt scope approver timekeeping riêngTL + BE
BLK-004AChốt soft-disable cho timekeeping_unit_branch / timekeeping_unit_department + behavior reactivateTL + BE
BLK-004BChốt payload aggregate cho Readiness Checklist + persistence tab Triển khaiTL + BE + FE
BLK-005Chốt matrix non-regression + GPS oracle cho Diva timekeeping hiện tạiQA + TL
BLK-006PN ca gãy = 4 mốc (DEC-014 confirmed)PO + HR PNDone
BLK-007Daisy = 2 cấp (DEC-015 confirmed)PO + Daisy OpsDone
BLK-008Remote Day-1 cho nhóm nhỏ — TL chọn phương án kỹ thuậtTLPending
BLK-009HR Daisy + PN OK — penalty + công chuẩn Day-1 nhờ Settings Module v3PO + HRDone

Lưu ý tương thích (Compatibility Reminder)

  • Không sửa report/dashboard legacy.
  • Không sửa salary/payroll legacy.
  • Không đổi company boundary của branch/department.
  • Chỉ mở scope mới trong module timekeeping.
  • Remote: chỉ hỗ trợ nhóm nhỏ (Daisy Ca 3 + PN 3-4 NV), không mở full remote attendance.
  • Báo cáo phép năm PN: bắt buộc Day-1 (DEC-023). Daisy chưa mở entry báo cáo phép năm trong rollout này.
  • Export Day-1 tính tiền phạt + tiền OT tự động từ Settings Module config (DEC-012 v3, DEC-026). Công chuẩn Day-1 resolve qua primary_department_id -> standard_workday_scope_key -> rule (DEC-013 v4).
  • Daisy Ca 3 Marketing dùng workaround remote_onetime (DEC-016).
  • Cron auto-schedule skip Daisy (DEC-017).

Quyết định chờ xử lý (Pending Decisions) — trạng thái sau phản hồi

DecisionTrạng tháiKết quả
DEC-014ConfirmedPN ca gãy = 4 mốc
DEC-015ConfirmedDaisy = 2 cấp duyệt
DEC-016LockedRemote cho nhóm nhỏ Day-1 — cần TL chọn phương án kỹ thuật
ASM-005Superseded by DEC-012 v3Penalty engine Day-1 thay thế tính thủ công
ASM-006Superseded by DEC-013 v3Công chuẩn Day-1 thay thế tính thủ công

Câu hỏi mở cho TL (chưa trả lời)

#Câu hỏi
T-01Backfill canonical_key cần downtime không?
T-02Audit toàn bộ code dùng name matching
T-03Cronjob +400 NV có vượt timeout? Goroutine isolation?
T-04resolveUnit(user) cache hay query? Lock double-tap?
T-05Hasura: role mới hay extend? JWT claim?
T-06Đã chốt: Day-1 không thêm flag remote ở shift và không auto-approve. Nhóm nhỏ tiếp tục dùng flow legacy remote_onetime / remote_weekly khi đã approved
T-07Staging riêng hay production + flag? Rollback plan?
T-08Non-regression suite viết bằng gì?