[IMP] Payroll: Batches replaced by Pay Runs
@@ -22,7 +22,7 @@ must be configured before running payroll.
|
||||
|
||||
When it is time to run payroll according to the business's schedule (monthly, weekly, bi-weekly,
|
||||
etc.), :doc:`payslips <payroll/payslips>` can be created individually or in :doc:`groups
|
||||
<payroll/batches>`. Odoo calculates when the employees worked based on their :doc:`work entries
|
||||
<payroll/pay_runs>`. Odoo calculates when the employees worked based on their :doc:`work entries
|
||||
<payroll/work_entries>`. Work entries are created according to their :doc:`contracts
|
||||
<payroll/contracts>`, based on information from the **Attendances**, **Planning**, or **Timesheets**
|
||||
apps. Any errors with work entries **must** be resolved *before* continuing to process payroll.
|
||||
@@ -145,7 +145,7 @@ Once a localization has been installed, configure the following fields:
|
||||
- :doc:`payroll/time_off_to_report`
|
||||
- :doc:`payroll/salary_attachments`
|
||||
- :doc:`payroll/payslips`
|
||||
- :doc:`payroll/batches`
|
||||
- :doc:`payroll/pay_runs`
|
||||
- :doc:`payroll/commissions`
|
||||
- :doc:`payroll/payroll_analysis`
|
||||
- :doc:`payroll/headcount`
|
||||
@@ -162,7 +162,7 @@ Once a localization has been installed, configure the following fields:
|
||||
payroll/time_off_to_report
|
||||
payroll/salary_attachments
|
||||
payroll/payslips
|
||||
payroll/batches
|
||||
payroll/pay_runs
|
||||
payroll/commissions
|
||||
payroll/payroll_analysis
|
||||
payroll/headcount
|
||||
|
||||
@@ -1,204 +0,0 @@
|
||||
=======
|
||||
Batches
|
||||
=======
|
||||
|
||||
Batches are used to generate multiple :doc:`payslips <payslips>` at once and process them in a
|
||||
group, rather than create and process individual payslips. This method not only helps the payroll
|
||||
department pay employees in less time, but it also helps keep payslips organized.
|
||||
|
||||
Typically, a company's payroll department :ref:`creates a new batch <payroll/new-batch>` for each
|
||||
salary structure, for every pay period (usually weekly, bi-weekly, or monthly). If desired, batches
|
||||
can be further organized by department, job position, or salary structure type.
|
||||
|
||||
Once a batch is made, :ref:`payslips are added to the batch <payroll/add-payslips>`, then the batch
|
||||
is processed, and employees are paid.
|
||||
|
||||
View batches
|
||||
============
|
||||
|
||||
To view all the batches in the database, navigate to :menuselection:`Payroll app --> Payslips -->
|
||||
Batches` to display all payslip batches that have been created. These payslip batches are displayed
|
||||
in a list view, by default.
|
||||
|
||||
Each batch displays the :guilabel:`Name`, the dates the batch includes (the :guilabel:`Date From`
|
||||
and :guilabel:`Date To` fields), its :guilabel:`Status`, the number of payslips in the batch
|
||||
(:guilabel:`Payslips Count`), and the :guilabel:`Company`.
|
||||
|
||||
.. image:: batches/batches.png
|
||||
:alt: View displaying all batches created.
|
||||
|
||||
.. _payroll/new-batch:
|
||||
|
||||
Create a new batch
|
||||
==================
|
||||
|
||||
New batches of payslips must be created from the :guilabel:`Payslips Batches` dashboard, by
|
||||
navigating to :menuselection:`Payroll app --> Payslips --> Batches`. Click the :guilabel:`New`
|
||||
button in the top-left corner. Doing so reveals a blank payslip batch form on a separate page.
|
||||
|
||||
On the new payslip batch form, enter the :guilabel:`Batch Name`. This should be something short and
|
||||
descriptive, to keep records organized.
|
||||
|
||||
.. example::
|
||||
A company pays its employees on a bi-weekly basis, and creates separate batches for their two
|
||||
different :ref:`salary structures <payroll/structure-types>` they use: worker pay and regular
|
||||
pay.
|
||||
|
||||
The names for their four August 2025 batches are:
|
||||
|
||||
- `Aug 1-14 2025 - Worker`
|
||||
- `Aug 1-14 2025 - Regular`
|
||||
- `Aug 15-31 2025 - Worker`
|
||||
- `Aug 15-31 2025 - Regular`
|
||||
|
||||
Next, select the date range to which the batch applies. Click into one of the :guilabel:`Period`
|
||||
fields, and a calendar pop-up window appears. From this calendar pop-up window, navigate to the
|
||||
correct month, and click on the corresponding day for both the start and end dates of the batch.
|
||||
|
||||
The current company populates the :guilabel:`Company` field. If operating in a multi-company
|
||||
environment, it is **not** possible to modify the :guilabel:`Company` from the form. The batch
|
||||
**must** be created while in the database for the desired company.
|
||||
|
||||
.. image:: batches/new-batch-details.png
|
||||
:alt: The details entered for the new batch.
|
||||
|
||||
.. _payroll/add-payslips:
|
||||
|
||||
Add payslips to a batch
|
||||
=======================
|
||||
|
||||
Once a :ref:`batch has been created <payroll/new-batch>`, payslips need to be added to the batch.
|
||||
Payslips can either be :ref:`created and added <payroll/generate>` to the batch, or if they have
|
||||
*already* been created, they can be :ref:`added to the batch <payroll/add>`.
|
||||
|
||||
.. important::
|
||||
Batches can only have payslips added to them when they are in the :guilabel:`New` stage. Payslips
|
||||
can either be :ref:`created by the database <payroll/generate>` and added to the batch, or
|
||||
:ref:`pre-existing payslips can be individually added <payroll/add>` to the batch.
|
||||
|
||||
Once either of these methods has been used, the status of the batch changes to
|
||||
:guilabel:`Confirmed`, and both options to add payslips no longer appears.
|
||||
|
||||
.. _payroll/generate:
|
||||
|
||||
Generate payslips
|
||||
-----------------
|
||||
|
||||
To generate the payslips and add them to the batch, first open the batch by navigating to
|
||||
:menuselection:`Payroll app --> Payslips --> Batches`, and click on the desired batch. Next, click
|
||||
the :guilabel:`Generate Payslips` button and a :guilabel:`Generate Payslips` pop-up window loads.
|
||||
|
||||
This form contains three sections, and the configuration of this form determines which payslips are
|
||||
created. The :guilabel:`Employees Selection` section determines which employees' payslips to create.
|
||||
Using the drop-down menus, configure the :guilabel:`Department`, :guilabel:`Job Position`, and
|
||||
:guilabel:`Salary Structure Type` fields, if desired. As selections are made, the
|
||||
:guilabel:`Employees` section at the bottom updates to show which payslips are going to be
|
||||
generated.
|
||||
|
||||
The :guilabel:`Payslip Generation` section allows the user to pick a specific :guilabel:`Salary
|
||||
Structure` to create payslips for. If left blank, the default structure for each employee is used to
|
||||
calculate their pay.
|
||||
|
||||
.. note::
|
||||
By default, Odoo lists all employees in the :guilabel:`Employees` section when generating
|
||||
payslips.
|
||||
|
||||
The list filters automatically as selections are made.
|
||||
|
||||
Configuration is optional unless a batch is being created **excluding** certain employees.
|
||||
|
||||
Once all the desired configurations have been made, click the :guilabel:`Generate` button, and all
|
||||
payslips are created and attached to the batch. Once generated, a :icon:`fa-book`
|
||||
:guilabel:`Payslips` smart button appears at the top, along with the number of payslips in the
|
||||
batch. Click this smart button to view a list of all the payslips in the batch.
|
||||
|
||||
Once the payslips have been generated and attached to the batch, the status of the batch changes to
|
||||
:guilabel:`Confirmed`.
|
||||
|
||||
.. image:: batches/generate.png
|
||||
:alt: Payslips being generated for marketing and community managers.
|
||||
|
||||
.. _payroll/add:
|
||||
|
||||
Add payslips
|
||||
------------
|
||||
|
||||
Instead of generating payslips, :ref:`individual payslips that have already been created
|
||||
<payroll/new-payslip>` can be added to a batch. Start by opening the desired batch by navigating to
|
||||
:menuselection:`Payroll app --> Payslips --> Batches`, and clicking on the desired batch.
|
||||
|
||||
Next, click the :guilabel:`Add Payslips` button, and an :guilabel:`Add Payslips` form loads in a
|
||||
pop-up window. All available payslips that have not yet been added to a batch, appear on the list.
|
||||
|
||||
.. note::
|
||||
**All** payslips not yet assigned to a batch appear in the list, regardless of status
|
||||
(:guilabel:`Draft`, :guilabel:`Waiting`, :guilabel:`Paid`, or :guilabel:`Cancelled`). This allows
|
||||
already processed or cancelled payslips to be grouped retroactively for reporting or record
|
||||
keeping purposes.
|
||||
|
||||
Tick the checkbox next to each desired payslip to be added, then click the :guilabel:`Select` button
|
||||
at the bottom. All selected payslips are added to the batch, and the status of the batch changes to
|
||||
:guilabel:`Confirmed`. A :icon:`fa-book` :guilabel:`Payslips` smart button appears at the top, along
|
||||
with the number of payslips in the batch. Click this smart button to view a list of all the payslips
|
||||
in the batch.
|
||||
|
||||
.. image:: batches/add-payslips.png
|
||||
:alt: Adding individual payslips to a batch by selecting them form this list.
|
||||
|
||||
.. _payroll/batch-process:
|
||||
|
||||
Process a batch
|
||||
===============
|
||||
|
||||
After a :ref:`batch has been created <payroll/new-batch>` , and :ref:`all required payslips have
|
||||
been added <payroll/add-payslips>`, the batch must then be processed, and employees paid.
|
||||
|
||||
Open the desired batch by navigating to :menuselection:`Payroll app --> Payslips --> Batches`, and
|
||||
clicking on the desired batch. For a batch to be processed, it must have a status of
|
||||
:guilabel:`Confirmed`. That means the batch has been created and payslips have been added to them,
|
||||
but the payslips have *not* been processed yet.
|
||||
|
||||
Click the :guilabel:`Create Draft Entry` button to confirm and create a draft of the individual
|
||||
payslips. After this occurs, the batch status changes to :guilabel:`Done`.
|
||||
|
||||
.. note::
|
||||
At any time, the batch needs to be reverted back to a status of :guilabel:`New`, click the
|
||||
:guilabel:`Set to Draft` button. This action does **not** remove any payslips that have already
|
||||
been added to the batch, instead, the status changes back to :guilabel:`New`.
|
||||
|
||||
After any desired changes have been made, click :guilabel:`Confirm` and the batch status changes
|
||||
to :guilabel:`Confirmed`.
|
||||
|
||||
It is important to note, that if any payslips in the batch have a status of :guilabel:`Paid`, the
|
||||
batch **cannot** revert to a status of :guilabel:`New`.
|
||||
|
||||
Once the status has changed to :guilabel:`Done`, the payments must be logged in the database. Click
|
||||
the :guilabel:`Create Payment Report` button, and a pop-up window loads, where the payment report
|
||||
details are entered.
|
||||
|
||||
Using the drop-down menu, select the :guilabel:`Export Format` for the payment report. The two
|
||||
default options available are :guilabel:`NACHA`, and :guilabel:`CSV`.
|
||||
|
||||
The :guilabel:`NACHA` option creates a compatible ACH file which is sent to the company's bank, and
|
||||
outlines all the banking information to transfer money from the company to the employees, either via
|
||||
direct deposit (most common) or a check. Refer to the :ref:`fiscal localization document
|
||||
<l10n_us/nacha>` for more information.
|
||||
|
||||
.. note::
|
||||
Other options may be available depending on the :doc:`payroll localization
|
||||
<payroll_localizations>` installed in the database.
|
||||
|
||||
If :guilabel:`CSV` is selected, all other fields are hidden form view. Once this is selected,
|
||||
click the :guilabel:`Generate` button to create the payment report.
|
||||
|
||||
Next, select the desired :guilabel:`Bank Journal` the paychecks are logged on. Last, using the
|
||||
calendar selector, set the date the paychecks are issued in the :guilabel:`Effective Date` field.
|
||||
|
||||
Once the pop-up window is configured, click the :guilabel:`Generate` button, and the file appears on
|
||||
the batch form, in a new :guilabel:`Payment Report` field.
|
||||
|
||||
After the report is created, click the :guilabel:`Mark as paid` button to mark the payslips as paid
|
||||
in the database.
|
||||
|
||||
.. image:: batches/generate-payslips.png
|
||||
:alt: Adding individual payslips to a batch by selecting them form this list.
|
||||
|
Before Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 7.7 KiB |
|
Before Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 13 KiB |
199
content/applications/hr/payroll/pay_runs.rst
Normal file
@@ -0,0 +1,199 @@
|
||||
========
|
||||
Pay runs
|
||||
========
|
||||
|
||||
*Pay runs* are used to generate multiple :doc:`payslips <payslips>` at once and process them in a
|
||||
group, rather than create and process individual payslips. This method not only helps the payroll
|
||||
department pay employees in less time, but it also helps keep payslips organized.
|
||||
|
||||
Typically, a company's payroll department :ref:`creates a new pay run <payroll/new-pay-run>` for
|
||||
each salary structure, for every pay period (usually weekly, bi-weekly, or monthly). If desired, pay
|
||||
runs can be further organized by department, job position, etc.
|
||||
|
||||
Once a pay run is made, :ref:`payslips are added to the pay run <payroll/add-payslips>`, then the
|
||||
pay run is processed, and employees are paid.
|
||||
|
||||
View pay runs
|
||||
=============
|
||||
|
||||
To view all the pay runs in the database, navigate to :menuselection:`Payroll app --> Payslips -->
|
||||
Pay Runs` to display all payslip pay runs that have been created. These payslip pay runs are
|
||||
displayed in a list view, grouped by :icon:`oi-group` :guilabel:`Status` (either :guilabel:`Ready`,
|
||||
:guilabel:`Done`, or :guilabel:`Paid`), by default.
|
||||
|
||||
Each pay run displays the name, the dates the pay run includes, the number of payslips, and the
|
||||
total :guilabel:`employer cost`, :guilabel:`gross`, and :guilabel:`net` amounts for all payslips.
|
||||
|
||||
.. image:: pay_runs/pay-runs.png
|
||||
:alt: View displaying all pay runs created.
|
||||
|
||||
.. _payroll/new-pay-run:
|
||||
|
||||
Create a new pay run
|
||||
====================
|
||||
|
||||
New pay runs can be created from the :ref:`Work Entry <payroll/work-entry-pay-run>`, :ref:`Employee
|
||||
Payslips <payroll/payslips-pay-run>`, or :ref:`Pay Runs <payroll/pay-runs-pay-run>` dashboards.
|
||||
|
||||
.. _payroll/work-entry-pay-run:
|
||||
|
||||
Work entry dashboard
|
||||
--------------------
|
||||
|
||||
To create a pay run from the work entry dashboard, navigate to :menuselection:`Payroll app --> Work
|
||||
Entries --> Work Entries`. The current time period is displayed, with the current day highlighted in
|
||||
yellow.
|
||||
|
||||
All employees appear in a default Gantt view, with all work entries displayed. If necessary,
|
||||
navigate to the desired time-period.
|
||||
|
||||
Once all :ref:`missing work entries are added <payroll/new-work-entry>` and all :ref:`conflicts are
|
||||
resolved <payroll/conflicts>`, click the :guilabel:`Generate Pay Run` button. The pay run is created
|
||||
for all employees, with a status of :guilabel:`Ready`.
|
||||
|
||||
.. image:: pay_runs/work-entries-pay-run.png
|
||||
:alt: The work entries dashboard with the GeneratePay Runs button visible.
|
||||
|
||||
.. _payroll/payslips-pay-run:
|
||||
|
||||
Employee payslips dashboard
|
||||
---------------------------
|
||||
|
||||
To create a pay run from the payslips dashboard, navigate to :menuselection:`Payroll app -->
|
||||
Payslips --> Payslips`. All payslips for all employees are displayed in a default list view, in
|
||||
chronological order.
|
||||
|
||||
.. _payroll/new-pay-run-pop-up:
|
||||
|
||||
Click the :guilabel:`Pay Run` button and a :guilabel:`New Pay Run` pop-up window loads. Select the
|
||||
:guilabel:`Salary Structure` using the drop-down menu. If no :guilabel:`Salary Structure` is
|
||||
selected, the pay run applies to *all* salary structures. Next, select the :guilabel:`Pay Schedule`,
|
||||
which is *how often* employees are paid. The default options are :guilabel:`year`,
|
||||
:guilabel:`half-year`, :guilabel:`quarter`, :guilabel:`2 months`, :guilabel:`month`,
|
||||
:guilabel:`half-month`, :guilabel:`2 weeks`, :guilabel:`week`, or :guilabel:`day`.
|
||||
|
||||
Last, using the calendar selector, set the first day the pay run covers in the first blank
|
||||
:guilabel:`Period` field. The second field is automatically populated based on the selection in the
|
||||
:guilabel:`Pay Schedule` field.
|
||||
|
||||
.. example::
|
||||
A company pays its employees every month. To configure the pay run for November, the
|
||||
:guilabel:`Pay Schedule` is set to :guilabel:`month`, and the first :guilabel:`Period` field is
|
||||
set to `Nov 1`. Once entered, the second field is automatically populated with `Nov 30`.
|
||||
|
||||
.. image:: pay_runs/new-pay-run.png
|
||||
:alt: A monthly pay run configured for November.
|
||||
|
||||
When the :guilabel:`New Pay Run` pop-up window is configured, click :guilabel:`Continue`, and the
|
||||
pop-up window changes to a :guilabel:`Select Employees` window. All employees that match the
|
||||
parameters set in the :guilabel:`New Pay Run` pop-up window appear in the list. Select the desired
|
||||
employees to add to the pay run, or click the box next to :guilabel:`Employees` to select *all*
|
||||
employees in the list.
|
||||
|
||||
.. image:: pay_runs/select-employees.png
|
||||
:alt: The pay run employee selection pop-up window.
|
||||
|
||||
Once all desired employees are selected, click :guilabel:`Select`. The pop-up window closes, and the
|
||||
pay run appears on the screen.
|
||||
|
||||
.. _payroll/pay-runs-pay-run:
|
||||
|
||||
Pay runs dashboard
|
||||
------------------
|
||||
|
||||
To create a pay run from the pay runs dashboard, navigate to :menuselection:`Payroll app -->
|
||||
Payslips --> Pay Runs`. Click the :guilabel:`New` button and a :guilabel:`New Pay Run` pop-up window
|
||||
loads.
|
||||
|
||||
Follow the same directions as if creating a :ref:`pay run form the payslips dashboard
|
||||
<payroll/new-pay-run-pop-up>`.
|
||||
|
||||
.. _payroll/add-payslips:
|
||||
|
||||
Add a payslips to a pay run
|
||||
===========================
|
||||
|
||||
Once a :ref:`pay run has been created <payroll/new-pay-run>`, payslips are added as part of the pay
|
||||
run creation. If needed, additional payslips can be created individually, and added to a pay run
|
||||
after it has been created.
|
||||
|
||||
To add a new payslip, navigate to :menuselection:`Payroll app --> Payslips --> Payslips`. click the
|
||||
:guilabel:`New Off-Cycle` button and a blank :guilabel:`Employee Payslips` form loads.
|
||||
:ref:`Configure the payslip form <payroll/new-payslip>`, and ensure the :guilabel:`Pay Run` field is
|
||||
populated.
|
||||
|
||||
Once the form is configured, click :guilabel:`Compute Sheet` to calculate the payslip and add it to
|
||||
the selected pay run.
|
||||
|
||||
.. _payroll/pay run-process:
|
||||
|
||||
Process a pay run
|
||||
=================
|
||||
|
||||
After a :ref:`pay run has been created <payroll/new-pay-run>` , and :ref:`all required payslips have
|
||||
been added <payroll/add-payslips>`, the pay run must then be processed, and employees paid.
|
||||
|
||||
Open the desired pay run by navigating to :menuselection:`Payroll app --> Payslips --> Pay Runs`,
|
||||
and clicking on the desired pay run.
|
||||
|
||||
For a pay run to be processed, it must have a status of :guilabel:`Ready`. That means the pay run
|
||||
has been created and payslips have been added, but the payslips have *not* been processed.
|
||||
|
||||
Click the :guilabel:`Create Draft Entry` button, then click :guilabel:`OK` in the
|
||||
:guilabel:`Confirmation` pop-up window to confirm and create a draft of all the individual payslips
|
||||
in the pay run. After this occurs, the pay run status changes to :guilabel:`Done`, and moves to the
|
||||
corresponding grouping on the :guilabel:`Pay Runs` dashboard.
|
||||
|
||||
.. tip::
|
||||
At any time, the pay run needs to be reverted back to a status of :guilabel:`Ready`, click the
|
||||
:guilabel:`Revert` button. This action does **not** remove any payslips that have already been
|
||||
added to the pay run, instead, the status changes back to :guilabel:`Ready`.
|
||||
|
||||
After any desired changes have been made, click :guilabel:`Create Draft Entry` and the pay run
|
||||
status changes to :guilabel:`Done`.
|
||||
|
||||
It is important to note, that if any payslips in the pay run have a status of :guilabel:`Paid`,
|
||||
the pay run **cannot** revert to a status of :guilabel:`Ready`.
|
||||
|
||||
Once the status has changed to :guilabel:`Done`, the payments must be logged in the database. Click
|
||||
the :guilabel:`Payment Report` button, and a pop-up window loads, where the payment report details
|
||||
are entered.
|
||||
|
||||
Using the drop-down menu, select the :guilabel:`Export Format` for the payment report. The universal
|
||||
option is :guilabel:`CSV`, while all other available options depend on the installed :doc:`payroll
|
||||
localization <payroll_localizations>`.
|
||||
|
||||
Next, select the :guilabel:`Payment Date` using the calendar selector. This is the date the
|
||||
paychecks are issued.
|
||||
|
||||
Some :doc:`payroll localizations <payroll_localizations>` cause a :guilabel:`Bank Journal` field to
|
||||
also appear. If visible, select the journal the payslips are logged on, using the drop-down menu.
|
||||
|
||||
Once the pop-up window is configured, click the :guilabel:`Generate` button. The :guilabel:`Payment
|
||||
Report` button changes to a :icon:`fa-download` :guilabel:`Download (filetype)` button. To save a
|
||||
copy of the payment report, click the :icon:`fa-download` :guilabel:`Download (filetype)` button,
|
||||
select the location for the file, then click :guilabel:`Save`.
|
||||
|
||||
.. note::
|
||||
If the screen is enlarged beyond a certain amount, the :icon:`fa-download` :guilabel:`Download
|
||||
(filetype)` button is hidden from view. In this scenario, click the :icon:`fa-ellipsis-v`
|
||||
:guilabel:`(vertical ellipsis)` icon to view and select the :icon:`fa-download`
|
||||
:guilabel:`Download (filetype)` option.
|
||||
|
||||
After the report is created, click the :guilabel:`Mark as paid` button to mark the payslips as paid
|
||||
in the database.
|
||||
|
||||
.. tip::
|
||||
Odoo automatically creates the name of the pay run according to the various selections made when
|
||||
creating the pay run (salary structure, pay schedule, etc). In some situations, a company may
|
||||
want to rename the pay runs, for better organization and a clearer understanding of what pay
|
||||
slips are part of each pay run.
|
||||
|
||||
For example, a company pays their employees monthly, for both hourly and salaried employees.
|
||||
|
||||
The names for their four August 2025 pay runs are:
|
||||
|
||||
- `Aug 1-14 2025 - Hourly`
|
||||
- `Aug 1-14 2025 - Salary`
|
||||
- `Aug 15-31 2025 - Hourly`
|
||||
- `Aug 15-31 2025 - Salary`
|
||||
BIN
content/applications/hr/payroll/pay_runs/new-pay-run.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
content/applications/hr/payroll/pay_runs/pay-runs.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
content/applications/hr/payroll/pay_runs/select-employees.png
Normal file
|
After Width: | Height: | Size: 47 KiB |
|
After Width: | Height: | Size: 42 KiB |