HR Module
Payroll & Salary
Salary Calculation Engine

Salary Calculation Engine

Source: SalaryCalculationBO.cs + SalaryCalculatorUtility.cs Trigger: Manual (monthly payroll run via HR portal) Method: GeneralCallHandler("DayBasedSalaryCalculation")

Two-Pass Salary Calculation

The system uses a two-pass approach — first calculating fixed earnings to derive Gross Salary, then using Gross Salary as a base for remaining calculations.

Day-Based Salary Query

SELECT
    e.EmployeeId,
    e.EmployeeCode,
    COUNT(CASE WHEN a.AttendanceValue > 0 THEN 1 END) AS PresentDays,
    COUNT(CASE WHEN a.AttendanceValue = 0
          AND a.MorningSession = 'Absent' THEN 1 END)  AS AbsentDays,
    SUM(ed.Amount) WHERE ed.IsBasicPay = 1              AS BasicSalary,
    SUM(ed.Amount) WHERE ed.FixedOrVariable = 'F'
                    AND ed.EarningOrDeduction = 'E'      AS FixedEarnings,
    SUM(vd.Amount) WHERE vd.FixedOrVariable = 'V'
                    AND vd.EarningOrDeduction = 'E'      AS VariableEarnings,
    SUM(ed.Amount) WHERE ed.FixedOrVariable = 'F'
                    AND ed.EarningOrDeduction = 'D'      AS FixedDeductions,
    SUM(vd.Amount) WHERE vd.FixedOrVariable = 'V'
                    AND vd.EarningOrDeduction = 'D'      AS VariableDeductions
FROM t_HR_Employee e
JOIN t_HR_EmpDailyAttendance a
    ON e.EmployeeId = a.EmployeeId
    AND a.DateAndTime BETWEEN @FirstOfMonth AND @LastOfMonth
JOIN t_HR_EarningDeduction ed ON ...
LEFT JOIN t_HR_VariableEarningDeduction vd ON ...

Salary Component Classification