~~ODT~~

Última atualização: 2017/04/03 18:19 (edição externa)

Relatório de Movimentações do Almoxarifado Sintético

Este caso de uso é utilizado pelos gestores de almoxarifado com a finalidade de criar um relatório sintético contendo todas as movimentações de bens no almoxarifado num período de tempo definido.

Descrição do Caso de Uso

Esse caso de uso é acionado quando o usuário acessa a opção: SIPAC → Almoxarifado → Relatórios → Movimentação → RMA Sintético. E se inicia exibindo as opções para a listagem contida no relatório, contendo os seguintes campos:

Então é exibido um relatório conforme o modelo abaixo:

Relatório de Movimentação do Almoxarifado - RMA Sintético

Período Atual: MES de ANO

Almoxarifado: NOME ALMOXARIFADO

Entradas Saidas
Código Denominação Saldo Anterior (R$) Entradas (R$) Ent. Forn. (R$)(RN01) Ent. Extra (R$) Devolução (R$) C.Imediato (R$) Saídas (R$) C.Imediato (R$) Saldo Atual (R$)
CÓDIGO DENOMINAÇÃO UNID. DE MEDIDA 99,99 99,99 99,99 99,99 99,99 99,99 99,99 99,99

São disponibilizados espaços para preenchimento de local/data e assinatura. Então o caso de uso é finalizado.

Principais Regras de Negócio

Resoluções/Legislações Associadas

Não se aplica.

Classes Persistentes e Tabelas Envolvidas

Classe Tabela
br.ufrn.sipac.almoxarifado.entradas.dominio.NotaFiscal administrativo.liquidacao.nota_fiscal
br.ufrn.sipac.almoxarifado.entradas.dominio.ItemNotaFiscal administrativo.liquidacao.item_nota_fiscal
br.ufrn.sipac.almoxarifado.comuns.dominio.MovimentacaoEstoque administrativo.almoxarifado.movimentacao_estoque
br.ufrn.sipac.requisicoes.material.dominio.RequisicaoMaterial administrativo.requisicoes.requisicao_material
br.ufrn.sipac.requisicoes.material.dominio.ItemRequisicao administrativo.requisicoes.item_requisicao
br.ufrn.sipac.almoxarifado.comuns.dominio.EstoqueAlmoxarifado administrativo.almoxarifado.estoque_material
br.ufrn.sipac.almoxarifado.comuns.dominio.AlteracaoMaterialEstoque administrativo.almoxarifado.alteracao_material_estoque

Plano de Teste

Sistema: SIPAC

Módulo: Almoxarifado

Link(s): Relatórios → Movimentação → RMA Sintético.

Usuário: san

Papel que usuário deve ter:

Cenários de Teste

Qualquer movimentação de materiais realizada pelo SIPAC deve refletir neste relatório. Entre elas podemos citar:

Dados para o Teste

O RMA Sintético utiliza as seguintes consultas sql:

Inicialmente, consulta as entradas anteriores para compor o saldo anterior:

select grupo.codigo as codigo, grupo.denominacao as nome, sum(case when nota.tipo = ' 1 ' then (item.quantidade)*(item.valor) else 0 end) as valorEntrada, sum(case when nota.tipo = ' 2 ' then (item.quantidade)*(item.valor) else 0 end) as valorExtra from comum.grupo_material grupo left join comum.material mat on (grupo.id = mat.id_grupo) left join (select * from liquidacao.item_nota_fiscal where ajustado= 'false' ) as item on (mat.id_material = item.id_material) left join (select id_nota_fiscal, tipo from liquidacao.nota_fiscal where estornada = 'false' and data_cadastro < dataInicio –informar a data de início. O sistema pega o primeiro dia do mês informado. and id_almoxarifado = ? –informar id do almoxarifado que se deseja gerar o RMA sintético ) as nota using (id_nota_fiscal) where (select grupo.id, grupo.denominacao, grupo.codigo from almoxarifado.associacao_almoxarifado ass, comum.grupo_material grupo where tipo = 3 and id_almoxarifado = ? –informar id do almoxarifado que se deseja gerar o RMA sintético and ass.id_grupo_material = grupo.id order by grupo.denominacao) group by grupo.codigo, grupo.denominacao order by grupo.codigo asc;

