Quản Lý Dự Án Và Nhân Sự Với Odoo 20: Kiến Trúc Dữ Liệu Từ Timesheet Đến Work Entry, Ca Làm Việc Và Bảng Lương
Trong các doanh nghiệp vận hành theo dự án hoặc theo ca, thời gian làm việc thường được ghi nhận ở nhiều nơi: bảng Kanban của ứng dụng dự án, file Excel tổng hợp chấm công, phần mềm chấm công riêng và bảng lương cuối kỳ. Mỗi nơi một cấu trúc dữ liệu, mỗi nơi một người phụ trách, và mỗi kỳ lương lại bắt đầu bằng một vòng đối chiếu thủ công kéo dài nhiều ngày. Khi số dự án song song tăng, chi phí của vòng đối chiếu này tăng theo, dù không xuất hiện trên bất kỳ khoản mục chi phí nào.
Odoo 20 nối các ứng dụng Project, Timesheets, Planning, Attendances, Time Off và Payroll thành một mô hình dữ liệu duy nhất, trong đó timesheet là bản ghi gốc của thời gian thực tế, work entry là lớp trung gian chuẩn hóa dữ liệu trước khi Payroll tiêu thụ, và Planning là nguồn dữ liệu về ca làm việc. Kiến trúc này được khảo sát trong bài viết dưới đây theo từng lớp: mô hình dữ liệu timesheet, chỉ báo tỷ lệ tính phí, ứng dụng Project và bảng điều khiển lợi nhuận, ứng dụng Planning, lớp work entry, bảng lương, rồi đến các bước di chuyển dữ liệu và các cấu hình dễ bỏ sót khi đưa hệ thống vào vận hành.
📑 Mục Lục
- Dòng dữ liệu nền tảng: timesheet là bản ghi gốc
- Chỉ báo tỷ lệ tính phí và bảng xếp hạng
- Ứng dụng Project trong Odoo 20
- Ứng dụng Planning: ca làm việc, vai trò và Auto Plan
- Work entry: cấu trúc trung gian giữa timesheet và bảng lương
- Bảng lương và cấu trúc lương
- Di chuyển dữ liệu và các cấu hình dễ bỏ sót
Dòng Dữ Liệu Nền Tảng: Timesheet Là Bản Ghi Gốc
🗂️ Mô hình dữ liệu của một timesheet
Một bản ghi timesheet trong Odoo 20 gồm bốn thành phần chính: nhân viên, dự án (kèm nhiệm vụ tùy chọn), mô tả công việc và số giờ. Mọi ứng dụng khác trong nhóm — từ Project đến Payroll — đều đọc từ các bản ghi này thay vì từ một bảng tổng hợp riêng. Điều kiện tiên quyết để một người dùng được phép ghi timesheet là tài khoản của người đó phải được đăng ký làm nhân viên (employee) trong hệ thống; user chưa gắn với hồ sơ nhân sự sẽ không thể ghi nhận thời gian.
Quyền truy cập vào ứng dụng Timesheets được cấu hình ở cấp người dùng, với bốn mức: không truy cập; chỉ ghi và xem timesheet của chính mình; ghi timesheet của mình và xem, sửa, xác nhận timesheet của toàn bộ nhân viên; hoặc mức quản trị viên kèm quyền truy cập vào menu cấu hình. Việc phân quyền này cho phép một nhóm chỉ nhìn dữ liệu của nhóm, trong khi cấp quản lý dự án nhìn toàn bộ danh sách cần xác nhận.
📊 Lưới timesheet và các chỉ báo màu
Màn hình mặc định của ứng dụng Timesheets là lưới theo ngày hoặc theo tháng: mỗi hàng là một dự án, mỗi cột là một ngày, mỗi ô là số giờ đã ghi. Tổng số giờ của từng ngày được tô màu so với giờ làm việc kỳ vọng của nhân viên: màu xanh lá khi đúng số giờ, màu đỏ khi thiếu, màu nâu khi vượt. Tổng số giờ của kỳ cũng được tô màu theo cùng nguyên tắc. Ô tô màu nhạt thể hiện các bản ghi được hệ thống đề xuất dựa trên các nhiệm vụ đã phân công, hạn chót và dữ liệu timesheet trong quá khứ — một cơ chế nhắc nhở để các khoảng trống trong lưới được lấp đầy trước khi kỳ lương đóng.
Ví dụ, khi một nhiệm vụ thuộc dự án A được phân công cho một nhân viên và nhân viên đó chưa ghi bất kỳ giờ nào cho dự án A trong tuần, lưới timesheet sẽ hiển thị một dòng đề xuất cho dự án A với số giờ trống. Nhân viên chỉ cần điền số giờ thực tế vào ô tương ứng, và bản ghi sau đó tham gia quy trình xác nhận như mọi bản ghi khác.
⏱️ Ba cách ghi timesheet và cờ billable
Odoo 20 cung cấp ba cách ghi timesheet. Thứ nhất, đồng hồ định thời (timer): timer khởi động khi người dùng check-in, và khi dừng timer, một hộp thoại cho phép chọn dự án, nhiệm vụ, mô tả và số giờ trước khi tạo bản ghi. Thứ hai, nhập tay trực tiếp vào lưới: chọn ô tương ứng của dự án và ngày, điền số giờ, kèm nhiệm vụ và mô tả tùy chọn. Thứ ba, ghi ngay từ nhiệm vụ trong ứng dụng Project hoặc ticket trong Helpdesk, bằng nút bắt đầu và dừng hoặc bằng tab timesheet của bản ghi.
Với các dự án tính phí theo thời gian và vật tư (time and materials), mỗi bản ghi có thể được đánh dấu billable và gắn với một dòng đơn hàng bán (sales order item). Hai thuộc tính này là điều kiện để bản ghi timesheet được đưa vào hóa đơn của khách hàng, và cũng là điều kiện để nó xuất hiện ở mục doanh thu trên bảng điều khiển lợi nhuận của dự án — nội dung được xem xét trong một phần sau.
Chỉ Báo Tỷ Lệ Tính Phí Và Bảng Xếp Hạng
🎯 Mục tiêu giờ tính phí theo tháng
Tính năng chỉ báo tỷ lệ tính phí (billing rate indicators) cho phép đặt một mục tiêu giờ tính phí hàng tháng cho từng nhân viên, ghi nhận theo giờ hoặc theo ngày tùy phương pháp mã hóa được chọn trong cài đặt. Khi tính năng được bật, chỉ báo hiển thị ở góc trên của màn hình timesheet ở các dạng Kanban, lưới và danh sách, theo định dạng số giờ tính phí đã ghi trên mục tiêu. Tỷ lệ hoàn thành được tô đỏ khi dưới mục tiêu và xanh lá khi đạt mục tiêu, bên dưới là tổng số giờ đã ghi trong tháng.
🏆 Bảng xếp hạng giờ tính phí
Bảng xếp hạng tỷ lệ tính phí (billing rate leaderboard) hiển thị ba nhân viên có tỷ lệ giờ tính phí cao nhất trong nhóm, kèm số giờ đã ghi của người dùng đang đăng nhập. Một bảng xếp hạng tổng thời gian (total time leaderboard) cho phép chuyển đổi để xem tổng giờ ghi nhận trên cả dự án tính phí lẫn dự án nội bộ. Cả hai bảng nằm trong cùng một vị trí giao diện, ngay cạnh chỉ báo tỷ lệ tính phí.
💬 Gợi ý động viên theo ngày
Bên cạnh bảng xếp hạng, các gợi ý động viên ngắn (motivational tips) có thể được tạo và chỉnh sửa trong menu cấu hình của ứng dụng Timesheets. Một gợi ý được chọn ngẫu nhiên hiển thị mỗi ngày, và nội dung do quản trị viên định nghĩa hoàn toàn trong hệ thống.
Ứng Dụng Project Trong Odoo 20
📋 Kanban, cấu hình dự án và quyền nhìn
Ứng dụng Project sử dụng hệ thống Kanban: mọi dự án được chia thành các nhiệm vụ (task), mỗi nhiệm vụ nằm trên một cột thể hiện giai đoạn sản xuất hiện tại. Thẻ dự án chứa các thuộc tính chính: người quản lý dự án, ngày dự kiến, tổng giờ phân bổ, khách hàng, công ty và các thẻ phân loại. Quyền nhìn của dự án có ba mức: chỉ người dùng nội bộ được mời (riêng tư), mọi người dùng nội bộ, hoặc mọi người dùng nội bộ kèm người dùng cổng (portal) được mời. Người dùng bên ngoài có thể được mời với ba chế độ truy cập: chỉ đọc, sửa có giới hạn (chỉ sửa nhiệm vụ mà người đó theo dõi), hoặc sửa toàn bộ.
Thanh công cụ phía trên (top bar) của mỗi dự án cho phép thêm các nút truy cập nhanh đến các bản ghi liên quan — timesheet, đơn hàng bán, hóa đơn, tài liệu, bảng điều khiển — mà không cần rời khỏi ứng dụng Project. Các bộ lọc và nhóm xem tùy chỉnh có thể được lưu lại dưới dạng nút chia sẻ cho cả nhóm.
💰 Bảng điều khiển lợi nhuận dự án
Trên mọi dự án tính phí, bảng điều khiển lợi nhuận (profitability dashboard) hiển thị dữ liệu của tất cả các bản ghi gắn với dự án và tài khoản phân tích (analytic account) của dự án. Mỗi số liệu nằm trong ba cột kỳ vọng, chờ hóa đơn và đã hóa đơn: cột kỳ vọng chứa số liệu từ các đơn hàng bán hoặc mua hiện có; cột chờ hóa đơn nhận số liệu khi công việc hoặc hàng hóa đã được bàn giao (timesheet đã tạo hoặc xác nhận, phiếu giao hàng đã hoàn tất); cột đã hóa đơn nhận số liệu khi hóa đơn hoặc phiếu thanh toán nhà cung cấp được xác nhận.
Mục doanh thu gồm timesheet, vật tư, hóa đơn khách hàng, đăng ký định kỳ (subscriptions), khoản trả trước và chi phí được tính lại cho khách hàng. Mục chi phí gồm timesheet (chi phí tính theo mức lương của nhân viên), đơn hàng mua, vật tư, chi phí, phiếu thanh toán nhà cung cấp, lệnh sản xuất và các chi phí khác. Một bản ghi timesheet có thể đồng thời xuất hiện ở cả hai mục: ở doanh thu với số tiền khách hàng trả cho công việc, ở chi phí với số tiền lương trả cho nhân viên. Từ đó, lợi nhuận của dự án được đọc trực tiếp từ một màn hình duy nhất, không qua bước tổng hợp thủ công. Điều kiện để một bản ghi xuất hiện trên bảng điều khiển là bản ghi đó phải gắn với dự án và tài khoản phân tích của dự án.
🔗 Nhiệm vụ, phụ thuộc và sub-tasks
Quản lý nhiệm vụ trong Odoo 20 bao gồm các giai đoạn và trạng thái tùy cấu hình, sub-tasks để chia nhỏ công việc, nhiệm vụ định kỳ (recurring tasks) cho các công việc lặp lại theo chu kỳ, và phụ thuộc nhiệm vụ (task dependencies) để ràng buộc thứ tự giữa các nhiệm vụ. Các thuộc tính này của nhiệm vụ chính là nguồn dữ liệu cho cơ chế đề xuất timesheet đã nêu ở phần đầu: khi một nhiệm vụ được phân công và đến hạn, lưới timesheet sẽ đề xuất dòng tương ứng cho dự án chứa nhiệm vụ đó.
Ứng Dụng Planning: Ca Làm Việc, Vai Trò Và Auto Plan
🧩 Ca làm việc, nguồn lực và vai trò
Ứng dụng Planning quản lý lịch của đội ngũ thông qua các khái niệm: ca làm việc (shift) được phân bổ cho nguồn lực (resource), nguồn lực có thể là nhân viên hoặc tài sản vật chất (ví dụ thiết bị dùng chung), và vai trò (role) gắn với nguồn lực để tổ chức công việc. Vai trò có thể liên kết với dịch vụ trong ứng dụng Sales, để khi một dịch vụ được bán, hệ thống biết cần ca làm việc của vai trò nào. Trường thuộc tính (property field) có thể gắn với vai trò và xuất hiện trên form ca làm việc của mọi ca thuộc vai trò đó — ví dụ thông tin chứng chỉ hành nghề, vị trí làm việc hoặc ngôn ngữ phục vụ.
Mẫu ca làm việc (shift template) định nghĩa giờ bắt đầu, giờ kết thúc và phạm vi thời gian của ca, kèm vai trò; khi ứng dụng Project được cài đặt, mẫu ca có thể gắn với một dự án cụ thể. Người dùng mở ứng dụng Planning sẽ thấy lịch của chính mình; người dùng có quyền quản trị nhìn thêm các lịch theo nguồn lực, theo vai trò, theo dự án, theo đơn hàng bán, cùng các menu báo cáo và cấu hình.
📅 Dạng xem Gantt và các chỉ báo trực quan
Lịch trong Planning hiển thị ở dạng Gantt, cho phép gán lại, dời, thay đổi kích thước, tách đôi và nhân bản ca làm việc mà không cần mở từng ca. Màu sắc đầy đủ thể hiện ca đã lên lịch và đã công bố; sọc chéo thể hiện ca đã lên lịch nhưng chưa công bố; nền xám thể hiện nhân viên đang nghỉ; thanh tiến độ thể hiện ca đang diễn ra và có timesheet gắn kèm. Thanh tiến độ này chính là điểm nối trực quan giữa Planning và dòng dữ liệu timesheet: thời gian ghi nhận trong ca xuất hiện ngay trên lịch.
🤖 Auto Plan và mối nối với bảng lương
Chức năng Auto Plan tự động phân bổ các ca mở (open shifts) cho nhân viên dựa trên vai trò của họ; vai trò mặc định có ưu tiên khi nhân viên giữ nhiều vai trò. Nhân viên chưa được gán vai trò không thể được phân công tự động. Khi lịch được công bố, nhân viên chỉ nhận thông báo về các ca mở phù hợp với vai trò được gán.
Điểm nối quan trọng giữa Planning và Payroll nằm ở giờ làm việc và thời gian phân bổ: khi hợp đồng của nhân viên được cấu hình để sinh work entry dựa trên ca làm việc, giờ làm việc của Planning cùng tỷ lệ phân bổ của ca sẽ trực tiếp ảnh hưởng đến bảng lương. Đây là bước cấu hình quyết định xem dữ liệu ca có chảy vào dòng lương hay dừng lại ở lịch.
Work Entry: Cấu Trúc Trung Gian Giữa Timesheet Và Bảng Lương
🧾 Work entry là gì
Một work entry là một bản ghi riêng lẻ trong timesheet của một nhân viên. Work entry được cấu hình để bao quát mọi loại thời gian: công việc thường, nghỉ ốm, đào tạo, ngày lễ, tăng ca. Ứng dụng Payroll tự động tạo work entry dựa trên loại cấu trúc lương của nhân viên, và từ các ứng dụng Planning, Attendances và Time Off; ngoài ra work entry có thể được tạo thủ công khi có bản ghi bị thiếu. Với nhân viên hưởng lương theo giờ, các work entry chính là dữ liệu đầu vào để tính lương; với nhân viên hưởng lương cố định, cấu trúc lương xử lý theo cơ chế khác. Các loại work entry mặc định có thể được mở rộng bằng cách tạo thêm loại mới khi nhu cầu phát sinh.
⚠️ Bảng điều khiển work entry và xung đột
Bảng điều khiển Work Entries trong Payroll hiển thị toàn bộ work entry của từng nhân viên theo tháng, với bộ lọc mặc định chỉ hiện các work entry có xung đột (conflicting). Xung đột phát sinh khi một yêu cầu chưa được phê duyệt (nghỉ ốm, nghỉ phép) hoặc khi work entry có lỗi; các xung đột nằm trong kỳ lương đang xử lý bắt buộc phải được giải quyết trước khi bảng lương được tạo. Mỗi work entry có xung đột được đánh dấu bằng tam giác cam; mở bản ghi sẽ hiển thị chi tiết xung đột.
Loại xung đột phổ biến nhất liên quan đến yêu cầu nghỉ: khi work entry cho một khoảng thời gian đã được tạo sẵn, và một yêu cầu nghỉ cho cùng khoảng thời gian được đặt sau đó, hai bản ghi chồng lên nhau. Xung đột có thể được giải quyết trực tiếp trên work entry hoặc trong form chi tiết của yêu cầu nghỉ. Cơ chế này biến việc đối chiếu chấm công thành một danh sách việc cần làm có thể đo đếm được: bảng điều khiển về không nghĩa là kỳ lương sẵn sàng.
📈 Báo cáo phân tích work entry
Báo cáo Work Entry Analysis hiển thị dạng bảng động (pivot) các work entry đã xác nhận của tháng hiện hành, mặc định nhóm theo loại work entry và có thể nhóm thêm theo nhân viên, phòng ban hoặc công ty. Tính năng so sánh cho phép đặt kỳ hiện tại cạnh kỳ trước hoặc cùng kỳ năm trước, với cột biến động thể hiện mức thay đổi giữa hai kỳ. Một bộ lọc tùy chỉnh theo loại work entry — ví dụ chỉ hiện tăng ca — kết hợp với so sánh kỳ cho phép xác định nhân viên nào ghi nhận nhiều tăng ca nhất trong hai kỳ liền kề, mà không cần trích xuất dữ liệu ra bên ngoài.
Bảng Lương Và Cấu Trúc Lương
💵 Từ work entry đã giải quyết đến payslip
Quy trình bảng lương trong Odoo 20 bắt đầu từ các work entry đã được giải quyết xung đột, đi qua chu kỳ trả lương (pay run) và kết thúc bằng bảng lương (payslip) của từng nhân viên. Với hợp đồng tính lương theo work entry, số giờ trong kỳ quyết định mức lương; các loại work entry do cấu trúc lương sinh ra đảm bảo mỗi khoảng thời gian của nhân viên được gán đúng loại (làm việc, nghỉ ốm, đào tạo) trước khi tham gia tính lương. Quy trình này loại bỏ bước nhập tay giờ làm việc vào bảng lương: giờ đã được ghi ở lớp timesheet và lớp ca làm việc, và Payroll chỉ tiêu thụ kết quả của hai lớp đó.
📅 Nghỉ phép tự động tạo timesheet
Khi một yêu cầu nghỉ (time off request) được phê duyệt, hệ thống tự động tạo bản ghi timesheet cho khoảng thời gian nghỉ, dưới dự án và nhiệm vụ được cấu hình cho mục đích này — mặc định là dự án nội bộ với nhiệm vụ Time Off. Với các loại nghỉ không yêu cầu phê duyệt, bản ghi timesheet được tạo ngay khi yêu cầu được đặt; với các loại nghỉ cần phê duyệt, bản ghi được tạo sau khi phê duyệt. Cơ chế này đảm bảo thời gian nghỉ không biến mất khỏi lưới timesheet, và cũng không tạo ra khoảng trống cần lấp thủ công khi đối chiếu giờ.
👤 Hồ sơ nhân sự làm trục kết nối
Hồ sơ nhân viên trong ứng dụng Employees là trục mà các ứng dụng khác bám vào: không có hồ sơ nhân sự thì không thể ghi timesheet, không thể gán ca làm việc, không thể tính lương. Các thuộc ảnh hưởng trực tiếp đến dòng dữ liệu gồm lịch làm việc (working schedule), vai trò trong Planning, cấu trúc lương và hợp đồng. Hồ sơ nhân sự cũng là nơi đặt mục tiêu giờ tính phí hàng tháng khi tính năng chỉ báo tỷ lệ tính phí được bật, và là nơi các quy trình xin nghỉ, đánh giá hiệu suất (appraisals) và chấm công (attendances) đọc dữ liệu. Khi một thuộc tính của hồ sơ thay đổi — ví dụ giờ làm việc — thay đổi đó lan sang lưới timesheet, lịch Planning và bảng lương cùng lúc, vì cả ba đọc từ cùng một bản ghi.
Di Chuyển Dữ Liệu Và Các Cấu Hình Dễ Bỏ Sót
🚚 Chuẩn hóa mô hình timesheet trước khi di chuyển
Bước đầu tiên của quá trình đưa hệ thống vào vận hành là chuẩn hóa cấu trúc timesheet: đặt tên dự án, xây mẫu nhiệm vụ cho từng loại công việc, và phân biệt rõ dự án tính phí với dự án nội bộ. Timesheet chỉ có thể được ghi trên các dự án đã bật tính năng timesheet trong cài đặt, nên danh sách dự án cần ghi giờ phải được xác định trước khi nhân viên bắt đầu sử dụng. Dữ liệu lịch sử từ Excel — bảng chấm công, bảng tổng hợp giờ theo dự án — được đối chiếu với cấu trúc mới theo từng nhân viên và từng dự án trước khi nhập vào hệ thống, thay vì nhập nguyên khối rồi chỉnh sửa sau.
🧪 Chạy thử một kỳ lương trước khi go-live
Các cấu hình cần hoàn tất trước khi chạy thử gồm: quyền truy cập Timesheets theo vai trò, cấu trúc lương và loại work entry cho từng nhóm hợp đồng, giờ làm việc trên hồ sơ nhân sự, và — với doanh nghiệp vận hành theo ca — các mẫu ca, vai trò và cấu hình hợp đồng sinh work entry từ ca. Chạy thử được thực hiện với một dự án và một nhóm nhỏ trong một kỳ lương đầy đủ, với tiêu chí nghiệm thu cụ thể: bảng điều khiển work entry không còn xung đột trong kỳ, timesheet đều gắn với nhiệm vụ, và bảng lương của kỳ thử khớp với dữ liệu giờ đã nhập. Sau giai đoạn này, phạm vi được mở rộng dần theo dự án và theo phòng ban.
⚙️ Các cấu hình dễ bỏ sót
Nhóm cấu hình đầu tiên là cờ billable và dòng đơn hàng bán: dự án tính phí mà timesheet không gắn sales order item sẽ không xuất hiện ở mục doanh thu của bảng điều khiển lợi nhuận. Nhóm thứ hai là chi phí phân tích cho kho (analytic costs): chi phí vật tư chỉ xuất hiện trên bảng điều khiển lợi nhuận khi chi phí phân tích được bật cho các loại nghiệp vụ kho tương ứng trong cài đặt Inventory. Nhóm thứ ba là vai trò trong Planning: nhân viên không được gán vai trò thì Auto Plan không thể phân công, và mẫu ca hiển thị khi tạo ca sẽ không bị giới hạn theo đúng vai trò. Nhóm thứ tư là cấu hình hợp đồng sinh work entry từ ca: bỏ sót cấu hình này, dữ liệu ca dừng lại ở lịch và không chảy vào bảng lương.
Kiến trúc Odoo 20 cho nhóm ứng dụng dự án và nhân sự có thể tóm tắt bằng một sơ đồ dòng dữ liệu: timesheet là nguồn của giờ thực tế, work entry là lớp chuẩn hóa nhận dữ liệu từ timesheet, Planning và Attendances, Planning là nguồn của ca làm việc, và Payroll là ứng dụng tiêu thụ cuối cùng. Cùng một bản ghi di chuyển qua nhiều ứng dụng mà không qua bước tổng hợp thủ công ở bất kỳ điểm nào. Với các doanh nghiệp cần tư vấn cấu hình cho trường hợp cụ thể — công ty dịch vụ, công ty xây dựng hoặc nhà máy vận hành theo ca — đội ngũ SkyERP hỗ trợ khảo sát và thiết kế quy trình tại skyerp.net/contactus.
Quản Lý Dự Án Và Nhân Sự Với Odoo 20: Kiến Trúc Dữ Liệu Từ Timesheet Đến Work Entry, Ca Làm Việc Và Bảng Lương