Beispiel #1
0
        private async Task GetLevyFromPreviousSubmission(EmployerLevyData employerLevyData, DasDeclaration dasDeclaration)
        {
            var previousSubmission = await _dasLevyRepository.GetLastSubmissionForScheme(employerLevyData.EmpRef);

            dasDeclaration.LevyDueYtd = previousSubmission?.LevyDueYtd ?? 0;
            dasDeclaration.LevyAllowanceForFullYear = previousSubmission?.LevyAllowanceForFullYear ?? 0;
        }
        private async Task <ICollection <EmployerLevyData> > ProcessScheme(string payeRef, GetEnglishFractionUpdateRequiredResponse englishFractionUpdateResponse)
        {
            var payeSchemeDeclarations = new List <EmployerLevyData>();

            await UpdateEnglishFraction(payeRef, englishFractionUpdateResponse);

            _logger.Debug($"Getting levy declarations from HMRC for PAYE scheme {payeRef}");

            var levyDeclarationQueryResult = HmrcProcessingEnabled || DeclarationProcessingOnly ?
                                             await _mediator.SendAsync(new GetHMRCLevyDeclarationQuery { EmpRef = payeRef }) : null;

            _logger.Debug($"Processing levy declarations retrieved from HMRC for PAYE scheme {payeRef}");

            if (levyDeclarationQueryResult?.LevyDeclarations?.Declarations != null)
            {
                var declarations = CreateDasDeclarations(levyDeclarationQueryResult);

                var employerData = new EmployerLevyData
                {
                    EmpRef       = payeRef,
                    Declarations = { Declarations = declarations }
                };

                payeSchemeDeclarations.Add(employerData);
            }

            return(payeSchemeDeclarations);
        }
Beispiel #3
0
        private async Task UpdateEndOfYearAdjustment(EmployerLevyData employerLevyData, DasDeclaration dasDeclaration)
        {
            var adjustmentDeclaration = await _dasLevyRepository.GetSubmissionByEmprefPayrollYearAndMonth(employerLevyData.EmpRef, dasDeclaration.PayrollYear, dasDeclaration.PayrollMonth.Value);

            dasDeclaration.EndOfYearAdjustment       = true;
            dasDeclaration.EndOfYearAdjustmentAmount = adjustmentDeclaration?.LevyDueYtd - dasDeclaration.LevyDueYtd ?? 0;
        }
Beispiel #4
0
        private async Task <DasDeclaration[]> FilterActiveDeclarations(EmployerLevyData employerLevyData, IEnumerable <DasDeclaration> declarations)
        {
            var existingSubmissionIds = await _dasLevyRepository.GetEmployerDeclarationSubmissionIds(employerLevyData.EmpRef);

            var existingSubmissionIdsLookup = new HashSet <string>(existingSubmissionIds.Select(x => x.ToString()));

            //NOTE: The submissionId in our database is the same as the declaration ID from HMRC (DasDeclaration)
            declarations = declarations.Where(x => !existingSubmissionIdsLookup.Contains(x.Id)).ToArray();

            declarations = declarations.Where(x => !DoesSubmissionPreDateTheLevy(x)).ToArray();

            return(declarations.Where(x => !IsSubmissionForFuturePeriod(x)).ToArray());
        }
        private async Task ProcessScheme(string payeRef, GetEnglishFractionUpdateRequiredResponse englishFractionUpdateResponse, ICollection <EmployerLevyData> employerDataList)
        {
            if (HmrcProcessingEnabled || FractionProcessingOnly)
            {
                await _mediator.SendAsync(new UpdateEnglishFractionsCommand
                {
                    EmployerReference             = payeRef,
                    EnglishFractionUpdateResponse = englishFractionUpdateResponse
                });

                await _dasAccountService.UpdatePayeScheme(payeRef);
            }

            var levyDeclarationQueryResult = HmrcProcessingEnabled || DeclarationProcessingOnly ?
                                             await _mediator.SendAsync(new GetHMRCLevyDeclarationQuery { EmpRef = payeRef }) : null;

            var employerData = new EmployerLevyData();

            if (levyDeclarationQueryResult?.LevyDeclarations?.Declarations != null)
            {
                foreach (var declaration in levyDeclarationQueryResult.LevyDeclarations.Declarations)
                {
                    var dasDeclaration = new DasDeclaration
                    {
                        SubmissionDate           = DateTime.Parse(declaration.SubmissionTime),
                        Id                       = declaration.Id,
                        PayrollMonth             = declaration.PayrollPeriod?.Month,
                        PayrollYear              = declaration.PayrollPeriod?.Year,
                        LevyAllowanceForFullYear = declaration.LevyAllowanceForFullYear,
                        LevyDueYtd               = declaration.LevyDueYearToDate,
                        NoPaymentForPeriod       = declaration.NoPaymentForPeriod,
                        DateCeased               = declaration.DateCeased,
                        InactiveFrom             = declaration.InactiveFrom,
                        InactiveTo               = declaration.InactiveTo,
                        SubmissionId             = declaration.SubmissionId
                    };

                    employerData.EmpRef = payeRef;
                    employerData.Declarations.Declarations.Add(dasDeclaration);
                }

                employerDataList.Add(employerData);
            }
        }
Beispiel #6
0
        private static void ProcessNoPaymentForPeriodDeclarations(IEnumerable <DasDeclaration> declarations, EmployerLevyData employerLevyData)
        {
            var noPaymentForPeriodDeclarations = declarations.Where(x => x.NoPaymentForPeriod);

            foreach (var dasDeclaration in noPaymentForPeriodDeclarations)
            {
                dasDeclaration.LevyDueYtd = null;
            }
        }
Beispiel #7
0
        private async Task ProcessEndOfYearAdjustmentDeclarations(IEnumerable <DasDeclaration> declarations, EmployerLevyData employerLevyData)
        {
            var endOfYearAdjustmentDeclarations = declarations.Where(IsEndOfYearAdjustment).ToList();

            foreach (var dasDeclaration in endOfYearAdjustmentDeclarations)
            {
                await UpdateEndOfYearAdjustment(employerLevyData, dasDeclaration);
            }
        }