<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.dolibarr.org/index.php?action=history&amp;feed=atom&amp;title=Odoo_Payroll</id>
	<title>Odoo Payroll - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.dolibarr.org/index.php?action=history&amp;feed=atom&amp;title=Odoo_Payroll"/>
	<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Odoo_Payroll&amp;action=history"/>
	<updated>2026-10-23T06:49:08Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Odoo_Payroll&amp;diff=67485&amp;oldid=prev</id>
		<title>Abahfir at 16:25, 29 September 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Odoo_Payroll&amp;diff=67485&amp;oldid=prev"/>
		<updated>2026-09-29T16:25:07Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 16:25, 29 September 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l5&quot;&gt;Line 5:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 5:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Publisher’s official website:&amp;lt;/strong&amp;gt; [https://01consulting.eu 01 Consulting]&amp;lt;/p&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Publisher’s official website:&amp;lt;/strong&amp;gt; [https://01consulting.eu 01 Consulting]&amp;lt;/p&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Demonstration video:&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Demonstration video:&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;youtube width=&amp;quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;200&lt;/del&gt;&amp;quot; height=&amp;quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;120&lt;/del&gt;&amp;quot;&amp;gt;aeqG94iA8yQ&amp;lt;/youtube&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;youtube width=&amp;quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;560&lt;/ins&gt;&amp;quot; height=&amp;quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;315&lt;/ins&gt;&amp;quot;&amp;gt;aeqG94iA8yQ&amp;lt;/youtube&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;h2&amp;gt;1. Overview&amp;lt;/h2&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;h2&amp;gt;1. Overview&amp;lt;/h2&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Abahfir</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Odoo_Payroll&amp;diff=67484&amp;oldid=prev</id>
		<title>Abahfir: module odoo payroll</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Odoo_Payroll&amp;diff=67484&amp;oldid=prev"/>
		<updated>2026-09-29T16:24:39Z</updated>

		<summary type="html">&lt;p&gt;module odoo payroll&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;div style=&amp;quot;width:100%;font-family:Arial,sans-serif;font-size:16px;line-height:1.6;color:#222;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Odoo Payroll — Payroll for Dolibarr&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Summary:&amp;lt;/strong&amp;gt; management of payroll rules and structures, payroll contracts, and payslips for Dolibarr internal users.&amp;lt;br&amp;gt;&amp;lt;strong&amp;gt;Module version:&amp;lt;/strong&amp;gt; 1.0.0&amp;lt;br&amp;gt;&amp;lt;strong&amp;gt;Declared minimum Dolibarr version:&amp;lt;/strong&amp;gt; 18.0&amp;lt;br&amp;gt;&amp;lt;strong&amp;gt;Declared minimum PHP version:&amp;lt;/strong&amp;gt; 7.4&amp;lt;br&amp;gt;&amp;lt;strong&amp;gt;Versions actually verified:&amp;lt;/strong&amp;gt; no Dolibarr or PHP version was tested during this documentation review.&amp;lt;br&amp;gt;&amp;lt;strong&amp;gt;Last reviewed:&amp;lt;/strong&amp;gt; 2026-09-29&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Publisher’s official website:&amp;lt;/strong&amp;gt; [https://01consulting.eu 01 Consulting]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Demonstration video:&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;youtube width=&amp;quot;200&amp;quot; height=&amp;quot;120&amp;quot;&amp;gt;aeqG94iA8yQ&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;1. Overview&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Odoo Payroll is a native payroll module for Dolibarr, developed by 01 Consulting. Despite its name, it is installed in Dolibarr and does not require an Odoo instance. It lets administrators configure salary categories and rules, group them into structures, assign these structures to employee contracts, and calculate payslips.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The engine provides a configurable calculation framework; it does not guarantee compliance with any legislation, collective agreement, tax scale, or social contribution schedule. CNAS, IRG, and other applicable statutory rules must be designed and approved by a payroll specialist before production use.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;2. Features&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Salary rule categories, which can be organized hierarchically.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Salary structures containing rules and optionally inheriting from a parent structure.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Conditional rules with fixed amounts, percentages, or controlled arithmetic formulas.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Contracts linked to Dolibarr users, with salary, weekly hours, dates, contract type, and department.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Payslip line calculation, gross and net totals, validation, and status tracking.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Individual payslip creation and batch generation for multiple employees.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Moving a validated payslip back to draft, canceling validated payslips, and mass actions, subject to permissions and settings.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PDF payslip generation and integration with Dolibarr’s native salary payment workflow.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A Payroll tab on user cards, Dolibarr import profiles, and filtering by the active entity.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;3. Requirements and compatibility&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Dolibarr:&amp;lt;/strong&amp;gt; the module descriptor declares Dolibarr 18.0 as the minimum version. The version actually verified for this wiki is “none”.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;PHP:&amp;lt;/strong&amp;gt; the descriptor declares PHP 7.4 as the minimum; no runtime testing was performed during this review.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Required Dolibarr modules:&amp;lt;/strong&amp;gt; Users (&amp;lt;code&amp;gt;modUser&amp;lt;/code&amp;gt;) and Salaries (&amp;lt;code&amp;gt;modSalaries&amp;lt;/code&amp;gt;).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Database:&amp;lt;/strong&amp;gt; initialization creates triggers using MySQL/MariaDB syntax. Compatibility with other SQL database engines has not been established. The database account must be able to create and drop triggers.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Documents:&amp;lt;/strong&amp;gt; the generation process must be able to create files in the module’s output directory under Dolibarr documents.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;4. Installation, update, and deactivation&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;4.1. Installation and activation&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Check that Dolibarr’s &amp;lt;strong&amp;gt;Users&amp;lt;/strong&amp;gt; and &amp;lt;strong&amp;gt;Salaries&amp;lt;/strong&amp;gt; modules are available.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Install the module directory in &amp;lt;code&amp;gt;htdocs/custom/payroll&amp;lt;/code&amp;gt;, or in the custom directory configured for external modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In Dolibarr, open &amp;lt;strong&amp;gt;Home &amp;amp;gt; Setup &amp;amp;gt; Modules/Applications&amp;lt;/strong&amp;gt;, find &amp;lt;strong&amp;gt;Payroll&amp;lt;/strong&amp;gt;, and enable the module.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;On activation, the module loads its SQL tables, adds certain missing contract columns, adds a salary extra field for linking a payslip, and attempts to create three triggers on salary tables.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Check that &amp;lt;strong&amp;gt;HRM &amp;amp;gt; Payroll&amp;lt;/strong&amp;gt; appears and the setup page opens. Before processing real payroll, run a complete calculation with test data and verify the PDFs and payment triggers.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Activation also installs menus, permissions, and import profiles. If trigger creation fails, automatic status changes associated with payments will not work correctly; review the database error and Dolibarr logs.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;4.2. Updating&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Back up the Dolibarr database and documents before replacing module files.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Install the updated files. Deactivate and reactivate the module if initialization of new tables, columns, or triggers needs to run again.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Review existing categories, rules, contracts, and payslips, and check the triggers on salary tables.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Generate a test payslip, open its PDF, and verify the output path and user permissions.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The activation script checks for and adds certain missing contract columns, then makes the rule category mandatory after attempting to assign a category to orphaned rules. Migration details depend on the previous version and existing schema; back up the database before proceeding.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;4.3. Deactivation and removal&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Deactivation hides the salary-to-payslip linking extra field and removes the three triggers created by the module. The deactivation process does not delete the payroll tables. The effects of manually removing the tables or module directory have not been established; do not delete this data without a backup and a defined migration procedure.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;5. Configuration&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Open the module’s &amp;lt;strong&amp;gt;Setup&amp;lt;/strong&amp;gt; page in Dolibarr. Access is limited to administrators and users with the &amp;lt;code&amp;gt;payroll-&amp;amp;gt;setup&amp;lt;/code&amp;gt; permission. The values below are the module’s declared initial values or the fallbacks used by the page; a value already saved for an entity may differ.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; style=&amp;quot;width:100%;border-collapse:collapse;border-color:#dee2e6;text-align:left;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Setting&amp;lt;/th&amp;gt;&amp;lt;th style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Initial value or fallback&amp;lt;/th&amp;gt;&amp;lt;th style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Effect&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Payslip numbering&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Standard model; declared mask &amp;lt;code&amp;gt;PSL{00000}&amp;lt;/code&amp;gt;. The page falls back to &amp;lt;code&amp;gt;PAY{00000}&amp;lt;/code&amp;gt; if no mask is saved.&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Sets generated payslip references. Check the value shown in Setup after installation.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Contract numbering&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Standard model, mask &amp;lt;code&amp;gt;CTR{00000}&amp;lt;/code&amp;gt;.&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Sets contract references.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;&amp;lt;code&amp;gt;PAYROLL_ALLOW_CANCEL_CONFIRMED_PAYSLIPS&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Disabled (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;).&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Allows a validated payslip to be returned to draft or canceled.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;&amp;lt;code&amp;gt;PAYROLL_CONFIRM_PAYSLIPS_WITHOUT_RECOMPUTING&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Enabled (&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;).&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Prevents automatic recalculation during validation. When disabled, validation recalculates the payslip.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;&amp;lt;code&amp;gt;PAYROLL_ALLOW_EDIT_PAYSLIP_LINES&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Disabled (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;).&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;When enabled, allows selected fields on draft payslip lines to be edited manually.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Default bank account&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;None.&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Value proposed in the payment workflow; this setting is shown when the Bank module is enabled.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Default payment method&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;None.&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Payment method proposed in the salary payment workflow.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Contract types and departments&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Dictionaries managed in Setup.&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Add active codes and labels; an entry used by a contract cannot be deleted.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Numbering masks must contain at least four zeroes inside braces, for example &amp;lt;code&amp;gt;PAY{00000}&amp;lt;/code&amp;gt;. Available numbering models can be selected on the Setup page. Configuration constants are saved for the current Dolibarr entity.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;6. Preparing payroll configuration&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;6.1. Categories&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In &amp;lt;strong&amp;gt;HRM &amp;amp;gt; Payroll &amp;amp;gt; Salary Rule Categories&amp;lt;/strong&amp;gt;, create a category with a code and label.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Optionally choose a parent category to organize the hierarchy.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Enable or disable the category according to its use.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Codes are used in formulas as category totals prefixed with &amp;lt;code&amp;gt;CAT_&amp;lt;/code&amp;gt;, for example &amp;lt;code&amp;gt;CAT_BASIC&amp;lt;/code&amp;gt;. A code used in a formula must follow the characters accepted by the page and import profiles.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;6.2. Salary structures&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In &amp;lt;strong&amp;gt;Structures&amp;lt;/strong&amp;gt;, create a structure with a reference and label.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Link rules to the structure and set their sequence order.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Optionally select a parent structure. The engine loads rules linked to the structure and its chain of parent structures.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Save the structure and assign it to a contract.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;A structure referenced by a contract or child structure is protected from deletion by the module’s dependency checks.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;6.3. Salary rules and calculations&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;A rule has a code, label, category, sequence number, condition, and computation type. Only active rules linked to the structure are loaded. Rules are calculated in ascending sequence order; rules already calculated are available by their code to later rules.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Always true:&amp;lt;/strong&amp;gt; applies the rule without an additional condition.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Range:&amp;lt;/strong&amp;gt; compares the salary with configured minimum and maximum values; both endpoints are inclusive.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Expression:&amp;lt;/strong&amp;gt; evaluates a condition such as &amp;lt;code&amp;gt;WAGE &amp;amp;gt;= 90000&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Fixed amount:&amp;lt;/strong&amp;gt; configured amount multiplied by the quantity expression; the model’s default quantity is &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Percentage:&amp;lt;/strong&amp;gt; applies a rate to a base expression; a negative percentage can represent a deduction.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Formula:&amp;lt;/strong&amp;gt; evaluates a configured arithmetic expression.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Show on payslip:&amp;lt;/strong&amp;gt; controls whether the corresponding line appears in the PDF.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The engine accepts numbers, variables, parentheses, and the &amp;lt;code&amp;gt;+ - * /&amp;lt;/code&amp;gt; operators. Comparison operators &amp;lt;code&amp;gt;&amp;amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;gt;=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;==&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;!=&amp;lt;/code&amp;gt; are accepted in a condition. It does not execute PHP, Python, or arbitrary functions. An unknown variable, invalid operator, or division by zero stops the calculation with an error.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; style=&amp;quot;width:100%;border-collapse:collapse;border-color:#dee2e6;text-align:left;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Variable&amp;lt;/th&amp;gt;&amp;lt;th style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Value used&amp;lt;/th&amp;gt;&amp;lt;th style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Example&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;&amp;lt;code&amp;gt;WAGE&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Salary from the contract linked to the payslip.&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;&amp;lt;code&amp;gt;WAGE&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;&amp;lt;code&amp;gt;WORK_HOURS&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Contract’s weekly hours.&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;&amp;lt;code&amp;gt;WAGE / WORK_HOURS&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;&amp;lt;code&amp;gt;WORKED_DAYS&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Worked days entered on the payslip.&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;&amp;lt;code&amp;gt;WAGE * WORKED_DAYS / MONTH_DAYS&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;&amp;lt;code&amp;gt;MONTH_DAYS&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Weekdays, Monday through Friday, in the payslip period.&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;&amp;lt;code&amp;gt;WORKED_DAYS / MONTH_DAYS&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Earlier rule codes&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Amount calculated by an earlier rule in sequence order.&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;&amp;lt;code&amp;gt;BASIC + PRIME&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;&amp;lt;code&amp;gt;CAT_CODE&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Calculated total for a category; an empty total starts at zero.&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;&amp;lt;code&amp;gt;CAT_BASIC + CAT_ALW + CAT_DED&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;MONTH_DAYS&amp;lt;/code&amp;gt; does not exclude public holidays: only Saturdays and Sundays are excluded. Formula examples illustrate syntax and are not recommended payroll scales.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Gross and net totals are taken from rules with the codes &amp;lt;code&amp;gt;GROSS&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;NET&amp;lt;/code&amp;gt;. If these rules do not provide the totals, the engine falls back to categories with those codes.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;6.4. Contracts&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In &amp;lt;strong&amp;gt;Contracts&amp;lt;/strong&amp;gt;, create a contract for an internal Dolibarr user.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Enter the structure, salary, weekly hours, start date, and, if applicable, end date.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Optionally select a contract type and department from the configured dictionaries.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Save and activate the contract if it should be offered for batch generation.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;A contract must have an employee and a start date. The module’s forms and classes prevent deleting certain referenced records, including a contract linked to payslips.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;7. Managing payslips&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;7.1. Create and calculate an individual payslip&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Open &amp;lt;strong&amp;gt;HRM &amp;amp;gt; Payroll &amp;amp;gt; Employee Payslips&amp;lt;/strong&amp;gt;, then create a payslip.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select the employee and contract, set the period, and enter the number of worked days. Creating a payslip requires &amp;lt;code&amp;gt;payroll-&amp;amp;gt;write&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Save the payslip; it starts in &amp;lt;strong&amp;gt;Draft&amp;lt;/strong&amp;gt; status.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Click &amp;lt;strong&amp;gt;Compute&amp;lt;/strong&amp;gt;. Calculation requires a contract and an available salary structure. If no structure is saved on the payslip yet, the contract’s structure is assigned to it.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Review the lines, gross, and net amounts. While the payslip is a draft, correct the configuration or data and compute it again.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Validate it with a user who has the &amp;lt;code&amp;gt;payroll-&amp;amp;gt;validate&amp;lt;/code&amp;gt; permission. Review the result before validation because the initial setting prevents recalculation at this step.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If the period is reversed, a contract or structure is missing, a variable is unknown, or an expression is invalid, calculation displays an error and must not be treated as complete.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;7.2. Generate payslips in a batch&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Open &amp;lt;strong&amp;gt;HRM &amp;amp;gt; Payroll &amp;amp;gt; Payslip Batches&amp;lt;/strong&amp;gt; and create a batch with a label and valid period.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;On the batch card, run &amp;lt;strong&amp;gt;Generate&amp;lt;/strong&amp;gt;. The module selects active contracts with a structure whose dates overlap all or part of the batch period, and for which the batch does not already contain a payslip.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The module creates one draft per eligible contract with &amp;lt;strong&amp;gt;22 worked days&amp;lt;/strong&amp;gt;, then attempts to compute the batch’s draft payslips. Review and correct worked days if the actual situation differs.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Review calculation errors and correct the affected contracts, structures, or rules before validation.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Validate the batch payslips. The action is refused if there are no drafts or if a draft has no calculated lines. When validation succeeds, the batch is closed.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Running generation again in the same batch does not add a second payslip for a contract already included in that batch. This check is by contract and batch; it does not generally prevent two separate batches from covering the same period.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;7.3. Statuses, returning to draft, and cancellation&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Draft (0):&amp;lt;/strong&amp;gt; can be computed and deleted individually; lines can be edited if &amp;lt;code&amp;gt;PAYROLL_ALLOW_EDIT_PAYSLIP_LINES&amp;lt;/code&amp;gt; is enabled.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Validated (1):&amp;lt;/strong&amp;gt; status reached after validation. Whether validation recalculates the payslip depends on the setting described above.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Paid (2):&amp;lt;/strong&amp;gt; status associated with the Dolibarr salary payment when the payslip is linked to the corresponding salary.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Canceled (9):&amp;lt;/strong&amp;gt; canceled payslip status.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;When &amp;lt;code&amp;gt;PAYROLL_ALLOW_CANCEL_CONFIRMED_PAYSLIPS&amp;lt;/code&amp;gt; is enabled, a user with validation permission can return a validated payslip to draft, cancel it, and use the &amp;lt;strong&amp;gt;Set to draft&amp;lt;/strong&amp;gt; mass action from the payslip list. The mass action only processes selected validated payslips. The individual action checks the permission and setting before changing the status; review the payslip and any linked salary before using it.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;A paid payslip must not be treated like an ordinary validated payslip: salary synchronization may change its status, and a batch cannot be reopened or deleted if it contains paid payslips. Individual payslip deletion is limited to drafts and also deletes their calculation lines.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;7.4. Reopen or delete a batch&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;A closed batch can be reopened by a user with validation permission if none of its payslips are paid. Reopening returns the batch’s validated payslips to draft. Deleting a batch requires delete permission and deletes the batch, its payslips, and their lines; deletion is refused if a paid payslip is present. This deletion is permanent: review the list shown in the confirmation before proceeding.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;8. Employee card, payment, and PDF&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;8.1. Employee Payroll tab&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The module adds a &amp;lt;strong&amp;gt;Payroll&amp;lt;/strong&amp;gt; tab to user cards. A user with Payroll read permission can view the tab; an employee can also open their own card. The tab lists that employee’s contracts and payslips. Creation buttons depend on the &amp;lt;code&amp;gt;payroll-&amp;amp;gt;write&amp;lt;/code&amp;gt; permission. The page filters results by the active Dolibarr entity.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;8.2. Link a payslip to Dolibarr’s native salary payment&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;When activated, the module adds an extra field to a Dolibarr salary for selecting a paid payslip belonging to the same employee. A constraint prevents linking the same payslip to multiple salaries. The SQL trigger synchronizes the payslip status when the salary’s paid value changes: it changes the linked payslip from validated to paid when the salary is marked paid, and back to validated when the salary is marked unpaid.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The Dolibarr trigger associated with creating a salary payment also sets the linked payslip status to paid. These automations depend on the extra field, the selected link, and successful trigger installation.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;8.3. Generate and view the PDF&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Open the payslip card and start document generation.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The module produces an A4 PDF showing the company, employee, status, contract, structure, period, worked days, visible lines, and gross/net totals.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Rules marked “show on payslip” are included; other rules are omitted from the detailed table.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The PDF is saved in the module output directory for the active entity, or, if none is configured, in &amp;lt;code&amp;gt;DOL_DATA_ROOT/payroll&amp;lt;/code&amp;gt;, inside a directory named after the payslip reference. The card can then display or download it.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Generating the PDF again writes to the same payslip reference. Existing documents are not automatically deleted when the payslip status changes.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;9. Menus, permissions, and visibility&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; style=&amp;quot;width:100%;border-collapse:collapse;border-color:#dee2e6;text-align:left;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Dolibarr permission&amp;lt;/th&amp;gt;&amp;lt;th style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Purpose&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;&amp;lt;code&amp;gt;payroll-&amp;amp;gt;read&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;View the dashboard, payslips, batches, and documents; access help; grants read access to several lists.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;&amp;lt;code&amp;gt;payroll-&amp;amp;gt;setup&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Configure categories, rules, structures, contracts, and settings. Administrators also have access to setup.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;&amp;lt;code&amp;gt;payroll-&amp;amp;gt;write&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Create and edit payslips, contracts, and batches according to each page’s checks; run calculations.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;&amp;lt;code&amp;gt;payroll-&amp;amp;gt;validate&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Validate payslips; subject to the setting, return or cancel validated payslips; validate or reopen batches.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;&amp;lt;code&amp;gt;payroll-&amp;amp;gt;delete&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Delete records allowed by their status and dependencies.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Category, rule, structure, and contract menus are under &amp;lt;strong&amp;gt;HRM &amp;amp;gt; Payroll&amp;lt;/strong&amp;gt; and require the setup permission. Access to payslips and batches requires read permission; creation requires the corresponding write permission. Native Dolibarr permissions for Users and Salaries are also relevant.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;10. Data, imports, triggers, and logs&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Stored data:&amp;lt;/strong&amp;gt; categories, rules, structures, structure-rule links, contracts, payslips, calculation lines, and batches in module tables; the payslip link is stored in an extra field on the Salary object.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Imports:&amp;lt;/strong&amp;gt; import profiles are declared for categories, rules, structures, and structure-rule links. Contracts and payslips are not listed among the import profiles in the module descriptor.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;SQL triggers:&amp;lt;/strong&amp;gt; one trigger synchronizes certain status changes between the paid salary and linked payslip. Two other triggers prevent a payslip from being linked to different salaries.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Dolibarr trigger:&amp;lt;/strong&amp;gt; when a salary payment is created, the module sets the linked payslip to paid.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Observed technical log:&amp;lt;/strong&amp;gt; the payment trigger writes timestamps, salary identifiers, SQL results, and error messages to &amp;lt;code&amp;gt;/tmp/payroll_debug.log&amp;lt;/code&amp;gt;. The module does not manage this file’s rotation, retention, or permissions; the server administrator should review them.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Files:&amp;lt;/strong&amp;gt; generated PDFs are written under the module document output directory described in the PDF section. The module descriptor declares no scheduled job or purge policy for payslips, payroll data, or PDFs.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Multi-entity:&amp;lt;/strong&amp;gt; operations and lists are filtered by the active Dolibarr entity; configuration constants are saved for that entity.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;11. Troubleshooting&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; style=&amp;quot;width:100%;border-collapse:collapse;border-color:#dee2e6;text-align:left;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Symptom&amp;lt;/th&amp;gt;&amp;lt;th style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Checks&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;The Payroll menu or a page is inaccessible.&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Check that the module is enabled, the user has the required Payroll permission, and the native Users and Salaries modules are enabled.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Calculation does not start or returns an error.&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Check the employee, contract, structure, dates, active rules, sequences, and expression syntax. An unknown variable or division by zero stops calculation.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Validation does not update the amounts.&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;The initial setting disables recalculation during validation. Recompute the draft first or change this setting according to the payroll procedure.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;The batch generates no payslips.&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Check the batch period and whether active contracts have a structure and overlap the period. Also check whether a payslip for the contract already exists in this batch.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Batch validation is refused.&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Each draft must have at least one calculated line. Recompute or correct the indicated payslips before retrying validation.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;The payslip selection field is missing from a salary.&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Check module activation and whether the extra field was installed/enabled on the Salary object. Reactivate the module if needed, with sufficient SQL permissions.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;The paid status does not follow a Dolibarr payment.&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Check that the payslip is linked to the correct salary, that triggers are installed, and review Dolibarr logs and &amp;lt;code&amp;gt;/tmp/payroll_debug.log&amp;lt;/code&amp;gt;.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;The PDF is missing or cannot be opened.&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding:8px;border:1px solid #dee2e6;&amp;quot;&amp;gt;Check the web server’s write access to the output directory and whether the document exists. Review the error message and Dolibarr logs.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;12. Limitations and precautions&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Have all payroll formulas reviewed by a specialist familiar with the applicable legislation before processing real salaries.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;MONTH_DAYS&amp;lt;/code&amp;gt; excludes Saturdays and Sundays but includes public holidays; it does not use a leave calendar.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;With the initial configuration, validating a payslip does not recalculate it. Review the lines and recompute explicitly before validation if the data has changed.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Batch generation initially uses 22 worked days for each payslip it creates. Adjust this value to the actual situation before validation.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Returning a payslip to draft or canceling it depends on a setting that is disabled by default. Coordinate status changes for payslips linked to salaries with Dolibarr’s accounting and payment tracking.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Deleting a batch deletes its payslips and calculations unless a paid payslip blocks the operation. Review the batch before confirming deletion.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Automatic status synchronization depends on MySQL/MariaDB triggers and database permissions to create triggers; compatibility with other database engines remains unconfirmed.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;13. Support&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;When reporting a problem, provide the module version, Dolibarr and PHP versions, affected entity, reproduction steps, and an error message with names, salary amounts, and other personal data removed. The module is published by [https://01consulting.eu 01 Consulting]. No support email address was found in the reviewed module files.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
[[fr:Odoo_Payroll_FR]]&lt;/div&gt;</summary>
		<author><name>Abahfir</name></author>
	</entry>
</feed>