✅ Prerequisites for Salary Generation
Before generating salary, ensure all the following areas are correctly configured and updated. If any of these are missing or incorrect, the salary process may fail or produce wrong results.
1️⃣ Employee Data is Updated
Make sure the following details are correctly entered for all employees:
- Is Employee = true — Only users marked as employees will be processed in salary generation. (A user can be saved with Is Employee on even before HR fills the rest of the employee data, but salary will only run once the salary record below is in place.)
- Joining Date — Must be present. The employee must have joined on or before the selected month.
- Resignation Date (if applicable) — If the employee has resigned, the date must be filled and must be on or after the salary month to include them.
- Salary Configuration — Each employee must have at least one salary record with Effective Date ≤ selected month. To learn more about the salary data to be entered, visit Add Salary Data.
- PF / ESIC Details — If PF or ESIC is applicable, ensure:
- PF / ESIC checkboxes are ticked in salary config.
- Required fields (PF Number, UAN, Insurance ID) are filled. Insurance ID now accepts alphanumeric values.
- ESIC follows the ESI Act 1948 ₹21,000 monthly-wage coverage threshold — employees above the threshold are excluded automatically.
- Professional Tax — Professional Tax is now slab-based and is read from Settings → Salary Settings. Make sure your slabs are configured for the relevant state.
- TDS Setup (if applicable) (ref → How TDS is Calculated?) — If TDS is enabled for the employee, the system must have:
- An Annual TDS entry for the selected financial year. Multiple TDS records per employee per FY are supported (for prior-employer figures, mid-year revisions, etc.).
- TDS will be auto-distributed across the remaining months of the financial year.
2️⃣ Leaves are Recorded
Ensure all leaves are managed properly for the selected month:
- Leave Entries Added — All leaves (approved or pending) should be created in the system for each employee.
- No “Pending” Leaves — If any leave entry is still in “Pending” status for the selected month, salary generation will be blocked.
- Leave Approval Status — All applicable leaves must be either:
- Approved (and they will be marked Paid / Unpaid based on balance), or
- Rejected (and ignored during salary).
- Leave Balance Accuracy — Leave balances must be up to date. The system auto-deducts or flags overuse based on real-time balance.
- Leave Type Configuration — Leave types should be configured properly (e.g., Monthly / Yearly accrual, encashment, sandwich rules, probation restrictions). Encashment now uses a /30-day divisor (not /26).
- Leave Starting Balance — If your tenant has not yet imported the leave-starting balance for any employee, the system will prompt you with a one-time Salary Confirmation popup before opening the Generate Salary dialog. You will need to type the confirmation phrase shown in the popup to proceed. (Bulk leave-starting-balance import is locked to the current financial month/year and is allowed only once, while salary is empty.)
3️⃣ Allowances are Added
Verify if additional payments or deductions are in place:
- Unpaid Allowances for the Month — Any allowances or one-time payments (Commission, Travel Allowance, Bonus / Ex-Gracia) that should be paid in this month should already be added under the Allowances module for the specific month. When salary is generated, those unpaid allowances will automatically be added to salary.
- Leave Encashment — If the company allows encashment of leaves, ensure:
- Leave types are configured for encashment.
- Eligible employees have an encashable balance.
- Other Salary Adjustments — Any salary component change (variable pay, commission, etc.) must be updated in the salary structure before generation.
⚠️ Allowances close once salary is generated
The Allowance module no longer has an Update permission. Once salary is generated for the month, you cannot edit or add allowances for that month — review and finalise allowances before you click Create.
4️⃣ Attendance Discrepancies (where applicable)
If the Attendance module is in use, the system also blocks salary generation when there are unresolved attendance discrepancies for the selected month. Open HRM → Leaves → Attendance × Leave Reconciliation (visible to roles with the Leave Override permission) and clear any flagged mismatches before generating salary. Attendance never auto-creates or auto-cancels Leave on its own — Salary keeps reading Leave directly, so any reconciliation you do here must result in a Leave entry (Paid / Unpaid / Unnotified) before salary will run cleanly.
📌 Make sure all required information is entered correctly to avoid system errors and to ensure the salary amount is calculated accurately.
🔁 Steps to Generate Salary
📍 Screen: HRM → Salary from the left sidebar → click the Generate button (top-right of the list). The Generate Salary popup opens — that popup is the screen where you complete the steps below.
- Go to HRM → Salary from the left sidebar.
- Click the Generate button.
- If a one-time Salary Confirmation popup appears (leave-starting-balance not yet imported), read the message, type the required confirmation phrase, and click OK to proceed. The Generate Salary popup will then open.
Inside the Generate Salary Popup
- Select the Month and Year you want to generate salary for.
📌 If your Salary Settings are configured to calculate salary based on working days, a Total Working Days field appears below Year. The system auto-calculates this value from your holiday / weekend settings (the field is read-only). You cannot proceed until the working-days value is loaded.
- Tick all 3 Confirmation Checkboxes:
- ✅ Employee Data is Updated — confirms designations, salary amount, resignation date, TDS amount, etc.
- ✅ Leaves are Recorded — confirms all approved and pending leaves for this period are accounted for.
- ✅ Allowances are Added — confirms applicable allowances, bonuses, and deductions are reviewed.
Each checkbox shows an info icon (ⓘ) you can hover for the exact reminder.
- Once all 3 are ticked, the Create button becomes active.
- Click Create.
⚠️ One generation per month per employee
If a salary record already exists for an employee for the selected month, the system skips that employee. To re-run a calculation, you would need to remove the existing record first — and if the salary has already been paid, regeneration is blocked entirely for that record. Plan your prerequisites carefully before clicking Create.
⚠️ Possible Errors During Generation
| ❌ Error Message | 🔍 Reason |
|---|---|
The following employees have TDS enabled but no TDS amount entered: Employee Code: X, Y | One or more employees have TDS = true but no Annual TDS entry recorded for the selected financial year. Add the missing TDS row from the Employee aside before retrying. |
Pending leaves exist for Employee Code: X for the selected month | Some employees have unapproved leave entries. Approve or delete them before generating salary. |
No salary record applicable for Employee X | The salary record’s Effective Date is after the selected month. Add a new salary record with the correct Effective Month / Year. |
Please fill mandatory fields. | Either the Month / Year is missing in the popup, or the Total Working Days value has not loaded yet (only when “Salary based on Working Days” is enabled). |
Attendance discrepancies are pending for the selected month | The Attendance module has flagged unresolved Attendance vs Leave conflicts. Open HRM → Leaves → Attendance × Leave Reconciliation, resolve the flagged rows, then retry. |
✅ Tips
- If the salary for the selected month already exists for an employee, the system skips processing that employee — no duplicate row is created.
- The Professional Tax slab and the company details (name, address, GSTIN, logo, state) are picked up automatically and stored on the salary record so the slip stays accurate even if the company profile is later edited.
- Before updating leave balances, the system takes a backup of leaves so the original state can be referenced if needed.
- Detailed leave processing happens internally:
- Leaves are checked in order, adjusted as Paid / Unpaid based on rules (probation, sandwich, notice period).
- Leave balances are updated.
- Changelogs are generated for both leave and user — captured at submit time, not on every keystroke.
- The system automatically handles leave accrual, carry forward, encashment (/30-day divisor), and overuse detection during processing.
- Any pending allowances for that month are retrieved and then marked as paid after the salary record is created.
- A TDS Challan row is auto-created / updated under Finance → TDS Challan. The challan flow is now unified across Salary and Expense and includes a Source column showing the originating Employee Name (for salary TDS) or Expense Number (for vendor TDS).
- A Payroll Credit snapshot row is created per statutory liability (PF / ESIC / Professional Tax) — strictly per-month, with no carry-forward. Each month’s statutory row stands alone and can be paid independently from the new Liability module.
- If your salary opening balance is 0 or the system detects no salary has been generated before, a confirmation popup appears so an empty / zero-month run is not created accidentally.
- The generated salary slip includes a Company Details block (logo, address, GSTIN, TAN) printed from the frozen point-in-time data on the salary record.
- Conveyance Allowance is now paid-day-based (not a flat full-month amount), so partial-month joiners and resigners are billed proportionally.

