HRP — Hệ thống quản trị cung ứng nhân sự

Một hệ thống cho toàn bộ nghiệp vụ của bạn.

Từ khách hàng, nhu cầu tuyển, người lao động, chấm công, đối soát — đến trả lương và hoa hồng. Vận hành nội bộ trước, mở rộng ra đối tác và người lao động sau. Mọi con số đã chốt là không sửa.

Bán hàngKhách hàngdoanh nghiệp thuê nhân sự
Dự ánDự án cung ứngđịa điểm, PM, sale phụ trách
Tuyển dụngNhu cầu tuyểnvị trí × ca × số lượng
Hồ sơNgười lao động1 CCCD = 1 hồ sơ duy nhất
Điều độngGán dự án1 người = 1 dự án tại 1 thời điểm
Chấm côngChốt côngnhập file → duyệt → khóa
Tài chínhĐối soát & lương2 biên bản: trả vendor / thu KH
Vận hành nội bộ ~12 tuần Đầy đủ (gồm 3 cổng) ~6–7 tháng Thiết kế cho 5.000 lao động
Phiên bản v4.20 Hoàn thành 15/08/2026 lúc 02:45 ICT Dựng từ UNIFIED_PLAN_v4.md v4.20 Thiết kế cho 5.000 lao động
Ai dùng gì

Ba cổng, ba nhóm người, một dữ liệu

Một hệ thống duy nhất với ba giao diện riêng — dữ liệu nằm chung một kho nên không bao giờ lệch nhau.

Nội bộ · hrpartner.vn/admin

Quản lý nội bộ

HR, Sale, PM, Kế toán — nơi vận hành toàn bộ chu trình.
  • Hồ sơ lao động — thẻ từng người: quê quán, dự án đang làm, ai giới thiệu
  • Khách hàng, dự án, nhu cầu tuyển
  • Chốt công — nhập file, xử lý lỗi, khóa kỳ
  • Đối soát — 2 biên bản: trả vendor / thu khách hàng
  • Duyệt đơn — phản ánh công, tạm ứng, xin nghỉ
  • App hiện trường cho PM — điểm danh, báo sự cố, chuyển người ngay tại công trường
Cách xem: danh mục hiển thị dạng thẻ — nhìn lướt là thấy; màn tài chính dạng bảng để so từng dòng.
Người lao động · hrpartner.vn

App người lao động

Lao động phổ thông — chữ to, thao tác đơn giản, cài được trên điện thoại.
  • Chưa có việc → xem nhu cầu tuyển + ứng tuyển 1 chạm
  • Xem ca làm hôm nay + tuần này
  • Phiếu lương — chỉ thấy số nhận
  • Chấm công bằng chụp hình + định vị
  • Đơn của tôi: phản ánh, tạm ứng, xin nghỉ
HRP
HÔM NAY
🟢 ĐANG LÀM VIỆC
Ca sáng · 07:00 – 16:00
KCN Tân Bình · Đóng gói hàng hóa
Vào: 07:05 · Ra dự kiến: 16:00
CHẤM CÔNG RA
11/14 ngày  💰 5.280.000 đ tạm tính
THÔNG BÁO (2)
💰 Đã trả lương tháng 7 — 2 ngày trước
⏰ Đổi ca ngày mai — 3 giờ trước
🏠
📅
💰
📝
Đăng nhập: mã nhân viên dự án / mã HRP / CCCD + mật khẩu đặt lúc đăng ký. Đổi SIM không mất tài khoản. Zalo là cách đăng nhập phụ tiện lợi.
Đối tác · vendor.hrpartner.vn

Cổng đối tác cung ứng

Công ty cung ứng nhân lực đối tác — nộp hồ sơ và đối soát công nợ.
  • Xem nhu cầu tuyển đang mở
  • Nộp hồ sơ ứng viên — hệ thống tự đối chiếu CCCD, báo chặn nếu đã có người tiến cử
  • Kho hồ sơ riêng — nộp lại cho nhu cầu mới chỉ 1 chạm
  • Theo dõi: chờ duyệt / duyệt / từ chối kèm lý do
  • Xác nhận hoặc phản đối biên bản đối soát
Nguyên tắc: đối tác chỉ nộp hồ sơ — HR duyệt xong mới thành người của hệ thống. Phản đối biên bản tối đa 2 vòng; quá 3 ngày không trả lời hệ thống tự xác nhận — không ai câu giờ được.
Nghiệp vụ lõi

Chu trình vận hành hàng tháng

Mỗi kỳ lương, hệ thống chạy đúng chu trình này — mọi bước đều có người chịu trách nhiệm và dấu vết thao tác.

