Salary Calculation Engine
Source:
SalaryCalculationBO.cs+SalaryCalculatorUtility.csTrigger: 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 ...