Delimiter $$
/**
 * compute BUSINESS_FI_ANA_TMP_ACCOUNTS_AGING_BALANCE_BATCH
 * optimisation pour le calcul fiana
 * création de la table temporaire tmp_acc_aging_bal_batch
 * contient des données de balances agés par compte
 */ 
Drop Procedure if Exists BUSINESS_FI_ANA_TMP_ACCOUNTS_AGING_BALANCE_BATCH $$
Create Procedure BUSINESS_FI_ANA_TMP_ACCOUNTS_AGING_BALANCE_BATCH(In refdate DateTime, In idaccounts Int unsigned, In identities Int unsigned)
Begin
   
    v_acc_aging_bal_batch: begin

        set @bfataabb_refDate = Coalesce(refdate, AMO_BAL_REFDATE());
#         set @bfataabb_refDate =  curdate(); -- debug
--		date de filtrage des ecritures pour historisation fiana

		-- pour les écritures anti-daté (futur)
		set @bfataabb_today = curdate();


		-- le montant restant du évolue avec le temps (en fonction des lettrages)
		-- on ne peut pas se baser dessus pour FI_ANA_HISTO
		-- Vu avec Olivier, on applique la regle suivante
		-- si calcul quotidian (FI_ANA uniquement) on utilise le montant restant du (pas de changement)
		-- si calcule pour FI_ANA_HISTO on utilise DEBIT-CREDIT
		-- on fait fi volontairement des lettrage intermédiaire
		Set @bfataabb_useDebitAndCredit = (Case When @bfataabb_refDate < curdate() Then 1 Else 0 End);

        if idaccounts Is null Then
            Set @bfataabb_accMinVal = 0;
            Set @bfataabb_accMaxVal = 4e7;
        Else
            Set @bfataabb_accMinVal = idaccounts;
            Set @bfataabb_accMaxVal = idaccounts;
        End if;

        if identities Is null Then
            Set @bfataabb_enttMinVal = 0;
            Set @bfataabb_enttMaxVal = 1000;
        Else
            Set @bfataabb_enttMinVal = identities;
            Set @bfataabb_enttMaxVal = identities;
        End if;

        Set @bfataabb_OpenEntry = (Select ID_DF_MATCHINGCODE_STATE From DF_MATCHINGCODE_STATE Where DF_MATCHINGCODE_STATE_CODE = 'OPEN ENTRY');
        Set @bfataabb_Partial = (Select ID_DF_MATCHINGCODE_STATE From DF_MATCHINGCODE_STATE Where DF_MATCHINGCODE_STATE_CODE = 'PARTIAL MATCHING CODE');
        Set @bfataabb_ClosedEntry = (Select ID_DF_MATCHINGCODE_STATE From DF_MATCHINGCODE_STATE Where DF_MATCHINGCODE_STATE_CODE = 'CLOSED ENTRY');

        Drop Temporary Table If exists tmp_acc_aging_bal_batch;
--         Create Temporary Table tmp_acc_aging_bal_batch AS
        Create Temporary Table tmp_acc_aging_bal_batch (
                    ID_ACCOUNTS Int Unsigned not Null
--                     , ENT_IS_CLOSED SmallInt -- pour optimisation calcul, non utilisé dans les données
                    , ENT_BAL Decimal(19, 4) -- pour optimisation calcul, non utilisé dans les données
                    , P1 Decimal(19, 4)
                    , P2 Decimal(19, 4)
                    , P3 Decimal(19, 4)
                    , P4 Decimal(19, 4)
                    , CONSO Int
                    , CUSTMMDE_P1 Decimal(19, 4)
                    , CUSTMMDE_P2 Decimal(19, 4)
                    , CUSTMMDE_P3 Decimal(19, 4)
                    , CUSTMMDE_P4 Decimal(19, 4)
                    , CUSTMMDE_DEBIT Decimal(19, 4)
                    , CUSTMMDE_CREDIT Decimal(19, 4)

                    , Index (ID_ACCOUNTS)
                )
            ;
-- regle pour determiner si un ecriture est ouverte par rapport à la date
        -- (test avec une fonction sql, contre performant)
