~~ODT~~
Processos Movimentados por Tipo
Uma unidade pode movimentar vários processos de vários tipos durante um período.
Este caso de uso tem como finalidade gerar relatórios de movimentação de tipos de processos de uma ou mais unidades em dado período de tempo. O relatório apresentará a quantidade de processos do mesmo tipo movimentados em cada unidade e o tempo médio no qual estes processos permaneceram nesta unidade.
Esses relatórios podem ser gerados por qualquer usuário do sistema.
Descrição do Caso de Uso
Esse caso de uso se inicia quando o usuário acessa o caminho: Módulos → Protocolo → Consultas/Relatórios → Relatórios → Processos Movimentados por Tipo (RN05)
O caso de uso mostra os critérios para a geração dos relatórios:
- Período (RN01): Formato - DD/MM/AAAA a DD/MM/AAAA, Tipo - DATA.
- Tipo de Movimentação (RN02): Formato: 'Envio' | 'Recebimento' | 'Ambos', Tipo - TEXTO e LÓGICO.
Caso o usuário deseje, também é possível detalhar o relatório pelos seguintes filtros:
- Unidade (RN03): Formato - CÓDIGO DA UNIDADE | NOME DA UNIDADE, Tipo - NUMÉRICO e TEXTO.
- Tipo de Processo (RN04): Tipo: TEXTO.
O relatório é gerado seguindo o modelo:
RELATÓRIO DE PROCESSOS MOVIMENTADOS POR TIPO
- Período: Formato - DD/MM/AAAA a DD/MM/AAAA, Tipo - DATA.
- Tipo de Movimentação: Tipo: TEXTO (Envio | Recebimento | Ambos).
- Unidade: Formato - NOME DA UNIDADE (CÓDIGO DA UNIDADE), Tipo - TEXTO e NUMÉRICO.
- Tipo de Processo: Tipo: TEXTO.
Movimentações de Envio de Processo | ||
Unidade | Quantidade | Tempo Médio na Unidade |
---|---|---|
NOME DA UNIDADE (CÓDIGO DA UNIDADE) | ||
TIPO DO PROCESSO | 999 | 9 dia(s) 00:00:00 |
—— | —— | —— |
Total na Unidade | 999999 | 9 dia(s) 00:00:00 |
NOME DA UNIDADE (CÓDIGO DA UNIDADE) | ||
TIPO DO PROCESSO | 999 | 9 dia(s) 00:00:00 |
—— | —— | —— |
Total na Unidade | 999999 | 9 dia(s) 00:00:00 |
Total de Envio | 999999 | 9 dia(s) 00:00:00 |
Movimentações de Recebimento de Processo | ||
Unidade | Quantidade | Tempo Médio na Unidade |
---|---|---|
NOME DA UNIDADE (CÓDIGO DA UNIDADE) | ||
TIPO DO PROCESSO | 999 | 9 dia(s) 00:00:00 |
—— | —— | —— |
Total na Unidade | 999999 | 9 dia(s) 00:00:00 |
NOME DA UNIDADE (CÓDIGO DA UNIDADE) | ||
TIPO DO PROCESSO | 999 | 9 dia(s) 00:00:00 |
—— | —— | —— |
Total na Unidade | 999999 | 9 dia(s) 00:00:00 |
Total de Recebimento | 999999 | 9 dia(s) 00:00:00 |
Para o caso do tipo de movimentação selecionada pelo Usuário for “Ambos”, então teremos a tabela de totais no fim do relatório, seguindo o seguinte padrão
Totais | ||
Movimentação | Quantidade | Tempo Médio na Unidade |
---|---|---|
Envio | 999999 | 9 dia(s) 00:00:00 |
Recebimento | 999999 | 9 dia(s) 00:00:00 |
Total Geral | 999999 | 9 dia(s) 00:00:00 |
Principais Regras de Negócio
- RN01 - O período levado em consideração vai depender do campo Tipo de Movimentação e é obrigatório o seu preenchimento, ele seguirá as seguintes regras:
- - Caso seja selecionado Envio, o período informado que vai ser levado em consideração será “data de envio” do processo pela unidade;
- - Caso seja selecionado Recebimento, o período informado que vai ser levado em consideração será “data de recebimento” do processo pela unidade;
- - Caso seja selecionado Ambos, o período informado que vai ser levado em consideração será “data de envio” e “data de recebimento” do processo pela unidade;
- RN02 - O preenchimento do campo unidade é opcional. Entretanto ao ser escolhido também irá depender do campo Tipo de Movimentação e seguirá as seguintes regras:
- - Caso seja selecionado Envio, a unidade informada será a unidade de origem da movimentação de envio;
- - Caso seja selecionado Recebimento, a unidade informada será a unidade de destino da movimentação de recebimento;
- - Caso seja selecionado Ambos, a unidade informada será a unidade de origem nas movimentações de envio e a unidade de destino nas movimentações de recebimento;
- RN03 - O caso de uso só será acessível caso o parâmetro UTILIZA_TIPO_PROCESSO se encontre verdadeiro, ou seja, se a instituição usará essa característica para os processos.
Resoluções/Legislações Associadas
Não se Aplica.
Classes Persistentes e Tabelas Envolvidas
Classe | Tabela |
---|---|
br.ufrn.sipac.protocolo.dominio.Movimento | administrativo.protocolo.movimento |
br.ufrn.sipac.protocolo.dominio.Processo | administrativo.protocolo.processo |
br.ufrn.sipac.protocolo.dominio.TipoProcesso | administrativo.protocolo.tipoprocesso |
br.ufrn.sipac.cadastro.dominio.Unidade | administrativo.comum.unidade |
Plano de Teste
Sistema: SIPAC
Módulo: PROTOCOLOS
Link(s): Módulos → Protocolo → Consultas/Relatórios → Relatórios → Processos Movimentados por Tipo
Usuário: marcilia, jbb, paulinho
Papel que usuário deve ter: Ser usuário do SIPAC.
Cenários de Teste
Verificar se as quantidades e tempos médios dos tipos de processo nas unidades, para o período informado, estejam corretos. Para verificar os movimentos dos processos e suas datas de envio e recebimento acesse:
- Módulos → Protocolo → Consultas/Relatórios → Consultas → Processo Detalhado
Dados para o Teste
- Para obtermos a quantidade de um tipo de processo enviados por uma unidade em um certo período, podemos usar a seguinte consulta:
SELECT uo.nome AS undiade_envio, COUNT (t.idtipoprocesso) AS qtd_enviada, t.denominacao AS tipo FROM protocolo.movimento mov INNER JOIN protocolo.processo p ON p.id_processo = mov.id_processo INNER JOIN protocolo.tipoprocesso t ON t.idtipoprocesso = p.id_tipo_processo INNER JOIN comum.unidade uo ON uo.id_unidade = mov.id_unidade_origem WHERE 1 = 1 AND t.idtipoprocesso = <ID DO TIPO DO PROCESSO> -- Opcional AND mov.id_unidade_origem = <ID DA UNIDADE QUE ENVIOU OS PROCESSOS> -- Opcional AND mov.data_envio_origem > '2012-01-01 00:00:00.00' -- Informar o período desejado AND mov.data_envio_origem < '2013-01-01 00:00:00.00' -- Informar o período desejado GROUP BY uo.nome, t.denominacao ORDER BY uo.nome, t.denominacao DESC
- Para obtermos a quantidade de um tipo de processo recebidos por uma unidade em um certo período, podemos usar a seguinte consulta:
SELECT ud.nome AS undiade_destino, COUNT (t.idtipoprocesso) AS qtd_recebida, t.denominacao AS tipo FROM protocolo.movimento mov INNER JOIN protocolo.processo p ON p.id_processo = mov.id_processo INNER JOIN protocolo.tipoprocesso t ON t.idtipoprocesso = p.id_tipo_processo INNER JOIN comum.unidade ud ON ud.id_unidade = mov.id_unidade_destino WHERE 1 = 1 AND t.idtipoprocesso = <ID DO TIPO DO PROCESSO> -- Opcional AND mov.id_unidade_destino = <ID DA UNIDADE QUE RECEBEU OS PROCESSOS> -- Opcional AND mov.data_envio_origem > '2012-01-01 00:00:00.00' -- Informar o período desejado AND mov.data_envio_origem < '2013-01-01 00:00:00.00' -- Informar o período desejado GROUP BY ud.nome, t.denominacao ORDER BY ud.nome, t.denominacao DESC
O tempo no qual um processo permaneceu numa unidade é calculado a partir da diferença entre a data de saída, de envio, do processo da unidade pela última data de entrada, de recebimento, do processo nesta unidade. Assim, podemos calcular estas diferenças obtendo estas datas a partir da seguintes consultas:
- Para Movimentos de envio (Quando a data de recebimento for nula significa que o processo foi criado na própria unidade, logo, o tempo de permanência é zero):
SELECT uo.nome AS unidade_envio, t.denominacao AS tipo, (SELECT MAX(movReceb.data_recebimento_destino) FROM protocolo.movimento movReceb WHERE movReceb.id_processo = m.id_processo AND movReceb.id_movimento < m.id_movimento AND movReceb.data_recebimento_destino < m.data_envio_origem) AS data_recebimento_origem, m.data_envio_origem FROM protocolo.movimento m LEFT OUTER JOIN comum.UNIDADE uo ON m.id_unidade_origem = uo.id_unidade LEFT OUTER JOIN comum.UNIDADE ud ON m.id_unidade_destino = ud.id_unidade INNER JOIN protocolo.processo p ON m.id_processo = p.id_processo INNER JOIN protocolo.tipoprocesso t ON p.id_tipo_processo = t.idtipoprocesso WHERE 1=1 AND t.idtipoprocesso = <ID DO TIPO DO PROCESSO> -- Opcional AND m.id_unidade_origem = <ID DA UNIDADE QUE ENVIOU OS PROCESSOS> -- Opcional AND m.data_envio_origem >= '2012-01-01 00:00:00.00' -- Informar o período desejado AND m.data_envio_origem <= '2013-01-01 00:00:00.00' -- Informar o período desejado ORDER BY uo.nome, uo.id_unidade, t.denominacao
- Para Movimentos de Recebimento (Quando a data de envio for nula significa que o processo foi recebido mas ainda não enviado, logo, a permanência é contada até a data atual):
SELECT ud.nome AS unidade_envio, t.denominacao AS tipo, m.data_recebimento_destino, (SELECT MIN(movEnv.data_envio_origem) FROM protocolo.movimento movEnv WHERE movEnv.id_processo = m.id_processo AND movEnv.id_movimento > m.id_movimento AND movEnv.data_envio_origem > m.data_recebimento_destino) AS data_envio_destino -- Quando ele foi enviado, após recebido FROM protocolo.movimento m LEFT OUTER JOIN comum.UNIDADE uo ON m.id_unidade_origem = uo.id_unidade LEFT OUTER JOIN comum.UNIDADE ud ON m.id_unidade_destino = ud.id_unidade INNER JOIN protocolo.processo p ON m.id_processo = p.id_processo INNER JOIN protocolo.tipoprocesso t ON p.id_tipo_processo = t.idtipoprocesso WHERE 1=1 AND t.idtipoprocesso = <ID DO TIPO DO PROCESSO> -- Opcional AND m.id_unidade_destino = <ID DA UNIDADE QUE RECEBEU OS PROCESSOS> -- Opcional AND m.data_recebimento_destino >= '2012-01-01 00:00:00.00' -- Informar o período desejado AND m.data_recebimento_destino <= '2013-01-01 00:00:00.00' -- Informar o período desejado ORDER BY ud.nome, ud.id_unidade, t.denominacao