🔍 What is Salary Data?
Salary Data is the structured pay package recorded against an employee — CTC, Basic %, HRA %, Conveyance, Variable Pay, and statutory contributions (PF, ESIC) — together with the month and year from which that package is effective. The system uses this data every time a salary is generated for the employee.
- Salary is time-bound — each record carries an effective Month + Year and applies from that month onwards.
- An employee can have multiple salary records over time. The system always picks the latest record whose effective date is on or before the salary month being generated.
- Statutory percentages (Employee/Employer PF and ESIC) live on the same salary row, so a revision of pay can carry a revised statutory split if needed.
📍 Where to Enter Salary Data
📍 Screen: HRM → Employee → open any employee row → the Employee aside opens on the right. Salary entry lives inside the Salary section of that aside — this is the single place to add or edit Salary Data.
Salary Data is owned by the Employee module. The User module only stores account fields (name, email, role, password, profile image, Is Active, Is Employee) and does not include salary, PF, ESIC, or TDS fields. After a user is saved with Is Employee = Yes, HR opens that person from HRM → Employee to fill or update Salary Data.
ℹ️ A user can be saved with Is Employee = Yes even when no salary or HR data has been entered yet. Salary Data is no longer a blocker on User creation — you (or HR) can come back to the Employee aside any time to fill it in.
🧾 How to Add or Edit Salary Data
📍 Screen: HRM → Employee → click any Employee Record → click Edit in the aside header. The Employee Details form opens with several sections; scroll to the Salary section.
🔹 Steps
- Go to HRM → Employee.
- Click on any Employee Record — the Employee aside opens in View mode.
- Click the Edit button in the aside header.
- Scroll to the Salary section.
- To add a new salary row, click Add Salary Details. To edit an existing row, click the pencil/edit icon at the right of that row.
- Fill in the salary fields (table below) and pick the Effective Month + Year.
- Click the Update button at the top-right corner of the aside to save.
⚠️ While editing a row, all mandatory salary fields must be filled before you can switch to editing another row. If you try to edit a second row while the first is incomplete, the system will warn you to complete the open row first.
📝 Salary Fields Explained
| Field Name | Purpose |
|---|---|
| CTC | Annual Cost to Company (₹). The base figure used to derive all percentage-driven components. |
| Basic (%) | Percentage of CTC allocated to Basic Salary. |
| HRA (%) | Percentage of CTC allocated to House Rent Allowance. |
| Conveyance (INR) | Fixed monthly conveyance amount (₹). Paid pro-rata against paid days in the salary month. |
| Variable Pay (%) | Percentage of CTC given as variable pay, on top of CTC. |
| Total CTC | Final annual CTC including variable pay. Auto-calculated from CTC and Variable Pay %. |
| Emp PF (%) | Employee Provident Fund contribution percentage. |
| Empr PF (%) | Employer Provident Fund contribution percentage. |
| Emp ESIC (%) | Employee Employees’ State Insurance contribution percentage. |
| Empr ESIC (%) | Employer Employees’ State Insurance contribution percentage. |
| Month | Effective from month (e.g., Jan). |
| Year | Effective from year (e.g., 2025). The Year dropdown disables years older than the most recent salary record above — you cannot back-date a new row earlier than an existing later one. |
🧮 Field Validation Rules
- Basic (%) cannot exceed 100.
- HRA (%) cannot exceed 100.
- Basic + HRA together cannot exceed 100%.
- Basic + HRA + Conveyance (in rupee terms) cannot exceed the total CTC for the row.
- Every field in the row is mandatory before you can save or open another row for editing.
📅 Effective Date — How Records are Picked
📍 Effective Date is what makes Salary Data time-bound. When a salary is generated for, say, April 2025, the system looks for the latest salary record whose Effective Month + Year is on or before April 2025 and uses that one.
💡 Salary Calculation Scenarios
| Scenario | What Will Happen |
|---|---|
| Salary record added in Jan 2025, generating salary for April 2025 | System uses the Jan 2025 salary record. |
| Jan 2025 record exists, and a new salary record is added for April 2025 | April salary uses the April 2025 record. March 2025 still uses the Jan 2025 record — older months are never touched. |
| Two salary records exist for the same employee (Jan 2025 and Apr 2025) and you generate Feb 2025 | System uses the Jan 2025 record — it is the latest record that is on or before Feb 2025. |
📌 Important Rules
- Salary is time-bound using Effective Date. Every salary record must carry an effective Month and Year (e.g., Jan 2025).
- Revised Salary = New Record. Do not edit old salary records when revising pay. Always add a new salary row with the new effective month/year. The system will use the latest applicable record at salary generation time.
- Per-month salary records form a chain. Adding a new April 2025 record does not modify older months — March 2025 still picks up the Jan 2025 record automatically.
- Statutory percentages live with the salary row. PF and ESIC % are part of each salary record, so a pay revision can carry an updated statutory split if your policy changes.
- Years cannot go backwards. When adding a new row, the Year dropdown disables years earlier than the most recent existing row.
🔒 What Happens After Salary is Generated & Paid
⚠️ Once a generated salary record has been marked Paid (a payment date is recorded), that month’s salary cannot be regenerated. The Recalculate button on the salary slip is hidden the moment a Payment Date is set. If you discover a salary structure error after pay-out, add a new salary record from the following month onwards — do not try to rewrite history on a paid month.
- Allowances for a month cannot be added or edited once that month’s salary is generated. Allowance entry must happen before salary generation.
- PF, ESIC, Professional Tax generated alongside salary are tracked as a separate per-month statutory liability (PayrollCredit) and follow a strict per-month rule — each month’s statutory amount stands on its own; unpaid statutory amounts do not roll forward to later months.
- Salary regeneration is also blocked when the salary opening balance is zero / no salary has been generated yet for the period — the system will ask you to confirm before letting you proceed, to prevent an accidental zero-month entry.
📥 Bulk Adding Salary Data (Many Employees at Once)
📍 Screen: HRM → Employee → click Import (top-right of the list). The Employee Bulk Import dialog opens with three sections — choose the Salary Structures section.
For onboarding multiple employees or pushing a new salary structure to many employees at once, use the Salary Structures section of the Employee Bulk Import dialog. Each section provides its own sample CSV/Excel download and validation feedback.
| Section | What it is for |
|---|---|
| Employee Data | Personal and professional details of an employee. |
| Salary Structures | Add a new salary structure (CTC, Basic %, HRA %, PF/ESIC %, etc.) for existing employees. Use this when revising pay across many employees in one go. |
| Annual TDS | Add or update annual TDS amounts for existing employees. Only employees with TDS Applicable = Yes appear in the sample file. |
✅ Tips
- PF applies only when Basic ≤ ₹15,000 per month (Indian statutory rule).
- ESIC applies only when Gross monthly wage ≤ ₹21,000 (ESI Act, 1948 coverage threshold). The system honours this threshold automatically when generating salary.
- Professional Tax is slab-based and configurable in Settings → Salary Settings. Slabs decide the deduction at salary generation; you do not enter Professional Tax on the salary row itself.
- Verify Total CTC = sum of components before saving — the form blocks rows where Basic + HRA + Conveyance exceeds CTC.
- For revisions, add a new row (with a new effective month/year). Do not edit a paid month — the system will block regeneration.
- Remember that User and Employee are separate modules now — account info is on the user record, salary lives only on the Employee record.

