odoo.
odoo12 min read

odoo-nhan-su-hr-payroll

Vi sao Odoo HR + Payroll dang nhin lai

Phan lon doanh nghiep Viet Nam khi nhac toi phan mem nhan su van nghi toi Excel cong vai file Google Sheet, hoac mot module HR tach roi trong ERP ma it ai dam dung vao. Odoo, trong nhieu nam lien, da di theo mot huong khac: nhan su khong phai mot silo tach biet ma la mot mat xich trong toan bo chuoi van hanh doanh nghiep tu cham cong, nghi phep, danh gia hieu suat, cho den tinh luong va xuat bang luong cuoi thang. Khi toi quay lai doc module hr_payroll trong Odoo 19, dieu khien toi an tuong nhat khong phai la bo rule engine, ma la cach Odoo phan lop giua loi mien phi (employees, contracts, attendance, holidays, recruitment) va lop Payroll von ban dau nam o edition cong dong nhung da duoc nang cap dang ke qua cac phien ban gan day.

Bai viet nay la mot cai nhin nhap mon cho lap trinh vien hoac nguoi trien khai dang can nhac dung Odoo cho stack nhan su payroll. Toi se khong di sau vao tung cau hinh man hinh, ma se ke lai buc tranh tong the, mo ta cac bang du lieu cot loi, dan mot vi du code nho cho salary rule, roi noi thang ve nhung gi OCA cong dong Odoo Community Association dang dong gop cho rieng thi truong Viet Nam. Muc tieu cuoi cung la giup ban tra loi mot cau hoi quan trong: voi quy mo va dac thu cua doanh nghiep minh, Odoo HR Payroll co thuc su la lua chon dung, hay chi la mot ban demo dep tren slide.

Buc tranh module: tu Employees den Payroll

Khi ban cai Odoo lan dau va bat App Employees, thuc ra ban dang kich hoat mot chuoi module phu thuoc lan nhau:

  • hr danh sach nhan vien, phong ban, chuc danh
  • hr_contract hop dong lao dong, muc luong co ban, salary structure tham chieu
  • hr_attendance cham cong vao ra qua web, qua kiosk, qua badge
  • hr_holidays dang ky va phe duyet nghi phep, allocation theo nam
  • hr_recruitment tuyen dung, ung vien, vong phong van, ky candidate
  • hr_skills ky nang, chung chi, danh gia nang luc theo level
  • hr_payroll payslip, salary structure, salary rule, payroll period, payslip run batch

Module hr_payroll khong tu song duoc no can hr_contract de biet muc luong co ban, can hr_holidays de biet so ngay nghi co luong, va can hr_attendance hoac mot module work entry tuy chinh de biet so gio lam thuc te. Day la kien truc dac trung cua Odoo: moi nghiep vu duoc tach thanh mot addon, va payroll chi la khach tieu thu du lieu tu cac addon khac qua cac truong M2O va One2many.

Trang tai lieu chinh thuc cua Odoo ve module HR la diem vao tot nhat neu ban muon xem anh chup man hinh va quy trinh end-to-end. Con neu ban muon dao source code, kho OCA/hr tren GitHub gom hang tram module mo rong do cong dong dong gop da so la patch nhung diem yeu ma ban Enterprise khong buon fix.

Cau truc du lieu cot loi

Truoc khi viet bat ky rule nao, ban can thuoc long bon bang:

hr.employee mot ban ghi cho moi nhan vien. Chua department_id, job_id, company_id, parent_id (manager), va mot loat truong HR ca nhan: CCCD, ngay sinh, dia chi thuong tru, nguoi lien he khan cap, tai khoan ngan hang nhan luong.

hr.contract hop dong lao dong. Quan trong nhat la wage (luong co ban thang), struct_id (salary structure tham chieu), date_start, date_end, state (draft / open / close / cancel). Mot nhan vien co the co nhieu contract theo thoi gian, nhung tai mot thoi diem chi mot contract o state open.