2 - Em seguida, consulta as entradas por nota de fornecimento, que são aquelas que ocorrem entre almoxarifados:

select grupo.codigo as codigo, grupo.denominacao as nome, coalesce(sum(mov.quantidade*mov.valor),0) from comum.grupo_material grupo left join comum.material mat on (grupo.id=mat.id_grupo) left join (select id_material, quantidade, valor from almoxarifado.movimentacao_estoque where id_almoxarifado=? –informar id do almoxarifado que se deseja gerar o RMA sintético and estornado= 'false' and data_movimento < dataInicio –informar a data de início. O sistema pega o primeiro dia do mês informado. and tipo= 1) as mov using (id_material) where (select grupo.id, grupo.denominacao, grupo.codigo from almoxarifado.associacao_almoxarifado ass, comum.grupo_material grupo where tipo = 3 and id_almoxarifado = ? –informar id do almoxarifado que se deseja gerar o RMA sintético and ass.id_grupo_material = grupo.id order by grupo.denominacao) group by grupo.codigo, grupo.denominacao order by grupo.codigo asc;

3 - Entradas avulsas anteriores avulsas:

select grupo.codigo as codigo, grupo.denominacao as nome, coalesce(sum(case when (mov.id_sub_tipo = 16) then mov.valor else mov.valor*mov.quantidade end),0) from comum.grupo_material grupo left join comum.material mat on (grupo.id=mat.id_grupo) left join (select id_material, quantidade, valor, id_sub_tipo from almoxarifado.movimentacao_estoque where id_almoxarifado = ? –informar id do almoxarifado que se deseja gerar o RMA sintético and estornado= false and data_movimento < dataInicio –informar a data de início. O sistema pega o primeiro dia do mês informado. and tipo= 2) as mov using (id_material) where (select grupo.id, grupo.denominacao, grupo.codigo from almoxarifado.associacao_almoxarifado ass, comum.grupo_material grupo where tipo = 3 and id_almoxarifado = ? –informar id do almoxarifado que se deseja gerar o RMA sintético and ass.id_grupo_material = grupo.id order by grupo.denominacao) group by grupo.codigo, grupo.denominacao order by grupo.codigo asc;

4 - Devoluções realizadas no meses anteriores através da Requisição de Devolução de Material:

select grupo.codigo as codigo, grupo.denominacao as nome, sum(item.quantidade*item.valor) as valor from comum.grupo_material grupo left join comum.material mat on (grupo.id = mat.id_grupo) left join (select * from almoxarifado.movimentacao_estoque where data_movimento < dataInicio –informar a data de início. O sistema pega o primeiro dia do mês informado. and id_almoxarifado = ? –informar id do almoxarifado que se deseja gerar o RMA sintético and tipo = 5 and id_sub_tipo = 18 ) as item on (mat.id_material = item.id_material) where (select grupo.id, grupo.denominacao, grupo.codigo from almoxarifado.associacao_almoxarifado ass, comum.grupo_material grupo where tipo = 3 and id_almoxarifado = ? –informar id do almoxarifado que se deseja gerar o RMA sintético and ass.id_grupo_material = grupo.id order by grupo.denominacao) group by grupo.codigo, grupo.denominacao order by grupo.codigo asc;

5 - Saídas Anteriores:

