CREATE TABLE TBDESPESA_HISTORICO (
    ID INTEGER,
    CONTA VARCHAR(30),
    CCUSTO VARCHAR(30),
    VALOR NUMERIC(18,8),
    ANO INTEGER,
    MES INTEGER,
    TIPO INTEGER);

COMMENT ON COLUMN TBDESPESA_HISTORICO.TIPO IS
'1 - conta
2 - c. custo
3 - c. custo / conta';

COMMENT ON TABLE TBDESPESA_HISTORICO IS 'tabela com o valor das depesa por, conta, c. custo e c. custo/conta';

CREATE INDEX ITBDESPESA_HISTORICO_04
ON TBDESPESA_HISTORICO (TIPO);

CREATE INDEX ITBDESPESA_HISTORICO_03
ON TBDESPESA_HISTORICO (CONTA);

CREATE INDEX ITBDESPESA_HISTORICO_02
ON TBDESPESA_HISTORICO (CCUSTO);

CREATE INDEX ITBDESPESA_HISTORICO_01
ON TBDESPESA_HISTORICO (ANO,MES);

CREATE SEQUENCE GTBDESPESA_HISTORICO;

CREATE trigger ttbdespesa_historico_b01i for tbdespesa_historico
active before insert position 0
AS
begin
  if (new.id is null) then
    new.id = gen_id(GTBDESPESA_HISTORICO,1);
end;

ALTER TABLE TBDESPESA_HISTORICO
    ADD PERCENTUAL NUMERIC(15,4);

COMMENT ON COLUMN TBDESPESA_HISTORICO.PERCENTUAL IS
'quanto o valor representa da conta ou centro de custo';

CREATE OR ALTER procedure spu_rateamento_contabil (
    ano integer,
    mes integer,
    grupo_rateamento integer,
    estabelecimento integer)
returns (
    olt_ccusto varchar(10),
    olt_valor numeric(18,8),
    olt_familia varchar(300),
    olt_conta varchar(30))
