1. Attendance (chấm công)
Mỗi ngày đi làm, nhân sự công ty sẽ cần chấm công. Bạn bấm 1 lần lúc xuất hiện ở văn phòng, và 1 lần lúc rời công ty. (Clock-in/Clock-out)
Việc chấm công giúp quản lý:
- Theo dõi được việc đi làm của nhân sự: Tới sớm, tới muộn, tới muộn nhưng về sớm, hay làm overtime,…
- Đo lường được số ngày công để tính lương.
SEONGON có làm vậy. Không quá khắt khe như những công ty khác, nhưng vẫn cần đo lường số ngày công để làm báo cáo cho nhân sự và tính lương hàng tháng.
Việc chấm công của SEONGON nằm ở trên tính năng “Attendance” của Lark.
2. Đề bài
Mỗi tháng, HRM sẽ cần export dữ liệu chấm công của tháng đó ra để căn cứ tính lương.
Cấu trúc của file export đó sẽ trông thế này:
Và nó sẽ được đem đi để tính lương tự động với 1 công thức có sẵn.
Vấn đề là, để các ô như kia thì không thể tính được.
Đây là mô phỏng đề bài HR mong muốn:
- Nếu hôm đó nhân sự không chấm công, ghi số 0 (không tính ngày công).
- Nếu hôm đó nhân sự có chấm công, có thể muộn hay không muộn, ghi số 1.
Nghĩa là sẽ phải có sự chuyển đổi data:
Loại công | Value cũ | Value mới |
---|---|---|
Chấm công muộn | Late in | 1 |
Chấm công đúng giờ | Regular | 1 |
Nghỉ phép có lương | Leave, Leave, Nghỉ phép có lương | 1 |
Nghỉ phép không lương | Leave, Leave, Nghỉ phép không lương | 0 |
Không chấm công | No record | 0 |
… | … | … |
Vậy thì giải quyết đề bài này thế nào là tiện nhất?
3. Phương án giải quyết
Dĩ nhiên, giải pháp nhanh hay chậm, dễ hay khó, còn phụ thuộc vào trình độ của mình và những cái constraints :))))
Trình của tôi thì như này:
- Tôi biết về cơ sở dữ liệu.
- Tôi biết dùng excel ở mức trung bình - nâng cao.
- Tôi không giỏi code, nhưng tôi có thể hiểu và thao tác được trên ngôn ngữ lập trình.
- Tôi biết làm automation.
Mong muốn của tôi thì như này:
- Tôi muốn ít thao tác tay nhất có thể, không chạy cơm.
- Tôi muốn solution phải scale được. Nghĩa là có thể sử dụng lặp đi lặp lại hàng tháng, một cách tiện nghi.
- Tôi không muốn tốn nhiều hơn 1 tiếng cho đề bài này.
Vậy, đâu là những con đường tôi có thể đi?
3.1. Check ngay attendance trên Lark
Trước khi nghĩ làm thế nào để giải quyết dữ liệu được xuất ra, tôi sẽ nghĩ xem làm thế nào để format dữ liệu từ trước khi nó được xuất.
Tôi check tính năng tạo reports của Attendance trên Lark. Đoạn log lại dữ liệu chấm công hàng ngày là 1 trường dữ liệu có tên “Daily Attendance Result”
Vậy tôi check trong “Field Management” để xem có thể modify được cách thằng này thể hiện ra không. Kết quả là không. Nó là system default rồi, cũng không thể tạo 1 trường custom thực hiện tính năng tương tự.
Con đường này là ngõ cụt.
Dĩ nhiên, tôi có thể tiếp tục cố đấm ăn xôi, check hết API của Lark và tạo tự động trên Anycross để làm báo cáo thẳng lên trên Base luôn, chẳng cần xuất nhập gì. Nhưng nó quá tốn nguồn lực để đâm vào giải quyết cho đề bài này.
3.2. Xử lý trên file excel
Đến cách thứ 2 là tôi làm trên file sheet.
3.2.1. Tạo hàm
Chắc cũng có người sẽ nghĩ là làm hàm là ok luôn. Tạo cái hàm “=if()”, lấy điều kiện nếu giá trị trong ô có chứa những chữ theo đề bài, thì trả lại các value mong muốn kia.
:)))) Nhưng vấn đề là, nó có khoảng 30 cột, tượng trưng cho 30 ngày. Nếu làm theo kiểu này, bạn cũng sẽ phải tạo 30 cột bên cạnh các cột có sẵn, rồi khi nó trả lại data xong thì xóa đi các cột gốc.
Nhìn file này xem, good luck with that solution:
Nó phạm vào nguyên tắc của tôi, là không làm cơm quá nhiều, và phải có tính sử dụng lại tiện lợi.
3.2.2. VBA
Nên, đúng ra, con đường nên đi phải là dùng Excel Macro (VBA). Cho chạy script sao cho nó match điều kiện và biến đổi luôn chính cái ô đã match với điều kiện đó.
Đây là giao diện của VBA. Bạn access bằng việc bấm Alt + F11 trên Excel. Khi vào, bạn sẽ tạo module và viết code bằng ngôn ngữ đặc thù của nó.
Sau khi xong code, bạn chọn run, và chọn cái macro bạn đã làm.
Vấn đề là, tôi không hiểu =)))))) Tôi chưa làm cái này bao giờ.
Dù biết logic của nó chẳng khác gì các ngôn ngữ lập trình, nhưng nó như việc nói tiếng Tây Ban Nha và tiếng Anh chẳng khác mấy gì nhau vậy. Ừ nó sẽ siêu giống nhau, nếu tôi đã có chút quen thuộc với cả 2. Với thằng VBA này, tôi mù tịt, chưa chạm bao giờ. Nghĩa là dù có làm xong thì tôi cũng bảo trì nó kém.
Hơn nữa, nó phát sinh ra vấn đề: Mỗi lần xuất ra report hàng tháng, chị HRM lại phải đi copy cái đoạn code này và tạo module trên file excel mới đó. Nó phiền, phạm vào mong muốn của tôi là tiện nghi khi sử dụng lại.
Vậy, giải pháp này, có thể work. Nhưng tôi không chọn nó vì tôi không quen thuộc. Và tùy vào góc nhìn, bạn có thể nói rằng tôi nghĩ thêm lý do để biện minh cho việc bỏ chạy =))))
3.3. Google Colab x Gemini
Đừng nghĩ thế vội, vì tôi chọn con đường đáp ứng đủ hết mọi tiêu chí =))
Tôi sẽ code trên Google Colab, sử dụng tính năng Gemini mà thằng Google Colab mới tích hợp.
Nếu bạn chưa biết, Google Colab cho phép bạn tạo những cái “notebook” vừa có thể viết chữ, vừa có thể chạy code online. Dân data thì sẽ biết nó giống với Jupyter Notebook. Tòa thử chơi, tòa sẽ hiểu nó hay thế nào.
Trông nó như này:
Tôi có thể:
- Viết code
- Viết chữ chú thích, giải thích cho code; hay chỉ dẫn chạy code.
- Share cho người khác như 1 file trên Google bình thường.
Nó:
- Có thể tái sử dụng được.
- Có môi trường lập trình riêng. Có thể import được các thư viện Python, Node JS,…
- Có tích hợp AI Gemini của Google để hỗ trợ viết code.
Cái cuối là lý do nó tiết kiệm thời gian này :))))
Tôi chẳng cần viết 1 dòng code nào. Thằng Google Colab có tính năng tích hợp với Gemini để đọc file và thực hiện prompt viết code luôn.
Bước 1: Vào file -> “Analyze your files with code written by Gemini”
Bước 2: Upload file lên và viết prompt.
Đây là prompt mà tôi sử dụng. Tôi sẽ giải thích về cái file đó, và đưa ra chỉ dẫn để Gemini action.
Sau đó, Gemini sẽ trả lời với 1 cái “execution plan” để thực hiện đề bài của mình bằng Google Colab code. Nếu đã ưng ý với action plan mà nó đề xuất, thì bấm “Execute plan”.
Bước 3: Há miệng chờ sung.
Nó sẽ viết code ra, và bạn chỉ cần há mồm ngồi đớp. Chạy thử, xem còn lỗi gì không, lỗi thì copy vào bảo nó sửa.
Edit thêm các chú thích, điều chỉnh code theo ý mình muốn ở những phần đơn giản như string. Và thế là xong cái workflow trong vòng 15 phút.
Đây là flow của nó:
-
- Nó sẽ nhận file miễn mình đặt tên là “attendance.xlsx”.
-
- Nó sẽ scan qua tên của tất cả các cột, và dùng pattern (REGEX) để tìm ra khoảng tất cả các cột chỉ định ngày tháng chấm công.
-
- Nó sẽ thực hiện thay đổi value của các ô từng cột đó dựa trên điều kiện của đề bài.
-
- Nó sẽ tự động tải file đã được update đó về máy tôi.
Kết quả đây - 0, 1, P,… như ý muốn của đề bài:
4. Việc mình ngu không quan trọng
Mà quan trọng là nó offer 1 con đường nhanh, hiệu quả, và tiện nghi để mình giải quyết 1 bài toán sẽ rất tốn nguồn lực otherwise.
Bạn có Windsurf, Cursor, và Copilot ở một thái cực; xây dựng các IDE viết code tích hợp với AI.
Thì ở thái cực khác, bạn có Replit, Cloudflare Workers và Google Colab phát triển nền tảng online để bạn code tích hợp với AI. Vừa code, vừa share với mọi người, thậm chí vừa call API để làm tự động hóa.
Việc bạn có thể dễ dàng code với AI chỉ bằng prompt ngôn ngữ tự nhiên nó thu hẹp khoảng mù về công nghệ với rất nhiều người chưa từng động vào hay hiểu code, cũng như mở khóa tiềm năng và hiệu suất đối với những người có thể hiểu được ngôn ngữ lập trình trở lên.
Đây là một đề bài khá vui đấy chứ nhỉ?
Hẹn gặp lại ~
Nhận thông báo khi có post mới
Đôi lúc, tui sẽ có chia sẻ về tài liệu, công cụ, tri thức,... In case bạn thực sự muốn tui nhắn tin khi có nội dung mới, hoặc bạn chỉ muốn kết nối, thì hãy fill 1 chút thông tin ở ĐÂY nhé.
Cám ơn nhiều!