select grupo.codigo as codigo, grupo.denominacao as nome, case when sum((atend.qtd_atendida-atend.qtd_devolvida)*atend.preco_atendimento) > 0 then sum((atend.qtd_atendida-atend.qtd_devolvida)*atend.preco_atendimento) else 0 end as valorSaida from comum.grupo_material grupo left join comum.material mat on (grupo.id = mat.id_grupo) left join requisicoes.item_requisicao item on (mat.id_material = item.id_material) left join (select id_almoxarifado, id_item_req_material, data, qtd_atendida, qtd_devolvida, preco_atendimento from almoxarifado.atendimento_req_material where data < dataInicio –informar a data de início. O sistema pega o primeiro dia do mês informado. and id_almoxarifado = ? –informar id do almoxarifado que se deseja gerar o RMA sintético ) as atend on (item.id = atend.id_item_req_material) where (select grupo.id, grupo.denominacao, grupo.codigo from almoxarifado.associacao_almoxarifado ass, comum.grupo_material grupo where tipo = 3 and id_almoxarifado = ? –informar id do almoxarifado que se deseja gerar o RMA sintético and ass.id_grupo_material = grupo.id order by grupo.denominacao) group by grupo.codigo, grupo.denominacao order by grupo.codigo asc;

6 - Saídas avulsas:

select grupo.codigo as codigo, grupo.denominacao as nome, coalesce(sum(case when (mov.id_sub_tipo = 16) then mov.valor else mov.valor*mov.quantidade end),0) from comum.grupo_material grupo left join comum.material mat on (grupo.id=mat.id_grupo) left join (select id_material, quantidade, valor, id_sub_tipo from almoxarifado.movimentacao_estoque where id_almoxarifado= ? –informar id do almoxarifado que se deseja gerar o RMA sintético and estornado= false and data_movimento < dataInicio –informar a data de início. O sistema pega o primeiro dia do mês informado. and tipo=0 ) as mov using (id_material) where (select grupo.id, grupo.denominacao, grupo.codigo from almoxarifado.associacao_almoxarifado ass, comum.grupo_material grupo where tipo = 3 and id_almoxarifado = ? –informar id do almoxarifado que se deseja gerar o RMA sintético and ass.id_grupo_material = grupo.id order by grupo.denominacao) group by grupo.codigo, grupo.denominacao order by grupo.codigo asc;

O saldo anterior é então contabilizado da seguinte forma:

Entrada Anterior Total = Entrada Anterior(Passo 1) + Entrada Nota de fornecimento(Passo 2) + Entrada avulsa (Passo 3) + devoluções anteriores (Passo 4)

Saída Anterior Total = Saída anterior(Passo 5) + Saída avulsa (Passo 6)

Saldo anterior = Entrada anterior total - Saída anterior total;

As demais colunas são calculadas a partir dos seguintes scripts:

– 1 - Entradas no mês

select grupo.codigo as codigo, grupo.denominacao as nome, sum(case when nota.tipo = 1 then (item.quantidade)*(item.valor) else 0 end) as valorEntrada, sum(case when nota.tipo = 2 then (item.quantidade)*(item.valor) else 0 end) as valorExtra from comum.grupo_material grupo left join comum.material mat on (grupo.id = mat.id_grupo) left join (select * from liquidacao.item_nota_fiscal where ajustado= false ) as item on (mat.id_material = item.id_material) left join (select id_nota_fiscal, tipo from liquidacao.nota_fiscal where estornada = false and consumo_imediato = false and data_cadastro >= dataInicio –informar a data de início. O sistema pega o primeiro dia do mês informado. and data_cadastro < dataFim –informar a data fim. O sistema pega o primeiro dia do mês posterior ao informado. and id_almoxarifado = ? –informar id do almoxarifado que se deseja gerar o RMA sintético ) as nota using (id_nota_fiscal) where (select grupo.id, grupo.denominacao, grupo.codigo from almoxarifado.associacao_almoxarifado ass, comum.grupo_material grupo where tipo = 3 and id_almoxarifado = ? –informar id do almoxarifado que se deseja gerar o RMA sintético and ass.id_grupo_material = grupo.id order by grupo.denominacao) group by grupo.codigo, grupo.denominacao order by grupo.codigo asc;

2 - Entradas no mês de consumo Imediato