as
declare variable data1 date;
declare variable data2 date;
declare variable familia varchar(300);
declare variable id integer;
declare variable conta varchar(30);
declare variable valor_origem integer;
declare variable regra_rateamento integer;
declare variable rateamento_grupo integer;
declare variable ccusto varchar(10);
declare variable valor numeric(18,8);
declare variable perc numeric(18,8);
declare variable tipo_id integer;
declare variable tipo_custo integer;
begin

  :DATA1 = cast('01.'||mes||'.'||ano as date);
  :DATA2 = cast(FN_END_OF_MONTH(:DATA1) as date);

  --remove despesas de ccusto/conta, para poder atualizalas
  delete from TBDESPESA_HISTORICO d where d.ano = :ANO and d.mes = :MES and d.tipo = 4;

  for
    select
        ID,
        CONTA,
        VALOR_ORIGEM,
        REGRA_RATEAMENTO,
        RATEAMENTO_GRUPO,
        TIPO_ID
    from tbrateamento_conta_contabil c
    where c.rateamento_grupo = :GRUPO_RATEAMENTO
  into
     :ID,
     :CONTA,
     :VALOR_ORIGEM,
     :REGRA_RATEAMENTO,
     :RATEAMENTO_GRUPO,
     :TIPO_ID
  do
  begin

     --valor pelo lancamento contabil
     if(:VALOR_ORIGEM = 2)then
     begin
        for
            select
                a.ccusto, SUM(VALOR)
            from tbmovcontabil a
            where a.conta = :CONTA
              and a.data between :DATA1 and :DATA2
            group by 1
        into
            :CCUSTO,
            :VALOR
        do
        begin
            :olt_ccusto = CCUSTO;
            :olt_valor  = VALOR;

            TIPO_CUSTO = coalesce((select c.tipo_custo from tbcentro_de_custo c where c.codigo = replace(:CCUSTO,'*','')),0);

            if(TIPO_CUSTO <> 3)then
            begin
                update tbrateamento_historico h set
                  h.ACUMULADO_CONTA = (coalesce(h.ACUMULADO_CONTA,0) + coalesce(:VALOR,0)),
                  h.valor_composicao = (coalesce(h.valor_composicao,'') || ' + '||:CONTA||':0:'||coalesce(:VALOR,0))
                where h.ano = :ano
                and h.mes = :mes
                and h.rateamento_grupo = :RATEAMENTO_GRUPO
                and replace(h.ccusto,'*','') = :CCUSTO;
            end else
            begin
              INSERT INTO TBDESPESA_HISTORICO (CONTA, CCUSTO, VALOR, ANO, MES, TIPO, PERCENTUAL) VALUES (:CONTA, :CCUSTO, :VALOR, :ANO, :MES, 4, 1);
            end

            insert into TBRATEAMENTO_DETALHE (ano, mes, origem, CCUSTO, valor, rateamento, grupo_rateamento, tipo)
                    values(:ano, :mes,:CONTA, :CCUSTO,coalesce(:olt_valor,0), cast(:PERC as numeric(18,4)),  :RATEAMENTO_GRUPO, 3);

            suspend;
        end

     end

     --valor pelo lancamento estoque
     if(:VALOR_ORIGEM = 1)then
     begin
        for
            Select
                A.CENTRO_DE_CUSTO,
                Sum(Cast(A.Quantidade as Numeric(15,4)) *
                (Select First 1 Cast(S.Custo_Medio as Numeric(15,4)) From TbEstoque_Saldo_Diario S
                 Where S.Estabelecimento_Codigo = A.Estabelecimento_Codigo
                   and S.Data = A.Data
                   and S.Produto_Codigo = A.Produto_Codigo
                   and S.Localizacao_Codigo = A.Localizacao_Codigo)) Custo_Medio
            From TbEstoque_Transacao_Item A, TbProduto P, TBOperacao O
            Where A.Estabelecimento_Codigo = :estabelecimento
              and A.Produto_Codigo = P.Codigo
              and A.DATA BETWEEN :Data1 and :Data2
              AND A.tipo = 'S'
              AND P.codigo in( select distinct
                                        
                                            (select first 1 p.codigo from tbproduto p where p.codigo = c.produto_id) as FAMILIA
                                        
                                          from tbproduto_operacao_contabil c
                                        where c.conta_contabil = :CONTA)
            
              and O.Codigo = A.Operacao_Codigo
              and O.GGF = '1'
            Group by 1
        into
            :CCUSTO,
            :VALOR
        do
        begin
            :olt_ccusto  = CCUSTO;
            :olt_valor   = VALOR;
            :olt_familia = '';
            :olt_conta   = CONTA;

            TIPO_CUSTO = coalesce((select c.tipo_custo from tbcentro_de_custo c where c.codigo = replace(:CCUSTO,'*','')),0);

            if(TIPO_CUSTO <> 3)then
            begin
                update tbrateamento_historico h set
                  h.ACUMULADO_CONTA = (coalesce(h.ACUMULADO_CONTA,0) + coalesce(:VALOR,0)),
                  h.valor_composicao = (coalesce(h.valor_composicao,'') || ' + '||:CONTA||':0:'||coalesce(:VALOR,0))
                where h.ano = :ano
                and h.mes = :mes
                and h.rateamento_grupo = :RATEAMENTO_GRUPO
                and replace(h.ccusto,'*','') = :CCUSTO;
            end else
            begin
              INSERT INTO TBDESPESA_HISTORICO (CONTA, CCUSTO, VALOR, ANO, MES, TIPO, PERCENTUAL) VALUES (:CONTA, :CCUSTO, :VALOR, :ANO, :MES, 4, 1);
            end

           insert into TBRATEAMENTO_DETALHE (ano, mes, origem, CCUSTO, valor, rateamento, grupo_rateamento, tipo)
                    values(:ano, :mes,:CONTA, :CCUSTO,coalesce(:olt_valor,0), cast(:PERC as numeric(18,4)),  :RATEAMENTO_GRUPO, 3);
            suspend;
        end

     end

     --valor pelo lancamento contabil
     if(:VALOR_ORIGEM = 4)then
     begin
        for
            select
               SUM(VALOR)
            from tbmovcontabil a
            where a.conta = :CONTA
              and a.data between :DATA1 and :DATA2
        into
            :VALOR
        do
        begin

            --rateamento fixo
            if(:REGRA_RATEAMENTO = 2)then
            begin
                for
                    select
                        ccusto,
                        cast(((valor * 1.000) / TOTAL) as numeric(18,8)) as PERC
                    from(
                        select
                            c.ccusto,
                            c.valor,
                            sum(c.valor) over() as TOTAL
                        from TBRATEAMENTO_TIPO_DETALHE c, tbrateamento_tipo t
                        where c.tipo_id = :TIPO_ID
                        and t.id = c.tipo_id
                        and :DATA1 between t.data_inicial and coalesce(t.data_final,'31.12.3000')
                    )
                into
                   :CCUSTO,
                   :PERC
                do
                begin
                    :olt_ccusto = CCUSTO;
    
                    :olt_valor  =  cast(( cast(VALOR as numeric(18,4)) * cast(PERC as numeric(18,4))) as numeric(18,8));
    
                    :olt_familia = '';
                    :olt_conta   = CONTA;
        
                    TIPO_CUSTO = coalesce((select c.tipo_custo from tbcentro_de_custo c where c.codigo = replace(:CCUSTO,'*','')),0);
    
                    if(TIPO_CUSTO <> 3)then
                    begin
                        update tbrateamento_historico h set
                          h.ACUMULADO_CONTA = (coalesce(h.ACUMULADO_CONTA,0) + coalesce(:olt_valor,0)),
                          h.valor_composicao = (coalesce(h.valor_composicao,'') || ' + '||:CONTA||':'||cast(:PERC as numeric(18,4))||':'||coalesce(:olt_valor,0))
                        where h.ano = :ano
                        and h.mes = :mes
                        and h.rateamento_grupo = :RATEAMENTO_GRUPO
                        and replace(h.ccusto,'*','') = :CCUSTO;
                    end else
                    begin
                      INSERT INTO TBDESPESA_HISTORICO (CONTA, CCUSTO, VALOR, ANO, MES, TIPO, PERCENTUAL) VALUES (:CONTA, :CCUSTO, :VALOR, :ANO, :MES, 4, 1);
                    end

                    insert into TBRATEAMENTO_DETALHE (ano, mes, origem, CCUSTO, valor, rateamento, grupo_rateamento, tipo)
                    values(:ano, :mes,:CONTA, :CCUSTO,coalesce(:olt_valor,0), cast(:PERC as numeric(18,4)),  :RATEAMENTO_GRUPO, 3);

                    suspend;
                end
            end

            --rateamento colaborador
            if(:REGRA_RATEAMENTO = 3)then
            begin
                for
                    select
                        codigo,
                        ((PESO * 1.00000) / sum(PESO) over()) as TOTAL
                    from(

                            select
                               iif(i.codigo2 is null, i.codigo , i.codigo2) as codigo,
                               descricao,
                               PESO
                            from(
                                select
                            
                                    j.codigo,
                                    j.descricao,
                                    (select first 1 h.ccusto from  tbrateamento_historico h where h.rateamento_grupo = :RATEAMENTO_GRUPO and h.ano = :ano and h.mes = :mes and j.codigo like replace(h.ccusto,'*','%')) as codigo2,
                                    count(c.pessoal_nome) as PESO
                                
                                from tbcolaborador c, tbcentro_de_custo j
                                
                                where c.situacao = 1
                                and j.codigo = c.centro_de_custo_codigo
                                
                                group by 1,2,3
                            ) i
                       /*
                        select
                            j.codigo,
                            j.descricao,
                            count(c.pessoal_nome) as PESO
                        
                        from tbcolaborador c, tbcentro_de_custo j
                        where c.situacao = 1
                        and j.codigo = c.centro_de_custo_codigo
                        
                        group by 1,2 */
                    )
                into
                   :CCUSTO,
                   :PERC
                do
                begin
                    :olt_ccusto = CCUSTO;
    
                    :olt_valor  =  cast(( cast(VALOR as numeric(18,4)) * cast(PERC as numeric(18,4))) as numeric(18,8));
    
                    :olt_familia = '';
                    :olt_conta   = CONTA;
        
                    TIPO_CUSTO = coalesce((select c.tipo_custo from tbcentro_de_custo c where c.codigo = replace(:CCUSTO,'*','')),0);
    
                    if(TIPO_CUSTO <> 3)then
                    begin
                        update tbrateamento_historico h set
                          h.ACUMULADO_CONTA = (coalesce(h.ACUMULADO_CONTA,0) + coalesce(:olt_valor,0)),
                          h.valor_composicao = (coalesce(h.valor_composicao,'') || ' + '||:CONTA||':'||cast(:PERC as numeric(18,4))||':'||coalesce(:olt_valor,0))
                        where h.ano = :ano
                        and h.mes = :mes
                        and h.rateamento_grupo = :RATEAMENTO_GRUPO
                        and replace(h.ccusto,'*','') = replace(:CCUSTO,'*','');
                    end else
                    begin
                      INSERT INTO TBDESPESA_HISTORICO (CONTA, CCUSTO, VALOR, ANO, MES, TIPO, PERCENTUAL) VALUES (:CONTA, :CCUSTO, :VALOR, :ANO, :MES, 4, 1);
                    end

                    insert into TBRATEAMENTO_DETALHE (ano, mes, origem, CCUSTO, valor, rateamento, grupo_rateamento, tipo)
                    values(:ano, :mes,:CONTA, :CCUSTO,coalesce(:olt_valor,0), cast(:PERC as numeric(18,4)),  :RATEAMENTO_GRUPO, 2);

                    suspend;
                end
            end

            --rateamento colaborador/transporte
            if(:REGRA_RATEAMENTO = 4)then
            begin
                for
                    select
                        CCusto,
                        (Colaboradores * 1.000000) / sum(Colaboradores) over() PERC
                    from(
                        Select A.CCusto,
                               Count(A.Colaborador_Id) Colaboradores
                          From TbFolPag_Detalhe A, TbFolPag_Verba B
                         Where A.Verba_Codigo = B.Codigo
                           and B.Natureza in ('C','D')
                           and B.CODIGO = 1498
                           and A.Ano = :ANO
                           and A.Mes = :MES
                        Group by 1
                    ) where Colaboradores > 0
                into
                   :CCUSTO,
                   :PERC
                do
                begin
                    :olt_ccusto = CCUSTO;
    
                    :olt_valor  =  cast(( cast(VALOR as numeric(18,4)) * cast(PERC as numeric(18,4))) as numeric(18,8));
    
                    :olt_familia = '';
                    :olt_conta   = CONTA;
        
                    TIPO_CUSTO = coalesce((select c.tipo_custo from tbcentro_de_custo c where c.codigo = replace(:CCUSTO,'*','')),0);
    
                    if(TIPO_CUSTO <> 3)then
                    begin
                        update tbrateamento_historico h set
                          h.ACUMULADO_CONTA = (coalesce(h.ACUMULADO_CONTA,0) + coalesce(:olt_valor,0)),
                          h.valor_composicao = (coalesce(h.valor_composicao,'') || ' + '||:CONTA||':'||cast(:PERC as numeric(18,4))||':'||coalesce(:olt_valor,0))
                        where h.ano = :ano
                        and h.mes = :mes
                        and h.rateamento_grupo = :RATEAMENTO_GRUPO
                        and replace(h.ccusto,'*','') = :CCUSTO;
                    end else
                    begin
                      INSERT INTO TBDESPESA_HISTORICO (CONTA, CCUSTO, VALOR, ANO, MES, TIPO, PERCENTUAL) VALUES (:CONTA, :CCUSTO, :VALOR, :ANO, :MES, 4, 1);
                    end


                    insert into TBRATEAMENTO_DETALHE (ano, mes, origem, CCUSTO, valor, rateamento, grupo_rateamento, tipo)
                    values(:ano, :mes,:CONTA, :CCUSTO,coalesce(:olt_valor,0), cast(:PERC as numeric(18,4)),  :RATEAMENTO_GRUPO, 2);

                    suspend;
                end
            end

            --rateamento colaborador/refeicao
            if(:REGRA_RATEAMENTO = 5)then
            begin
                for
                    select
                        CCusto,
                        (Colaboradores * 1.000000) / sum(Colaboradores) over() PERC
                    from(
                        Select A.CCusto,
                               Count(A.Colaborador_Id) Colaboradores
                          From TbFolPag_Detalhe A, TbFolPag_Verba B
                         Where A.Verba_Codigo = B.Codigo
                           and B.Natureza in ('C','D')
                           and B.CODIGO = 209
                           and A.Ano = :ANO
                           and A.Mes = :MES
                    Group by 1
                    ) where Colaboradores > 0
                into
                   :CCUSTO,
                   :PERC
                do
                begin
                    :olt_ccusto = CCUSTO;
    
                    :olt_valor  =  cast(( cast(VALOR as numeric(18,4)) * cast(PERC as numeric(18,4))) as numeric(18,8));
    
                    :olt_familia = '';
                    :olt_conta   = CONTA;
        
                    TIPO_CUSTO = coalesce((select c.tipo_custo from tbcentro_de_custo c where c.codigo = replace(:CCUSTO,'*','')),0);
    
                    if(TIPO_CUSTO <> 3)then
                    begin
                        update tbrateamento_historico h set
                          h.ACUMULADO_CONTA = (coalesce(h.ACUMULADO_CONTA,0) + coalesce(:olt_valor,0)),
                          h.valor_composicao = (coalesce(h.valor_composicao,'') || ' + '||:CONTA||':'||cast(:PERC as numeric(18,4))||':'||coalesce(:olt_valor,0))
                        where h.ano = :ano
                        and h.mes = :mes
                        and h.rateamento_grupo = :RATEAMENTO_GRUPO
                        and replace(h.ccusto,'*','') = :CCUSTO;
                    end else
                    begin
                      INSERT INTO TBDESPESA_HISTORICO (CONTA, CCUSTO, VALOR, ANO, MES, TIPO, PERCENTUAL) VALUES (:CONTA, :CCUSTO, :VALOR, :ANO, :MES, 4, 1);
                    end

                    insert into TBRATEAMENTO_DETALHE (ano, mes, origem, CCUSTO, valor, rateamento, grupo_rateamento, tipo)
                    values(:ano, :mes,:CONTA, :CCUSTO,coalesce(:olt_valor,0), cast(:PERC as numeric(18,4)),  :RATEAMENTO_GRUPO, 2);

                    suspend;
                end
            end

            --rateamento area
            if(:REGRA_RATEAMENTO = 6)then
            begin
                for
                    select
                        c.ccusto,
                        (c.area * 1.000000) / (sum(c.area) over()) as PERC
                    from tbccusto_area c
                    where cast(:DATA1 as date) between c.data_inicio and c.data_fim
                into
                   :CCUSTO,
                   :PERC
                do
                begin
                    :olt_ccusto = CCUSTO;
    
                    :olt_valor  =  cast(( cast(VALOR as numeric(18,4)) * cast(PERC as numeric(18,4))) as numeric(18,8));
    
                    :olt_familia = '';
                    :olt_conta   = CONTA;
        
                    TIPO_CUSTO = coalesce((select c.tipo_custo from tbcentro_de_custo c where c.codigo = replace(:CCUSTO,'*','')),0);
    
                    if(TIPO_CUSTO <> 3)then
                    begin
                        update tbrateamento_historico h set
                          h.ACUMULADO_CONTA = (coalesce(h.ACUMULADO_CONTA,0) + coalesce(:olt_valor,0)),
                          h.valor_composicao = (coalesce(h.valor_composicao,'') || ' + '||:CONTA||':'||cast(:PERC as numeric(18,4))||':'||coalesce(:olt_valor,0))
                        where h.ano = :ano
                        and h.mes = :mes
                        and h.rateamento_grupo = :RATEAMENTO_GRUPO
                        and replace(h.ccusto,'*','') = :CCUSTO;
                    end else
                    begin
                      INSERT INTO TBDESPESA_HISTORICO (CONTA, CCUSTO, VALOR, ANO, MES, TIPO, PERCENTUAL) VALUES (:CONTA, :CCUSTO, :VALOR, :ANO, :MES, 4, 1);
                    end

                    insert into TBRATEAMENTO_DETALHE (ano, mes, origem, CCUSTO, valor, rateamento, grupo_rateamento, tipo)
                    values(:ano, :mes,:CONTA, :CCUSTO,coalesce(:olt_valor,0), cast(:PERC as numeric(18,4)),  :RATEAMENTO_GRUPO, 3);

                    suspend;
                end
            end

            --rateamento para setores do corte
            if(:REGRA_RATEAMENTO = 7)then
            begin
                for
                    select
                        CCUSTO,
                        1.000000 / count(CCUSTO) over() as PERC
                    from(
                    select DISTINCT CC.CODIGO CCUSTO, 1 PESO
                    from tbcentro_de_custo cc, tbponto_cartao pc
                    where cc.codigo = pc.ccusto
                      and pc.data between :DATA1 and :DATA2
                      and cc.ct = 'BH'
                    )
                into
                   :CCUSTO,
                   :PERC
                do
                begin
                    :olt_ccusto = CCUSTO;
    
                    :olt_valor  =  cast(( cast(VALOR as numeric(18,4)) * cast(PERC as numeric(18,4))) as numeric(18,8));
    
                    :olt_familia = '';
                    :olt_conta   = CONTA;

                    TIPO_CUSTO = coalesce((select c.tipo_custo from tbcentro_de_custo c where c.codigo = replace(:CCUSTO,'*','')),0);
    
                    if(TIPO_CUSTO <> 3)then
                    begin
                        update tbrateamento_historico h set
                          h.ACUMULADO_CONTA = (coalesce(h.ACUMULADO_CONTA,0) + coalesce(:olt_valor,0)),
                          h.valor_composicao = (coalesce(h.valor_composicao,'') || ' + '||:CONTA||':'||cast(:PERC as numeric(18,4))||':'||coalesce(:olt_valor,0))
                        where h.ano = :ano
                        and h.mes = :mes
                        and h.rateamento_grupo = :RATEAMENTO_GRUPO
                        and replace(h.ccusto,'*','') = :CCUSTO;
                    end else
                    begin
                      INSERT INTO TBDESPESA_HISTORICO (CONTA, CCUSTO, VALOR, ANO, MES, TIPO, PERCENTUAL) VALUES (:CONTA, :CCUSTO, :VALOR, :ANO, :MES, 4, 1);
                    end

                    insert into TBRATEAMENTO_DETALHE (ano, mes, origem, CCUSTO, valor, rateamento, grupo_rateamento, tipo)
                    values(:ano, :mes,:CONTA, :CCUSTO,coalesce(:olt_valor,0), cast(:PERC as numeric(18,4)),  :RATEAMENTO_GRUPO, 3);

                    suspend;
                end
            end

        end
     end

     --valor pelo lancamento contabil
     if(:VALOR_ORIGEM = 5)then
     begin
        for
            SELECT
                I.CCUSTO,
                SUM(ID.VALOR)
              FROM TBIMOBILIZADO_DEPRECIACAO ID,
                   TBIMOBILIZADO_ITEM II,
                   TBIMOBILIZADO I,
                  (SELECT FIRST 1 CAST('01.' || CAST(:MES AS INTEGER) || '.' || CAST(:ANO AS INTEGER) AS DATE) DATA FROM TBTURNO T) D
            
            WHERE
                ID.DATA BETWEEN FN_START_OF_MONTH(D.DATA) AND FN_END_OF_MONTH(D.DATA)
            AND II.ID = ID.IMOBILIZADO_ITEM_ID
            AND I.ID  = II.IMOBILIZADO_ID
            group by 1
        into
            :CCUSTO,
            :VALOR
        do
        begin
            :olt_ccusto = CCUSTO;
            :olt_valor  = VALOR;
            :olt_conta  = :CONTA;

            TIPO_CUSTO = coalesce((select c.tipo_custo from tbcentro_de_custo c where c.codigo = replace(:CCUSTO,'*','')),0);
    
            if(TIPO_CUSTO <> 3)then
            begin
                update tbrateamento_historico h set
                  h.ACUMULADO_CONTA  = (coalesce(h.ACUMULADO_CONTA,0) + coalesce(:VALOR,0)),
                  h.valor_composicao = (coalesce(h.valor_composicao,'') || ' + '||:CONTA||':0:'||coalesce(:VALOR,0))
                where h.ano = :ano
                and h.mes = :mes
                and h.rateamento_grupo = :RATEAMENTO_GRUPO
                and replace(h.ccusto,'*','') = :CCUSTO;
            end else
            begin
              INSERT INTO TBDESPESA_HISTORICO (CONTA, CCUSTO, VALOR, ANO, MES, TIPO, PERCENTUAL) VALUES (:CONTA, :CCUSTO, :VALOR, :ANO, :MES, 4, 1);
            end


            insert into TBRATEAMENTO_DETALHE (ano, mes, origem, CCUSTO, valor, rateamento, grupo_rateamento, tipo)
            values(:ano, :mes,:CONTA, :CCUSTO,coalesce(:VALOR,0), 0,  :RATEAMENTO_GRUPO, 2);

            suspend;
        end

     end


  end


