~~ODT~~ echo "
"; echo "Última atualização: "; ver('', false); echo "
";
====== 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 ([[#Principais Regras de Negócio |RN05]]) O caso de uso mostra os critérios para a geração dos relatórios: * **Período** ([[#Principais Regras de Negócio |RN01]]): Formato - DD/MM/AAAA a DD/MM/AAAA, Tipo - DATA. * **Tipo de Movimentação** ([[#Principais Regras de Negócio |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** ([[#Principais Regras de Negócio |RN03]]): Formato - CÓDIGO DA UNIDADE | NOME DA UNIDADE, Tipo - NUMÉRICO e TEXTO. * **Tipo de Processo** ([[#Principais Regras de Negócio |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 = -- Opcional AND mov.id_unidade_origem = -- 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 = -- Opcional AND mov.id_unidade_destino = -- 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 = -- Opcional AND m.id_unidade_origem = -- 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 = -- Opcional AND m.id_unidade_destino = -- 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