select grupo.codigo as codigo, grupo.denominacao as nome, sum(case when nota.tipo = 1 then (item.quantidade)*(item.valor) else 0 end) as valorEntrada, sum(case when nota.tipo = 2 then (item.quantidade)*(item.valor) else 0 end) as valorExtra from comum.grupo_material grupo left join comum.material mat on (grupo.id = mat.id_grupo) left join (select * from liquidacao.item_nota_fiscal where ajustado= SQLDialect.FALSE ) as item on (mat.id_material = item.id_material) left join (select id_nota_fiscal, tipo from liquidacao.nota_fiscal where estornada = SQLDialect.FALSE and consumo_imediato = SQLDialect.TRUE and data_cadastro >= ? –informar a data de início. O sistema pega o primeiro dia do mês informado. and data_cadastro < ? –informar a data fim. O sistema pega o primeiro dia do mês posterior ao informado. and id_almoxarifado = almoxarifado.getId() ) as nota using (id_nota_fiscal) where (select grupo.id, grupo.denominacao, grupo.codigo from almoxarifado.associacao_almoxarifado ass, comum.grupo_material grupo where tipo = 3 and id_almoxarifado = ? –informar id do almoxarifado que se deseja gerar o RMA sintético and ass.id_grupo_material = grupo.id order by grupo.denominacao) group by grupo.codigo, grupo.denominacao order by grupo.codigo asc;

3 - Entradas por notas de fornecimento

String sqlEntForn = select grupo.codigo as codigo, grupo.denominacao as nome, coalesce(sum(mov.quantidade*mov.valor),0) from comum.grupo_material grupo left join comum.material mat on (grupo.id=mat.id_grupo) left join (select id_material, quantidade, valor from almoxarifado.movimentacao_estoque where id_almoxarifado= ? –informar id do almoxarifado que se deseja gerar o RMA sintético and estornado= false and data_movimento >= ? –informar a data de início. O sistema pega o primeiro dia do mês informado. and data_movimento < ? –informar a data fim. O sistema pega o primeiro dia do mês posterior ao informado. and tipo=1 ) as mov using (id_material) where (select grupo.id, grupo.denominacao, grupo.codigo from almoxarifado.associacao_almoxarifado ass, comum.grupo_material grupo where tipo = 3 and id_almoxarifado = ? –informar id do almoxarifado que se deseja gerar o RMA sintético and ass.id_grupo_material = grupo.id order by grupo.denominacao) group by grupo.codigo, grupo.denominacao order by grupo.codigo asc;

4 - Entradas avulsas

select grupo.codigo as codigo, grupo.denominacao as nome,coalesce(sum(case when (mov.id_sub_tipo = 16 ) then mov.valor else mov.valor*mov.quantidade end),0) from comum.grupo_material grupo left join comum.material mat on (grupo.id=mat.id_grupo) left join (select id_material, quantidade, valor, id_sub_tipo from almoxarifado.movimentacao_estoque where id_almoxarifado = ? –informar id do almoxarifado que se deseja gerar o RMA sintético and estornado= false and data_movimento >= ? –informar a data de início. O sistema pega o primeiro dia do mês informado. and data_movimento < ? –informar a data fim. O sistema pega o primeiro dia do mês posterior ao informado. and tipo=2 ) as mov using (id_material) where (select grupo.id, grupo.denominacao, grupo.codigo from almoxarifado.associacao_almoxarifado ass, comum.grupo_material grupo where tipo = 3 and id_almoxarifado = ? –informar id do almoxarifado que se deseja gerar o RMA sintético and ass.id_grupo_material = grupo.id order by grupo.denominacao) group by grupo.codigo, grupo.denominacao order by grupo.codigo asc;

5 - Entradas extra-orçamentárias geradas por ajuste de nota fiscal

