// Production des refinancements
        public IList<SoldeBudget> Make(IQueryable<Budget> _budgets, DateTime dateArchivage)
        {
            // EnrichirAvecNbreContratsEtPeriodeFinancementRestantes
            var e1 = new BudgetContratEnrichisseur(uow, groupeId);
            var _budgetAvecContrats = e1.EnrichirAvecNbreContratsEtPeriodeFinancementRestantes(_budgets);

            // Constitution des feeds à partir des budgets
            IList<SoldeBudget> _soldeBudgets = InitSoldeBudgets(_budgetAvecContrats);

            // Inputs: opérations - mouvements - financements - échéances à venir
            FacadeRepo facade = new FacadeRepo(uow, groupeId);
            InputSoldeBudgets _inputs = facade.InputSoldeBudgetsForRefi(dateArchivage);

            // Mouvements à venir
            var f1 = new ProvisionFabrique(uow, groupeId);
            _inputs.mouvementAVenirs = f1.CalculerMouvementsAVenir(_budgetAvecContrats);

            // Enrichissement des soldes budgets avec les montants
            var s1 = new SoldeBudgetMontantsEnrichisseur();
            s1.EnrichirMontants(_soldeBudgets, _inputs);

            // Calcul des soldes courant & écart financement
            foreach (var _solde in _soldeBudgets)
            {
                _solde.Calculer();
            }

            // Retour
            return _soldeBudgets;
        }
        // Calcul des soldes opérations pour une série d'opérations et une série de comte banque
        public void EnrichirAvecSoldeArchivable(IEnumerable<Budget> budgets)
        {
            // Reset solde opérations
            budgets.ToList().ForEach(c => c.SoldeOperationArchivables = 0.0M);
            budgets.ToList().ForEach(c => c.SoldeFinancementArchivables = 0.0M);
            budgets.ToList().ForEach(c => c.SoldeProvisionArchivables = 0.0M);
            budgets.ToList().ForEach(c => c.SoldeArchivable = 0.0M);

            // Contrats
            var s1 = new BudgetContratEnrichisseur(uow, groupeId);
            s1.EnrichirAvecNbContrats(budgets);

            // Inputs: opérations
            FacadeRepo facade = new FacadeRepo(uow, groupeId);
            InputSoldeBudgets inputs = facade.InputSoldeArchivableBudgets(dateLimiteArchivage);

            // Enrichissement solde des opérations
            var enrichisseur = new BudgetSoldeOperationArchivableEnrichisseur();
            enrichisseur.Executer(inputs, budgets);

            // Enrichissement solde archive
            foreach (var budget in budgets)
            {
                budget.EnrichirAvecSoldeArchivable();
            }
        }
        // Archivage
        public void Executer()
        {
            // Récupération des opérations, financements et provisions archivables
            FacadeRepo facade = new FacadeRepo(uow, groupeId);
            Archivables arch = facade.Archivables(dateLimiteArchivage);

            // Si besoin, on archive
            if (arch.Besoin())
            {
                // Caisses
                IEnumerable<Caisse> caisses = uow.CompteCaisse
                    .GetAllByGroupeId(groupeId)
                    .ToList()
                    ;

                // Budgets
                IEnumerable<Budget> budgets = uow.Budget
                    .GetAllByGroupeId(groupeId)
                    .ToList()
                    ;

                // Comptes
                IEnumerable<CompteBanque> comptes = uow.CompteBanque
                    .GetAllByGroupeId(groupeId)
                    .Include(x => x.Banque)
                    .ToList()
                    ;

                // Solde archive - Caisse
                SoldeArchiveCaisses(groupeId, dateArchivage, dateLimiteArchivage, caisses);

                // Solde archivae - Budget
                SoldeArchiveBudgets(groupeId, dateArchivage, dateLimiteArchivage, budgets);

                // Solde archive - Compte banque
                SoldeArchiveCompteBanques(groupeId, dateArchivage, dateLimiteArchivage, comptes);

                // Attention: il faut calculer les soldes avant d'archiver les opérations
                ArchiverOperations(dateArchivage, dateLimiteArchivage, arch.operations);
                ArchiverFinancements(dateArchivage, dateLimiteArchivage, arch.financements);
                ArchiverProvisions(dateArchivage, dateLimiteArchivage, arch.provisions);

                // Tracer le processus
                var traceur = new ArchivageTraceur(groupeId);
                string rapport = traceur.SaveForRapportSuccess(dateArchivage, arch.operations
                    , arch.financements, arch.provisions);
                int nb = arch.operations.Count()
                    + arch.financements.Count()
                    + arch.provisions.Count()
                    ;
                TraceLog trace = traceur.Success(dateArchivage, nb, rapport);

                // Ajout repo
                uow.TraceLog.Add(trace);

            }
        }
        //
        // GET: GetCompteBanquesCalcules
        public IEnumerable<CompteBanque> EnrichirAvecSoldeCalcules(IEnumerable<CompteBanque> comptes)
        {
            // Inputs: opérations
            FacadeRepo facade = new FacadeRepo(uow, groupeId);
            InputSoldeCompteBanqueRaws inputRaws = facade.InputSoldeCompteBanqueRaws();

            // Enrichissement avec Calcul des soldes raw estimation pour les comptes banque
            var s1 = new CompteBanqueRawSoldeOperationEnrichisseur();
            s1.Executer(comptes.ToList(), inputRaws);

            // Retour
            return comptes;
        }
        // Calcul des soldes opérations pour une série d'opérations et une série de comte banque
        public void EnrichirAvecSoldeNonArchivable(IEnumerable<CompteBanque> comptes)
        {
            // Reset solde opérations
            comptes.ToList().ForEach(c => c.SoldeOperationNonArchivables = 0.0M);
            comptes.ToList().ForEach(c => c.SoldeNonArchivable = 0.0M);

            // Inputs: opérations
            FacadeRepo facade = new FacadeRepo(uow, groupeId);
            InputSoldeCompteBanques inputs = facade.InputSoldeNonArchivableCompteBanques(dateLimiteArchivage);

            // Enrichissement solde des opérations
            var enrichisseur = new CompteBanqueSoldeOperationNonArchivableEnrichisseur();
            enrichisseur.Executer(comptes, inputs);

            // Enrichissement solde archive
            comptes.ToList().ForEach(c => c.EnrichirAvecSoldeNonArchivable());
        }