--         (
--                             Case
--                 When dms.DF_MATCHINGCODE_STATE_CLOSED  = 0 Then 1
--                 When MTC.ID_MATCHINGCODES is null Then
--                     -- ici on a un status de lettrage total 
--                     -- sans sans lettrage associé à l'ectiture
--                     -- cela implique un lettrage forcé
--                     -- on ignore le montant de l'ecriture
--                     0
--                 Else 
--                     -- on prend en compte si la date est posterieur
--                     MTC.MATCHINGCODES_DATE  > @bfataabb_refDate
--             End
--         )

        Insert Into tmp_acc_aging_bal_batch (
                ID_ACCOUNTS
                , P1
                , P2
                , P3
                , P4
                , CONSO
                , CUSTMMDE_P1
                , CUSTMMDE_P2
                , CUSTMMDE_P3
                , CUSTMMDE_P4
                , CUSTMMDE_DEBIT
                , CUSTMMDE_CREDIT
/*
--                 , ENT_IS_CLOSED         -- pour optimisation calcul, non utilisé dans les données
#                 , ENT_BAL               -- pour optimisation calcul, non utilisé dans les données
 */
            )
        -- explain
        Select
            ac.ID_ACCOUNTS
             , Sum(
                Case
                    When Least(et.ENTRIES_DATE, et.ENTRIES_CREATION_DATE) > @bfataabb_refDate then 0 -- retro-calcul, écriture non créé à la date de ref

                    When DATEDIFF(@bfataabb_refDate, et.ENTRIES_DUE_DATE) Not Between 0 and ad.ADMIN_ACC_BAL_PERIOD1 then 0 -- age échéance hors période

                    When et.DF_MATCH_STAT_ID_DF_MATCH_STAT In (@bfataabb_OpenEntry, @bfataabb_Partial) Then -- ouvert (& implicitement échus pour la période)
                        If(@bfataabb_useDebitAndCredit=0
                            , et.ENTRIES_ENT_BALANCE
                            , et.ENTRIES_ENT_DEBIT - et.ENTRIES_ENT_CREDIT
                            )

                    -- écritures lettrées : on doit tenir compte de la date de lettrage pour le retro calcul
                    -- condition implicte : et.ENTRIES_DUE_DATE > @bfataabb_refDate
                    -- si le lettrage est antérieur à la date de ref cela implique que l'écriture était déjà close la période

                    When MTC.ID_MATCHINGCODES is Not null And MTC.MATCHINGCODES_DATE < @bfataabb_refDate Then 0 -- lettré pour la période
                    When EFMTCST.ENTRIES_COMPUTED_DATA_DATE is Not null And EFMTCST.ENTRIES_COMPUTED_DATA_DATE < @bfataabb_refDate Then 0 -- lettré pour la période
                    Else
                        -- implicite non lettrée à la date ref
                        If(@bfataabb_useDebitAndCredit=0
                            , et.ENTRIES_ENT_BALANCE
                            , et.ENTRIES_ENT_DEBIT - et.ENTRIES_ENT_CREDIT
                            )
                    End
            ) As P1

             , Sum(
                Case
                    When Least(et.ENTRIES_DATE, et.ENTRIES_CREATION_DATE) > @bfataabb_refDate then 0 -- retro-calcul, écriture non créé à la date de ref
                    When DATEDIFF(@bfataabb_refDate, et.ENTRIES_DUE_DATE) Not Between ad.ADMIN_ACC_BAL_PERIOD1 + 1 and ad.ADMIN_ACC_BAL_PERIOD2 then 0 -- age échéance hors période
                    When et.DF_MATCH_STAT_ID_DF_MATCH_STAT In (@bfataabb_OpenEntry, @bfataabb_Partial) Then -- ouvert (& implicitement échus periode)
                        If(@bfataabb_useDebitAndCredit=0
                            , et.ENTRIES_ENT_BALANCE
                            , et.ENTRIES_ENT_DEBIT - et.ENTRIES_ENT_CREDIT
                            )
                    -- écritures lettrées : on doit tenir compte de la date de lettrage pour le retro calcul
                    -- condition implicte : et.ENTRIES_DUE_DATE > @bfataabb_refDate
                    -- si le lettrage est antérieur à la date de ref cela implique que l'écriture était déjà close la période
                    When MTC.ID_MATCHINGCODES is Not null And MTC.MATCHINGCODES_DATE < @bfataabb_refDate Then 0 -- lettré pour la période
                    When EFMTCST.ENTRIES_COMPUTED_DATA_DATE is Not null And EFMTCST.ENTRIES_COMPUTED_DATA_DATE < @bfataabb_refDate Then 0 -- lettré pour la période
                    Else
                        -- implicite non lettrée à la date ref
                        If(@bfataabb_useDebitAndCredit=0
                            , et.ENTRIES_ENT_BALANCE
                            , et.ENTRIES_ENT_DEBIT - et.ENTRIES_ENT_CREDIT
                            )
                    End
            ) As P2
             , Sum(
                Case
                    When Least(et.ENTRIES_DATE, et.ENTRIES_CREATION_DATE) > @bfataabb_refDate then 0 -- retro-calcul, écriture non créé à la date de ref
                    When DATEDIFF(@bfataabb_refDate, et.ENTRIES_DUE_DATE) Not Between ad.ADMIN_ACC_BAL_PERIOD2 + 1 and ad.ADMIN_ACC_BAL_PERIOD3 then 0 -- age échéance hors période
                    When et.DF_MATCH_STAT_ID_DF_MATCH_STAT In (@bfataabb_OpenEntry, @bfataabb_Partial) Then -- ouvert (& implicitement échus periode)
                        If(@bfataabb_useDebitAndCredit=0
                            , et.ENTRIES_ENT_BALANCE
                            , et.ENTRIES_ENT_DEBIT - et.ENTRIES_ENT_CREDIT
                            )
                    -- écritures lettrées : on doit tenir compte de la date de lettrage pour le retro calcul
                    -- condition implicte : et.ENTRIES_DUE_DATE > @bfataabb_refDate
                    -- si le lettrage est antérieur à la date de ref cela implique que l'écriture était déjà close la période
                    When MTC.ID_MATCHINGCODES is Not null And MTC.MATCHINGCODES_DATE < @bfataabb_refDate Then 0 -- lettré pour la période
                    When EFMTCST.ENTRIES_COMPUTED_DATA_DATE is Not null And EFMTCST.ENTRIES_COMPUTED_DATA_DATE < @bfataabb_refDate Then 0 -- lettré pour la période
                    Else
                        -- implicite non lettrée à la date ref
                        If(@bfataabb_useDebitAndCredit=0
                            , et.ENTRIES_ENT_BALANCE
                            , et.ENTRIES_ENT_DEBIT - et.ENTRIES_ENT_CREDIT
                            )
                    End
            ) As P3
             , Sum(
                Case
                    When Least(et.ENTRIES_DATE, et.ENTRIES_CREATION_DATE) > @bfataabb_refDate then 0 -- retro-calcul, écriture non créé à la date de ref
#                     When DATEDIFF(@bfataabb_refDate, et.ENTRIES_DUE_DATE) < ad.ADMIN_AGING_PORT_BAL_PERIOD7 +1 then 0 -- age échéance hors période
                    When DATEDIFF(@bfataabb_refDate, et.ENTRIES_DUE_DATE) <= ad.ADMIN_ACC_BAL_PERIOD3 then 0 -- age échéance hors période
                    When et.DF_MATCH_STAT_ID_DF_MATCH_STAT In (@bfataabb_OpenEntry, @bfataabb_Partial) Then -- ouvert (& implicitement échus periode)
                        If(@bfataabb_useDebitAndCredit=0
                            , et.ENTRIES_ENT_BALANCE
                            , et.ENTRIES_ENT_DEBIT - et.ENTRIES_ENT_CREDIT
                            )
                    -- écritures lettrées : on doit tenir compte de la date de lettrage pour le retro calcul
                    -- condition implicte : et.ENTRIES_DUE_DATE > @bfataabb_refDate
                    -- si le lettrage est antérieur à la date de ref cela implique que l'écriture était déjà close la période
                    When MTC.ID_MATCHINGCODES is Not null And MTC.MATCHINGCODES_DATE < @bfataabb_refDate Then 0 -- lettré pour la période
                    When EFMTCST.ENTRIES_COMPUTED_DATA_DATE is Not null And EFMTCST.ENTRIES_COMPUTED_DATA_DATE < @bfataabb_refDate Then 0 -- lettré pour la période
                    Else
                        -- implicite non lettrée à la date ref
                        If(@bfataabb_useDebitAndCredit=0
                            , et.ENTRIES_ENT_BALANCE
                            , et.ENTRIES_ENT_DEBIT - et.ENTRIES_ENT_CREDIT
                            )
                    End
            ) As P4
            , 0 CONSO
             , Sum(
                Case
                    When Least(et.ENTRIES_DATE, et.ENTRIES_CREATION_DATE) > @bfataabb_refDate then 0 -- retro-calcul, écriture non créé à la date de ref

                    When DATEDIFF(@bfataabb_refDate, et.ENTRIES_DUE_DATE) Not Between 0 and ad.ADMIN_ACC_BAL_PERIOD1 then 0 -- age échéance hors période

                    When et.DF_MATCH_STAT_ID_DF_MATCH_STAT In (@bfataabb_OpenEntry, @bfataabb_Partial) Then -- ouvert (& implicitement échus pour la période)
                            CASH_BUSINESS_GET_CUSTOM_MODE_DEBIT(et.ID_ENTRIES
                                , et.DF_ENTR_TYPE_ID_DF_ENTR_TYPE
                                , et.ENTRIES_ENT_BALANCE
                                , et.ENTRIES_ENT_DEBIT
                                , @bfataabb_useDebitAndCredit
                                , ad.ADMIN_ACC_BAL_PERIOD1
                                , eha.ENTRIES_PERMANENT_ATTACHEMENT
                                )
                            - CASH_BUSINESS_GET_CUSTOM_MODE_CREDIT(et.ID_ENTRIES
                                , et.DF_ENTR_TYPE_ID_DF_ENTR_TYPE
                                , et.ENTRIES_ENT_BALANCE
                                , et.ENTRIES_ENT_CREDIT
                                , @bfataabb_useDebitAndCredit
                                , ad.ADMIN_ACC_BAL_PERIOD1
                                , eha.ENTRIES_PERMANENT_ATTACHEMENT
                                )

                    -- écritures lettrées : on doit tenir compte de la date de lettrage pour le retro calcul
                    -- condition implicte : et.ENTRIES_DUE_DATE > @bfataabb_refDate
                    -- si le lettrage est antérieur à la date de ref cela implique que l'écriture était déjà close la période

                    When MTC.ID_MATCHINGCODES is Not null And MTC.MATCHINGCODES_DATE < @bfataabb_refDate Then 0 -- lettré pour la période
                    When EFMTCST.ENTRIES_COMPUTED_DATA_DATE is Not null And EFMTCST.ENTRIES_COMPUTED_DATA_DATE < @bfataabb_refDate Then 0 -- lettré pour la période
                    Else
                        -- implicite non lettrée à la date ref
                            CASH_BUSINESS_GET_CUSTOM_MODE_DEBIT(et.ID_ENTRIES
                                , et.DF_ENTR_TYPE_ID_DF_ENTR_TYPE
                                , et.ENTRIES_ENT_BALANCE
                                , et.ENTRIES_ENT_DEBIT
                                , @bfataabb_useDebitAndCredit
                                , ad.ADMIN_ACC_BAL_PERIOD1
                                , eha.ENTRIES_PERMANENT_ATTACHEMENT
                                )
                            - CASH_BUSINESS_GET_CUSTOM_MODE_CREDIT(et.ID_ENTRIES
                                , et.DF_ENTR_TYPE_ID_DF_ENTR_TYPE
                                , et.ENTRIES_ENT_BALANCE
                                , et.ENTRIES_ENT_CREDIT
                                , @bfataabb_useDebitAndCredit
                                , ad.ADMIN_ACC_BAL_PERIOD1
                                , eha.ENTRIES_PERMANENT_ATTACHEMENT
                                )
                    End
            ) As CUSTMMDE_P1

             , Sum(
                Case
                    When Least(et.ENTRIES_DATE, et.ENTRIES_CREATION_DATE) > @bfataabb_refDate then 0 -- retro-calcul, écriture non créé à la date de ref
                    When DATEDIFF(@bfataabb_refDate, et.ENTRIES_DUE_DATE) Not Between ad.ADMIN_ACC_BAL_PERIOD1 + 1 and ad.ADMIN_ACC_BAL_PERIOD2 then 0 -- age échéance hors période
                    When et.DF_MATCH_STAT_ID_DF_MATCH_STAT In (@bfataabb_OpenEntry, @bfataabb_Partial) Then -- ouvert (& implicitement échus periode)
                            CASH_BUSINESS_GET_CUSTOM_MODE_DEBIT(et.ID_ENTRIES
                                , et.DF_ENTR_TYPE_ID_DF_ENTR_TYPE
                                , et.ENTRIES_ENT_BALANCE
                                , et.ENTRIES_ENT_DEBIT
                                , @bfataabb_useDebitAndCredit
                                , ad.ADMIN_ACC_BAL_PERIOD2
                                , eha.ENTRIES_PERMANENT_ATTACHEMENT
                                )
                            - CASH_BUSINESS_GET_CUSTOM_MODE_CREDIT(et.ID_ENTRIES
                                , et.DF_ENTR_TYPE_ID_DF_ENTR_TYPE
                                , et.ENTRIES_ENT_BALANCE
                                , et.ENTRIES_ENT_CREDIT
                                , @bfataabb_useDebitAndCredit
                                , ad.ADMIN_ACC_BAL_PERIOD2
                                , eha.ENTRIES_PERMANENT_ATTACHEMENT
                                )
                    -- écritures lettrées : on doit tenir compte de la date de lettrage pour le retro calcul
                    -- condition implicte : et.ENTRIES_DUE_DATE > @bfataabb_refDate
                    -- si le lettrage est antérieur à la date de ref cela implique que l'écriture était déjà close la période
                    When MTC.ID_MATCHINGCODES is Not null And MTC.MATCHINGCODES_DATE < @bfataabb_refDate Then 0 -- lettré pour la période
                    When EFMTCST.ENTRIES_COMPUTED_DATA_DATE is Not null And EFMTCST.ENTRIES_COMPUTED_DATA_DATE < @bfataabb_refDate Then 0 -- lettré pour la période
                    Else
                        -- implicite non lettrée à la date ref
                            CASH_BUSINESS_GET_CUSTOM_MODE_DEBIT(et.ID_ENTRIES
                                , et.DF_ENTR_TYPE_ID_DF_ENTR_TYPE
                                , et.ENTRIES_ENT_BALANCE
                                , et.ENTRIES_ENT_DEBIT
                                , @bfataabb_useDebitAndCredit
                                , ad.ADMIN_ACC_BAL_PERIOD2
                                , eha.ENTRIES_PERMANENT_ATTACHEMENT
                                )
                            - CASH_BUSINESS_GET_CUSTOM_MODE_CREDIT(et.ID_ENTRIES
                                , et.DF_ENTR_TYPE_ID_DF_ENTR_TYPE
                                , et.ENTRIES_ENT_BALANCE
                                , et.ENTRIES_ENT_CREDIT
                                , @bfataabb_useDebitAndCredit
                                , ad.ADMIN_ACC_BAL_PERIOD2
                                , eha.ENTRIES_PERMANENT_ATTACHEMENT
                                )
                    End
            ) As CUSTMMDE_P2
             , Sum(
                Case
                    When Least(et.ENTRIES_DATE, et.ENTRIES_CREATION_DATE) > @bfataabb_refDate then 0 -- retro-calcul, écriture non créé à la date de ref
                    When DATEDIFF(@bfataabb_refDate, et.ENTRIES_DUE_DATE) Not Between ad.ADMIN_ACC_BAL_PERIOD2 + 1 and ad.ADMIN_ACC_BAL_PERIOD3 then 0 -- age échéance hors période
                    When et.DF_MATCH_STAT_ID_DF_MATCH_STAT In (@bfataabb_OpenEntry, @bfataabb_Partial) Then -- ouvert (& implicitement échus periode)
                            CASH_BUSINESS_GET_CUSTOM_MODE_DEBIT(et.ID_ENTRIES
                                , et.DF_ENTR_TYPE_ID_DF_ENTR_TYPE
                                , et.ENTRIES_ENT_BALANCE
                                , et.ENTRIES_ENT_DEBIT
                                , @bfataabb_useDebitAndCredit
                                , ad.ADMIN_ACC_BAL_PERIOD3
                                , eha.ENTRIES_PERMANENT_ATTACHEMENT
                                )
                            - CASH_BUSINESS_GET_CUSTOM_MODE_CREDIT(et.ID_ENTRIES
                                , et.DF_ENTR_TYPE_ID_DF_ENTR_TYPE
                                , et.ENTRIES_ENT_BALANCE
                                , et.ENTRIES_ENT_CREDIT
                                , @bfataabb_useDebitAndCredit
                                , ad.ADMIN_ACC_BAL_PERIOD3
                                , eha.ENTRIES_PERMANENT_ATTACHEMENT
                                )
                    -- écritures lettrées : on doit tenir compte de la date de lettrage pour le retro calcul
                    -- condition implicte : et.ENTRIES_DUE_DATE > @bfataabb_refDate
                    -- si le lettrage est antérieur à la date de ref cela implique que l'écriture était déjà close la période
                    When MTC.ID_MATCHINGCODES is Not null And MTC.MATCHINGCODES_DATE < @bfataabb_refDate Then 0 -- lettré pour la période
                    When EFMTCST.ENTRIES_COMPUTED_DATA_DATE is Not null And EFMTCST.ENTRIES_COMPUTED_DATA_DATE < @bfataabb_refDate Then 0 -- lettré pour la période
                    Else
                        -- implicite non lettrée à la date ref
                            CASH_BUSINESS_GET_CUSTOM_MODE_DEBIT(et.ID_ENTRIES
                                , et.DF_ENTR_TYPE_ID_DF_ENTR_TYPE
                                , et.ENTRIES_ENT_BALANCE
                                , et.ENTRIES_ENT_DEBIT
                                , @bfataabb_useDebitAndCredit
                                , ad.ADMIN_ACC_BAL_PERIOD3
                                , eha.ENTRIES_PERMANENT_ATTACHEMENT
                                )
                            - CASH_BUSINESS_GET_CUSTOM_MODE_CREDIT(et.ID_ENTRIES
                                , et.DF_ENTR_TYPE_ID_DF_ENTR_TYPE
                                , et.ENTRIES_ENT_BALANCE
                                , et.ENTRIES_ENT_CREDIT
                                , @bfataabb_useDebitAndCredit
                                , ad.ADMIN_ACC_BAL_PERIOD3
                                , eha.ENTRIES_PERMANENT_ATTACHEMENT
                                )
                    End
            ) As CUSTMMDE_P3
             , Sum(
                Case
                    When Least(et.ENTRIES_DATE, et.ENTRIES_CREATION_DATE) > @bfataabb_refDate then 0 -- retro-calcul, écriture non créé à la date de ref
#                     When DATEDIFF(@bfataabb_refDate, et.ENTRIES_DUE_DATE) < ad.ADMIN_AGING_PORT_BAL_PERIOD7 +1 then 0 -- age échéance hors période
                    When DATEDIFF(@bfataabb_refDate, et.ENTRIES_DUE_DATE) <= ad.ADMIN_ACC_BAL_PERIOD3 then 0 -- age échéance hors période
                    When et.DF_MATCH_STAT_ID_DF_MATCH_STAT In (@bfataabb_OpenEntry, @bfataabb_Partial) Then -- ouvert (& implicitement échus periode)
                            CASH_BUSINESS_GET_CUSTOM_MODE_DEBIT(et.ID_ENTRIES
                                , et.DF_ENTR_TYPE_ID_DF_ENTR_TYPE
                                , et.ENTRIES_ENT_BALANCE
                                , et.ENTRIES_ENT_DEBIT
                                , @bfataabb_useDebitAndCredit
                                , ad.ADMIN_ACC_BAL_PERIOD3+1
                                , eha.ENTRIES_PERMANENT_ATTACHEMENT
                                )
                            - CASH_BUSINESS_GET_CUSTOM_MODE_CREDIT(et.ID_ENTRIES
                                , et.DF_ENTR_TYPE_ID_DF_ENTR_TYPE
                                , et.ENTRIES_ENT_BALANCE
                                , et.ENTRIES_ENT_CREDIT
                                , @bfataabb_useDebitAndCredit
                                , ad.ADMIN_ACC_BAL_PERIOD3+1
                                , eha.ENTRIES_PERMANENT_ATTACHEMENT
                                )
                    -- écritures lettrées : on doit tenir compte de la date de lettrage pour le retro calcul
                    -- condition implicte : et.ENTRIES_DUE_DATE > @bfataabb_refDate
                    -- si le lettrage est antérieur à la date de ref cela implique que l'écriture était déjà close la période
                    When MTC.ID_MATCHINGCODES is Not null And MTC.MATCHINGCODES_DATE < @bfataabb_refDate Then 0 -- lettré pour la période
                    When EFMTCST.ENTRIES_COMPUTED_DATA_DATE is Not null And EFMTCST.ENTRIES_COMPUTED_DATA_DATE < @bfataabb_refDate Then 0 -- lettré pour la période
                    Else
                        -- implicite non lettrée à la date ref
                            CASH_BUSINESS_GET_CUSTOM_MODE_DEBIT(et.ID_ENTRIES
                                , et.DF_ENTR_TYPE_ID_DF_ENTR_TYPE
                                , et.ENTRIES_ENT_BALANCE
                                , et.ENTRIES_ENT_DEBIT
                                , @bfataabb_useDebitAndCredit
                                , ad.ADMIN_ACC_BAL_PERIOD3+1
                                , eha.ENTRIES_PERMANENT_ATTACHEMENT
                                )
                            - CASH_BUSINESS_GET_CUSTOM_MODE_CREDIT(et.ID_ENTRIES
                                , et.DF_ENTR_TYPE_ID_DF_ENTR_TYPE
                                , et.ENTRIES_ENT_BALANCE
                                , et.ENTRIES_ENT_CREDIT
                                , @bfataabb_useDebitAndCredit
                                , ad.ADMIN_ACC_BAL_PERIOD3+1
                                , eha.ENTRIES_PERMANENT_ATTACHEMENT
                                )
                    End
            ) As CUSTMMDE_P4
             , Sum(
                Case
                    When Least(et.ENTRIES_DATE, et.ENTRIES_CREATION_DATE) > @bfataabb_refDate then 0 -- retro-calcul, écriture non créé à la date de ref
#                     When DATEDIFF(@bfataabb_refDate, et.ENTRIES_DUE_DATE) < ad.ADMIN_AGING_PORT_BAL_PERIOD7 +1 then 0 -- age échéance hors période
                    When et.DF_MATCH_STAT_ID_DF_MATCH_STAT In (@bfataabb_OpenEntry, @bfataabb_Partial) Then -- ouvert (& implicitement échus periode)
                            CASH_BUSINESS_GET_CUSTOM_MODE_DEBIT(et.ID_ENTRIES
                                , et.DF_ENTR_TYPE_ID_DF_ENTR_TYPE
                                , et.ENTRIES_ENT_BALANCE
                                , et.ENTRIES_ENT_DEBIT
                                , @bfataabb_useDebitAndCredit
                                , 0
                                , eha.ENTRIES_PERMANENT_ATTACHEMENT
                                )

                    -- écritures lettrées : on doit tenir compte de la date de lettrage pour le retro calcul
                    -- condition implicte : et.ENTRIES_DUE_DATE > @bfataabb_refDate
                    -- si le lettrage est antérieur à la date de ref cela implique que l'écriture était déjà close la période
                    When MTC.ID_MATCHINGCODES is Not null And MTC.MATCHINGCODES_DATE < @bfataabb_refDate Then 0 -- lettré pour la période
                    When EFMTCST.ENTRIES_COMPUTED_DATA_DATE is Not null And EFMTCST.ENTRIES_COMPUTED_DATA_DATE < @bfataabb_refDate Then 0 -- lettré pour la période
                    Else
                        -- implicite non lettrée à la date ref
                            CASH_BUSINESS_GET_CUSTOM_MODE_DEBIT(et.ID_ENTRIES
                                , et.DF_ENTR_TYPE_ID_DF_ENTR_TYPE
                                , et.ENTRIES_ENT_BALANCE
                                , et.ENTRIES_ENT_DEBIT
                                , @bfataabb_useDebitAndCredit
                                , 0
                                , eha.ENTRIES_PERMANENT_ATTACHEMENT
                                )

                    End
            ) As CUSTMMDE_DEBIT
             , Sum(
                Case
                    When Least(et.ENTRIES_DATE, et.ENTRIES_CREATION_DATE) > @bfataabb_refDate then 0 -- retro-calcul, écriture non créé à la date de ref
#                     When DATEDIFF(@bfataabb_refDate, et.ENTRIES_DUE_DATE) < ad.ADMIN_AGING_PORT_BAL_PERIOD7 +1 then 0 -- age échéance hors période
                    When et.DF_MATCH_STAT_ID_DF_MATCH_STAT In (@bfataabb_OpenEntry, @bfataabb_Partial) Then -- ouvert (& implicitement échus periode)
                            CASH_BUSINESS_GET_CUSTOM_MODE_CREDIT(et.ID_ENTRIES
                                , et.DF_ENTR_TYPE_ID_DF_ENTR_TYPE
                                , et.ENTRIES_ENT_BALANCE
                                , et.ENTRIES_ENT_CREDIT
                                , @bfataabb_useDebitAndCredit
                                , 0
                                , eha.ENTRIES_PERMANENT_ATTACHEMENT
                                )
                    -- écritures lettrées : on doit tenir compte de la date de lettrage pour le retro calcul
                    -- condition implicte : et.ENTRIES_DUE_DATE > @bfataabb_refDate
                    -- si le lettrage est antérieur à la date de ref cela implique que l'écriture était déjà close la période
                    When MTC.ID_MATCHINGCODES is Not null And MTC.MATCHINGCODES_DATE < @bfataabb_refDate Then 0 -- lettré pour la période
                    When EFMTCST.ENTRIES_COMPUTED_DATA_DATE is Not null And EFMTCST.ENTRIES_COMPUTED_DATA_DATE < @bfataabb_refDate Then 0 -- lettré pour la période
                    Else
                        -- implicite non lettrée à la date ref
                             CASH_BUSINESS_GET_CUSTOM_MODE_CREDIT(et.ID_ENTRIES
                                , et.DF_ENTR_TYPE_ID_DF_ENTR_TYPE
                                , et.ENTRIES_ENT_BALANCE
                                , et.ENTRIES_ENT_CREDIT
                                , @bfataabb_useDebitAndCredit
                                , 0
                                , eha.ENTRIES_PERMANENT_ATTACHEMENT
                                )
                    End
            ) As CUSTMMDE_CREDIT

        From ACCOUNTS ac
			Inner Join ENTITIES e
				On ac.ENTITIES_ID_ENTITIES = e.ID_ENTITIES
			Inner Join ADMIN_PARAMS ad
				On e.ADMIN_ID_ADMIN = ad.ID_ADMIN_PARAMS
            Left Join (
				ENTRIES_has_ACCOUNTS eha

				Inner Join ENTRIES et
					On eha.ENTRIES_ID_ENTRIES = et.ID_ENTRIES
                     And et.DF_ENTR_TYPE_ID_DF_ENTR_TYPE In (1, 2, 3, 4, 5 , 6, 7)
-- 				Inner Join DF_ENTRIES_TYPE det
-- 					On et.DF_ENTR_TYPE_ID_DF_ENTR_TYPE = det.ID_DF_ENTRIES_TYPE
-- 					And det.DF_ENTRIES_TYPE_ACCOUNTANT = 1
				Left Join DF_ENTRIES_STATUT dfes
					On et.DF_ENTR_STT_ID_DF_ENTR_STT = dfes.ID_DF_ENTRIES_STATUT

				Left Join ENTRIES_NB_RECLAIMS_VIEW_FOR_VIEW r
					ON et.ID_ENTRIES = r.ENTRIES_ID_ENTRIES
-- 				Left Join DF_MATCHINGCODE_STATE dms
-- 					ON et.DF_MATCH_STAT_ID_DF_MATCH_STAT = dms.ID_DF_MATCHINGCODE_STATE
                Left Join (
                    MATCHINGCODES MTC
                    Inner Join ENTRIES_MATCHCOD EMC
                        On MTC.ID_MATCHINGCODES = EMC.MATCHCOD_ID_MATCHCOD
-- 						And MTC.MATCHINGCODES_DATE <= @bfataabb_refDate
                )
                    On et.ID_ENTRIES = EMC.ENTRIES_ID_ENTRIES
                    And EMC.ENTRIES_MATCHCOD_CURRENT = 1
                Left Join ENTRIES_COMPUTED_DATA EFMTCST
                    On et.ID_ENTRIES = EFMTCST.ENTRIES_ID_ENTRIES
                    And EFMTCST.ENTRIES_COMPUTED_DATA_KEY = 'FORCEDMATCHSTS'
-- 				Left Join (
-- 					ENTRIES_COMPUTED_DATA ENMTC
-- 					Inner Join MATCHINGCODES MTC
-- 						On MTC.ID_MATCHINGCODES = ENMTC.ENTRIES_COMPUTED_DATA_EXTID
-- 						And ENMTC.ENTRIES_COMPUTED_DATA_KEY = 'LASTMATCH'
-- 						And MTC.MATCHINGCODES_DATE <= @bfataabb_refDate
-- 
-- 				) On et.ID_ENTRIES = ENMTC.ENTRIES_ID_ENTRIES
			) On ac.ID_ACCOUNTS = eha.ACCOUNTS_ID_ACCOUNTS
-- 				And et.DF_SAND_STATE_ID_DF_SAND_STATE <> 3
				And et.DF_SAND_STATE_ID_DF_SAND_STATE In (1,2,4,5)
                And Least(et.ENTRIES_DATE, @bfataabb_today) <= @bfataabb_refDate
        Where
            ac.ID_ACCOUNTS between @bfataabb_accMinVal And @bfataabb_accMaxVal
            And ac.ENTITIES_ID_ENTITIES between @bfataabb_enttMinVal And @bfataabb_enttMaxVal
        Group By 
                ac.ID_ACCOUNTS
        ;

--         Create Index ix_tmp_acc_aging_bal_batch On tmp_acc_aging_bal_batch(ID_ACCOUNTS);

    end;



end $$
Delimiter ;Nluc
