#<!
#1576
!>
#tomadores
select distinct
  t.tomador,
  t.nome,
  t.cei cei
from
  recibos_de_contrato rc
  inner join tomadores_de_recibo tr on tr.recibo=rc.recibo
  inner join tomadores t on t.tomador=tr.tomador
where
  rc.estabelecimento = :estabelecimento
  and extract(year from rc.data) = :ano
  and t.codigo_recolhimento = 155
  and tr.inss_base + tr.inss_d3_base + tr.fgts_base + tr.fgts_d3_base> 0
order by
  t.tomador


#contratos
select
  c.contrato,
  c.tipo_contrato,
  c.pessoa,
  coalesce(data_transferencia, c.admissao_data) admissao,
  c.admissao_modo_rais,
  c.data_fim,
  (select first 1 codigo_rais from demissoes where estabelecimento=:estabelecimento and contrato=c.contrato and data_afastamento=c.data_fim order by demissao desc) demissao_codigo,
  case when extract(year from c.data_fim) = [ano] then [ano] * 12 + coalesce(extract(month from c.data_fim), 12) else [ano] * 12 + 12 end mes
from
  recibos_de_contrato rc
  inner join contratos c on c.estabelecimento=rc.estabelecimento and c.contrato=rc.contrato
where
  rc.estabelecimento = :estabelecimento
  and extract(year from rc.data) = :ano
  and extract(year from coalesce(data_transferencia, c.admissao_data)) <= :ano
  and (c.data_fim is null or (extract(year from c.data_fim) >= :ano))
  and (c.tipo_contrato = 'E' or c.categoria = '05')
  and rc.folha in (:tfNormal, :tfRescisao, :tfAutonomos, :tfSocios)
group by
  1, 2, 3, 4, 5, 6
having
  sum(
    case when :tomador <= 0 then rc.inss_base_estab + rc.inss_d3_base_estab + rc.fgts_base_estab + rc.fgts_d3_base_estab else 0 end
    + coalesce((select sum(tr.inss_base + tr.inss_d3_base + tr.fgts_base + tr.fgts_d3_base)
     from tomadores_de_recibo tr
          inner join tomadores t on t.tomador=tr.tomador
     where tr.recibo=rc.recibo
           and (
             (:tomador = 0 and t.codigo_recolhimento = 150)
             or (t.tomador = :tomador)
             or (:tomador = -1)
           )), 0)
  ) > 0
    or (select count(*) from afastamentos where estabelecimento=:estabelecimento and contrato=c.contrato and extract(year from data_afastamento) <= :ano and (data_retorno is null or extract(year from data_retorno) >= :ano)) > 0
  or extract(year from c.data_fim) = :ano
order by
  1


#rendimentos
select
  extract(month from rc.data) mes,

  sum(
  case when :tomador <= 0 then rc.fgts_base_estab else 0 end
  + coalesce((select sum(tr.fgts_base)
   from tomadores_de_recibo tr
        inner join tomadores t on t.tomador=tr.tomador
   where tr.recibo=rc.recibo
         and (
           (:tomador = 0 and t.codigo_recolhimento = 150)
           or (t.tomador = :tomador)
           or (:tomador = -1)
         )), 0)
  - coalesce((select sum(et.valor_apurado) from eventos_de_tomadores et
      inner join eventos_de_recibo er on er.chave=et.recibo_evento
      left join tomadores_de_recibo tr on tr.chave=et.recibo_tomador
      left join tomadores t on t.tomador=tr.tomador
      where er.recibo=rc.recibo
            and er.evento = :evento_fgts_afastamento
            and (
              (:tomador = 0 and coalesce(t.codigo_recolhimento, 150) = 150)
              or (t.tomador = :tomador)
              or (:tomador = -1)
            )), 0)
  ) rendimento,

  cast(sum((select sum(er.valor_lancado / er.valor_apurado * et.valor_apurado) from eventos_de_tomadores et
               inner join eventos_de_recibo er on er.chave=et.recibo_evento
               inner join eventos e on e.evento=er.evento
               left join tomadores_de_recibo tr on tr.chave=et.recibo_tomador
               left join tomadores t on t.tomador=tr.tomador
               where er.recibo=rc.recibo and er.valor_apurado > 0
                     and er.folha in (2, 8, 9)
                     and (
                       (:tomador = 0 and coalesce(t.codigo_recolhimento, 150) = 150)
                       or (t.tomador = :tomador)
                       or (:tomador = -1)
                     )
                     and e.acumulador_rescisao = :acumulador_hora_extra)) as numeric(13, 3)) hora_extra
