Example #1
0
 public PayrollReportRecord(
     EmployeeMonthlyRecord employeeMonthlyRecord,
     decimal insuranceSalary,
     decimal actualGrossSalary,
     decimal taxableIncome,
     decimal totalMonthlyIncome,
     decimal employeeSocialInsurance,
     decimal employeeHealthcareInsurance,
     decimal employeeUnemploymentInsurance,
     decimal employeeUnionFee,
     decimal employerSocialInsurance,
     decimal employerHealthcareInsurance,
     decimal employerUnemploymentInsurance,
     decimal employerUnionFee,
     decimal personalDeduction,
     decimal dependantDeduction,
     decimal assessableIncome,
     decimal netIncome,
     decimal pit,
     decimal totalSalaryCost,
     decimal netPayment)
 {
     Fullname                      = employeeMonthlyRecord.Name;
     Email                         = employeeMonthlyRecord.Email;
     Position                      = employeeMonthlyRecord.Position;
     EmployeeType                  = employeeMonthlyRecord.EmployeeType;
     GrossContractSalary           = employeeMonthlyRecord.GrossContractedSalary.Amount;
     InsuranceSalary               = insuranceSalary;
     StandardWorkingDays           = employeeMonthlyRecord.StandardWorkingDays;
     ActualWorkingDays             = employeeMonthlyRecord.WorkingDays + employeeMonthlyRecord.ProbationWorkingDays;
     ActualGrossSalary             = actualGrossSalary;
     TotalMonthlyIncome            = totalMonthlyIncome;
     TaxableIncome                 = taxableIncome;
     EmployeeSocialInsurance       = employeeSocialInsurance;
     EmployeeHealthcareInsurance   = employeeHealthcareInsurance;
     EmployeeUnemploymentInsurance = employeeUnemploymentInsurance;
     EmployeeUnionFee              = employeeUnionFee;
     EmployerSocialInsurance       = employerSocialInsurance;
     EmployerHealthcareInsurance   = employerHealthcareInsurance;
     EmployerUnemploymentInsurance = employerUnemploymentInsurance;
     EmployerUnionFee              = employerUnionFee;
     PersonalDeduction             = personalDeduction;
     NumberOfDependants            = employeeMonthlyRecord.NumberOfDependants;
     DependantDeduction            = dependantDeduction;
     AssessableIncome              = assessableIncome;
     PIT                  = pit;
     PaymentAdvance       = employeeMonthlyRecord.PaymentAdvance.Amount.Value;
     TaxableAllowances    = employeeMonthlyRecord.TaxableAllowances;
     NonTaxableAllowances = employeeMonthlyRecord.NonTaxableAllowances;
     NetIncome            = netIncome;
     TotalSalaryCost      = totalSalaryCost;
     NetPayment           = netPayment;
     AdjustmentAddition   = employeeMonthlyRecord.AdjustmentAdditions.Select(_ => _.Amount.Value).Sum();
     AdjustmentDeduction  = employeeMonthlyRecord.AdjustmentDeduction.Select(_ => _.Amount.Value).Sum();
 }
Example #2
0
 public static EmployerUnemploymentInsurance CalculateEmployerUnemploymentInsurance(
     SalaryConfig salaryConfig,
     EmployeeMonthlyRecord employeeMonthlyRecord,
     InsuranceSalary insuranceSalary)
 {
     return(new EmployerUnemploymentInsurance(Calculate(
                                                  employeeMonthlyRecord: employeeMonthlyRecord,
                                                  minimumWage: salaryConfig.RegionalMinimumWage,
                                                  coefficientSocialCare: salaryConfig.CoefficientSocialCare,
                                                  rateOfDeductionOfCompulsoryInsurance: employeeMonthlyRecord.IsForeigner
                                 ? salaryConfig.ForeignEmployerUnemploymentInsuranceRate : salaryConfig.EmployerUnemploymentInsuranceRate,
                                                  amount: insuranceSalary.Amount)));
 }
Example #3
0
        public static InsuranceSalary CalculateInsuranceSalary(
            SalaryConfig salaryConfig,
            EmployeeMonthlyRecord employeeMonthlyRecord)
        {
            var insurancePaidAmount = salaryConfig.IsInsurancePaidFullSalary
                                ? employeeMonthlyRecord.GrossContractedSalary.Amount
                                : salaryConfig.InsurancePaidAmount;

            var actualPaidAmount = employeeMonthlyRecord.IsEligibleForSocialInsurance() || employeeMonthlyRecord.IsOnProbation()
                                ? insurancePaidAmount
                                : Money.ZeroVND;

            return(new InsuranceSalary(actualPaidAmount));
        }
Example #4
0
        public static EmployerUnionFee CalculateEmployerUnionFee(
            SalaryConfig salaryConfig,
            EmployeeMonthlyRecord employeeMonthlyRecord,
            InsuranceSalary insuranceSalary)
        {
            var unionEmployerRate = employeeMonthlyRecord.InUnion
                                ? salaryConfig.EmployerUnionFeeRate - salaryConfig.EmployeeUnionFeeRate
                                : salaryConfig.EmployerUnionFeeRate;

            return(new EmployerUnionFee(Calculate(
                                            employeeMonthlyRecord: employeeMonthlyRecord,
                                            minimumWage: salaryConfig.CommonMinimumWage,
                                            coefficientSocialCare: salaryConfig.CoefficientSocialCare,
                                            rateOfDeductionOfCompulsoryInsurance: unionEmployerRate,
                                            amount: insuranceSalary.Amount)));
        }
Example #5
0
        private static Money Calculate(
            EmployeeMonthlyRecord employeeMonthlyRecord,
            Money minimumWage,
            decimal coefficientSocialCare,
            decimal rateOfDeductionOfCompulsoryInsurance,
            Money amount)
        {
            if (employeeMonthlyRecord.IsEligibleForSocialInsurance() is false || employeeMonthlyRecord.IsOnProbation())
            {
                return(Money.ZeroVND);
            }

            var specifiedAmount = minimumWage * coefficientSocialCare;

            if (amount > specifiedAmount)
            {
                return(specifiedAmount * rateOfDeductionOfCompulsoryInsurance);
            }

            return(amount * rateOfDeductionOfCompulsoryInsurance);
        }
Example #6
0
        public static EmployeeUnionFee CalculateEmployeeUnionFee(
            SalaryConfig salaryConfig,
            EmployeeMonthlyRecord employeeMonthlyRecord,
            InsuranceSalary insuranceSalary)
        {
            if (employeeMonthlyRecord.InUnion is false)
            {
                return(new EmployeeUnionFee(Money.ZeroVND));
            }

            return(new EmployeeUnionFee(Calculate(
                                            employeeMonthlyRecord: employeeMonthlyRecord,
                                            minimumWage: salaryConfig.CommonMinimumWage,
                                            coefficientSocialCare: salaryConfig.MaximumUnionFeeRate,
                                            rateOfDeductionOfCompulsoryInsurance: 1m,
                                            amount: Calculate(
                                                employeeMonthlyRecord,
                                                salaryConfig.CommonMinimumWage,
                                                salaryConfig.CoefficientSocialCare,
                                                salaryConfig.EmployeeUnionFeeRate,
                                                insuranceSalary.Amount))));
        }