hr.payslip phieu luong cho mot nhan vien trong mot ky. Moi payslip co nhieu hr.payslip.line moi dong la mot thanh phan luong (basic, allowance, bonus, deduction, tax). Payslip co worked_days_line_ids chua thong tin ngay cong, va input_line_ids chua cac input thu cong tu HR (vi du thuong KPI thang nay). hr.salary.rule quy tac tinh luong. Day la noi ban viet Python expression de cong, tru, nhan, chia ra tung dong payslip line. Rule duoc gom thanh hr.salary.structure, structure duoc gan vao contract.

Khi ban bam Compute Sheet tren mot payslip o giao dien, Odoo se duyet qua tung rule trong structure theo sequence, danh gia condition_python (rule co ap dung khong), roi danh gia amount_python_compute (so tien la bao nhieu). Ket qua luu vao hr.payslip.line va tong lai thanh net payslip.

Quy trinh tinh luong o Odoo 19

Mot chu trinh payroll dien hinh o Odoo trai qua sau buoc:

Khoa hop dong va muc luong dam bao moi nhan vien trong ky deu co contract open voi wage chinh xac. Day la buoc ma HR phai chot truoc ngay cut-off, neu khong moi sua doi sau se keo theo recompute hang loat.

Tao work entries Odoo dung cac hr.work.entry tu attendance, holidays, public holidays. Buoc nay quan trong vi work entry la input cho payroll, khong phai attendance tho. Conflict giua work entry (vi du nhan vien vua co attendance vua co nghi phep cung ngay) phai duoc giai quyet truoc khi compute. Tao batch payslip mot hr.payslip.run gom tat ca payslip trong cung ky (vi du thang 5 / 2026). Tao batch giup duyet va xac nhan hang loat thay vi tung phieu mot.

Compute payslip bam nut compute de Odoo chay salary rule. Day la luc bug thuong xay ra: rule sai cu phap Python, bien inputs chua duoc khai bao, hoac structure chua duoc gan dung contract. Verify va xac nhan ke toan / HR review tung payslip, xac nhan hoac gui lai bo phan de chinh. Co the in PDF preview o buoc nay de gui nhan vien xac nhan truoc. Xuat bang luong va day sang Accounting payslip xac nhan co the day sang module account thanh journal entry, tu do in bang luong PDF va sinh lenh chi tra qua ngan hang.

Moi buoc trong so nay deu co the tu dong hoa bang cron, server action, hoac trigger tu module khac. Day la diem manh lon nhat cua Odoo so voi phan mem HR dong goi: ban khong bi khoa vao quy trinh cung, va co the chen logic compliance rieng (vi du chan duyet neu payslip co net luong am).

Code minh hoa: tao mot salary rule don gian

Gia su ban muon them mot rule Phu cap xang xe co dinh 500000 dong cho moi nhan vien co contract structure Vietnam Standard. Trong mot module addon tu viet, ban se khai bao rule nay duoi dang XML data record:

<odoo>
    <data noupdate="1">
        <record id="hr_rule_fuel_allowance" model="hr.salary.rule">
            <field name="name">Phu cap xang xe</field>
            <field name="code">FUEL</field>
            <field name="category_id" ref="hr_payroll.ALW"/>
            <field name="sequence">15</field>
            <field name="condition_select">none</field>
            <field name="amount_select">fix</field>
            <field name="amount_fix">500000</field>
            <field name="struct_id" ref="l10n_vn_hr_payroll.salary_structure_vn_standard"/>
        </record>
    </data>
</odoo>

Neu phu cap nay chi ap dung cho nhan vien co vi tri Sales, ban doi condition_select sang python va viet:

result = employee.job_id and employee.job_id.name == 'Sales'

Con neu muon so tien phu thuoc so ngay cong thuc te, ban doi amount_select sang python va viet:

worked = sum(wd.number_of_days for wd in worked_days if wd.code == 'WORK100')
result = (500000 / 22) * worked

