Appearance
Checklist triển khai (Go-Live Checklist) — Chấm công đa đơn vị trên shared tenant
v3.1.4 — 21/04/2026
| Thay đổi | Section | Ảnh hưởng |
|---|---|---|
Đổi gate Daisy break linh hoạt sang contract Day-1: đủ 4 mốc, tính actual_hours, export đủ 4 mốc; không coi tolerance window là rule go-live bắt buộc | E1) Cổng kiểm soát triển khai | QA, BE, Ops |
Chốt wording rollout remote: không có request entry mới trên attendance shell, nhưng nhóm nhỏ vẫn dùng đúng flow legacy đã approved | E2) Kiểm tra trước triển khai, E4) Xác minh sau triển khai | QA, FE, Ops |
Tham chiếu (Ref): PRD v3.1.4 | Ngày (Date): 21/04/2026
Changelog
| Version | Date | Author | Thay đổi |
|---|---|---|---|
| 3.1.4 | 21/04/2026 | PO/BA | Đồng bộ gate/go-live wording cho Daisy break linh hoạt Day-1 và contract remote legacy: không build entry mới nhưng vẫn không chặn nhóm nhỏ đã approved |
| 3.1.3 | 15/04/2026 | PO/BA | Cập nhật pre-check/go-live cho model Công chuẩn mới: kiểm tra scope + department mapping, không còn check theo branch_label_id |
| 3.0 | 07/04/2026 | PO/BA | Initial go-live gates/pre-checks cho rollout PN + Daisy |
| 3.0.1 | 07/04/2026 | PO/BA | Đồng bộ wording pilot 2 mốc/4 mốc, annual leave Day-1 và seed hiện tại |
| 3.1 | 13/04/2026 | PO/BA | Bổ sung pre-check mới cho schema mapping/assignment và readiness gating trước khi bật rollout |
| 3.1.1 | 13/04/2026 | PO/BA | Làm rõ GPS rollout contract: tọa độ dùng branch master data hiện có, còn bán kính ưu tiên unit override rồi mới fallback global |
| 3.1.2 | 14/04/2026 | PO/BA | Chuyển gate mode tính công xuống Ca làm việc, bổ sung pre-check cho field shift-level workday_calculation_mode + standard_hours, và chuyển yêu cầu GPS của ca sang gps_required ở shift |
E1) Cổng kiểm soát triển khai (Gates)
| # | Cổng kiểm soát (Gate) | Người phụ trách (Owner) | Trạng thái (Status) |
|---|---|---|---|
| 1 | PO sign-off PRD | PO | Pending |
| 2 | TL sign-off Đặc tả kỹ thuật (Dev Spec) | TL | Pending |
| 3 | QA pass | QA | Pending |
| 4 | GPS validation pass cho PN pilot | QA + HR PN | Pending |
| 5 | PN app 2 mốc + 4 mốc ca gãy pilot pass | QA + HR PN | Pending |
| 6 | Daisy 4 mốc pilot pass | QA + Daisy Ops | Pending |
| 7 | Diva timekeeping non-regression pass | QA + TL | Pending |
| 8 | PN ca gãy cronjob pass (late/early không tính nhầm break) | QA + BE | Pending |
| 9 | Daisy VP 2 mốc pass (CTA đúng, export đúng) | QA | Pending |
| 10 | Cron generate_working_shift skip Daisy (auto_schedule_disabled) | QA + BE | Pending |
| 11 | DEC-014 confirmed (PN 4 mốc), DEC-015 confirmed (2 cấp) | PO | Done |
| 12 | HR Daisy/PN auto-filter đúng unit, không cross-unit | QA | Pending |
| 13 | Đơn trễ/sớm Daisy reject >60 phút pass | QA | Pending |
| 14 | Mobile quota "X/3 lần" hiển thị đúng per unit | QA | Pending |
| 15 | PN tính công theo giờ pass (DEC-022, FORMULA-009) | QA + BE | Pending |
| 16 | Báo cáo phép năm PN export pass (DEC-023) | QA + FE | Pending |
| 17 | Daisy Tạp vụ 6 ca mới seed + smoke pass | QA + BE | Pending |
| 18 | Daisy break linh hoạt Day-1 pass cho BS/Phụ tá: đủ 4 mốc, tính actual_hours theo mốc thực tế, export đủ 4 mốc | QA + BE | Pending |
| 19 | Settings Module Tab Quy định + Ca làm việc: CRUD config, audit log, conditional display | QA + FE | Pending |
| 20 | Backend đọc config từ DB không hardcode — cronjob + action dùng config đúng unit | QA + BE | Pending |
| 21 | Rollback test: tắt rollout flag → verify quay về legacy, Diva không ảnh hưởng | QA + TL | Pending |
| 22 | Công chuẩn Day-1: PN DV = 26, PN VP = 24, Daisy Kế toán = 24, Daisy nhóm Tele/CSKH/Page/CN = 26 — đúng theo scope mapping | QA + BE | Pending |
| 23 | Penalty engine: PN quên vào ca = phạt ngay, Daisy quên vào ca = miễn (pool shared) — đúng rule | QA + BE | Pending |
| 24 | OT rate: PN BS = 150k/h, PN thường = 50k/h, Daisy thường = 35k/h — đúng config | QA + BE | Pending |
| 25 | Diva legacy: công chuẩn, penalty, OT — tất cả KHÔNG ĐỔI | QA | Pending |
E2) Kiểm tra trước triển khai (Pre-checks)
BE
- [ ]
timekeeping_unit*tables tồn tại (gồmauto_schedule_disabled,ot_min_threshold_minutes) - [ ]
timekeeping_unit_branch,timekeeping_unit_departmentcó cộtdisabled - [ ]
timekeeping_unit_usercóprimary_branch_id+primary_department_id - [ ]
time_slot_template,time_slot_user,time_slot_time_keeping,request_working_schedulecótimekeeping_unit_id - [ ]
time_slot_templatecóworkday_calculation_mode+standard_hourscho ca tính theo giờ - [ ]
time_slot_templatecógps_requiredcho ca cần cấu hìnhBắt buộc / Không bắt buộcGPS - [ ]
time_slot_time_keepingcósegment_index - [ ]
request_working_schedulecósegment_index - [ ]
time_slot_template_update.gokhông còn update theoname - [ ]
log_time_keeping_flagcronjob hỗ trợ multi-segment (4 mốc) - [ ]
log_time_keeping_flagcronjob tính đúng cho ca gãy PN (break >2h) - [ ]
logTimeKeepingaction hỗ trợ state machine 4 mốc - [ ]
generate_working_shiftcron skip unit cóauto_schedule_disabled = true - [ ] OT request validation: reject nếu duration <
ot_min_threshold_minutes - [ ] Seed shift templates: PN 16 ca + Daisy 17 ca
- [ ]
timekeeping_penalty_ruletable tồn tại với seed data đúng (PN:exempt_pool = 'individual', Daisy:exempt_pool = 'shared') - [ ]
timekeeping_standard_workday_rule+timekeeping_standard_workday_scope_departmenttồn tại với mapping đúng theo scope + department - [ ] Cronjob đọc penalty rules từ DB (không hardcode
late_early_fine = phút × 10,000) - [ ] Cronjob đọc công chuẩn từ DB (không hardcode
branchLabelID == "general" → 26.0) - [ ] OT rate per unit áp dụng đúng trong export (PN BS 150k/h, PN thường 50k/h, Daisy 35k/h)
FE Admin
- [ ]
WorkingSchedulelọc được theotimekeeping_unit - [ ]
WorkingTimeSheetrender đúng 2 mốc/4 mốc - [ ]
WorkingTimeSheetcó filter Chi nhánh scoped theo unit - [ ] HR Daisy auto-select unit Daisy, không đổi được sang PN
- [ ] HR PN auto-select unit PN, không đổi được sang Daisy
- [ ] System Admin chọn được tất cả unit
- [ ] Diva native user không thấy filter unit
- [ ] Export bảng công tháng (tổng hợp) có đủ cột: tổng công, trễ, sớm, OT, quên chấm
- [ ] Export bảng công tháng includes cột Tiền phạt + Tiền OT
- [ ] Export báo cáo trễ/sớm có cột "có đơn xin phép"
- [ ] Export vận hành chạy được
- [ ] Tab Quy định: CRUD config, audit log, conditional display
- [ ]
SCR-00checklist readiness hiển thị đúng count/status - [ ] Tab Triển khai:
Bật rolloutchỉ bật được khi không còn badge❌
FE Mobile
- [ ] PN ca thường 2 mốc pass smoke
- [ ] PN ca gãy 4 mốc pass smoke
- [ ] Daisy DV 4 mốc pass smoke (happy path 4 CTA)
- [ ] Daisy VP 2 mốc pass smoke (chỉ 2 CTA)
- [ ] GPS reject/pass đúng theo branch trong unit
- [ ] User Diva hiện tại không đổi behavior ngoài rollout
- [ ] Không có CTA/request entry
remotemới trên attendance shell Day-1; nhóm nhỏ vẫn dùng được flow legacyremote_onetime/remote_weeklykhi đã approved - [ ] Double-tap guard (<5s) hoạt động
E3) Các bước triển khai (Deploy Steps)
| # | Bước (Step) | Người phụ trách (Owner) |
|---|---|---|
| 1 | Deploy schema timekeeping_unit* + timekeeping_penalty_rule + timekeeping_standard_workday_rule | BE |
| 2 | Deploy runtime timekeeping_unit_id + multi-clock + penalty engine + công chuẩn từ DB | BE |
| 3 | Deploy admin UI settings/schedule/sheet + Tab Quy định | FE |
| 4 | Deploy PN mobile 2 mốc + GPS | FE Mobile |
| 5 | Run PN pilot smoke + GPS matrix | QA |
| 6 | Deploy Daisy 4 mốc | FE Mobile + BE |
| 7 | Run Daisy pilot smoke | QA |
| 8 | Final non-regression for Diva timekeeping | QA + TL |
E4) Xác minh sau triển khai (Verification)
- [ ] HR PN xem đúng working sheet của PN
- [ ] HR Daisy xem đúng working sheet của Daisy
- [ ] PN chấm công app 2 mốc thành công
- [ ] Daisy chấm công app 4 mốc thành công
- [ ] GPS ngoài branch hợp lệ bị chặn đúng
- [ ] Export bảng công tháng thành công
- [ ] Export chi tiết ngày Daisy có đủ 4 mốc
- [ ] Diva timekeeping hiện tại không regress
- [ ] Không thấy CTA/request entry
remotemới trong rollout wave; flow legacy cho nhóm nhỏ vẫn hoạt động đúng theo approval - [ ] Export bảng công PN có cột Tiền phạt tính đúng
- [ ] Export bảng công Daisy có cột Tiền phạt (shared pool exempt đúng)
- [ ] Export có cột Tiền OT tính đúng theo rate per unit
E5) Bộ bằng chứng (Evidence Pack)
- [ ] Video PN 2 mốc
- [ ] Video Daisy 4 mốc
- [ ] GPS pass/reject evidence
- [ ] Sample working sheet export PN
- [ ] Sample working sheet export Daisy
- [ ] Isolation matrix pass
- [ ] Non-regression note cho Diva timekeeping
- [ ] Sample penalty calculation PN vs Daisy (khác
exempt_pool) - [ ] Sample OT rate calculation (PN BS 150k/h, PN thường 50k/h, Daisy 35k/h)