from
  recibos_de_contrato rc
where
  rc.estabelecimento = :estabelecimento
  and extract(year from rc.data) = :ano
  and rc.folha in (:tfNormal, :tfRescisao, :tfAutonomos, :tfSocios)
  and rc.contrato = :contrato
  and rc.movimento <> 2
group by
  1
order by
  1


#verbas_rescisorias
select
  (select sum(et.valor_apurado) from eventos_de_tomadores et
               inner join eventos_de_recibo er on er.chave=et.recibo_evento
               left join tomadores_de_recibo tr on tr.chave=et.recibo_tomador
               left join tomadores t on t.tomador=tr.tomador
               where er.recibo=rc.recibo
                     and (
                       (:tomador = 0 and coalesce(t.codigo_recolhimento, 150) = 150)
                       or (t.tomador = :tomador)
                       or (:tomador = -1)
                     )
                     and er.acumulador_rescisao = :acumulador_aviso_previo) aviso_previo,
  (select sum(et.valor_apurado) from eventos_de_tomadores et
               inner join eventos_de_recibo er on er.chave=et.recibo_evento
               left join tomadores_de_recibo tr on tr.chave=et.recibo_tomador
               left join tomadores t on t.tomador=tr.tomador
               where er.recibo=rc.recibo
                     and (
                       (:tomador = 0 and coalesce(t.codigo_recolhimento, 150) = 150)
                       or (t.tomador = :tomador)
                       or (:tomador = -1)
                     )
                     and er.acumulador_rescisao in (:acumulador_ferias_vencidas, :acumulador_ferias_proporcionais, :acumulador_umterco_ferias)) ferias_indenizadas,
  (select sum(et.valor_apurado) from eventos_de_tomadores et
               inner join eventos_de_recibo er on er.chave=et.recibo_evento
               left join tomadores_de_recibo tr on tr.chave=et.recibo_tomador
               left join tomadores t on t.tomador=tr.tomador
               where er.recibo=rc.recibo
                     and (
                       (:tomador = 0 and coalesce(t.codigo_recolhimento, 150) = 150)
                       or (t.tomador = :tomador)
                       or (:tomador = -1)
                     )
                     and er.acumulador_rescisao = :acumulador_gratificacoes) gratificacoes,
  (select sum(case when er.valor_fixo='N' then cast((et.valor_apurado / 0.5) * 0.4 as numeric(13,2)) else et.valor_apurado end) from eventos_de_tomadores et
               inner join eventos_de_recibo er on er.chave=et.recibo_evento
               left join tomadores_de_recibo tr on tr.chave=et.recibo_tomador
               left join tomadores t on t.tomador=tr.tomador
               where er.recibo=rc.recibo
                     and (
                       (:tomador = 0 and coalesce(t.codigo_recolhimento, 150) = 150)
                       or (t.tomador = :tomador)
                       or (:tomador = -1)
                     )
                     and er.evento = :evento_multa_fgts) multa_fgts
from
  recibos_de_contrato rc
where
  rc.estabelecimento = :estabelecimento
  and rc.folha = :tfRescisao
  and rc.contrato = :contrato
  and rc.data = :data