Trong cac expression nay, bien moi truong co san gom employee, contract, payslip, categories, rules, worked_days, inputs. Tai lieu chinh thuc liet ke day du scope, nhung kinh nghiem la chay thu roi doc traceback Odoo log rat ro rule nao throw exception o payslip nao. Khi viet rule moi, toi luon test bang mot payslip ca le truoc, sau do moi mo rong ra batch.

Tich hop voi cham cong va nghi phep

Module hr_attendance mac dinh ghi cap check_in / check_out. De du lieu nay bien thanh ngay cong cho payroll, Odoo co mot buoc trung gian: hr.work.entry. Moi work entry co work_entry_type_id (vi du WORK100 ngay cong binh thuong, LEAVE100 nghi phep co luong, LEAVE0 nghi khong luong), date_start, date_stop, va state (draft / validated / conflict).

Khi ban tao mot payslip, Odoo goi _get_worked_day_lines() de gom work entries cua nhan vien trong ky, nhom theo work entry type, roi convert ra gio hoac ngay. So lieu nay duoc luu vao hr.payslip.worked_days va la input chinh cho salary rule loai based on worked days.

Mot van de thuc te: may cham cong van tay o Viet Nam thuong xuat CSV theo dinh dang rieng cua hang (ZKTeco, Suprema, Hikvision). Ban can mot adapter de parse file do va create hr.attendance dung format. OCA co vai addon mo ma cho ZKTeco; voi hang khac ban se phai tu viet. Day la vung ky thuat ma moi trien khai Odoo HR o Viet Nam deu phai dung toi som muon.

OCA va nhung gi cong dong da lam san cho thi truong Viet Nam

Kho OCA/payroll chua cac addon mo rong payroll ma ban goc Odoo khong co hoac khong hoan thien: payroll_account_anglo_saxon, payroll_loan, payroll_period, hr_payroll_input_max. Rieng cho Viet Nam, co mot vai addon le te ve bao hiem xa hoi (BHXH), thue thu nhap ca nhan (TNCN) theo bieu luy tien, va nghi le theo lich am nhung khong co mot bo Vietnam localization hoan chinh va duoc bao tri nhu cach Odoo da lam cho Phap, My, hoac Bi.

Dieu nay co nghia la neu ban trien khai Odoo HR cho doanh nghiep Viet Nam, gan nhu chac chan ban se phai tu viet:

  • Mot module l10n_vn_hr_payroll chua salary structure cho Vietnam Standard
  • Cac salary rule cho luong co ban, phu cap, luong net, BHXH 8% / BHYT 1.5% / BHTN 1%, thue TNCN luy tien 7 bac, giam tru gia canh
  • Bao cao bang luong xuat theo format Bo Lao dong yeu cau
  • Bao cao BHXH theo mau D02-TS, C70a-HD
  • Bao cao TNCN theo mau 05/KK-TNCN

Luong viec nay khoang 2 den 4 tuan dev cho mot team quen Odoo, hoac 6 den 8 tuan cho team moi. Day la chi phi an lon nhat khi chon Odoo cho HR o Viet Nam khong phai license, ma la localization. Neu ban dang lap budget, dung quen cong them chi phi maintenance hang nam vi quy dinh BHXH va TNCN doi thuong xuyen.

Nhung cam bay thuong gap khi trien khai

Sau nhieu du an Odoo HR o cac quy mo khac nhau, co ba sai lam toi thay lap di lap lai:

Thu nhat, co nhoi nhet moi business rule vao salary rule. Salary rule la Python expression chay trong sandbox, debug rat kho, version control gan nhu khong ton tai (ban phai so sanh XML record giua cac ban dump). Quy tac tot: salary rule chi lam so hoc don gian; logic phuc tap nhu neu nhan vien co duoi 12 thang lam viec thi ap dung muc BHXH thap hon nen day vao helper method tren hr.contract hoac hr.employee, salary rule chi goi helper do. Helper la code Python binh thuong, co the unit test, co the diff git ro rang.