select grupo.codigo as codigo, grupo.denominacao as nome, sum(case when nota.tipo = 2 then (nota.quantidade)*(nota.valor) else 0 end) as valorExtra from comum.grupo_material grupo left join comum.material mat on (grupo.id = mat.id_grupo) left join (select * from liquidacao.item_nota_fiscal where ajustado = true ) as item on (mat.id_material = item.id_material) left join (select n.id_nota_fiscal, n.tipo, mov.quantidade, mov.valor from liquidacao.nota_fiscal n, almoxarifado.movimentacao_estoque mov where n.estornada = false and n.id_nota_fiscal = mov.id_nota_fiscal and mov.estornado= false and n.consumo_imediato = false and mov.data_movimento >= ? –informar a data de início. O sistema pega o primeiro dia do mês informado. and mov.data_movimento < ? –informar a data fim. O sistema pega o primeiro dia do mês posterior ao informado. and mov.id_almoxarifado = ? –informar id do almoxarifado que se deseja gerar o RMA sintético and n.id_almoxarifado = ? –informar id do almoxarifado que se deseja gerar o RMA sintético and mov.tipo = 2 and mov.id_sub_tipo = 5 ) as nota using (id_nota_fiscal) where (select grupo.id, grupo.denominacao, grupo.codigo from almoxarifado.associacao_almoxarifado ass, comum.grupo_material grupo where tipo = 3 and id_almoxarifado = ? –informar id do almoxarifado que se deseja gerar o RMA sintético and ass.id_grupo_material = grupo.id order by grupo.denominacao) group by grupo.codigo, grupo.denominacao order by grupo.codigo asc;

6 - Entradas extra-orçamentárias geradas por ajuste de nota fiscal de consumo imediato

select grupo.codigo as codigo, grupo.denominacao as nome, sum(case when nota.tipo = 2 then (nota.quantidade)*(nota.valor) else 0 end) as valorExtra from comum.grupo_material grupo left join comum.material mat on (grupo.id = mat.id_grupo) left join (select * from liquidacao.item_nota_fiscal where ajustado = true ) as item on (mat.id_material = item.id_material) left join (select n.id_nota_fiscal, n.tipo, mov.quantidade, mov.valor from liquidacao.nota_fiscal n, almoxarifado.movimentacao_estoque mov where n.estornada = false and n.id_nota_fiscal = mov.id_nota_fiscal and mov.estornado= false and n.consumo_imediato = true and mov.data_movimento >= ? –informar a data de início. O sistema pega o primeiro dia do mês informado. and mov.data_movimento < ? –informar a data fim. O sistema pega o primeiro dia do mês posterior ao informado. and mov.id_almoxarifado = ? –informar id do almoxarifado que se deseja gerar o RMA sintético and n.id_almoxarifado = ? –informar id do almoxarifado que se deseja gerar o RMA sintético and mov.tipo = 2 and mov.id_sub_tipo = 5 ) as nota using (id_nota_fiscal) where (select grupo.id, grupo.denominacao, grupo.codigo from almoxarifado.associacao_almoxarifado ass, comum.grupo_material grupo where tipo = 3 and id_almoxarifado = ? –informar id do almoxarifado que se deseja gerar o RMA sintético and ass.id_grupo_material = grupo.id order by grupo.denominacao) group by grupo.codigo, grupo.denominacao order by grupo.codigo asc;

7 - Saídas no mês

String sqlSaida = select grupo.codigo as codigo, grupo.denominacao as nome, case when sum((atend.qtd_atendida)*atend.preco_atendimento) > 0 then sum((atend.qtd_atendida)*atend.preco_atendimento) else 0 end as valorSaida, case when sum((atend.qtd_devolvida)*atend.preco_atendimento) > 0 then sum((atend.qtd_devolvida)*atend.preco_atendimento) else 0 end as valorDevolvido from comum.grupo_material grupo left join comum.material mat on (grupo.id = mat.id_grupo) left join requisicoes.item_requisicao item on (mat.id_material = item.id_material) left join (select id_almoxarifado, id_item_req_material, data, qtd_atendida, qtd_devolvida, preco_atendimento from almoxarifado.atendimento_req_material where data >= –informar a data de início. O sistema pega o primeiro dia do mês informado. and data < ? –informar a data fim. O sistema pega o primeiro dia do mês posterior ao informado. and id_almoxarifado = ? –informar id do almoxarifado que se deseja gerar o RMA sintético ) as atend on (item.id = atend.id_item_req_material) where (select grupo.id, grupo.denominacao, grupo.codigo from almoxarifado.associacao_almoxarifado ass, comum.grupo_material grupo where tipo = 3 and id_almoxarifado = ? –informar id do almoxarifado que se deseja gerar o RMA sintético and ass.id_grupo_material = grupo.id order by grupo.denominacao) group by grupo.codigo, grupo.denominacao order by grupo.codigo asc;