#reajuste_coletivo
select
  case when :tomador <= 0 then rc.fgts_base_estab else 0 end
  + coalesce((select sum(tr.fgts_base)
   from tomadores_de_recibo tr
        inner join tomadores t on t.tomador=tr.tomador
   where tr.recibo=rc.recibo
         and (
           (:tomador = 0 and t.codigo_recolhimento = 150)
           or (t.tomador = :tomador)
           or (:tomador = -1)
         )), 0)
  - coalesce((select sum(et.valor_apurado) from eventos_de_tomadores et
      inner join eventos_de_recibo er on er.chave=et.recibo_evento
      left join tomadores_de_recibo tr on tr.chave=et.recibo_tomador
      left join tomadores t on t.tomador=tr.tomador
      where er.recibo=rc.recibo
            and er.evento = :evento_fgts_afastamento
            and (
              (:tomador = 0 and coalesce(t.codigo_recolhimento, 150) = 150)
              or (t.tomador = :tomador)
              or (:tomador = -1)
            )), 0)
  rendimento,

  extract(month from c.data_fim)
  - (select first 1 extract(month from ac.data_reajuste_salario) from alteracoes_de_contrato ac
     where ac.contrato=rc.contrato
           and extract(month from ac.data) + extract(year from ac.data) * 12 = extract(month from rc.data) + extract(year from rc.data) * 12
     order by ac.data desc) + 1 meses
from
  recibos_de_contrato rc
  inner join contratos c on c.contrato=rc.contrato
where
  rc.estabelecimento = :estabelecimento
  and extract(year from rc.data) = :ano
  and rc.folha = :tfRescisao
  and rc.contrato = :contrato
  and rc.movimento = 2
order by
  1



#d3
select
  extract(month from rc.data) mes,

  sum(
  case when :tomador <= 0 then
    case when rc.folha = :tfRescisao then rc.fgts_d3_base_estab else rc.fgts_base_estab end
  else 0 end
   + coalesce((select case when rc.folha = :tfRescisao then sum(tr.fgts_d3_base) else sum(tr.fgts_base) end
   from tomadores_de_recibo tr
        inner join tomadores t on t.tomador=tr.tomador
   where tr.recibo=rc.recibo
         and (
           (:tomador = 0 and t.codigo_recolhimento = 150)
           or (t.tomador = :tomador)
           or (:tomador = -1)
         )), 0)
  ) remuneracao
from
  recibos_de_contrato rc
where
  rc.folha in (:tfD3Final, :tfD3Complementar, :tfRescisao)
  and rc.estabelecimento = :estabelecimento
  and rc.contrato = :contrato
  and extract(year from rc.data) = :ano
group by
  1


#adiantamento_d3
select first 1
  extract(month from rc.data) mes,

  case when :tomador <= 0 then rc.fgts_base_estab else 0 end
  + coalesce((select sum(tr.fgts_base)
   from tomadores_de_recibo tr
        inner join tomadores t on t.tomador=tr.tomador
   where tr.recibo=rc.recibo
         and (
           (:tomador = 0 and t.codigo_recolhimento = 150)
           or (t.tomador = :tomador)
           or (:tomador = -1)
         )), 0) remuneracao
from
  recibos_de_contrato rc
where
  rc.folha = :tfAdD3
  and rc.estabelecimento = :estabelecimento
  and rc.contrato = :contrato
  and extract(year from rc.data) = :ano
order by
  1 desc


#contribuicoes
select
  sum(et.valor_apurado) contribuicao
from
  recibos_de_contrato rc
  inner join eventos_de_recibo er on er.recibo=rc.recibo
  inner join eventos e on e.evento=er.evento
  inner join eventos_de_tomadores et on et.recibo_evento=er.chave
  left join tomadores_de_recibo tr on tr.chave=et.recibo_tomador
  left join tomadores t on t.tomador=tr.tomador
where
  rc.contrato = :contrato
  and extract(year from rc.data) = :ano
  and e.classificacao = :classificacao
  and ((:tomador = 0 and coalesce(t.codigo_recolhimento, 150) = 150) or (t.tomador = :tomador) or (:tomador = -1))

#apuracao_contribuicao
select
  s.cnpj,
  sum(a.a_recolher) a_recolher
from
  apuracoes_sindicais a
  inner join sindicatos s on s.sindicato=a.sindicato
where
  a.estabelecimento = :estabelecimento
  and a.ano = :ano
  and a.tipo = :tipo
group by
  s.cnpj



#estabelecimentos
select
  case when e.gera_rais = 'S' and coalesce(e.cnaef, 0) <> :cnaef_domestico then 'S' else 'N' end gera,
  e.estabelecimento,
  e.fantasia
from
  estabelecimentos e
where
  e.data_encerramento is null or extract(year from e.data_encerramento) >= :ano
order by
  1 desc, 2    
