[IMP] Payroll: Batches replaced by Pay Runs

This commit is contained in:
larm-odoo
2025-12-11 14:59:31 -05:00
parent 6874b14169
commit 43045848cc
12 changed files with 202 additions and 207 deletions

View File

@@ -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

View File

@@ -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.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

View 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`

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB