How to Generate Payslip Based on Employee Attendance in Odoo 18: Complete Tutorial
By Braincuber Team
Published on February 27, 2026
Your HR team is paying employees for 8 hours when they worked 6.5. That's $1,700/month walking out the door because your payroll isn't linked to actual attendance. We've seen D2C brands with 23 employees lose over $18,400 a year on this gap alone. Odoo 18 fixes it by tying payslip generation directly to attendance check-in/check-out records. No guesswork. No manual hour counting in spreadsheets. This complete tutorial walks you through the entire setup.
What You'll Learn:
- How to create an employee record with payroll details
- How to set up a contract with Attendance as the Work Entry Source
- How to configure salary structure types and salary rules
- How to record attendance via Kiosk Mode
- How to generate and compute a payslip from attendance data
- How to confirm and mark payslips as paid
Step 1: Create the Employee Record
Every payslip starts with a properly configured employee record. Without the Payroll tab filled out, Odoo won't know which tax rules to apply or which language to generate the payslip in. Skip this, and your compute sheet will throw errors.
Create a New Employee
Go to the Employee module and click New. Fill in the employee name, Job Title, Department, Manager, and Work Email.
Configure Work Information Tab
Set the Work Address and Work Location. Assign approvers for Time Off and Attendance. The attendance approver gets edit access to the employee's attendance records.
Fill the Payroll Tab
Enter Legal Name, Payslip Language, Registration Number, and tax filing details like Federal Tax Filing Status and State Withholding Allowance.
| Employee Tab | Key Fields | Why It Matters |
|---|---|---|
| General Info | Name, Job Title, Department | Links employee to correct salary structure |
| Work Information | Attendance Approver, Time Off Approver | Controls who can edit attendance records |
| Payroll | Legal Name, Tax Status, Withholding | Determines tax calculations on payslip |
| Private Information | Citizenship, Emergency Contact, Work Permit | Required for compliance and legal reporting |
Step 2: Create a Contract with Attendance-Based Work Entries
This is the *critical* step most people get wrong. The contract's Work Entry Source field must be set to Attendance. If you leave it on "Working Schedule," Odoo generates work entries from the calendar, not from actual check-in/check-out data. Your payslip will show 8 hours even if the employee worked 3.
Create a New Contract
Click the Contracts smart button on the employee form. Fill in Contract Reference, Start Date, End Date, and select the Salary Structure Type (Employee or Worker).
Set Work Entry Source to Attendance
In the contract form, set Work Entry Source to Attendance. This tells Odoo to generate work entries from actual attendance records instead of the working schedule.
Set Contract to Running State
Fill in the Salary Information tab with base salary and benefits. Then change the contract status to Running. Without a running contract, payslips cannot be generated.
Work Entry Source Options
Odoo 18 offers three Work Entry Source modes: Working Schedule (generates from calendar hours), Attendance (generates from check-in/check-out), and Planning (generates from planned shifts). Picking the wrong one means your payslip data is fiction, not fact.
Understanding Salary Structure Types
Before you generate any payslip, you need to understand what's behind the salary computation. The Salary Structure Type defines the wage type, pay frequency, and the rules used to calculate the final amount.
Wage Type
Choose between Fixed (monthly salary) or Hourly (paid per hour). This directly affects how attendance hours translate to dollar amounts on the payslip.
Default Scheduled Pay
Controls payment frequency: weekly, bi-weekly, monthly, or custom. Determines the payslip period when generated.
Regular Pay Structure
Contains the salary rules (Basic, Gross, Net, deductions) used to compute the final payslip amounts.
Default Work Entry Type
Set to Attendance by default. This is the work entry type code used when generating entries from check-in/check-out records.
Step 3: Record Attendance via Kiosk Mode
Now the employee needs to actually clock in. Odoo 18's Kiosk Mode lets employees check in by scanning a badge or selecting their name manually. The system records the exact check-in and check-out timestamps. These timestamps become the work entries that feed into the payslip.
Open Kiosk Mode for Check-In
Go to the Attendance module and select Kiosk Mode. Choose Identify Manually to pick the employee from the list. The system records the check-in timestamp immediately.
Check Out After Work
At the end of the shift, the employee checks out via Kiosk Mode. Odoo automatically calculates total worked hours from the timestamps. You can also add attendance manually via the New button in the Attendance overview.
Check-In = 09:00 AM
Check-Out = 05:30 PM
Worked Hours = 8.5 hours (auto-calculated)
Work Entry = Generated as "Attendance" type
Step 4: Generate and Compute the Payslip
This is where it all comes together. You create the payslip, Odoo pulls the attendance-based work entries, and the salary rules compute the final amounts. The "Worked Days and Input" tab shows you exactly what data Odoo used for the computation.
Create a New Payslip
Navigate to Payroll > Payslips > All Payslips and click New. Select the employee. The salary structure, contract, and period auto-fill from the running contract.
Verify Worked Days and Input Tab
Check the Worked Days and Input tab. It shows the work entry type, number of days worked, number of hours, and amount. Use the Attendance and Work Entries smart buttons to cross-verify the data.
Compute Sheet, Confirm, and Mark as Paid
Click Compute Sheet to calculate the salary based on rules (Basic, Gross, Net). Review the breakdown. Click Confirm, then Mark as Paid to finalize the payslip.
No Running Contract = No Payslip
If the contract status isn't set to Running, the payslip will fail to pull work entries. Double-check the contract state before clicking Compute Sheet. *(Yes, we've seen teams waste 2 hours debugging this.)*
Frequently Asked Questions
Can I generate payslips without attendance records in Odoo 18?
Yes, but only if the contract's Work Entry Source is set to "Working Schedule." It will use calendar hours instead of actual attendance data.
What happens if an employee forgets to check out?
The attendance record will remain open. The attendance approver can manually add the check-out time from the Attendance module's overview.
How do salary rules affect the payslip computation?
Salary rules define the formulas for computing Basic, Gross, deductions, and Net salary. The Compute Sheet button applies these rules to the worked hours and days.
Can I edit attendance records after the payslip is confirmed?
No. Once a payslip is confirmed and marked as paid, the linked attendance records are locked. You would need to create a correction payslip.
What is the difference between Fixed and Hourly wage types?
Fixed pays a set monthly salary regardless of hours; Hourly multiplies the pay rate by actual worked hours from attendance. Hourly is best for attendance-based payslips.
Still Paying for Hours Not Worked?
Our Odoo experts configure attendance-based payroll systems that pay employees for the exact hours they clocked. Stop the leakage.
