Mudanças entre as edições de "Comportamento Verificador Periódico"
Linha 16: | Linha 16: | ||
− | <!-- | + | <!-- ESTA PARTE É UM BACKUP --> |
- ***** O que faz o Verificador Periódico? ***** | - ***** O que faz o Verificador Periódico? ***** | ||
O Verificador Periódico é um job da aplicação PJe que é executado diariamente em determinada hora previamente programada (normalmente, meia noite). | O Verificador Periódico é um job da aplicação PJe que é executado diariamente em determinada hora previamente programada (normalmente, meia noite). |
Edição das 16h41min de 12 de setembro de 2014
EM CONSTRUÇÃO
Nesta seção descreveremos as tarefas realizadas pela rotina "Verificador Periódido". As informções aqui descritas foram obtidas da implementação do componente de software "VerificadorPeriodico.java".
O que é o Verificador Periódico?
O Verificador Periódico é uma rotina (job) da aplicação PJe que é executada automaticamente com periodicidade diária em hora previamente programada (normalmente, meia noite). Essa rotina é responsável pela realização de diversas tarefas executadas na seguinte ordem:
- Obtém o identificador do usuário do sistema conforme cadastrado no parâmetro "idUsuarioSistema".
- Recupera os feriados que afetam o órgão julgador dado, ou seja, àqueles que pertencem ao próprio órgão, ao seu município sede (municipais), à unidade federativa em que está o município (estaduais ou distritais) e a todo o país (nacionais).
- ***** O que faz o Verificador Periódico? ***** O Verificador Periódico é um job da aplicação PJe que é executado diariamente em determinada hora previamente programada (normalmente, meia noite).
Essa funcionalidade realiza as seguintes tarefas, nessa ordem:
1- Obtém o id do usuário do sistema conforme cadastrado no parâmetro "idUsuarioSistema".
2- Recupera os feriados que afetam o órgão julgador dado, ou seja, aqueles que pertencem ao próprio órgão, ao seu
município sede (municipais), à unidade federativa em que está o município (estaduais ou distritais) e a todo o país (nacionais).
3- método "registrarCienciaAutomatica" - prazos de graça expirados e registrando a ciência automatizada
3.1 - Seleção de expedientes:
- Obtém os prazos de graça (*) expirados e registra ciência automática.
(*) Prazo ou período de graça é o período de 10 dias consecutivos a partir da data de realização do ato de comunicação para início da contagem de prazo efetivo.
O prazo de graça começa a contar do dia seguinte ao da disponibilização, independentemente de esse dia ser de expediente no órgão comunicante; não importa
se o dia seguinte da disponibilização é um dia útil ou não. Fonte: Art. 21 da Resolução nr. 185
de 18/12/2013 em http://www.cnj.jus.br/atos-administrativos/atos-da-presidencia/resolucoespresidencia/27241-resolucao-n-185-de-18-de-dezembro-de-2013
log.info("Localizando prazos de graça expirados e registrando a ciência automatizada."); registrarCienciaAutomatica(mapaFeriados); => registra a ciência dos expedientes (meio 'E' e talvez 'C') com prazos de graça expirados. ??? Prazo de entrega por correspondencia (parâmetro presuncaoEntregaCorrespondencia) = -1 na base no CNJ vanadiod04 Considera o meio de expediente "Via sistema" ... E se presuncaoEntregaCorrespondencia = -1 não inclui também o expediente "Correios" Critérios: Criteria.isNull("dtCienciaParte") = não tem data de ciência Criteria.in("processoExpediente.meioExpedicaoExpediente", meios.toArray(new ExpedicaoExpedienteEnum[meios.size()])) = somente os expedientes 'E' e talvez 'C' Criteria.equals("fechado", false)) = expedientes não fechados
3.2 - Após obter os expedientes do item 3.1: registra a ciência automática para todos os atos de comunicação (do tipo eletrônico - 'E' e talvez 'C'), considerando as normas relativas à expiração do prazo de graça de que trata a Lei n. 11.419/2006. * Não considera expedientes cujo tipo de prazo é 'Sem prazo' ou 'Data Certa' - Atualiza o campo data de ciência 'dt_ciencia_parte' da tabela 'tb_proc_parte_expediente' - Calcula a data final do prazo processual do respectivo expediente e atualiza o campo 'dt_prazo_legal_parte' da tabela 'tb_proc_parte_expediente'. Caso a data final do prazo processual seja inferior a data atual do sistema, o respectivo expediente será fechado: campo 'in_fechado' da tabela 'tb_proc_parte_expediente' é setado com 'TRUE'. - Caso ocorra alguma exceção e não tenha sido possível registrar a ciência automática para o expediente, um alerta é registrado na tabela 'tb_Alerta', 'tb_processo_alerta' - Caso ocorra alguma exceção e não tenha sido ao recuperar os atos de comunicação pendentes de ciência, uma mensagem de erro é gravada no log e o log é enviado para o email cadastrado no parâmetro "emailSistema".
4- método "registrarDecursoPrazo" - prazos judiciais expirados e lançando a movimentação de decurso pertinente nos processos.
4.1 - Obtém os expedientes cujos prazos processuais estão expirados.
Critérios:
Criteria.equals("fechado", false)) == expedientes ABERTOS
Criteria.not(Criteria.isNull("dtCienciaParte")), == não tem data de ciência dada pela parte
Criteria.not(Criteria.equals("tipoPrazo", TipoPrazoEnum.S)), == o tipo do prazo não é "Sem prazo"
Criteria.less("dtPrazoLegal", date), == a data do prazo legal é inferior a data atual do sistema
Criteria.or( == tipo do prazo é 'data certa' OU prazo legal(campo 'qt_prazo_legal_parte' da tabela 'tb_proc_parte_expediente') é maior que 0(zero).
Criteria.equals("tipoPrazo", TipoPrazoEnum.C),
Criteria.greater("prazoLegal", 0))
4.2 - Após obter os expedientes do item 4.1: registra o decurso de prazo.
- Não registra decurso de prazo para o expediente cujo processo não tem órgão julgador. - Não registra decurso de prazo para o expediente que tenha resposta, resposta intempestiva ou se o expediente já tiver sido fechado. - Não registra decurso de prazo para o expediente se não tiver mapa de feriados registrado para o órgão julgador.
- Para todo expediente cuja data do prazo legal ('dt_prazo_legal_parte' da tabela 'tb_proc_parte_expediente')
seja depois (ou superior) a data atual do sistema:
- Os expedientes cujo tipo do prazo não é 'data certa' e a 'qt_prazo_legal_parte' da tabela 'tb_proc_parte_expediente' não é nula: - Calcula a data final do término do prazo processual (ou 'fim do prazo'): para o cálculo é preciso ter a data da ciência da parte, 'qt_prazo_legal_parte', tipo do prazo e mapa de feriados. - O 'fim do prazo' é atualizado no campo 'dt_prazo_legal_parte' da tabela 'tb_proc_parte_expediente' - Se o 'fim do prazo' é depois (ou superior) a data atual do sistema: expediente será fechado (campo "in_fechado" da tabela 'tb_proc_parte_expediente' recebe TRUE). - É registrado o lançamento do movimento cód. 1051-Decurso de prazo e seus complementos (nome da parte e data) ao processo do expediente em questão.
- Caso ocorra alguma exceção e não tenha sido possível registrar o decurso de prazo para o expediente, um alerta é registrado na tabela 'tb_Alerta', 'tb_processo_alerta' - Caso ocorra alguma exceção e não tenha sido ao recuperar os atos de comunicação pendentes de ciência, uma mensagem de erro é gravada no log e o log é enviado para o email cadastrado no parâmetro "emailSistema".
5- método "cienciaAutomatizadaDiarioEletronico" - rotina do DEJT para cálculo de prazos, lançando movimentação de decurso de prazo.
5.1- Obtém a última data em que as matérias publicadas (atos de comunicação) foram publicadas com sucesso do D.E.: essa data é a última
data de execução com sucesso do job "VerificadorPeriodico" que consta registrada no parâmetro "ultimaDataJobDiario"
5.2- Adiciona-se um dia a última data (definida em 5.1)
5.3- Obtém a data atual do sistema.
{1ª parte // Executa ate o dia anterior da data atual, garantindo que independentemente // do horario do job, sempre traga todas as materias publicadas, ja que o horario de // publicacao pode variar entre os diversos diarios da justica eletronica. // Nao executa a data atual, ja que dependendo do horario, as materias podem ainda nao // terem sido publicadas. } 5.4- Enquanto a data obtida em 5.1 for menor que a data obtida em 5.3 (periodo entre a última data do job com sucesso + 1Dia e a data do sistema) faça: - Verifica se o sistema deve consultar as publicações no DJE pelo recibo de publicação (informado no parâmetro 'pje:publicacao:dje:materia:consultaPeloReciboDePublicacao')
- Se SIM: *** Aqui usa atualizaMateria(processoParteExpediente, data.getTime(), mapFeriados); 5.4.0 - obtém os expedientes "pelo recibo de publicação gerado pelo DJE" na data do job +1Dia e, para cada expediente sem data de ciência será atualizada a data de ciência automática da seguinte forma: 5.4.1 - Calcula a data de publicação do expediente = é a data de disponibilização do expediente no DJE mais um dia útil; esse cálculo é baseado nas regras da Lei n.º 11.419/2006, art. 5.º, com os seguintes esclarecimentos: * a data da disponibilização NÃO é incluída na contagem do prazo de graça de 10 dias. * a data de início de contagem do prazo é o dia seguinte ao da disponibilização, independentemente de esse dia ser ou não dia útil ou dia em que houve suspensão da contagem de prazos. * se o 10º dia da contagem a partir da data da disponibilização for dia não útil, a data considerada como data de intimação será o primeiro dia útil subsequente. 5.4.2 - Calcula a data de ciência automática = é a data de publicação do expediente no DJE mais um dia útil;
esse cálculo é baseado nas regras da Lei n.º 11.419/2006, art. 5.º, com os seguintes esclarecimentos:
* a data da disponibilização NÃO é incluída na contagem do prazo de graça de 10 dias. * a data de início de contagem do prazo é o dia seguinte ao da disponibilização, independentemente de esse dia ser ou não dia útil ou dia em que houve suspensão da contagem de prazos. * se o 10º dia da contagem a partir da data da disponibilização for dia não útil, a data considerada como data de intimação será o primeiro dia útil subsequente. 5.4.3 - Atualiza a data de ciência: campo 'dt_ciencia_parte' da tabela 'tb_proc_parte_expediente' é atualizado. 5.4.4 - Atualiza a data do prazo legal somente do expediente que atende a condição: prazo legal do expediente ('qt_prazo_legal_parte') não for nulo/zero e o Tipo de Prazo diferente de 'Sem prazo' e 'Data certa': => data de prazo legal = a data da ciência adicionada da qtde de dias de 'qt_prazo_legal_parte'; leva em consideração os feriados do órgão e e se a data não for útil considera o dia útil seguinte. 5.4.5 - Lançamento de movimento(s) para o processo do expediente em questão: * Lançado o movimento cód. 1061-Disponibilização no Diário da Justiça Eletrônico; esse código consta cadastrado no parâmetro 'codMovimentoDisponibilizacaoDiario'. Também associa o documento do expediente ao movimento. * Lançado o movimento cód. 92-Publicação e seus complementos (ato publicado e data); esse código consta cadastrado no parâmetro 'codMovimentoPublicacaoDiario'. Também associa o documento do expediente ao movimento.
?????? DÚVIDA: PORQUE EM atualizaMateria usa dtJob+1Dia PARA CALCULAR A DT DE PUBLICAÇÃO E QDO VAI LANÇAR OS MOVIMENTOS EM lancarMovimentosDiario OBTÉM A DATA DE PUBLICAÇÃO A PARTIR DA DT DE CRIAÇÃO DO EXPEDIENTE. ?????? DÚVIDA: aqui não fecha o expediente conforma item 5.4.10
- Se NÃO: *** Aqui usa atualizarMateria(Integer idMateria, final Date data, Map<Integer, List<Feriado>> mapFeriados)
5.4.6 - obtém os expedientes "por data" de publicação no DJE na data do job +1Dia e,
5.4.7 - idem ao 5.4.1
5.4.8 - idem ao 5.4.2
5.4.9 - Se o expediente não tem data de ciência da parte, atualiza a data de ciência calculada em 5.4.7.
5.4.10 - Fecha o expediente.
5.4.10 - Fecha o expediente.
5.4.10 - Fecha o expediente.
5.4.11 - idem ao 5.4.4
5.4.12 - idem ao 5.4.5
- Caso ocorra alguma exceção ao tentar recuperar as matérias do DJE, uma mensagem de erro é gravada no log e o log é enviado para o email cadastrado no parâmetro "emailSistema". - Atualiza o valor do parâmetro "ultimaDataJobDiario" = última data de execução com sucesso do job + 1Dia.
5.5 - { 2ª parte em VerificadorPeriodico // Executa os expedientes pendentes independente da data } - Verifica se o sistema deve consultar as publicações no DJE pelo recibo de publicação (informado no parâmetro 'pje:publicacao:dje:materia:consultaPeloReciboDePublicacao')
- Se SIM: *** Aqui usa atualizarMateriasPendentesPeloCodigoDePublicacaoDJE (feriados) 5.5.1 - obtém os expedientes pendentes independente da data. Critérios: Criteria.equals("processoExpediente.meioExpedicaoExpediente", tipoExpedicao), == MEIO DE EXPEDIÇÃO É DIÁRIO ELETRONICO Criteria.equals("fechado", false), == EXPEDIENTE ABERTO Criteria.isNull("dtCienciaParte"), == EXPEDIENTE SEM DATA DE CIÊNCIA Criteria.isNull("resposta")); == EXPEDIENTE SEM RESPOSTA
5.5.2 - Para os expedientes obtidos em 5.5.1 cuja data de publicação (recuperada por meio do recibo de publicação no DJE) não é nula: - Usa o método atualizaMateria(processoParteExpediente, c.getTime(), mapFeriados) => repete os comportamentos de 5.4.1, 5.4.2, 5.4.3, 5.4.4 e 5.4.5.
- Se NÃO: *** Aqui usa atoComunicacaoService.recuperarMateriasPendentes()
5.5.3 - obtém os expedientes pendentes cujos critérios são:
Criteria.equals("meioExpedicaoExpediente", ExpedicaoExpedienteEnum.P), == MEIO DE EXPEDIÇÃO É DIÁRIO ELETRONICO
Criteria.equals("processoParteExpedienteList.fechado", false), == EXPEDIENTE ABERTO
Criteria.isNull("processoParteExpedienteList.dtCienciaParte"), == EXPEDIENTE SEM DATA DE CIÊNCIA
Criteria.isNull("processoParteExpedienteList.resposta") == EXPEDIENTE SEM RESPOSTA
5.5.4 - Para os expedientes obtidos em 5.5.3 cuja data de publicação (recuperada por meio do recibo de publicação no DJE) não é nula: - Usa o método atualizarMateria(idMateria, c.getTime(), mapFeriados); => repete os comportamentos de 5.4.6 a 5.4.12.
- Caso ocorra alguma exceção ao tentar recuperar as matérias do DJE, uma mensagem de erro é gravada no log e o log é enviado para o email cadastrado no parâmetro "emailSistema".
6- método "sinalizaProsseguimentoSemPrazo()" -- Localizando os prazos judiciais sem prazo e sinalizando para eventual prosseguimento
caso a criação do ato supere o parâmetro [{0}].", Parametros.ESPERA_MAXIMA_SEM_PRAZO);
6.1- Obtém o valor do parâmetro ESPERA_MAXIMA_SEM_PRAZO. Caso o parâmetro não esteja cadastrado, será considerado o valor 30 (dias).
6.2- Obtém os expedientes dados os critérios:
Criteria.equals("fechado", false), == Expedientes abertos
Criteria.or( == Expediente cujo tipo do prazo é 'Sem Prazo' OU prazo legal(campo 'qt_prazo_legal_parte' da tabela 'tb_proc_parte_expediente') é NULL ou igual a 0(zero)
// Expedientes que sejam expressa ou implicitamente sem prazo
Criteria.equals("tipoPrazo", TipoPrazoEnum.S),
Criteria.isNull("prazoLegal"),
Criteria.equals("prazoLegal", 0)
),
Criteria.not(Criteria.equals("tipoPrazo", TipoPrazoEnum.C)), == Expedientes cujo tipo do prazo não seja 'data certa'.
Criteria.less("processoExpediente.dtCriacao", cal.getTime()) == Expedientes cuja data de criação seja inferior a
(data atual do sistema subtraída do valor, em dias, contido no parâmetro ESPERA_MAXIMA_SEM_PRAZO, ou em outras palavras,
expedientes criados nos últimos ESPERA_MAXIMA_SEM_PRAZO dias)
6.3 - Para cada expediente obtido no item 6.2 deverá ser registrado o decurso de prazo -{usa do método método "atoComunicacaoService.sinalizaProsseguimentoSemPrazo"}:
6.3.1 - Fecha o expediente.
6.3.2 - ???? events.raiseAsynchronousEvent(Eventos.EVENTO_PRECLUSAO_MANIFESTACAO, ppe.getProcessoJudicial()); ==>> Não tem nenhum objeto/componente captando o lançamento desse evento.
- Caso ocorra alguma exceção ao tentar recuperar os expedientes,
uma mensagem de erro é gravada no log e o log é enviado para o email cadastrado no parâmetro "emailSistema".
7- Há um tratamento específico para JT: verificação de prazos para os processos que estão na tarefa 'Aguardando Prazo de ED'
e 'Aguardando prazo de Recurso' ... NÃO ESTUDEI!
8- método "fecharPautaAutomaticamente()" -- Rotina para fechamento de pautas automaticamente:
8.1 - Obtém as pautas conforme critérios:
builder.append("SELECT s"); builder.append(" FROM Sessao AS s");
== Seleciona todas as sessões (tb_sessao)
builder.append(" JOIN s.orgaoJulgadorColegiado AS ojc");
== cujos órgãos julgadores colegiados dessas sessões
builder.append(" WHERE ojc.fechamentoAutomatico = true");
== permitem fechamento automático de pauta (tb_orgao_julgador_colgiado.in_fechamento_automatico)
builder.append(" AND (s.dataFechamentoPauta IS NULL OR to_char(s.dataFechamentoPauta, 'YYYYmmdd') > :dataReferencia)");
== e a data de fechamento da pauta da sessão (tb_sessao.dt_fechamento_pauta) é nula ou superior a data atual do sistema
builder.append(" AND (to_char((to_number(to_char(s.dataSessao, 'YYYYmmdd'), '99999999') - ojc.prazoDisponibilizaJulgamento), '99999999') <= :dataReferencia)");
== e a [ data da sessão(tb_sessao.dt_sessao)
- prazo de disponibilização da pauta de julgamento em dias(tb_orgao_julgador_colgiado.nr_disponibilizar_pauta)
]
seja inferior ou igual a data atual do sistema.
8.2 - Para cada pauta obtida no item 8.1: {fecharPauta(Integer idPauta, Date dataFechamento, boolean force) throws PJeBusinessException} 8.2.1- Obtém a 'data prevista' (campo dt_fechamento_pauta) para fechamento da pauta da sessão em questão. - Se a 'data prevista' é não nula e anterior a data de fechamento 'desejada' (parâmetro dataFechamento/data de referência = data atual do sistema) => sistema não termine fechar a pauta e grava msg no log 'Tentativa de fechar pauta de julgamento de sessão [{0}] já fechada ({1}) na data de referência ({2}). Ignorando.", sessao.getIdSessao(), dataPrevista, dataFechamento);' - Se a 'data prevista' é não nula e posterior a data de fechamento 'desejada' (parâmetro dataFechamento/data de referência = data atual do sistema) => sistema não termine fechar a pauta e grava msg no log 'Tentativa de fechar pauta de julgamento de sessão [{0}] com fechamento futuro previsto ({1}). Ignorando.", sessao.getIdSessao(), dataPrevista);' * Rotina é retornada e pauta não é fechada.
8.2.2- Se 'data prevista' está OK (ou seja, passou pelo passo 8.2.1): - Pauta da sessão é fechada - campo dt_fechamento_pauta é atualizado com o valor de dataFechamento/data de referência = data atual do sistema. - Procedimento para intimação automática: - Obtém todos os processos pautados na sessão (tabela tb_sessao_pauta_proc_trf) que foi fechada e para cada processo é feito: - Registro de movimento o processo: cód.417-Inclusão em pauta e seus complementos (data_hora e local) - Se o [Órgão Julgador Colegiado do processo tiver 'Intimação automática da pauta? = true'] E [Tipo de inclusão do processo (campo tp_inclusao da tabela tb_sessao_pauta_proc_trf) é igual a 'PA("Aptos para Pauta")' OU (processo permite intimação (campo in_permite_intimacao da tabela tb_sessao_pauta_proc_trf) não é nula e TRUE) ] - Será intimado os participantes para a sessão de julgamento: - Dados usados para intimar automanticamente: nr do processo, identificação da sessão, tipo do documento (parâmetro idTipoProcessoDocumentoIntimacaoPauta), modelo de documento (parâmetro idModeloIntimacaoPauta), tipo parte advogado (parâmetro idTipoParteAdvogado), valor do parâmetro 'pje:sessao:intimacaoMultipla'('Permite intimação múltipla para as partes'-texto do cadastro do Parâmetro, MAS NO CÓDIGO ESSE PARAMETRO ESTÁ SENDO USADO PARA RESTRINGIR QDO DESEJA INTIMAR SOMENTE ADVOGADO), data da sessão, hora da sessão - Montagem dos destinatários: considera as partes do polo ativo e passivo do processo em questão, porém se o parâmetro 'pje:sessao:intimacaoMultipla' for TRUE somente serão considerados as partes que são advogados. - Intimação é enviada automanticamente para os destinatários: * o tipo do prazo da intimação é 'data certa' * o meio de envio da intimação é 'Enviar via sistema' * a intimação é considerada como 'Documento novo' e esse documento é assinado com certificado pelo 'usuário do sistema' {id_usuário = 0; ds_login= sistema; ds_nome=Usuário do sistema == registrado na tabela acl.tb_usuario_login este usuário é criado pela carga inicial do sistema "carga base limpa"}
- Caso ocorra alguma exceção ao recuperar sessão de julgamento ou fechar pauta de sessão de julgamento ou outro erro,
uma mensagem de alerta é gravada na tabela de Alertas (tb_alerta); se ocorrer erro ao inserir alerta, uma msg de erro é gravada no log e o log é enviado para o email cadastrado no parâmetro "emailSistema". {logService.enviarLogPorEmail}
-->