8 - Saídas avulsas

select grupo.codigo as codigo, grupo.denominacao as nome, coalesce(sum(mov.quantidade),0) as qtd, coalesce(sum(case when (mov.id_sub_tipo = 16 ) then mov.valor else mov.valor*mov.quantidade end),0) from comum.grupo_material grupo left join comum.material mat on (grupo.id=mat.id_grupo) left join (select id_material, quantidade, valor, id_sub_tipo from almoxarifado.movimentacao_estoque where id_almoxarifado=? –informar id do almoxarifado que se deseja gerar o RMA sintético and estornado= false and data_movimento >= ?–informar a data de início. O sistema pega o primeiro dia do mês informado. and data_movimento < ? –informar a data fim. O sistema pega o primeiro dia do mês posterior ao informado. and tipo=0 and id_sub_tipo<>12 ) as mov using (id_material) where (select grupo.id, grupo.denominacao, grupo.codigo from almoxarifado.associacao_almoxarifado ass, comum.grupo_material grupo where tipo = 3 and id_almoxarifado = ? –informar id do almoxarifado que se deseja gerar o RMA sintético and ass.id_grupo_material = grupo.id order by grupo.denominacao) group by grupo.codigo, grupo.denominacao order by grupo.codigo asc;

9 - Saídas avulsas de consumo Imediato

select grupo.codigo as codigo, grupo.denominacao as nome, coalesce(sum(mov.quantidade),0) as qtd, coalesce(sum(case when (mov.id_sub_tipo = 16 ) then mov.valor else mov.valor*mov.quantidade end),0) from comum.grupo_material grupo left join comum.material mat on (grupo.id=mat.id_grupo) left join (select id_material, quantidade, valor, id_sub_tipo from almoxarifado.movimentacao_estoque where id_almoxarifado = ? –informar id do almoxarifado que se deseja gerar o RMA sintético and estornado= false and data_movimento >= ? –informar a data de início. O sistema pega o primeiro dia do mês informado. and data_movimento < ? –informar a data fim. O sistema pega o primeiro dia do mês posterior ao informado. and tipo=0 and id_sub_tipo=12 ) as mov using (id_material) where (select grupo.id, grupo.denominacao, grupo.codigo from almoxarifado.associacao_almoxarifado ass, comum.grupo_material grupo where tipo = 3 and id_almoxarifado = ? –informar id do almoxarifado que se deseja gerar o RMA sintético and ass.id_grupo_material = grupo.id order by grupo.denominacao) group by grupo.codigo, grupo.denominacao order by grupo.codigo asc;

10 - Devoluções realizadas através da Requisição de Devolução de Material

select grupo.codigo as codigo, grupo.denominacao as nome, sum(item.quantidade*item.valor) as valor from comum.grupo_material grupo left join comum.material mat on (grupo.id = mat.id_grupo) left join (select * from almoxarifado.movimentacao_estoque where data_movimento >= ? –informar a data de início. O sistema pega o primeiro dia do mês informado. and data_movimento < ? –informar a data fim. O sistema pega o primeiro dia do mês posterior ao informado. and id_almoxarifado = ? –informar id do almoxarifado que se deseja gerar o RMA sintético and tipo = 5 and id_sub_tipo = 18 ) as item on (mat.id_material = item.id_material) where (select grupo.id, grupo.denominacao, grupo.codigo from almoxarifado.associacao_almoxarifado ass, comum.grupo_material grupo where tipo = 3 and id_almoxarifado = ? –informar id do almoxarifado que se deseja gerar o RMA sintético and ass.id_grupo_material = grupo.id order by grupo.denominacao) group by grupo.codigo, grupo.denominacao order by grupo.codigo asc ;