1. Tiếp nhận nhu cầuKhách hàng ký hợp đồng → mở dự án → khai nhu cầu tuyển theo vị trí, ca, số lượng, thời hạn.
2. Tìm người & gán việcLao động vào từ 4 nguồn: HR/Sale tự tuyển, Vendor cung ứng, CTV giới thiệu (kể cả link giới thiệu), tự đăng ký. HR duyệt rồi gán dự án — mỗi người một mã nhân viên tại dự án đó. Tại một thời điểm mỗi người chỉ làm đúng 1 dự án — chuyển dự án qua HR điều chuyển, cần đổi cả nhóm thì chuyển hàng loạt 1 lần. Bỏ việc ngang liên tục 3 ngày không phép → hệ thống tự cảnh báo để HR đóng hồ sơ, nhả chỗ tuyển.
3. Chấm côngHai luồng: file chấm công đối tác gửi về (để TÍNH LƯƠNG) + app chụp hình định vị GPS (để QUẢN LÝ Ý THỨC — không dùng tính lương). PM có app hiện trường điểm danh nhanh, dùng được cả khi mất sóng.
4. Chốt côngKế toán đối chiếu, xử lý dòng lỗi, duyệt và KHÓA kỳ. Đã khóa là không sửa — sai sót chỉ điều chỉnh kỳ sau kèm lý do.
5. Đối soátTự tạo 2 biên bản riêng: TRẢ VENDOR (giá mua) và THU KHÁCH HÀNG (giá bán). Đối tác xác nhận hoặc phản đối ngay trên cổng của họ — phản đối tối đa 2 vòng, quá hạn tự xác nhận.
6. Trả lương & hoa hồngBảng lương tự động theo công đã khóa + luật lao động VN (BHXH, thuế TNCN — kể cả thuế 10% cho lao động vãng lai). Tiền về đúng tài khoản đã xác thực. Không bao giờ có lương âm — thiếu bao nhiêu chuyển trừ kỳ sau, kế toán duyệt từng trường hợp. Hoa hồng CTV theo mốc giữ chân.
Cùng chu trình trên — nhìn dưới dạng sơ đồ
flowchart LR
  S1["1️⃣ Tiếp nhận
KH → Dự án → Nhu cầu"] --> S2["2️⃣ Tìm người & gán
4 nguồn → HR duyệt"] S2 --> S3["3️⃣ Chấm công
file đối tác + GPS"] S3 --> S4["4️⃣ Chốt công
xử lý lỗi → duyệt → KHÓA 🔒"] S4 --> S5["5️⃣ Đối soát
2 biên bản + tối đa 2 vòng"] S4 --> S6["6️⃣ Trả lương
+ BHXH, thuế"] S5 --> S7["Vendor xác nhận/
phản đối"] S6 --> S8["Phiếu lương
chỉ NET, không âm"] style S4 fill:#FFF1E4,color:#C2410C,stroke:#F97316,stroke-width:2px style S5 fill:#FFF1E4,color:#C2410C style S6 fill:#FFF1E4,color:#C2410C
Đối soát 2 vòng — quá 3 ngày tự xác nhận
flowchart TD
  A["📝 HR tạo biên bản
CHO_VENDOR"] --> B{"Vendor xem"} B -->|"✅ Xác nhận"| LOCKED["🔒 Khóa biên bản
HOÀN TẤT"] B -->|"❌ Phản đối
vòng 1"| C["⚠️ Phản đối vòng 1
HR chỉnh sửa"] C -->|"Gửi lại
vòng 2"| A C -->|"❌ Phản đối
vòng 2"| FL["🔒 FORCE LOCK
HR Manager/Kế toán chốt
lý do + bằng chứng + audit"] C -->|"⏰ Quá 3 ngày
không trả lời"| AUTO["⏰ Tự xác nhận
không ai câu giờ được"] A -->|"⏰ Quá 3 ngày
Vendor im lặng"| AUTO AUTO --> LOCKED FL --> LOCKED note["📌 Quy tắc: Phản đối tối đa 2 vòng.
Quá 2 vòng → HR Manager/Kế toán FORCE LOCK
(lý do + bằng chứng + audit — G17-B1)."]:::rule AUTO -.-> note style LOCKED fill:#DCFCE7,color:#15803D,stroke:#15803D,stroke-width:2px style AUTO fill:#FEF3C7,color:#B45309,stroke:#B45309,stroke-width:2px style C fill:#FEF3C7,color:#B45309 style FL fill:#FEE2E2,color:#B91C1C,stroke:#B91C1C,stroke-width:2px style note fill:#FFF1E4,color:#C2410C,stroke:#F97316,stroke-width:1px,stroke-dasharray:4
Tính lương — không bao giờ có lương âm
flowchart TD
  A["Bảng công
đã khóa 🔒"] --> B{"Loại lao động?"} B -->|"Chính thức
≥ 3 tháng"| C1["Thuế lũy tiến 5/10/15/20/25%
+ BHXH 10.5% (NLĐ)
(DN đóng 22%)"] B -->|"Vãng lai
≥ 2 triệu/lần"| C2["Thuế 10% khấu trừ
tại nguồn"] C1 --> D["Lương NET"] C2 --> D D --> E{"NET < 0?"} E -->|"Có"| F["⚠️ Bù thiếu
chuyển trừ kỳ sau
KT duyệt từng ca"] E -->|"Không"| G["✅ Chuyển khoản
STK đã xác thực"] F --> H["📋 Phiếu lương
chỉ hiện NET"] G --> H style F fill:#FEF3C7,color:#B45309 style G fill:#DCFCE7,color:#15803D
Hiện trường

App riêng cho Quản lý dự án ngoài công trường

PM đứng ngoài nắng, đeo găng tay, sóng chập chờn — app hiện trường thiết kế cho đúng cảnh đó: nút bấm khổng lồ, vuốt là xong, mất mạng vẫn dùng được.

📋 Bảng ca hôm nay

Số to rõ ràng: đăng ký ca / có mặt / vắng / đến muộn — chỉ thấy dự án mình quản lý.

👆 Điểm danh bằng vuốt

Vuốt phải = có mặt, vuốt trái = vắng — không cần đọc chữ, không cần tháo găng.

🤝 Điểm danh hộ

Lao động không có điện thoại → PM điểm danh hộ ngay trên app (có ghi dấu vết).

🚨 Báo sự cố 3 chạm

Mất điện, máy hỏng, người nghỉ đột xuất → tạo báo cáo khẩn vài giây, HR nhận ngay.

✅ Duyệt đơn 1 chạm

Đơn xin nghỉ / đổi ca của người mình quản lý — đồng ý hoặc từ chối ngay tại chỗ.

🔄 Chuyển người hàng loạt

Cả nhóm đổi dự án theo ca → chọn nhiều người, chuyển 1 lần — khỏi thao tác lặp từng người.
App hiện trường PM — mất sóng vẫn điểm danh được
flowchart LR
  A["📋 Bảng ca
hôm nay"] --> B["👆 Vuốt phải = có mặt
Vuốt trái = vắng"] B --> C{"🌐 Có mạng?"} C -->|"Có"| S1["Sync server
HR thấy ngay"] C -->|"Không"| S2["💾 Lưu local
+ queue"] S2 -->|"Có mạng lại"| S1 B --> D["🤝 Điểm danh hộ
LĐ không có ĐT"] B --> E["🚨 Báo sự cố
3 chạm"] B --> F["✅ Duyệt đơn
1 chạm"] B --> G["🔄 Chuyển nhóm
hàng loạt"] style S2 fill:#FFF1E4,color:#C2410C,stroke:#F97316,stroke-width:2px style S1 fill:#DCFCE7,color:#15803D
Hồ sơ lao động

Năm vòng đời tách bạch của một người lao động

Thay vì một trạng thái duy nhất khó hiểu, hồ sơ theo dõi riêng 5 chuyện độc lập — mỗi chuyện có vòng đời của nó (ADR-011: profile/submission/employment/assignment/risk). "Đang rảnh" là tự suy ra: đang làm việc nhưng chưa có dự án.

🗂️ Ứng tuyển — tuyển dụng
Mới Sàng lọc Đạt | Loại | Rút | Gộp trùng
📋 Hồ sơ giấy tờ — hồ sơ
Chưa đủ thông tin Chờ xác minh Đã xác minh | Bị từ chối
🤝 Quan hệ lao động — làm việc
Chưa có Đang làm Tạm nghỉ | Nghỉ việc
🏢 Tại dự án — điều động
Chờ xếp việc Đang làm Tạm dừng | Kết thúc | Chuyển dự án | Hủy
1 người tại 1 thời điểm chỉ làm ở 1 dự án — chuyển dự án ghi đến phút (sáng dự án A, chiều dự án B được), không bao giờ trùng công. Bỏ việc ngang ≥3 ngày → hệ thống cảnh báo, HR 1 chạm đóng hồ sơ + nhả chỗ tuyển.
⚠️ Rủi ro — cảnh báo
Bình thường Xem xét Chặn
Bỏ việc ngang, vi phạm kỷ luật → chặn không cho điều động tiếp.
🟢 Đang làm ⚪ Đang rảnh (tự suy ra) 🟡 Chờ duyệt 🔵 Tạm nghỉ 🔴 Nghỉ việc / Bị chặn
Năm vòng đời chạy song song
flowchart LR
  subgraph UT["🗂️ Ứng tuyển"]
    U1["Mới"] --> U2["Sàng lọc"]
    U2 --> U3["Đạt ✅"]
    U2 -->|"loại"| U4["Loại ❌"]
    U2 -->|"rút"| U5["Rút ↩️"]
    U3 -->|"gộp trùng"| U6["Gộp 🔀"]
  end
  subgraph HS["📋 Hồ sơ giấy tờ"]
    H1["Chưa đủ
thông tin"] --> H2["Chờ xác
minh"] H2 --> H3["Đã xác
minh ✅"] H2 -->|"không hợp lệ"| H4["Bị từ chối ❌"] H4 -->|"khiếu nại / bổ sung"| H2 end subgraph QH["🤝 Quan hệ lao động"] Q1["Chưa có"] --> Q2["Đang làm 🟢"] Q2 --> Q3["Tạm nghỉ 🔵"] Q3 --> Q2 Q2 -->|"nghỉ việc"| Q4["Nghỉ việc 🔴"] end subgraph DA["🏢 Tại dự án"] D1["Chờ xếp
việc"] --> D2["Đang làm 🟢"] D2 --> D3["Tạm dừng 🔵"] D3 --> D2 D2 -->|"kết thúc HĐ"| D4["Kết thúc ⚪"] D2 -->|"chuyển dự án
ghi đến phút"| D5["Chuyển dự án ↔️"] D2 -->|"ngang ≥3 ngày
tự cảnh báo"| D6["HR đóng hồ sơ"] D2 -->|"huỷ điều động"| D7["Hủy ⚪"] end subgraph RR["⚠️ Rủi ro"] R1["Bình thường"] --> R2["Xem xét"] R2 -->|"bỏ việc /
kỷ luật"| R3["Chặn 🚫"] R2 --> R1 R3 -->|"HR gỡ sau kỳ"| R1 end UT -.->|"HR / ứng viên"| HS HS -.->|"HR / Vendor"| QH QH -.->|"HR / Vendor"| DA RR -.->|"mọi portal
cùng thấy"| DA
Từ công đã chốt

Chốt một lần, tiền chảy bốn hướng

Kỳ công đã khóa là mốc duy nhất — từ đó tiền tự chảy về đúng nơi:

Bảng công đã chốt (khóa — không sửa)Dữ liệu thô từ file đối tác / GPS → chuẩn hóa → duyệt → khóa kỳ.
💵 Bảng lương người lao động1 người = 1 kết quả / kỳ, tính theo luật (BHXH, thuế lũy tiến hoặc thuế 10% vãng lai). Phiếu lương chỉ hiện số nhận; không bao giờ có lương âm — thiếu chuyển trừ kỳ sau có kế toán duyệt.
🤝 Biên bản TRẢ VENDORCông đã duyệt × giá mua — đối tác xác nhận hoặc phản đối (tối đa 2 vòng, quá 3 ngày tự xác nhận).
🏢 Biên bản THU KHÁCH HÀNGCông đã duyệt × giá bán — tách bạch hoàn toàn với biên bản trả vendor.
🎁 Hoa hồng CTVTrả theo mốc giữ chân (bắt đầu, giữ đủ 30 ngày...) — dòng đảo khi thu hồi.
📊 Doanh thu tạm tính hôm nayGPS check-in × giá bán — số nhảy mỗi ngày cho lãnh đạo theo dõi; nhãn TẠM TÍNH, không dùng đối soát.
Dòng lỗi chấm công — mỗi dòng có 'mạng sống' riêng
flowchart TD
  F["Đối tác gửi file
CSV / XLSX"] --> P["Parse & validate
theo mẫu đã khai"] P -->|"định dạng sai"| E1["❌ LỖI ĐỊNH DẠNG
từ chối nguyên file"] P -->|"OK"| M["Ghép mã NV
employee_code / CCCD"] M -->|"mã lạ"| E2["⚠️ MÃ LẠ
KT dò tay 24h"] M -->|"CCCD trùng 2 người"| E3["⚠️ TRÙNG CCCD
HR Manager gộp"] M -->|"OK"| R["Bảng công thô
status: DRAFT"] R -->|"thiếu check"| E4["⚠️ THIẾU CHECK
PM xác minh"] R -->|"ngoài ca > 1h"| E5["⚠️ NGOÀI CA
PM xác nhận OT"] R -->|"scan trùng < 30s"| E6["⚠️ TRÙNG SCAN
tự bỏ dòng sau"] R -->|"OK"| C["Chuẩn hoá
status: READY"] C --> K["Kế toán duyệt →
KHÓA KỲ 🔒"] K -->|"sai sau khóa?"| ADJ["Tạo dòng ADJUSTMENT
ở kỳ sau kèm lý do"] K --> LOCKED["ĐÃ KHÓA — bất biến
chỉ xem, không sửa"] style E1 fill:#FEE2E2,color:#B91C1C style E2 fill:#FEF3C7,color:#B45309 style E3 fill:#FEF3C7,color:#B45309 style E4 fill:#FEF3C7,color:#B45309 style E5 fill:#FEF3C7,color:#B45309 style E6 fill:#FEF3C7,color:#B45309 style K fill:#FFF1E4,color:#C2410C,stroke:#F97316,stroke-width:2px style LOCKED fill:#DCFCE7,color:#15803D
§1.2 — Bài toán lõi

Ba bài toán, một hạ tầng

HRP giải cùng lúc ba bài toán thường tách rời: vận hành nội bộ, điều phối đối tác, và thu hút nguồn lực bên ngoài. Mỗi bài có đối tượng dùng khác nhau, nhưng cùng đọc chung một dữ liệu — không phải ba hệ thống kết nối.

B2O

Vận hành & Đối soát

Số hóa chuỗi vận hành nội bộ: nhu cầu tuyển → worker → assignment → nhập & chốt công → đối soát vendor/khách.

Đối tượng: Kế toán · Admin · HR

B2B

Quản trị Khách hàng & Thầu phụ

Quản lý dự án, hợp đồng cung ứng. Điều phối vendor khi thiếu hụt nhân sự hoặc cần mở rộng quy mô nhanh.

Đối tượng: Doanh nghiệp thuê · Vendor · PM

B2C

Thu hút & Quản lý Nguồn lực

Cổng thông tin tối giản cho NLĐ phổ thông; Talent Pool remarketing cho cả CTV và Vendor.

Đối tượng: Người lao động · CTV · Vendor

§2.1 — Personas

Bảy nhóm người dùng, bảy cách vào hệ thống

Mỗi persona có cổng đăng nhập riêngtập quyền riêng. Không phải ai cũng cần xem mọi thứ — quyền bị giới hạn từ middleware đến database (RLS L2).

P1

Người lao động phổ thông

Worker

Đăng ký nhanh, xem công, xem lương — qua app PWA, thao tác 1 chạm.

P2

Cộng tác viên

CTV · Referrer

Nhập thông tin giới thiệu, xem hoa hồng qua link riêng (first-click wins).

P3

Vendor

Sub-contractor

Nhập NLĐ vào kho hồ sơ, xem dự án cần người, xác nhận/dispute biên bản.

P4

Nhân sự nội bộ

HR · Sale

Quản lý Talent Pool, phân công dự án, nhập nguồn ứng viên.

P5

Quản lý dự án

PM

Gán người từ nhiều vendor, theo dõi tiến độ, điểm danh hiện trường.

P6

Kế toán

Accountant

Chốt công 3 tầng, tính lương, đối soát vendor, ghi nhận công nợ.

P7

Admin

System Admin

RBAC, Permission Pool, cấu hình hệ thống, audit log.

§4.2 — URL Structure (theo V4)

Ba cổng, một tài khoản = ba vai trò

Worker Portal (NLĐ), Vendor Portal (nhà thầu phụ), CTV Portal (cộng tác viên) — chạy trong 1 app duy nhất, chỉ Vendor qua subdomain riêng (ADR-003), dùng chung một database và một bộ quyền. Cộng thêm Trang tìm việc công cộng (A-04) tại domain gốc hrp.vn, đọc từ Project.isPublic — không cần đăng nhập, ISR 300s.

Worker Portal

hrpartner.vn (chính) — PWA · mobile-first · Wave 3

  • Đăng ký nhanh bằng CCCD + họ tên + MK
  • Check-in GPS (selfie + tọa độ)
  • Xem công, xem phiếu lương, gửi ticket
  • 7 endpoint /api/m/* ẩn dữ liệu nhạy cảm

Vendor Portal

vendor.hrpartner.vn — subdomain riêng

  • Nhập NLĐ, nộp ứng viên theo Staffing Order
  • Xem trạng thái duyệt/từ chối + lý do
  • Confirm/Dispute biên bản, xuất PDF/Excel
  • Kho hồ sơ vendor — nộp lại 1 chạm (G13)

CTV Portal

hrpartner.vn — dashboard trong app · trang CTV công cộng trên hrp.vn

  • Nhập người được giới thiệu, kèm link riêng
  • Dashboard theo dõi (status + hoa hồng)
  • First-click wins — không xung đột với vendor
  • Lịch sử hoa hồng (commission ledger, Wave 4)

Trang tìm việc công cộng

hrp.vn — domain gốc · ISR · không cần đăng nhập

  • 4 trang: Home · Danh sách · Chi tiết việc · Cty đang tuyển
  • Đọc từ Project.isPublic + StaffingOrder
  • Wave 1 — sau M3 (theo Q#23 đã chốt)
§9.1 — State machines

Năm trạng thái chạy song song trên một lao động

Mỗi lao động trong hệ thống có năm vòng đời độc lập, mỗi cái một enum riêng. Trạng thái availability (đang rảnh / đang làm / tạm nghỉ) là suy ra chứ không lưu — tránh lệch dữ liệu.

5 state machines trên Worker — độc lập, đổi riêng từng cạnh
stateDiagram-v2
  direction LR
  state profile_status {
    INCOMPLETE --> PENDING_VERIFY: nộp hồ sơ
    PENDING_VERIFY --> VERIFIED: HR duyệt
    PENDING_VERIFY --> REJECTED: HR từ chối
  }
  state submission_status {
    NEW --> SCREENING: HR sàng lọc
    SCREENING --> QUALIFIED: đạt
    SCREENING --> REJECTED: loại
    SCREENING --> WITHDRAWN: rút
    QUALIFIED --> MERGED: gộp trùng
  }
  state employment_status {
    NONE --> ACTIVE: ký HĐ
    ACTIVE --> SUSPENDED: tạm nghỉ
    ACTIVE --> TERMINATED: chấm dứt
    SUSPENDED --> ACTIVE: phục hồi
  }
  state assignment_status {
    PLANNED --> ACTIVE: vào ca
    ACTIVE --> PAUSED: tạm dừng
    ACTIVE --> ENDED: kết thúc
    ACTIVE --> TRANSFERRED: chuyển dự án
    PLANNED --> CANCELLED: hủy
  }
  state risk_status {
    NORMAL --> REVIEW: cảnh báo
    REVIEW --> BLOCKED: khóa
    REVIEW --> NORMAL: xác minh OK
  }

Ticket — đi qua hai chữ ký (§12.5.3)

7 trạng thái × 10 action — typed qua TicketAction enum
stateDiagram-v2
  direction LR
  [*] --> PENDING
  PENDING --> HR_APPROVED: APPROVE_HR
  HR_APPROVED --> APPROVED: APPROVE_FINAL
  APPROVED --> PAID: PAY
  PAID --> CLOSED: CLOSE
  PENDING --> REJECTED: REJECT
  HR_APPROVED --> REJECTED: REJECT
  PENDING --> CANCELLED: CANCEL (worker)
  HR_APPROVED --> CANCELLED: CANCEL (worker)
  CLOSED --> [*]
  CANCELLED --> [*]
  REJECTED --> [*]

Statement — đối soát vendor & client (§11.3)

AUTO-CONFIRMED nếu SLA 3 ngày quá hạn · tối đa 2 vòng DISPUTE · quá 2 vòng → FORCE LOCK (G17-B1)
stateDiagram-v2
  direction LR
  [*] --> DRAFT
  DRAFT --> SENT: gửi
  SENT --> CONFIRMED: vendor OK (hoặc quá SLA)
  SENT --> DISPUTED: vendor báo lỗi
  DISPUTED --> CONFIRMED: HRP xử lý xong
  DISPUTED --> DRAFT: tạo version mới
  DISPUTED --> LOCKED: quá 2 vòng → FORCE LOCK (HR Manager/KT, audit)
  CONFIRMED --> LOCKED: chốt (bất biến)
  LOCKED --> PAID: chi trả
  PAID --> [*]

Visibility / Decision Matrix (§9.7) — ai thấy gì

ADMIN (root)

Toàn bộ — bất khả tước (G22)

DIRECTOR

Đọc toàn bộ có projection (ẩn CCCD/bank/selfie) — ghi qua Permission Pool (Q#22)

HR_MANAGER

Toàn bộ — handover + audit

HR_STAFF

Theo team / branch / phân công (Q#12)

SALE

ownerId = mình HOẶC assignedToId = mình

PM

Worker có assignment ACTIVE thuộc project mình quản lý

ACCOUNTANT

Theo assignment / scope tài chính

MKT

Chỉ CRM (lead/client + isPublic — Q#22)

VENDOR_ADMIN · VENDOR_STAFF

Worker có source_claim vendorId = vendor mình

CTV

Worker có source_claim ctvId = mình

WORKER

Chỉ bản thân

EMPLOYEE

Nhân sự nội bộ (M9 — sau core)

§6.2 + §8.1 — Module WBS

Mười module, ≈490 man-days

Phân rã theo M0 → M9. Mỗi module có Definition of Done 10 tiêu chí: state-transition test, migration trên DB sạch + DB cũ, authz + data scope integration test, idempotency, audit, UI theo loại công việc, monitoring, demo thật, E2E vertical slice.

EpicTênModuleWaveMD
E0Platform Core & ObservabilityM01, 440
E1Auth & RBACM1135
E2Worker Portal + PWAM23–450+20
E3CRM, Projects & Staffing OrderM31, 355
E4Vendor Portal + Confirm/DisputeM4325
E5Talent Pool, Source Claims & DedupM51–345
E6CTV Portal & Commission LedgerM63–445
E7Attendance Import & TimesheetM72–350
E8Payroll, Pay Run & StatementsM82, 465
E9HRM (Nhân sự nội bộ)M9Sau core40
E10Sprint 0 (discovery + 2 spike)010
E11UAT MVPUAT10
Tổng in-horizon (M0–M8 + UAT)≈ 490

≈ 490 MD = 470 module/PWA + Sprint 0 (10) + UAT (10) — đồng bộ UNIFIED_PLAN v4.22 sau G13/G16/G22.

§0.1 — 64 tính năng (đánh số theo plan)

Tất cả những gì hệ thống sẽ làm

64 feature ID nhóm A→H. Trạng thái: đã làm = có code + test xanh · phê duyệt = đã chốt trong plan (P0/P1 theo V4 §5) · đề xuất = P2 / ngoài MVP.

Nhóm A — Worker Portal (16 feature)
IDTênModuleTrạng thái
A-01Đăng nhập mật khẩuM1 · M2phê duyệt
A-01bĐăng nhập Zalo (flag)M1phê duyệt · feature flag
A-01cOTP step-up & reset MKM1phê duyệt
A-01dHR reset MK (mặt vs CCCD)M1 · Adminphê duyệt
A-02Hoàn thiện ProfileM2 · M5phê duyệt
A-03Đăng ký nhanh (CCCD + họ tên + MK)M2phê duyệt
A-04Bảng tin việc làm (job board)M2 · M3phê duyệt · Wave 1 sau M3 (Q#23)
A-05Ứng tuyển 1 chạmM2phê duyệt
A-06Xem thông tin dự ánM2 · M3phê duyệt
A-07Chấm công in-site (máy vật lý)M7đề xuất · ngoài MVP
A-08Check-in ngoài site (GPS)M7phê duyệt
A-09Lịch sử chấm côngM2 · M7phê duyệt
A-10Phiếu lương (snapshot)M2 · M8phê duyệt
A-11Đề nghị tạm ứng (2 bước)M2 · M7phê duyệt
A-12Phản ánh / Khiếu nạiM7phê duyệt
A-13Cập nhật Bank/CCCD/SĐTM2phê duyệt
Nhóm B — CTV (6 feature)
IDTênModuleTrạng thái
B-01Đăng ký CTVM6phê duyệt
B-02Nhập người được giới thiệuM6 · M5phê duyệt
B-03Dashboard theo dõiM6phê duyệt
B-04Lịch sử hoa hồng (ledger)M6 · M8phê duyệt
B-05Thông báo Zalo/SMS (flag)M6phê duyệt
B-06Link giới thiệu (first-click wins)M6 · M5phê duyệt
Nhóm C — Vendor Portal (7 feature)
IDTênModuleTrạng thái
C-01Đăng nhập Vendor (subdomain)M4phê duyệt
C-02Xem Staffing OrderM4 · M3phê duyệt
C-03Nộp ứng viênM4 · M5phê duyệt
C-04Xem trạng thái (lý do từ chối)M4phê duyệt
C-05Confirm/Dispute statementM4 · M8phê duyệt
C-06Xuất biên bản (PDF/Excel)M4 · M8phê duyệt
C-07Kho hồ sơ vendor (nộp 1 chạm)M4 · M5phê duyệt
Nhóm D — CRM & Dự án (9 feature)
IDTênModuleTrạng thái
D-01CRUD Khách hàng (client_company)M3phê duyệt
D-02CRUD Dự án (outsourcing_project)M3phê duyệt
D-02bCRUD Staffing Order (vị trí, ca, SL)M3phê duyệt
D-03Quản lý Pipeline (list đơn giản)M3phê duyệt
D-04CRUD Máy chấm công (adapter)M7đề xuất · sau core
D-05Gán nhân sự (PLANNED→ACTIVE)M3 · M5phê duyệt
D-05bChuyển dự án hàng loạtM3phê duyệt
D-06Import từ Vendor (merge)M3 · M5 · M4phê duyệt
D-07PM Field App (PWA hiện trường)M3 · M7phê duyệt
Nhóm E — Talent Pool & ATS (9 feature)
IDTênModuleTrạng thái
E-01Hồ sơ NLĐ (master + edit history)M5phê duyệt
E-02Vòng đời trạng thái (5 SM)M5phê duyệt
E-03Phân loại nguồn gốc (source_claims)M5phê duyệt
E-04Bộ lọc nâng cao (tuổi/khu vực/kỹ năng)M5phê duyệt
E-05Xuất ExcelM5phê duyệt
E-06Lịch sử tương tác (note/call)M5phê duyệt
E-07Dedup/merge (≥2/3 khóa khớp)M5phê duyệt
E-08Referral Guard (chặn CCCD)M5 · M6phê duyệt
E-09AWOL detection (≥3 ngày)M5phê duyệt
Nhóm F — Vận hành & T&A (6 feature)
IDTênModuleTrạng thái
F-01Webhook máy chấm công (adapter)M7đề xuất · sau core
F-02Giao diện chốt công (3 tầng)M7phê duyệt
F-03Tách công HRP vs VendorM7 · M8phê duyệt
F-04Xử lý ticket (phản ánh, tạm ứng)M7phê duyệt
F-05Check-in GPS log (evidence + risk flag)M7phê duyệt
F-06SOP ngoại lệ (mất điện, adj.)M7phê duyệt
Nhóm G — Lương & Thanh toán (7 feature)
IDTênModuleTrạng thái
G-01Tính lương HRP (pay run)M8phê duyệt
G-02Đối soát Vendor (statement)M8phê duyệt
G-02bBilling Client (statement riêng)M8phê duyệt
G-03Hoa hồng CTV (PER_HEAD + ledger)M8 · M6phê duyệt
G-04Xuất file lương ExcelM8phê duyệt
G-05Quản lý công nợM8phê duyệt
G-06Dashboard doanh thu tạm tínhM8 · M7phê duyệt
Nhóm H — HRM Nội bộ (4 feature · sau core)
IDTênModuleTrạng thái
H-01CRUD nhân viên nội bộM9đề xuất · sau core
H-02Sơ đồ tổ chức (org chart)M9đề xuất · sau core
H-03RBAC (Roles + Permissions)M1 · M9phê duyệt
H-04Data-level security (scope + handover)M1 · M5 · M9phê duyệt
§4.5.2 — Worker API

Bảy endpoint thôi — đủ cho cả app NLĐ

Tất cả API Worker (/api/m/*) đều ẩn trước worker các trường nhạy cảm: clientCompanyId, vendorId, agreedRateVnd, cccdChipData, internalNotes, riskStatus, bhxhAmount/pitAmount/taxableIncome/payRunId. Hai lớp chặn: L1 Prisma withAuthScope + L2 Postgres RLS.

EndpointMục đíchFields top-levelHidden từ worker
GET /api/m/home"Hôm nay của tôi"worker, today, thisMonth, unreadCount, quickActionsclientCompanyId, vendorId, agreedRateVnd
GET /api/m/shifts?week=Lịch tuầnweekRange, shifts[], summaryassignedRateVnd, projectCode
GET /api/m/payslips?month=Phiếu lươngearnings[], totalEarnings, netPay, history[]bhxhAmount, pitAmount, taxableIncome, payRunId
GET /api/m/notificationsThông báounreadCount, notifications[]actorRole, retryCount, scheduledAt
POST /api/m/notifications/:id/readĐánh dấu đã đọc204 No Content
GET /api/m/ticketsĐơn của tôitickets[]workerId, reviewerId, version
GET /api/m/profileHồ sơfullName, phone, nationalId (mask), bankAccount (masked)cccdChipData, internalNotes, riskStatus
§12.5 — Tính lương VN

Một ca golden — đi qua 5 bước, không bao giờ âm

NLĐ gross 25.000.000đ/tháng, 1 người phụ thuộc (NPT). Toàn bộ BHXH/TNCN theo Luật 2025 — chốt số từng đồng.

1

BHXH NLĐ (10.5%)

8% BHXH + 1.5% BHYT + 1% BHTN

2.625.000đ

2

Giảm trừ bản thân

Theo Luật TNCN

11.000.000đ

3

Giảm trừ NPT (1 người)

Đăng ký đúng mẫu 02/05

4.400.000đ

4

Thu nhập chịu thuế

Gross − BHXH − giảm trừ

6.975.000đ (bậc 2, 10%)

5

TNCN phải nộp

10% × 6.975.000 − 0.25tr

447.500đ

NET

Thực nhận NLĐ

Gross − BHXH − TNCN

21.927.500đ

BHXH doanh nghiệp (cost-to-co): 22% = 17.5% BHXH + 3% BHYT + 1% BHTN + 0.5% BHTNLD = 5.500.000đ. Chi phí tổng một lao động gross 25M = 30.500.000đ.

29 payroll_config keys (§12.5.1 — một số dòng gộp nhiều key)

KeyTypeDefaultNguồn
OVERTIME_TOLERANCE_MINNUMBER15Odoo
OT_15_RATEMULTIPLIER1.5Odoo
OT_20_RATEMULTIPLIER2.0BLLĐ 2019
OT_30_RATEMULTIPLIER3.0BLLĐ 2019 (ngày lễ)
STANDARD_HOURS_PER_DAYNUMBER8Nội bộ
STANDARD_DAYS_PER_MONTHNUMBER26Nội bộ
MIN_WAGE_REGION_1..4MONEY4.960/4.410/3.860/3.450 (nghìn đ)NĐ 74/2024
INSURANCE_SALARY_CAPMONEY99.200.000Luật BHXH
TNCN_GIAM_TRU_BAN_THANMONEY11.000.000Luật TNCN
TNCN_GIAM_TRU_NGUOI_PHUC_THUOCMONEY4.400.000Luật TNCN
BHXH/BHYT/BHTN_RATE_EMPLOYEEPERCENT0.08 / 0.015 / 0.01QĐ BHXH
BHXH/BHYT/BHTN/BHTNLD_RATE_EMPLOYERPERCENT0.175 / 0.03 / 0.01 / 0.005Luật BHXH
REFERRAL_GUARD_DAYSNUMBER7V4.3 G11
AWOL_THRESHOLD_DAYSNUMBER3V4.10 G18-B5
PIT_FLAT_RATEPERCENT0.10V4.10 G18-B6
PIT_FLAT_THRESHOLD_VNDMONEY2.000.000V4.10 G18-B6
PIT_FLAT_MONTHLY_AGGREGATIONBOOLEANtrueV4.11 G19-B9
DEBT_RECOVERY_MAX_PERCENTPERCENT0.30V4.11 G19-B7
INSURANCE_MIN_WORK_DAYSNUMBER14V4.12 G20-B10
IMPORT_MAX_RETRYNUMBER3V4.13 G21-T15
COMMISSION_NETTING_ENABLEDBOOLEANtrueV4.13 G21-B14
§18 — Hạ tầng

Ba giai đoạn, từ free đến tự chủ

Không cần đốt tiền ngày đầu. MVP chạy trên free tier, lên production khi có khách thật, và về VPS riêng khi cần kiểm soát data + tiết kiệm dài hạn.

GĐ1 · MVP

Vercel Hobby · Neon Free · R2

~$0–10/tháng

  • Vercel Hobby (hobby project, 100 GB bandwidth)
  • Neon Free (0.5 GB Postgres)
  • Cloudflare R2 (backup + S3-compatible)
  • Mục tiêu: MVP nội bộ 23/11/2026
GĐ2 · Production

Vercel Pro · Neon Pro · Upstash · Sentry

~$60–90/tháng

  • Vercel Pro + WAF + DDoS
  • Neon Pro (autoscaling + PITR)
  • Upstash Redis (cache + rate limit)
  • Sentry (error tracking)
  • Mục tiêu: có ≥10 khách thật
GĐ3 · Ownership

AWS Lightsail/EC2 Singapore · VNG/Viettel IDC · Coolify

~$70–120/tháng + vận hành

  • VPS Singapore (latency ~30ms tới VN)
  • Hoặc VNG Cloud / Viettel IDC (data ở VN)
  • Coolify self-host Next.js + Postgres + Redis
  • Backup daily Neon → R2, RPO ≤ 24h, RTO ≤ 4h
Nguồn tuyển

Một người = một hồ sơ, chống tranh chấp tự động

Một lao động có thể được nhiều người tiến cử (HR/Sale, Vendor, CTV). Hệ thống dùng CCCD làm chìa khóa: biết đã có trong dữ liệu chưa, do ai đưa vào, ai đang hưởng hoa hồng — và tự động chặn người nộp sau. CTV/Sale có link giới thiệu riêng để rải — người đăng ký theo link nào tự ghi nguồn cho chủ link đó, vẫn chịu đầy đủ luật chặn.

Đã có người tiến cử trong 7 ngày qua

Kể cả hồ sơ đang chờ duyệt hay đã bị từ chối. Người đầu tiên có 7 ngày xử lý; sau đó nếu bị từ chối hoặc bỏ lửng → người khác mới được tiến cử lại. Số ngày điều chỉnh được.

Đang có người hưởng hoa hồng

CTV giới thiệu còn quyền lợi (người lao động vẫn đang làm) → không ai khác được nhận người này làm nguồn của mình.

Đang hưởng lương từ vendor

Lao động đang được đối tác cung ứng trả lương → không được chuyển nguồn, tránh cướp người giữa các đối tác.

Nguồn của chính mình thì nộp lại thoải mái

Vendor/CTV nộp lại nhân sự trong kho của chính mình — không phải nhập lại. Luật chặn chỉ áp dụng với nguồn KHÁC; người đang đi làm thì chuyển qua HR điều chuyển.

Link giới thiệu của CTV/Sale

Mỗi CTV/Sale có link riêng để rải. Người đăng ký theo link nào tự ghi nguồn cho chủ link — bấm nhiều link chỉ tính cái đầu tiên, hiệu lực 30 ngày. Kể cả khi Zalo tự xóa cookie, mã vẫn được giữ (theo link + ô điền tay). Vẫn chịu đầy đủ các luật chặn ở trên.

HR thêm tay khi cần — có quy tắc rõ ràng

Ba trường hợp hợp lệ (đối tác đưa người thật đến xưởng / hồ sơ đầu bỏ lửng / hợp đồng hết hạn) kèm bằng chứng, lưu dấu vết và thống kê hàng tuần chống thiên vị.

Nộp hồ sơVendor/CTV nộp trên cổng, CTV/Sale rải link, hoặc lao động tự đăng ký.
Đối chiếu CCCDHệ thống tự kiểm tra: đã có trong dữ liệu chưa? đang bị luật chặn nào không? Gộp hồ sơ chỉ khi khớp ít nhất 2/3 thông tin (CCCD, họ tên, ngày sinh) — khớp 1 mình phải HR duyệt tay để tránh gộp nhầm người.
HR duyệtBa kết quả: tạo hồ sơ mới · gộp vào hồ sơ cũ · từ chối kèm lý do (người nộp nhìn thấy).
Thành hồ sơ chính thứcGhi rõ nguồn đưa vào — ai giới thiệu được hưởng hoa hồng khi đến mốc.
Vendor nộp hồ sơ — ví dụ ứng viên Nguyễn Văn An từ Vendor Long Vân
sequenceDiagram
  autonumber
  actor V as 🏢 Vendor Long Vân
  participant VP as 🌐 Cổng vendor
  participant SYS as ⚙️ HRP Core
  participant HR as 👔 HR
  actor NLD as 👷 Ứng viên
  participant P as 📱 App HRP
  V->>VP: Đăng nhập (tài khoản vendor riêng)
  V->>VP: Upload hồ sơ: tên, CCCD, SĐT, ảnh
  VP->>SYS: POST /api/vendors/applicants
  SYS->>SYS: Check 1: tiến cử 7 ngày?
  SYS->>SYS: Check 2: đang hưởng hoa hồng?
  SYS->>SYS: Check 3: đang hưởng lương vendor?
  alt Trùng 1 trong 3 điều kiện
    SYS-->>VP: ❌ BLOCKED + lý do
    VP->>V: Ứng viên đã có người tiến cử
  else OK
    SYS->>HR: 🔔 Hồ sơ mới
    HR->>NLD: SMS + Zalo nhận hồ sơ
    NLD->>P: Đăng ký bằng CCCD
    P->>SYS: Xác nhận đúng người
    HR->>SYS: ✅ Duyệt → MATCHED
    SYS-->>VP: Hồ sơ đã duyệt
    alt Sau 30 ngày làm liên tục
      SYS-->>VP: 💰 Hoa hồng giữ chân
    end
  end
Duyệt đơn

Tạm ứng qua hai chữ ký

Ba loại đơn trong một hệ thống: phản ánh sai công · tạm ứng · xin nghỉ. HR quyết định "có hợp lệ không", Kế toán quyết định "chi từ quỹ" — tiền chỉ chuyển vào tài khoản ngân hàng đã xác thực. Mỗi đơn có hạn xử lý tự động theo mức khẩn (Auto SLA: URGENT 4h · HIGH 24h · NORMAL 48h · LOW 72h) và hệ thống tự nhắc người phụ trách khi sắp trễ.

Người lao động tạo đơnTạm ứng / phản ánh sai công / xin nghỉ — vài chạm trên app.
HR xác nhận hợp lệĐối chiếu công, hạn mức. Có thể từ chối kèm lý do hoặc người lao động tự rút đơn.
Kế toán duyệt chiChi từ quỹ vào đúng tài khoản đã xác thực — ghi dấu vết từng bước.
Trạng thái đơn — đi qua 2 chữ ký
stateDiagram-v2
  [*] --> CHODUYET: Người lao động tạo đơn
  CHODUYET --> HRXACNHAN: HR xác nhận hợp lệ
  CHODUYET --> TUCHOI: Từ chối (ghi lý do)
  CHODUYET --> RUTDON: Tự rút đơn
  HRXACNHAN --> DUYET: Kế toán duyệt chi
  HRXACNHAN --> TUCHOI
  HRXACNHAN --> RUTDON
  DUYET --> DACHI: Kế toán chi tiền
  DUYET --> DONG: Đóng đơn
  DACHI --> DONG
  DONG --> [*]
Đơn tạm ứng chạy từ app về đến tài khoản ngân hàng
sequenceDiagram
  autonumber
  actor NLD as 👷 Người lao động
  participant APP as 📱 App HRP
  participant HR as 👔 HR
  participant KT as 💰 Kế toán
  participant BANK as 🏦 Ngân hàng
  participant AUD as 📋 Audit log
  NLD->>APP: Tạo đơn tạm ứng 2.000.000 đ
  APP->>APP: Validate hạn mức theo policy/project (Q#8)
  APP->>HR: 🔔 HĐ-2026-0089 chờ duyệt
  HR->>APP: Xem hồ sơ + lịch sử đơn
  HR->>APP: ✅ Xác nhận hợp lệ
  HR->>AUD: Ghi HR xác nhận 14:32
  HR->>KT: 🔔 Kế toán duyệt chi
  KT->>APP: Kiểm tra quỹ tạm ứng
  KT->>APP: ✅ Duyệt chi
  KT->>AUD: Ghi KT duyệt 15:10
  KT->>BANK: Chuyển 2.000.000 đ → STK ****5678
  BANK-->>KT: ✅ Thành công
  KT->>APP: Trạng thái = ĐÃ CHI
  APP->>NLD: 🔔 Đã chuyển vào VCB ***5678
  APP->>AUD: Ghi đóng đơn 15:14
Đăng nhập & bảo mật

Đơn giản cho người dùng, chặt chẽ cho dữ liệu

Đăng nhập bằng mã + mật khẩu

Mã nhân viên tại dự án / mã HRP / CCCD + mật khẩu đặt lúc đăng ký. Đổi SIM không mất tài khoản; Zalo là cách đăng nhập phụ tiện lợi.

Việc nhạy cảm cần xác nhận thêm

Đổi số tài khoản, đổi CCCD, sửa hồ sơ → xác nhận thêm bằng OTP hoặc nhờ HR — tiền lương luôn về đúng tài khoản đã xác thực.

Quên mật khẩu vẫn cứu được

Mất cả mật khẩu lẫn SIM: HR đối chiếu khuôn mặt với ảnh CCCD trong hồ sơ rồi cấp mật khẩu tạm — mọi thao tác đều lưu dấu vết.

Chống đoán mật khẩu

Sai 5 lần khóa 15 phút. Mỗi người chỉ thấy dữ liệu của chính mình; hồ sơ CCCD lưu riêng và mọi lượt xem đều có dấu vết.
Nguyên tắc

Tám nguyên tắc không thể phá vỡ

1 người = 1 CCCD = 1 hồ sơ

Dù vào từ nhiều nguồn — hệ thống gộp về đúng một hồ sơ; tại một thời điểm chỉ làm ở 1 dự án.

Nguồn tuyển có chủ quyền

Ai đưa người vào được ghi rõ; người nộp sau bị chặn tự động theo luật.

Đã chốt là không sửa

Kỳ công, bảng lương, biên bản đối soát — sau khi khóa chỉ điều chỉnh kỳ sau kèm lý do.

Tiền về đúng tài khoản đã xác thực

Không tự đổi được số tài khoản — muốn đổi phải xác nhận thêm hoặc nhờ HR. Không bao giờ có lương âm.

Vendor chỉ nộp hồ sơ

Mọi ứng viên đều qua HR duyệt — tránh hồ sơ rác và tranh chấp.

Người lao động chỉ thấy số nhận

Chi tiết BHXH, thuế chỉ kế toán xem — tránh hiểu lầm "sao lương bị trừ".

Đăng nhập bằng mã + mật khẩu

Mã nhân viên dự án / mã HRP / CCCD + mật khẩu. Đổi SIM không mất tài khoản; sai 5 lần khóa 15 phút.

Hồ sơ cá nhân được bảo vệ

Ảnh CCCD, ảnh chân dung lưu riêng; mọi lượt xem đều có dấu vết.

§7.2 — Lộ trình (v4.20)

Từ số 0 đến vận hành — Go-live MVP 23/11/2026

Ưu tiên vận hành nội bộ trước (~12 tuần), mở 3 cổng bên ngoài sau, đầy đủ tài chính vào tháng 2/2027. Mỗi giai đoạn có milestone cụ thể, không chạy đoán.

Sprint 0 · 2 tuầnDiscoveryThu thập dữ liệu thật + 2 spike kỹ thuật. ~10 MD.
Wave 1 · 5 tuầnBackbone vận hànhM0 + M1 + M3 core + M5 core + A-04 Job board. ~90 MD.
Wave 2 · 4 tuầnChấm công & Đối soátM7 import/chốt + M8 tối giản (rate/statement/export). ~80 MD.
UAT · 2 tuầnChạy thử dữ liệu thậtSửa exception, phân quyền, training.
23/11/2026Go-live MVP nội bộMốc quan trọng đầu tiên — 5.000 LĐ chạy thật.
Wave 3 · 7 tuầnMở 3 cổng bên ngoàiWorker Portal + PWA · Vendor · CTV · M3 hoàn thiện · M5 dedup · M7 ticket · PM Field App. ~145 MD.
Wave 4 · 4–5 tuầnTài chính đầy đủPay run, payslip, reports, commission ledger, M0 hardening. ~90 MD.
22/02/2027Go-live M0–M8 đầy đủMốc thứ hai — SaaS-ready.
Sau core · 4 tuầnM9 HRM + mở rộngRBAC nội bộ nâng cao, sơ đồ tổ chức, mở rộng theo điều kiện thị trường.
Phase ComplianceTNCN/BHXH phức tạpDependent/NPT, mẫu 02/05/07/TK1-TS, báo cáo BHXH, quyết toán, cam kết 02.
Lộ trình triển khai — Gantt
gantt
  title HRP v4.20 — Lộ trình triển khai
  dateFormat YYYY-MM-DD
  axisFormat %d/%m
  section Sprint 0 — Discovery (2 tuần)
  Dữ liệu thật + state model + 2 spike :s0, 2026-08-24, 14d
  section Wave 1 — Backbone vận hành (~90 MD)
  M0 Platform + M1 Auth + M3 core + M5 :w1a, 2026-09-07, 35d
  A-04 Job board công cộng (kéo về W1, Q#23) :w1b, after w1a, 14d
  section Wave 2 — Chấm công & Đối soát (~80 MD)
  M7 import/chốt + M8 tối giản :w2, 2026-10-12, 28d
  section UAT MVP (2 tuần)
  Chạy dữ liệu thật + đào tạo :uat, 2026-11-09, 14d
  Go-live MVP nội bộ :milestone, 2026-11-23, 0d
  section Wave 3 — Mở 3 cổng bên ngoài (~145 MD)
  Worker Portal + PWA + GPS :w3a, 2026-11-23, 21d
  Vendor Portal :w3b, after w3a, 21d
  CTV Portal core :w3c, after w3b, 14d
  M3 hoàn thiện + M5 dedup/export :w3d, after w3c, 14d
  M7 ticket (ticket workflow hoàn chỉnh) :w3e, after w3d, 14d
  PM Field App (PWA hiện trường) :w3f, after w3e, 14d
  section Wave 4 — Tài chính đầy đủ (~90 MD)
  M8 đầy đủ (pay run, payslip, reports) :w4a, 2027-01-18, 28d
  M6 commission ledger :w4b, after w4a, 14d
  M0 hardening :w4c, after w4b, 14d
  Go-live M0–M8 đầy đủ :milestone, 2027-02-22, 0d
  section Sau core (~40 MD)
  M9 HRM + mở rộng theo điều kiện :m9, 2027-02-22, 28d
  section Phase Compliance (sau cùng)
  TNCN/BHXH phức tạp (mẫu 02/05/07/TK1-TS) :comp, after m9, 21d
Cho cuộc họp

Những điều cần lãnh đạo quyết — trạng thái theo V4 §21

Thiết kế đã khép kín — đa số điểm dưới đây đã được chốt trong V4 §21/G28; Q#24, Q#25 chốt ngày 16/08 (V4.22); chỉ còn dữ liệu mẫu là mở:

Mức hoa hồng CTV

✅ ĐÃ CHỐT (G28 · Q#2): PER_HEAD theo mốc giữ chân — mức là dữ liệu động, set trong admin panel (quyền ROOT/DIRECTOR).

Hạn mức tạm ứng

✅ ĐÃ CHỐT (Q#8): hạn mức config theo project/policy — không có % cố định; 2 bước HR xác nhận + KT duyệt chi.

Lịch chốt & trả lương

✅ ĐÃ CHỐT (Q#24 · V4.22): 80 đơn vị sử dụng lao động, phụ thuộc ngày trả lương riêng từng đơn vị → cut-off/pay day config theo từng khách hàng/payroll group.

Khách hàng xác nhận đối soát thế nào?

✅ ĐÃ CHỐT (Q#25 · V4.22): khách hàng ký bản cứng; hệ thống tự sinh statement PDF sẵn sàng để in; KT ghi nhận kết quả thủ công có audit.

Quy mô thực tế

✅ ĐÃ CHỐT (Q#6): thiết kế cho 5.000 lao động, load-test 20.000.

Bán kính chấm công GPS

✅ ĐÃ CHỐT (Q#10): config theo site (200m chỉ là default) + luôn có accuracy check + exception workflow.

Phụ cấp miễn thuế

✅ ĐÃ CHỐT (Q#4): tính theo luật mặc định (is_taxable trên allowance); phần phức tạp → Phase Compliance.

Lao động vãng lai & cam kết 02

✅ ĐÃ CHỐT (Q#4): vãng lai ≥2tr/lần khấu trừ 10% tại nguồn; cam kết 02 → Phase Compliance.

Dữ liệu mẫu từ kế toán

⏳ CÒN MỞ: 2–3 file chấm công thật + 2 kỳ đối soát đã chốt — phải có TRƯỚC Sprint 1 (Q#9), cần đầu mối cung cấp.

Phân vai duyệt

✅ ĐÃ CHỐT (Q#12): HR_STAFF theo team/branch/phân công; HR_MANAGER toàn cục + handover có audit.

Sẵn sàng vận hành nội bộ trong ~12 tuần

Thiết kế hoàn chỉnh — chỉ còn chờ dữ liệu thật của bạn để bắt đầu.

Liên hệ HRP