end;


create view vwresultado_rateamento (
ANO,
MES,
GRUPO_RATEAMENTO,
ORIGEM,
ORIGEM_DESCRICAO,
TOTAL_RATEADO,
DESTINO,
DESTINO_DESCRICAO,
RECEBIDO,
COLABORADORES,
TIPO_RATEAMENTO,
TIPO_RATEAMENTO_DESCRICAO
)
as
select
    d.ano,
    d.mes,
    d.grupo_rateamento,
    d.origem,
    c.descricao as ORIGEM_DESCRICAO,
    sum(d.rateamento) over(partition by d.origem) as TOTAL_RATEADO,
    d.ccusto as destino,
    (select first 1 j.descricao from tbcentro_de_custo j where j.codigo = replace(d.ccusto,'*','')) as DESTINO_DESCRICAO,
    d.rateamento as RECEBIDO,
    d.colaboradores,
    d.tipo_rateamento,
    t.descricao as TIPO_RATEAMENTO_DESCRICAO
from tbrateamento_detalhe d, tbcentro_de_custo c, tbrateamento_tipo t
where c.codigo = replace(d.origem,'*','')
and t.id = d.tipo_rateamento
and iif(d.tipo_rateamento = 1001 or d.tipo_rateamento = 1003 or d.tipo_rateamento = 1006  ,d.colaboradores > 0, true)
;