Thu hai, khong tach roi wage (luong tren hop dong) voi taxable_wage (luong chiu thue). Khi co phu cap an trua khong chiu thue, phu cap dien thoai, thuong KPI co chiu thue, ban se can ba truong khac nhau va logic tinh TNCN khac nhau. Dung nhet tat ca vao wage roi tinh nguoc ra ban se mat nhieu thoi gian khi co kiem tra thue va khong giai trinh duoc.

Thu ba, bo qua buoc backup database truoc khi compute batch payslip. Compute payslip la thao tac write hang nghin dong hr.payslip.line. Neu rule sai va ban phai xoa batch roi compute lai, moi lan lap lai ton rat nhieu thoi gian. Backup snapshot Postgres truoc moi compute lon la thoi quen tot, va o moi truong production nen co script tu dong snapshot truoc moi payslip run cua batch lon hon 100 nhan vien.

Khi nao nen dung Odoo Payroll, khi nao khong

Odoo Payroll phu hop khi:

  • Doanh nghiep da dung Odoo cho cac module khac (Sales, Inventory, Accounting) va muon HR dong bo tren cung database
  • Quy mo 50 den 500 nhan vien du lon de Excel khong kham noi, du nho de chua can Workday hoac SAP SuccessFactors
  • Team IT co it nhat mot dev Python / Odoo de bao tri localization va patch khi co quy dinh thue moi
  • Cau truc luong tuong doi on dinh, khong thay doi rule hang thang

Odoo Payroll KHONG phu hop khi:

  • Ban can payroll cho 5000+ nhan vien voi nhieu quoc gia khac nhau, moi quoc gia co quy dinh khac luc nay mot SaaS chuyen payroll (Deel, Remote, Papaya) hoac enterprise (ADP, Workday) tiet kiem chi phi dev hon
  • Ban khong co dev noi bo va khong muon phu thuoc doi tac trien khai dai han
  • Quy dinh luong qua dac thu (nganh xay dung, hang hai, doanh nghiep co von dau tu nuoc ngoai voi co che expat) va Odoo khong co san

Buoc tiep theo cho nguoi moi bat dau

Neu ban vua doc xong va muon thu tay, day la roadmap 1 tuan:

Ngay 1 va 2: Dung Odoo 19 bang Docker compose local. Cai modules hr, hr_contract, hr_attendance, hr_holidays, hr_payroll. Tao 5 nhan vien gia lap, moi nguoi mot contract voi wage khac nhau.

Ngay 3: Doc ky tai lieu salary rule va work entry. Tao thu mot payslip cho mot nhan vien, compute, xem ket qua. Bam vao tung payslip line de xem rule nao sinh ra so do. Ngay 4: Viet mot addon my_vn_payroll chua mot salary structure Viet Nam don gian (luong co ban + BHXH 8% + thue TNCN flat 10%). Khai bao bang XML data record nhu vi du o tren.

Ngay 5: Test voi batch payslip 5 nguoi. So sanh ket qua voi tinh tay tren Excel. Sua rule cho khop, recompute, sua tiep cho den khi khop hoan toan. Ngay 6 va 7: Doc OCA/payroll, chon ra 2 den 3 addon huu ich, hieu cach ho extend hr.payslip. Ghi chu lai pattern de tai su dung sau.

Sau mot tuan, ban se co du context de quyet dinh Odoo co phai lua chon dung cho doanh nghiep cua minh hay khong. Va quan trong hon, ban se hieu chieu sau cua mot he thong ERP open source khong phai moi thu deu co san, nhung moi thu deu co the duoc build tu nhung vien gach hien co. Day cung la triet ly khac biet lon nhat giua mot ERP open va mot SaaS dong goi: ban tra gia bang thoi gian setup va bao tri, doi lai quyen kiem soat hoan toan logic kinh doanh cua chinh minh.