public async Task <string> GenerateReport(IReportServiceContext reportServiceContext, CancellationToken cancellationToken)
        {
            var ukprn          = reportServiceContext.Ukprn;
            var collectionYear = reportServiceContext.CollectionYear;

            var fileName = _fileNameService.GetFilename(reportServiceContext, ReportFileName, OutputTypes.Csv);

            _logger.LogInfo("Apps Monthly Payment Report Data Provider Start");

            var paymentsTask            = _appsMonthlyPaymentsDataProvider.GetPaymentsAsync(ukprn, collectionYear, cancellationToken);
            var learnersTask            = _appsMonthlyPaymentsDataProvider.GetLearnersAsync(ukprn, cancellationToken);
            var contractAllocationsTask = _appsMonthlyPaymentsDataProvider.GetContractAllocationsAsync(ukprn, cancellationToken);
            var earningsTask            = _appsMonthlyPaymentsDataProvider.GetEarningsAsync(ukprn, cancellationToken);
            var priceEpisodesTask       = _appsMonthlyPaymentsDataProvider.GetPriceEpisodesAsync(ukprn, cancellationToken);

            await Task.WhenAll(paymentsTask, learnersTask, contractAllocationsTask, earningsTask, priceEpisodesTask);

            var larsLearningDeliveries = await _appsMonthlyPaymentsDataProvider.GetLarsLearningDeliveriesAsync(learnersTask.Result, cancellationToken);

            _logger.LogInfo("Apps Monthly Payment Report Data Provider End");

            _logger.LogInfo("Apps Monthly Payment Report Model Build Start");

            var appsMonthlyRecords = _appsMonthlyPaymentModelBuilder.Build(
                paymentsTask.Result,
                learnersTask.Result,
                contractAllocationsTask.Result,
                earningsTask.Result,
                larsLearningDeliveries,
                priceEpisodesTask.Result).ToList();

            _logger.LogInfo("Apps Monthly Payment Report Model Build End");

            await _csvFileService.WriteAsync <AppsMonthlyRecord, AppsMonthlyClassMap>(appsMonthlyRecords, fileName, reportServiceContext.Container, cancellationToken);

            var persistModels = _appsMonthlyPersistenceMapper.Map(reportServiceContext, appsMonthlyRecords, cancellationToken);
            await _reportDataPersistanceService.PersistAsync(reportServiceContext, persistModels, cancellationToken);

            return(fileName);
        }