Projeto de TIC #631

Identificação

Cálculo da Pena Multa

pena multa cálculo boleto

CIJEPI

JUDICIAL

N/D

04 Mai
05 Out
Em andamento

Público

OBJETIVO MACRO

Desenvolvimento de sistema ou sítio eletrônico que viabilize a elaboração dos cálculos pelas Unidades Judiciais de maneira mais facilitada e intuitiva.

RESULTADOS ESPERADOS

Desenvolvimento de sistema ou sítio eletrônico que viabilize a elaboração dos cálculos pelas Unidades Judiciais de maneira mais facilitada e intuitiva, conforme as regras delineadas na Nota Técnica 11/2025 - CIJEPI (SEI nº 6901927).

Objetivos Complementares
Objetivo Indicador Meta
Nenhum objetivo cadastrado
No Escopo

- Realizar o cálculo da pena multa;
- Atualização automática de índices IPCA-E e SELIC
- Atualização automática de Salário Mínimo

Fora do Escopo

- Geração de guia de cobrança
- Controle sobre pagamento da dívida
- Controle sobre extinção de punibilidade
- Inclusão automática de certidão nos autos

Premissas
Nenhuma premissa cadastrada
Restrições
Nenhuma restrição cadastrada
Informações Adicionais
A principal dificuldade atualmente é a atualização mensal dos índices Selic e IPCA, essenciais para o cálculo correto da multa. Como esses dados mudam periodicamente, uma planilha estática offline não é viável. Assim, o sistema deverá buscar automaticamente os índices atualizados para que o cálculo seja sempre fidedigno.
Nenhuma consideração cadastrada
Nenhuma observação cadastrada
Tarefas
07 Abr 30 Abr
▶ 29 Abr
✔ 14 Mai
10 Abr 30 Abr
▶ 16 Abr
✔ 20 Abr
06 Mai 30 Jun
▶ 06 Mai
Marcos de desenvolvimento, épicos, user stories, features e tasks
06 Mai 30 Jun
▶ 06 Mai
04 Mai 30 Jun
▶ 06 Mai
04 Mai 30 Jun
▶ 11 Mai
docs/penamulta/features/FT-PM-05-ipca-e.md
06 Mai 30 Jun
▶ 14 Mai
✔ 14 Mai
06 Mai 30 Jun
▶ 14 Mai
✔ 14 Mai
06 Mai 30 Jun
▶ 14 Mai
✔ 14 Mai
04 Mai 30 Jun
▶ 11 Mai
docs/penamulta/features/FT-PM-04-salario-minimo.md
06 Mai 30 Jun
▶ 06 Mai
✔ 14 Mai
06 Mai 30 Jun
▶ 14 Mai
✔ 14 Mai
Entidades foram modificadas e outras foram criadas. Essa migration resolverá essa parte
04 Mai 30 Jun
▶ 11 Mai
docs/penamulta/features/FT-PM-06-selic.md
06 Mai 30 Jun
▶ 06 Mai
✔ 14 Mai
docs/penamulta/features/FT-PM-07-controle-atualizacao.md
docs/penamulta/features/FT-PM-01-realizar-calculo.md
06 Mai 30 Jun
▶ 14 Mai
✔ 14 Mai
06 Mai 30 Jun
▶ 14 Mai
✔ 14 Mai
`docs/penamulta/features/FT-PM-02-memoria-calculo.md`
`docs/penamulta/features/FT-PM-03-recalcular.md`
06 Mai 30 Jun
▶ 14 Mai
✔ 14 Mai
`docs/penamulta/features/FT-PM-10-auditoria.md`
\[BE] Enum: AcaoPenaMulta em penamulta/ — valores: CALCULAR, SALVAR\_CALCULO, GERAR\_PDF, REIMPRIMIR\_PDF, RECALCULAR, BAIXA\_MANUAL, BAIXA\_LOTE, ALTERAR\_INDICE, AUTORIZAR\_INDICE\_DESATUALIZADO
`docs/penamulta/features/FT-PM-08-emitir-certidao.md`
06 Mai 30 Jun
▶ 14 Mai
✔ 14 Mai
`docs/penamulta/features/FT-PM-09-consultar-certidoes.md`
06 Mai 30 Jun
▶ 14 Mai
✔ 14 Mai
09 Abr 09 Abr
▶ 09 Abr
✔ 10 Abr
Consolidando e padronizando os requisitos mapeados na planilha
15 Abr 30 Abr
▶ 15 Abr
✔ 30 Abr
Consolidação dos requisitos levantados, considerando marcos, features, user stories, tasks, modelo de dados e fluxos
O descritivo aborda o **Marco 1**, que contempla as funcionalidades definidas em reunião com o demandante. Todavia, como evolução natural do projeto, estão previstos o **Marco 2**, que automatiza algumas ações, bem como **Marco 3**, que realiza a comunicação inversa com o PJe.   * Marco 1 -  MVP * **Objetivo:** Automatizar o cálculo da pena multa e substituir a planilha utilizada pelas unidades judiciais. * Marco 2 - Gestão da Cobrança * **Objetivo:** Transformar o cálculo em cobrança judicial efetiva. * Marco 3 - Integração Processual * **Objetivo:** Integrar completamente o módulo ao fluxo judicial. --- ##   ## 1. Convenções de nomenclatura | Elemento | Prefixo | Formato | Exemplo | | ------------------------ | ------- | --------------- | -------- | | Épico | EP-PM | EP-PM-\[número] | EP-PM-01 | | Feature (Funcionalidade) | FT-PM | FT-PM-\[número] | FT-PM-01 | | User Story | US-PM | US-PM-\[número] | US-PM-01 | | Requisito | RN-PM | RN-PM-\[número] | RN-PM-01 | | Critério de aceite | CA-PM | CA-PM-\[número] | CA-PM-01 | > O infixo `PM` em todos os prefixos identifica o módulo Pena Multa e evita colisão com a numeração própria da equipe do COBJUD PRO, que não adota esse infixo. ### Siglas para requisitos e critérios de aceite | Sigla | Área semântica | Features que cobre | | ----- | -------------------------------- | -------------------------------------- | | `PM` | Registro e cálculo da pena multa | FT-PM-01, FT-PM-02, FT-PM-03 | | `IDX` | Índices econômicos | FT-PM-04, FT-PM-05, FT-PM-06, FT-PM-07 | | `DOC` | Documentos e certidões | FT-PM-08, FT-PM-09 | | `AUD` | Auditoria | FT-PM-10 | > Novas siglas são definidas junto com a criação da feature no Captei. Não criar siglas ad hoc fora desse padrão. --- ## 2. Estrutura geral     ```plaintext Marco 1 — MVP EP-PM-01 — Cálculo da Pena Multa FT-PM-01 Realizar cálculo da pena multa FT-PM-02 Registrar e visualizar memória de cálculo FT-PM-03 Recalcular pena multa EP-PM-02 — Parâmetros Econômicos FT-PM-04 Gerenciar salário mínimo FT-PM-05 Gerenciar IPCA-E FT-PM-06 Gerenciar SELIC FT-PM-07 Controlar atualização de índices EP-PM-03 — Documentos FT-PM-08 Emitir certidão de cálculo da pena multa FT-PM-09 Consultar certidões geradas FT-PM-10 Registrar log de auditoria Marco 2 — Gestão da Cobrança EP-PM-04 — Gestão de Cobrança FT-PM-11 Registrar cobrança da pena multa FT-PM-12 Controlar inadimplência FT-PM-13 Emitir cobrança da pena multa FT-PM-14 Processar retorno bancário Marco 3 — Integração Processual EP-PM-05 — Integração com PJe FT-PM-15 Registrar movimentações no processo FT-PM-16 Enviar documentos ao processo FT-PM-17 Automatizar fluxo da pena multa ``` ---
**Descrição:** Permitir registrar os dados da pena multa aplicada na sentença e calcular automaticamente o valor atualizado, aplicando correção monetária e juros de mora. Suporta múltiplos condenados e múltiplas multas por processo. A entrada de dados é guiada por formulário em etapas. O servidor informa o número do processo e o COBJUD PRO utiliza sua integração existente com o PJe para carregar os dados no contexto do cálculo.   **Comportamentos principais:** * receber o número do processo informado pelo servidor * buscar os dados do processo no PJe via integração existente no COBJUD PRO (partes, dados da condenação) * carregar os dados retornados no contexto do cálculo da pena multa * guiar o usuário em formulário de 3 etapas (wizard): (1) informar número do processo e confirmar dados carregados / selecionar condenado; (2) dados da condenação e parâmetros da multa; (3) resultado com memória de cálculo * calcular automaticamente `data_vencimento_pgto = data_intimacao + 10 dias` (art. 50, CP) a partir da data de intimação informada pelo servidor, mantendo o campo editável * permitir preenchimento manual como fallback quando a busca não retornar resultado; cálculos nesse modo devem ser sinalizados para rastreabilidade * registrar dados da multa (condenado, data do crime, tipo: isolada ou cumulada) * vincular cada multa a um condenado específico * suportar múltiplas multas por processo * calcular valor base: `SM(data do crime) × fração × dias-multa` * aplicar correção monetária pelo IPCA-E (data do crime → data do cálculo) * aplicar juros de mora pela SELIC (dia seguinte ao vencimento → data do cálculo) * compensar valor de fiança recolhida antes da intimação * apresentar valor final com memória discriminada * alertar quando valor total for inferior a R$ 10.000,00   **Ciclo de vida — Status do cálculo:** | Status | Descrição | Transições possíveis | | ----------- | ------------------------------------------------------------------------ | ---------------------------------- | | `RASCUNHO` | Dados em preenchimento; cálculo ainda não executado | → CALCULADO | | `CALCULADO` | Cálculo executado com sucesso; certidão pode ser gerada | → INTIMADO, → RASCUNHO (recálculo) | | `INTIMADO` | Condenado intimado para pagamento; prazo iniciado | → PAGO, → VENCIDO | | `PAGO` | Pagamento registrado (manual no Marco 1; automático a partir do Marco 2) | — (status final) | | `VENCIDO` | Prazo de pagamento voluntário expirado sem confirmação | — (aciona providências cabíveis) | | `CANCELADO` | Cálculo anulado por decisão judicial | — (status final) | > No Marco 1, as transições para `PAGO` são realizadas por baixa manual. A partir do Marco 2, a baixa automática via retorno bancário passará a ser o meio principal, permanecendo a baixa manual como recurso excepcional. Ambas devem ser distinguidas por sinalizador de origem. **Requisitos de negócio:** | ID | Requisito | | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | RN-PM-01 | A pena multa é fixada pelo juiz na sentença condenatória. O sistema registra os parâmetros definidos pelo magistrado, sem alterá-los. | | RN-PM-02 | Cada registro de multa deve estar vinculado a um condenado específico. | | RN-PM-03 | Um processo pode possuir múltiplas multas. Cada registro é independente. | | RN-PM-04 | Cada registro deve conter: condenado, data do crime, quantidade de dias-multa, valor do dia-multa e tipo da multa (ISOLADA, CUMULADA ou SUBSTITUTIVA). | | RN-PM-05 | O valor do dia-multa deve respeitar: mínimo 1/30 do SM vigente à época do fato; máximo 5 vezes o SM vigente à época do fato (art. 49, §1º, CP). | | RN-PM-06 | A quantidade de dias-multa deve respeitar: mínimo 10 dias; máximo 360 dias (art. 49, CP). | | RN-PM-07 | O SM utilizado no cálculo do valor nominal é o vigente na data do crime, não na data do cálculo. | | RN-PM-08 | A correção monetária utiliza o IPCA-E. Termo inicial: data do crime. Termo final: data do cálculo. | | RN-PM-09 | Os juros de mora utilizam a taxa SELIC. Termo inicial: dia seguinte ao vencimento do prazo voluntário. Termo final: data do cálculo. | | RN-PM-10 | O prazo de vencimento para pagamento voluntário é de 10 dias corridos a partir da data de intimação do condenado (art. 50, CP). O sistema calcula automaticamente `data_vencimento = data_intimacao + 10 dias` e preenche o campo no wizard, mas o servidor pode alterar o valor calculado caso necessário. Ambas as datas (`data_intimacao` e `data_vencimento_pgto`) são armazenadas em PENA\_MULTA. | | RN-PM-11 | Se a data de vencimento for igual ou posterior à data do cálculo, os juros SELIC não se aplicam. | | RN-PM-12 | O valor de fiança recolhida deve ser deduzido do valor total ao final do cálculo e discriminado na memória. | | RN-PM-13 | Quando o valor total for inferior a R$ 10.000,00, o sistema deve exibir alerta com referência à CNJ Resolução 547/2024 e Tema 1184 STF. O alerta não bloqueia o cálculo. | | RN-PM-14 | Se a data do crime for anterior a 01/01/1994, o sistema deve exibir mensagem de erro. | | RN-PM-15 | O servidor informa o número do processo. O módulo chama `JudicialService.findProcesso()` do COBJUD PRO, que busca automaticamente em 1G e 2G, valida o acesso do servidor e retorna os dados do processo (`ProcessoPjeDTO`). O condenado é identificado no polo passivo (`ParteDTO.polo == "P"`). Os campos `numero_processo` e `instancia` são armazenados em PENA\_MULTA para identificação única — o mesmo número pode existir em 1G e 2G. | | RN-PM-16 | O modo fallback (preenchimento manual) deve estar disponível quando `findProcesso()` não retornar resultado ou retornar erro. Cálculos realizados em modo fallback devem ser sinalizados como tal, para rastreamento de eventuais divergências em relação aos dados do PJe. | | RN-PM-17 | O controle de acesso a processos em segredo de justiça é herdado do COBJUD PRO via `JudicialService`. O método `findProcesso()` já executa `validaAcessoProcessos()` e `omitePartesProcessosSigilosos()` antes de retornar os dados. O módulo de pena multa não reimplementa essa lógica. | | RN-PM-18 | O campo `tipo_multa` deve assumir exclusivamente um dos três valores: `ISOLADA` (sanção única — pagamento extingue a punibilidade, art. 49 CP), `CUMULADA` (junto com pena privativa ou restritiva — execução aguarda pena principal, art. 49 CP) ou `SUBSTITUTIVA` (substitui pena privativa de liberdade, art. 44, §2° CP). | | RN-PM-19 | O campo `status` de PENA\_MULTA deve assumir exclusivamente um dos quatro valores: `CALCULADO` (cálculo realizado, pendente de pagamento), `PAGO` (multa integralmente quitada), `VENCIDO` (prazo de pagamento voluntário expirado sem baixa) ou `EXTINTO` (dívida extinta por baixo valor — CNJ Resolução 547/2024 / Tema 1184 STF — ou outra causa legal). | | RN-PM-20 | O campo `modo_entrada` de PENA\_MULTA deve assumir exclusivamente um dos dois valores: `INTEGRADO` (dados carregados via `JudicialService.findProcesso()`) ou `FALLBACK_MANUAL` (preenchimento manual pelo servidor quando o PJe estiver indisponível ou o processo não for encontrado). O uso de strings literais no lugar dos valores de enum é proibido. | **User Stories:** | US | Título | Classificação | | -------- | ------------------------------------------------------------------------ | ------------- | | US-PM-01 | Informar parâmetros do cálculo | Must | | US-PM-02 | Salário mínimo automático da data do crime | Must | | US-PM-03 | Aplicar IPCA-E desde a data do crime | Must | | US-PM-04 | Informar data de vencimento para SELIC | Must | | US-PM-06 | Validar limites legais dos parâmetros | Must | | US-PM-07 | Alerta para multa inferior a R$ 10.000,00 | Could | | US-PM-08 | Informar e compensar valor de fiança | Must | | US-PM-09 | Wizard de cálculo em 3 etapas | Must | | US-PM-10 | Buscar e carregar dados do processo via integração PJe do COBJUD PRO | Must | | US-PM-11 | Preencher dados manualmente em modo fallback, com sinalização do cálculo | Must | | US-PM-20 | Registrar multa vinculada a condenado específico | Must | | US-PM-21 | Registrar múltiplas multas no mesmo processo | Must |
Elaboração da Feature Spec da FT-PM-01 - Realizar Cálculo da Pena Multa. Descrição completa no projeto java em docs/penamulta/FT-PM-01-realizar-calculo.md
**Descrição:** Permitir visualizar e registrar o detalhamento completo do cálculo realizado, com todos os parâmetros, índices utilizados e valores intermediários.   **Comportamentos principais:** * exibir valor base (SM × fração × dias-multa) * exibir fator de correção IPCA-E e valor corrigido * exibir período e fator SELIC e valor dos juros * exibir dedução de fiança (se houver) * exibir valor total final * registrar snapshot imutável com versão dos índices utilizados * permitir consulta posterior do cálculo   **Requisitos de negócio:** | ID | Requisito | | -------- | ------------------------------------------------------------------------------------------------------------------------------------------- | | RN-PM-21 | O sistema deve registrar a memória completa do cálculo de forma imutável (snapshot), incluindo os índices utilizados e a versão do dataset. | | RN-PM-22 | A memória deve detalhar: valor base, correção monetária, juros, dedução de fiança, índices utilizados, datas de referência e valor final. | | RN-PM-23 | A precisão numérica do cálculo deve ser de R$ 0,009 em relação à planilha oficial fornecida como referência. | **User Stories:** | US | Título | Classificação | | -------- | ------------------------------------------ | ------------- | | US-PM-05 | Visualizar memória de cálculo discriminada | Must |
Elaboração da Feature Spec da \[EP-PM-01] - FT-PM-02 - Registrar e visualizar memória de cálculo Descrição completa no projeto java em `docs/penamulta/FT-PM-02-memoria-calculo.md`
**Descrição:** Permitir recalcular uma multa já registrada quando houver alteração de dados ou atualização de índices, preservando o histórico de cálculos anteriores.   **Comportamentos principais:** * recalcular valores com nova data de referência ou novos parâmetros * manter histórico de cálculos anteriores (registro original preservado) * criar novo registro vinculado ao cálculo original   **Requisitos de negócio:** | ID | Requisito | | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | | RN-PM-24 | O recálculo cria novo registro vinculado ao original. O registro original permanece inalterado e acessível. | | RN-PM-25 | Cada recálculo gera novo snapshot com os índices vigentes na data do recálculo. | | RN-PM-26 | O sistema deve permitir comparar versões de cálculo de uma mesma multa, exibindo os valores e os parâmetros de cada versão lado a lado ou em sequência. | **User Stories:** | US | Título | Classificação | | -------- | -------------------------------------------- | ------------- | | US-PM-13 | Recalcular multa com nova data de referência | Should |
Elaboração da Feature Spec da \[EP-PM-01] - FT-PM-03 - Recalcular pena multa Descrição completa no projeto java em `docs/penamulta/FT-PM-03-recalcular.md`
**Descrição:** Permitir cadastrar e manter os valores históricos do salário mínimo utilizados no cálculo do valor base da multa.   **Comportamentos principais:** * cadastrar novo valor com data de vigência * editar e excluir valores existentes * validar sobreposição de vigências * manter histórico desde 01/01/1994 * permitir consulta por data   **Requisitos de negócio:** | ID | Requisito | | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | | RN-IDX-01 | O sistema deve manter tabela histórica de salário mínimo com data de vigência inicial e valor. O histórico deve cobrir datas a partir de 01/01/1994. | | RN-IDX-02 | Não deve ser possível cadastrar duas vigências de salário mínimo com datas sobrepostas. | **User Stories:** | US | Título | Classificação | | -------- | ------------------------------------ | ------------- | | US-PM-16 | Cadastro de salário mínimo histórico | Must |
Elaboração da Feature Spec da \[EP-PM-02] - FT-PM-04 - Gerenciar salário mínimo. Descrição completa no projeto java em `docs/penamulta/FT-PM-04-salario-minimo.md`
**Descrição:** Permitir cadastrar e manter os valores mensais do índice IPCA-E utilizados para correção monetária, com preparação para integração futura com a API do Banco Central. **Comportamentos principais:** * cadastrar índice por período (mês/ano) * editar e excluir índices existentes * validar duplicidade de mês/ano * manter histórico completo * preparar integração futura com API (SGS série 10764) **Requisitos de negócio:** | ID | Requisito | | --------- | ------------------------------------------------------------------------------------------------- | | RN-IDX-03 | O sistema deve manter tabela histórica de índices IPCA-E mensais com mês, ano e valor percentual. | | RN-IDX-04 | Não deve ser possível cadastrar dois índices para o mesmo mês/ano e mesmo tipo. | | RN-IDX-05 | Índice utilizado em cálculo finalizado não pode ser excluído. | | RN-IDX-06 | A fonte de referência para o IPCA-E é a série SGS 10764 do Banco Central (IBGE via BCB). | **User Stories:** | US | Título | Classificação | | -------- | ---------------------------------------- | ------------- | | US-PM-15 | Manutenção de índices IPCA-E | Must | | US-PM-18 | Atualização automática de índices IPCA-E | Must |
Elaboração da Feature Spec da \[EP-PM-02] - FT-PM-05 - Gerenciar IPCA-E. Descrição completa no projeto java em docs/penamulta/FT-PM-05-ipca-e.md
**Descrição:** Permitir cadastrar e manter os valores da taxa SELIC utilizados para cálculo de juros de mora, com preparação para integração futura com a API do Banco Central.   **Comportamentos principais:** * cadastrar taxa por período * editar e excluir taxas existentes * validar duplicidade de período * manter histórico completo * preparar integração futura com API (SGS série 11) *   **Requisitos de negócio:** | ID | Requisito | | --------- | ------------------------------------------------------------------------------------------- | | RN-IDX-07 | O sistema deve manter tabela histórica de índices SELIC com período e valor. | | RN-IDX-08 | A fonte de referência para a SELIC é a série SGS 11 do Banco Central. | | RN-IDX-09 | Índice utilizado em cálculo finalizado não pode ser excluído (mesmo critério de RN-IDX-05). | **User Stories:** | US | Título | Classificação | | -------- | --------------------------------------- | ------------- | | US-PM-15 | Manutenção de índices SELIC | Must | | US-PM-18 | Atualização automática de índices SELIC | Must |
Elaboração da Feature Spec da \[EP-PM-02] - FT-PM-06 - Gerenciar SELIC Descrição completa no projeto java em `docs/penamulta/FT-PM-06-selic.md`
**Descrição:** Controlar se os índices utilizados no cálculo estão atualizados, alertar o usuário em caso de desatualização e registrar usos excepcionais com índices defasados.   **Comportamentos principais:** * identificar índices desatualizados (IPCA-E > 45 dias sem atualização) * alertar o usuário nas telas de cálculo e histórico * permitir continuidade do cálculo mediante autorização registrada * registrar uso excepcional (usuário, data/hora, justificativa, situação dos índices) *   **Requisitos de negócio:** | ID | Requisito | | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | RN-IDX-10 | Quando o IPCA-E não for atualizado há mais de 45 dias, o sistema deve exibir alerta nas telas de cálculo e histórico, com link para a tela de administração de índices. | | RN-IDX-11 | Em caráter excepcional, o sistema deve permitir emissão com índices desatualizados mediante autorização do servidor responsável. | | RN-IDX-12 | Toda autorização para uso de índices desatualizados deve ser registrada: usuário, data/hora, justificativa e situação dos índices no momento da autorização. | **User Stories:** | US | Título | Classificação | | -------- | ------------------------------------------- | ------------- | | US-PM-17 | Alerta sobre falha na atualização de índice | Should |
Elaboração da Feature Spec da \[EP-PM-02] - FT-PM-07 - Controlar atualização de índices Descrição completa no projeto java em `docs/penamulta/FT-PM-07-controle-atualizacao.md`
**Descrição:** Permitir gerar a Certidão de Apuração de Débito em PDF, contendo o cálculo completo da pena multa com fundamentação legal e dados bancários do FUNPESPI, para uso no processo judicial.   **Comportamentos principais:** * gerar documento em PDF * incluir memória de cálculo discriminada * incluir fundamentação legal * incluir dados bancários do FUNPESPI * incluir prazo de vencimento para pagamento voluntário * identificar o servidor responsável e a versão dos índices utilizados * permitir download ou visualização   **Requisitos de negócio:** | ID | Requisito | | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | RN-DOC-01 | A certidão deve ser gerada somente para cálculos com status CALCULADO ou superior. | | RN-DOC-02 | O PDF deve seguir o modelo estabelecido pela Nota Técnica N011/2025 do CIJEPI. | | RN-DOC-03 | O documento deve conter: dados da parte, dados da condenação, memória discriminada do cálculo, fundamentação legal e dados bancários do FUNPESPI (BB, Ag. 3791-5, Conta 10.412-4, CNPJ 24.131.459/0001-92). | **User Stories:** | US | Título | Classificação | | -------- | ----------------------------------------- | ------------- | | US-PM-12 | Emissão da Certidão de Apuração de Débito | Must |
Elaboração da Feature Spec da \[EP-PM-03] - FT-PM-08 - Emitir certidão de cálculo da pena multa Descrição completa no projeto java em docs/penamulta/FT-PM-08-emitir-certidao.md
**Descrição:** Permitir consultar cálculos e certidões já emitidos pela unidade judiciária, com filtros de busca e opções de reimpressão. Inclui mecanismo opcional de baixa manual de pagamento — individual ou em lote — e alerta para multas isoladas com prazo de pagamento vencido. No Marco 2, quando a baixa automática via integração bancária for implementada, a baixa manual permanece disponível para casos excepcionais. **Comportamentos principais:** * listar certidões da unidade judiciária do servidor logado * filtrar por processo, réu, período e situação de pagamento: `PAGO`, `NÃO PAGO` e `NÃO INFORMADO` * visualizar e reimprimir documento original (snapshot) * exibir status de cada multa * registrar baixa manual de pagamento de forma individual ou em lote (opcional — servidor pode deixar sem informar) * sinalizar a origem da baixa: `MANUAL` ou `AUTOMÁTICA` (futura integração bancária do Marco 2) * alertar para multas isoladas cujo prazo de pagamento voluntário tenha vencido sem baixa registrada **Requisitos de negócio:** | ID | Requisito | | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | RN-DOC-04 | O histórico deve ser filtrado por unidade judiciária do servidor logado. | | RN-DOC-05 | A reimpressão deve gerar exatamente o mesmo documento do cálculo original (snapshot com índices do momento da geração). O log de auditoria deve registrar a primeira impressão e a mais recente. | | RN-DOC-06 | O sistema deve identificar e sinalizar multas isoladas cujo prazo de pagamento voluntário tenha vencido sem baixa registrada, para que o servidor adote as providências cabíveis. | | RN-DOC-07 | O registro de baixa manual é opcional. O filtro da listagem deve suportar três situações: `PAGO` (baixa registrada), `NÃO PAGO` (prazo vencido sem baixa) e `NÃO INFORMADO` (prazo não vencido ou situação não registrada pelo servidor). | | RN-DOC-08 | A baixa manual pode ser registrada individualmente ou em lote para múltiplas multas selecionadas. | | RN-DOC-09 | O registro de baixa manual deve capturar: data do pagamento, valor pago e usuário responsável. | | RN-DOC-10 | Toda baixa deve registrar o sinalizador de origem: `MANUAL` (Marco 1) ou `AUTOMÁTICA` (Marco 2 em diante). O sinalizador é imutável após o registro e deve constar no log de auditoria e na listagem. | | RN-DOC-11 | O campo `origem` de PENA\_MULTA\_BAIXA deve assumir exclusivamente um dos dois valores: `MANUAL` (baixa registrada pelo servidor) ou `AUTOMATICA` (baixa via retorno bancário, Marco 2 em diante). O campo é imutável após o registro. | **User Stories:** | US | Título | Classificação | | -------- | ------------------------------------------------------------------ | ------------- | | US-PM-14 | Consultar histórico de cálculos da unidade com filtro por situação | Should | | US-PM-22 | Alerta para multa isolada com prazo vencido sem baixa | Should | | US-PM-23 | Registrar baixa manual individual ou em lote | Should |
Elaboração da Feature Spec da \[EP-PM-02] - FT-PM-09 - Consultar certidões geradas Descrição completa no projeto java em `docs/penamulta/FT-PM-09-consultar-certidoes.md`
**Descrição:** Registrar todas as operações relevantes do módulo em log de auditoria, garantindo rastreabilidade e conformidade com a LGPD. **Comportamentos principais:** * registrar operações de cálculo, geração de PDF, reimpressão, baixa de pagamento e alteração de índices * registrar: usuário, data/hora e ação realizada * para geração de PDF: distinguir entre primeira impressão e reimpressão, registrando ambas com seus respectivos timestamps e usuários * disponibilizar tela de consulta para administradores com filtros **Requisitos de negócio:** | ID | Requisito | | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | RN-AUD-01 | Toda operação de cálculo, geração de PDF, reimpressão, recálculo, baixa de pagamento e alteração de índices deve ser registrada em `auditoria_sistema` com: ator (actor\_id), data/hora e descrição da ação. | | RN-AUD-02 | O log deve distinguir a primeira impressão de uma certidão das reimpressões subsequentes. Para cada certidão devem ser rastreáveis: ator e data/hora da primeira impressão e da impressão mais recente. | | RN-AUD-03 | O log de auditoria deve estar em conformidade com as diretrizes de proteção de dados (LGPD) do TJPI. | **User Stories:** | US | Título | Classificação | | -------- | ----------------- | ------------- | | US-PM-19 | Logs de auditoria | Could |
Elaboração da Feature Spec da \[EP-PM-02] - FT-PM-10 - Registrar log de auditoria Descrição completa no projeto java em docs/penamulta/FT-PM-10-auditoria.md
15 Abr 30 Abr
▶ 15 Abr
✔ 30 Abr
**Objetivo:** Transformar o cálculo em cobrança judicial efetiva.   **EP-PM-04 — Gestão de Cobrança** | Feature | Nome | Observação | | -------- | -------------------------------- | ---------- | | FT-PM-11 | Registrar cobrança da pena multa | A detalhar | | FT-PM-12 | Controlar inadimplência | A detalhar | | FT-PM-13 | Emitir cobrança da pena multa | A detalhar | | FT-PM-14 | Processar retorno bancário | A detalhar | > Features, comportamentos e user stories deste marco serão detalhados após a conclusão e avaliação do Marco 1.
15 Abr 30 Abr
▶ 15 Abr
✔ 30 Abr
**Objetivo:** Integrar completamente o módulo ao fluxo judicial. **EP-PM-05 — Integração com PJe** > A busca de dados do processo no PJe é realizada no Marco 1 do COBJUD PRO (US-PM-10). Esse método busca em 1G e 2G automaticamente, valida acesso e trata segredo de justiça. As features deste marco cobrem o sentido inverso — o módulo alimentando o PJe — usando o (SOAP MNI) já existente no módulo `tjpi`, com suporte a assinatura digital via `AssinadorService`. | Feature | Nome | User Stories | Observação | | -------- | --------------------------------------------- | ------------ | -------------------------------------------------------------------------------- | | FT-PM-15 | Registrar movimentações no processo | A definir | Via `PjeClient.entregarManifestacaoProcessual()` — SOAP MNI | | FT-PM-16 | Enviar documentos ao processo | A definir | Via `PjeClient` + `AssinadorService` (assinatura ICP-Brasil) | | FT-PM-17 | Automatizar fluxo da pena multa | A definir | — | | FT-PM-18 | Registrar dados da pena multa no processo PJe | A definir | Alimentar o PJe com dados do cálculo e da cobrança; caminho natural após Marco 2 |
15 Abr 30 Abr
▶ 15 Abr
✔ 30 Abr
Esse guia foi elaborado pra auxiliar na compressão dos padrões do projeto. As atualizações serão colocadas no arquivo ".md" no projeto, que é o arquivo correto para consulta. O texto aqui é apenas para referência, não substitui o arquivo no projeto java.     # Guia de Desenvolvimento ## Projeto Cálculo Pena Multa ### Integrado ao sistema COBJUD PRO — TJPI --- ## 1. Objetivo deste documento Este guia orienta novos integrantes do projeto **Cálculo Pena Multa**, incluindo servidores da equipe técnica, desenvolvedores e estagiários. O documento explica: * como o projeto está organizado; * onde localizar cada tipo de informação; * como manter rastreabilidade entre backlog, documentação e código; * como contribuir com o desenvolvimento do sistema. Este projeto é parte integrante do sistema **COBJUD PRO** e segue a estrutura de desenvolvimento já utilizada pela equipe responsável. --- ## 2. Princípio fundamental: fonte única da informação Para evitar retrabalho, inconsistência e documentação duplicada, cada tipo de informação possui **uma fonte oficial**. > **Princípio adotado:** cada informação deve existir em apenas um local oficial. --- ## 3. Fonte oficial de cada tipo de informação | Tipo de informação | Fonte oficial | | ---------------------------- | ---------------------------------------------------- | | Planejamento do projeto | **Captei** (sistema interno TJPI) | | Marcos | Captei | | Épicos | Captei | | Features | Captei | | User Stories | Captei | | Tasks | Captei | | Fluxos de processo | Arquivos BPMN — `docs/penamulta/fluxos/` | | Protótipos de interface | Ferramenta de design ou `docs/penamulta/prototipos/` | | Regras de negócio detalhadas | Feature Specs — `docs/penamulta/features/` | | Modelo de dados (ERD) | `docs/penamulta/onboarding/erd-pena-multa.html` | | Arquitetura do sistema | `docs/penamulta/onboarding/arquitetura-geral.md` | | Estrutura de APIs | Feature Specs — `docs/penamulta/features/` | | Estrutura de banco de dados | Código-fonte e migrations | | Histórico de mudanças | Repositório Git | > **Captei** é o sistema de gerenciamento de portfólio e projetos de TIC do TJPI (PEGPTIC/GOVTIC). É a ferramenta equivalente ao que outros projetos chamam de "board" ou "backlog". Não replicar informações do Captei no repositório — apenas referenciar. --- ## 4. Estrutura de rastreabilidade ### 4.1 Visão geral ```plaintext Planejamento do Projeto Documentação do Sistema Implementação Técnica (Captei) (Repositório Git) (Repositório Git) ──────────────────────── ──────────────────────── ──────────────────────── Marco Feature Spec Código-fonte ↓ ↓ ↓ Épico Fluxos de processo Services / Controllers ↓ ↓ ↓ Feature Regras de negócio Banco de dados ↓ ↓ ↓ User Story Protótipos Commits ↓ ↓ ↓ Task APIs e arquitetura Deploy ``` ### 4.2 Rastreabilidade completa ```plaintext Captei (Feature) ↓ Feature Spec (docs/penamulta/features/FT-PM-XX-nome.md) ↓ User Stories (Captei) ↓ Tasks (Captei) ↓ Código-fonte ↓ Commit (com referência FT-PM-XX) ↓ Deploy ``` --- ## 5. Onde cada informação está localizada ### Captei Responsável por: * planejamento e priorização; * acompanhamento das sprints; * gestão das tarefas do time. Estrutura utilizada: ```plaintext Marco └── Épico (EP-PM-XX) └── Feature (FT-PM-XX) ├── User Story (US-PM-XX) │ └── Task └── (referência ao Feature Spec no repositório) ``` Para acessar o Captei: \[sistema interno TJPI — PEGPTIC/GOVTIC] ### Repositório Git Responsável por armazenar documentação técnica e funcional durável. **O repositório não deve replicar o backlog do Captei.** Em vez disso, deve referenciar os itens do backlog pelo ID da feature (ex.: `FT-PM-01`, `FT-PM-02`). --- ## 6. Por que utilizar Feature Spec Ferramentas de backlog como o Captei são voltadas principalmente para gestão de trabalho. Com o tempo podem ocorrer situações como: * reorganização ou arquivamento de projetos; * dificuldade para localizar funcionalidades mais antigas; * perda de contexto ao trocar membros da equipe. Por isso é necessário manter um **registro durável das funcionalidades** no repositório. O Feature Spec registra: * objetivo da funcionalidade; * contexto do negócio; * fluxo do processo; * regras de negócio; * APIs envolvidas; * estrutura de dados; * critérios de aceite. Esses documentos ficam versionados junto ao código, preservando o conhecimento do sistema independentemente do estado do backlog. --- ## 7. Estrutura de documentação no repositório ```plaintext docs/penamulta/ ├── onboarding/ │ ├── guia-desenvolvimento.md ← este arquivo │ ├── arquitetura-geral.md │ ├── mapa-rastreabilidade.md │ └── erd-pena-multa.html ← modelo de dados (ERD) ├── templates/ │ ├── feature-spec-template.md │ └── regra-negocio-template.md ├── features/ │ ├── FT-PM-01-realizar-calculo.md │ ├── FT-PM-02-memoria-calculo.md │ ├── FT-PM-03-recalcular.md │ ├── FT-PM-04-salario-minimo.md │ ├── FT-PM-05-ipca-e.md │ ├── FT-PM-06-selic.md │ ├── FT-PM-07-controle-atualizacao.md │ ├── FT-PM-08-emitir-certidao.md │ ├── FT-PM-09-consultar-certidoes.md │ └── FT-PM-10-auditoria.md ├── fluxos/ │ ├── fluxo-calculo-multa-isolada.bpmn │ └── fluxo-calculo-multa-cumulada.bpmn └── prototipos/ ├── FT-PM-01-wizard-calculo.png ├── FT-PM-08-certidao.png └── FT-PM-09-historico.png ``` ### Estrutura do pacote Java ```plaintext penamulta/ ├── controller/ │ ├── PenaMultaController.java │ └── PenaMultaAdminController.java ├── domain/ │ ├── dto/ │ │ ├── request/ │ │ └── response/ │ ├── entity/ │ │ ├── indice/ ← subpacote isolado — candidato a extração futura │ │ │ ├── IndiceIpcaE.java ← tabela: indice_ipca_e │ │ │ ├── IndiceSelic.java ← tabela: indice_selic │ │ │ └── IndiceSalarioMinimo.java ← tabela: indice_salario_minimo │ │ ├── PenaMulta.java │ │ ├── PenaMultaCalculo.java │ │ ├── PenaMultaCertidao.java │ │ ├── PenaMultaBaixa.java │ │ ├── PenaMultaRecalculo.java │ │ └── PenaMultaAuditoria.java │ └── enums/ │ ├── StatusCalculo.java │ ├── TipoMulta.java │ ├── ModoEntrada.java │ └── OrigemBaixa.java ├── repository/ │ └── indice/ ← subpacote isolado │ ├── IndiceIpcaERepository.java │ ├── IndiceSelicRepository.java │ └── IndiceSalarioMinimoRepository.java └── service/ ├── indice/ ← subpacote isolado │ ├── IpcaEService.java │ ├── SelicService.java │ └── SalarioMinimoService.java ├── PenaMultaCalculoService.java ├── PenaMultaPdfService.java └── PenaMultaPjeService.java ``` > **Por que o subpacote **`indice/`**?** O COBJUD PRO (COBranças JUDiciais) prevê outros tipos de cálculo judicial que usarão os mesmos índices econômicos (IPCA-E, SELIC, salário mínimo). Quando isso ocorrer, o subpacote `indice/` será extraído para um módulo próprio `indices/` — a operação se resume a mover arquivos e atualizar imports. As tabelas já têm nomes genéricos (`indice_ipca_e`, não `pena_multa_ipca_e`) para facilitar essa migração. --- ## 8. Template padrão de Feature Spec **Arquivo:** `docs/penamulta/templates/feature-spec-template.md` ```plaintext # FEATURE [FT-PM-XX] — [Nome da funcionalidade] ## Referência no backlog Captei — Sistema de Gerenciamento de Projetos de TIC (PEGPTIC/GOVTIC — TJPI) Épico: [EP-PM-XX — Nome do épico] Feature ID: FT-PM-XX Documentação técnica: docs/penamulta/features/FT-PM-XX-nome.md --- ## 1. Objetivo Descrever o objetivo principal da funcionalidade. --- ## 2. Contexto do Negócio Descrever brevemente o processo de negócio envolvido. --- ## 3. Fluxo do Processo ### 3.1 Fluxo simplificado 1. 2. 3. ### 3.2 Fluxo detalhado docs/penamulta/fluxos/[arquivo].bpmn --- ## 4. Regras de Negócio | ID | Regra | |---|---| | RN-PM-01 | Descrição da regra. | | RN-PM-02 | Descrição da regra. | --- ## 5. Protótipo docs/penamulta/prototipos/FT-PM-XX-nome.png --- ## 6. User Stories As stories permanecem no Captei. Referência: [FT-PM-XX — Lista de US no Captei] | US | Título | Classificação | |---|---|---| | US-PM-01 | ... | Must / Should / Could | --- ## 7. Tasks técnicas As tasks permanecem no Captei, vinculadas às User Stories. Principais tasks previstas: - [ ] ... - [ ] ... --- ## 8. APIs envolvidas | Método | Endpoint | Descrição | |---|---|---| | POST | /recurso | ... | | GET | /recurso/{id} | ... | --- ## 9. Estrutura de dados Tabela principal: `nome_tabela` | Campo | Tipo | Obrigatório | Observação | |---|---|---|---| | id | BIGINT | Sim | Chave primária | | campo_a | VARCHAR | Sim | ... | | campo_b | DECIMAL | Não | ... | --- ## 10. Critérios de aceite | ID | Critério | |---|---| | CA-PM-01 | Descrição do critério. | | CA-PM-02 | Descrição do critério. | --- ## 12. Dependências - [FT-PM-YY] — motivo da dependência. --- ## 13. Observações técnicas Decisões técnicas importantes, restrições ou pontos de atenção. ``` --- ## 9. Relação entre Captei e Feature Spec A relação entre backlog e documentação ocorre por **referência cruzada**. **No Captei** (campo de descrição ou anexo da Feature): ```plaintext Feature: FT-PM-01 — Realizar cálculo da pena multa Documentação técnica: docs/penamulta/features/FT-PM-01-realizar-calculo.md ``` **No Feature Spec** (cabeçalho do arquivo): ```plaintext ## Referência no backlog Captei — PEGPTIC/GOVTIC — TJPI Feature ID: FT-PM-01 ``` --- ## 10. Regras para commits Os commits devem manter vínculo com a feature implementada, usando o prefixo `FT-PM-XX`. **Formato:** ```plaintext FT-PM-XX tipo: descrição curta do que foi implementado ``` **Tipos válidos:** | Tipo | Uso | | ---------- | --------------------------------------------- | | `feat` | Nova funcionalidade | | `fix` | Correção de bug | | `test` | Adição ou correção de testes | | `docs` | Alteração de documentação | | `refactor` | Refatoração sem alteração de comportamento | | `chore` | Tarefas de manutenção (configs, dependências) | **Siglas de prefixo válidas — Marco 1:** | Sigla | Feature | Área | | ---------- | ----------------------------------------- | ---------------------------------------------- | | `FT-PM-01` | Realizar cálculo da pena multa | Cálculo principal, wizard, integração PJe | | `FT-PM-02` | Registrar e visualizar memória de cálculo | Snapshot imutável do resultado | | `FT-PM-03` | Recalcular pena multa | Histórico de recálculos | | `FT-PM-04` | Gerenciar salário mínimo | Tabela histórica de SM | | `FT-PM-05` | Gerenciar IPCA-E | Índices de correção monetária | | `FT-PM-06` | Gerenciar SELIC | Taxas de juros de mora | | `FT-PM-07` | Controlar atualização de índices | Alerta de desatualização | | `FT-PM-08` | Emitir certidão de cálculo | Geração e rastreio de impressões | | `FT-PM-09` | Consultar certidões e baixas | Histórico e baixa manual de pagamento | | `FT-PM-10` | Registrar log de auditoria | Rastreabilidade transversal | | `DOC` | Documentação geral | Alterações em `docs/` sem feature específica | | `INFRA` | Infraestrutura | Configurações de ambiente, CI/CD, dependências | > Novas features recebem a próxima sigla `FT-PM-XX` disponível, definida no Captei no momento da criação. Não criar siglas ad hoc fora desse padrão. **Exemplos:** ```plaintext FT-PM-01 feat: busca de processo via JudicialService FT-PM-01 feat: cálculo de correção monetária pelo IPCA-E FT-PM-01 fix: precisão do fator SELIC acumulado FT-PM-01 test: validação dos limites legais de dias-multa FT-PM-04 feat: CRUD de salário mínimo histórico FT-PM-05 feat: CRUD de índices IPCA-E FT-PM-08 feat: geração de PDF da certidão de apuração de débito FT-PM-09 feat: baixa manual de pagamento individual e em lote DOC docs: atualização do ERD após separação PENA_MULTA/CALCULO ``` --- ## 12. Documentação da API (Swagger / OpenAPI) O COBJUD PRO usa **SpringDoc OpenAPI 2.1.0** (`springdoc-openapi-starter-webmvc-ui`). A UI do Swagger está disponível em `{host}/swagger-ui.html`. O módulo Pena Multa inaugura o padrão de documentação da API no COBJUD PRO. Os demais módulos devem adotar as mesmas convenções quando forem tocados. ### Configuração global Uma única classe `OpenApiConfig` em `common/config/` define o contrato global: ```java @Configuration public class OpenApiConfig { @Bean public OpenAPI openAPI() { return new OpenAPI() .info(new Info() .title("COBJUD PRO API") .description("COBranças JUDiciais — Tribunal de Justiça do Piauí") .version("1.0.0") .contact(new Contact() .name("STIC/TJPI — GOVTIC/PEGPTIC") .url("https://www.tjpi.jus.br"))) .addSecurityItem(new SecurityRequirement().addList("bearerAuth")) .components(new Components() .addSecuritySchemes("bearerAuth", new SecurityScheme() .name("bearerAuth") .type(SecurityScheme.Type.HTTP) .scheme("bearer") .bearerFormat("JWT"))); } } ``` ### Convenções por camada **Controllers — obrigatório:** ```java @Tag(name = "Pena Multa", description = "Cálculo e gestão de multas criminais – NT N011/2025") @SecurityRequirement(name = "bearerAuth") public class PenaMultaController { ... } @Operation( summary = "Calcular pena de multa", description = "Executa o cálculo sem persistir. Usar para pré-visualização no wizard." ) @ApiResponse(responseCode = "200", description = "Cálculo executado com sucesso") @ApiResponse(responseCode = "400", description = "Parâmetros inválidos") @ApiResponse(responseCode = "401", description = "Não autenticado") public ResponseEntity calcular(...) { ... } ``` **DTOs — obrigatório em campos não óbvios:** ```java public class CalcularMultaRequest { @Schema(description = "Número CNJ do processo", example = "0001234-56.2025.8.18.0001") private String numeroProcesso; @Schema(description = "Instância judicial: 1 = 1º Grau, 2 = 2º Grau", example = "1") private Integer instancia; @Schema(description = "Quantidade de dias-multa fixada na sentença", minimum = "10", maximum = "360", example = "30") private Integer qtdDiasMulta; @Schema(description = "Modo de entrada dos dados do processo", allowableValues = {"INTEGRADO", "FALLBACK_MANUAL"}) private ModoEntrada modoEntrada; } ``` **Enums — documentar os valores:** ```java @Schema(description = "Status da dívida de pena multa") public enum StatusCalculo { @Schema(description = "Cálculo realizado — pendente de pagamento") CALCULADO, @Schema(description = "Multa quitada") PAGO, @Schema(description = "Prazo de pagamento voluntário expirado sem baixa") VENCIDO, @Schema(description = "Dívida extinta — CNJ 547/2024 ou outra causa legal") EXTINTO } ``` ### Prefixo de task para documentação Tasks de documentação de API usam o prefixo `[BE]` — são tarefas de backend: ```plaintext [BE] Doc: OpenApiConfig — configuração global (JWT, título, versão) [BE] Doc: @Tag e @SecurityRequirement em PenaMultaController [BE] Doc: @Schema nos DTOs de request de FT-PM-01 [BE] Doc: @Schema nos DTOs de response de FT-PM-01 ``` ### Restrição de acesso ao Swagger A documentação da API não deve ser acessível publicamente em produção. A estratégia adotada combina duas camadas: **Camada 1 — Desabilitar por perfil Spring (application.yml)** ```plaintext # application-prod.yml — Swagger desabilitado em produção springdoc: swagger-ui: enabled: false api-docs: enabled: false ``` ```plaintext # application-dev.yml / application-local.yml — Swagger habilitado em desenvolvimento springdoc: swagger-ui: enabled: true path: /swagger-ui.html api-docs: enabled: true path: /v3/api-docs ``` **Camada 2 — Restringir por role no Spring Security** Mesmo que o Swagger esteja habilitado (ex.: homologação), o acesso requer autenticação com `ADMIN_STIC`. Adicionar na configuração do `SecurityFilterChain` já existente no COBJUD PRO: ```java .requestMatchers("/swagger-ui/**", "/swagger-ui.html", "/v3/api-docs/**") .hasRole("ADMIN_STIC") ``` **Resultado por ambiente:** | Ambiente | Swagger habilitado | Acesso | | --------------- | ------------------ | ------------------- | | `local` / `dev` | Sim | Requer `ADMIN_STIC` | | `homologação` | Sim | Requer `ADMIN_STIC` | | `produção` | Não | Desabilitado | --- ## 13. Uso de ferramentas de IA no desenvolvimento Testes automatizados são fundamentais para garantir a estabilidade do sistema ao longo do tempo. Em cenários com prazos curtos e alta demanda, é comum que testes sejam deixados de lado, o que pode causar regressões em funcionalidades existentes, aumento do custo de manutenção e maior risco em correções de bugs. Por isso, **testes automatizados devem ser tratados como parte integrante da implementação**, não como etapa opcional posterior. ### Diretrizes * cada funcionalidade deve possuir testes unitários mínimos; * regras de negócio devem ser testadas explicitamente; * cenários de erro devem ser considerados; * testes devem ser mantidos junto ao código. Os **critérios de aceite** definidos no Feature Spec servem como referência direta para os testes automatizados. ### Exemplo de rastreabilidade teste ↔ critério de aceite **Critério de aceite:** ```plaintext CA-PM-01 O sistema calcula corretamente o valor nominal: SM(data do crime) × fração × dias-multa, com precisão de R$ 0,009 em relação à planilha oficial. ``` **Teste correspondente:** ```java @Test void testCalculoValorNominalPenaMulta() { // CA-PM-01 } @Test void testIpcaEAcumuladoEntreDatasCrimeECalculo() { // CA-PM-02 } @Test void testSelicNaoAplicadaQuandoVencimentoFuturo() { // CA-PM-03 } ``` --- ## 13. Uso de ferramentas de IA no desenvolvimento Ferramentas de IA podem auxiliar em atividades como geração inicial de estrutura de código, criação de testes automatizados e elaboração de documentação técnica. Entretanto, algumas diretrizes devem ser observadas: * código gerado por IA deve sempre ser revisado pelo desenvolvedor; * a lógica de negócio deve ser compreendida antes da implementação; * **regras de negócio não devem ser inferidas automaticamente** — ler o Feature Spec antes de usar IA para gerar código de regras; * testes gerados devem ser revisados e ajustados quando necessário. O desenvolvedor permanece responsável pela validação da solução e pela aderência aos padrões do projeto. > **Atenção especial:** este projeto envolve cálculos com efeito jurídico (pena criminal). Um erro de lógica pode gerar valores incorretos que afetam processos reais. Toda lógica de cálculo gerada por IA deve ser validada contra a planilha de referência fornecida pela equipe. --- ## 14. Boas práticas para novos desenvolvedores Antes de iniciar qualquer tarefa: 1. Localizar a **Feature no Captei** e verificar o épico ao qual pertence; 2. Verificar as **User Stories** associadas e sua classificação (Must / Should / Could); 3. Ler o **Feature Spec** correspondente em `docs/penamulta/features/FT-PM-XX-nome.md`; 4. Consultar o **ERD** em `docs/penamulta/onboarding/erd-pena-multa.html` para entender as entidades envolvidas; 5. Verificar as **regras de negócio** e os **critérios de aceite**; 6. Implementar a solução; 7. Revisar ou criar **testes automatizados** cobrindo os critérios de aceite; 8. Registrar **commit** com prefixo `FT-PM-XX` e descrição clara. --- ## 15. Atualização da documentação Sempre que uma funcionalidade sofrer **alteração relevante**, devem ser atualizados: * Feature Spec (`docs/penamulta/features/FT-PM-XX-nome.md`); * Regras de negócio (se alteradas); * Fluxo de processo (se o fluxo mudou); * ERD (`docs/penamulta/onboarding/erd-pena-multa.html`) se houver mudança no modelo de dados; * Critérios de aceite (e os testes correspondentes). A documentação deve evoluir junto com o código. Alterações no comportamento do sistema sem atualização do Feature Spec são consideradas **débito de documentação** e devem ser tratadas como tarefa na sprint seguinte. --- ## 16. Vocabulário oficial do projeto Esta seção define os termos usados no projeto e como se relacionam. O objetivo é evitar que a equipe use a mesma palavra para coisas diferentes — ou palavras diferentes para a mesma coisa. > **Neste projeto, Funcionalidade e Feature são o mesmo conceito.** O Captei usa "Funcionalidade"; o repositório e os commits usam "Feature" com o prefixo `FT-PM-XX`. Ambos se referem ao mesmo nível da hierarquia. --- ### Requisito Descreve uma regra ou necessidade que o sistema deve garantir. Não fala de tela, de fluxo de usuário nem de implementação — fala do que o sistema é obrigado a respeitar. **Formato recomendado:** `O sistema deve…` **Exemplos:** ```plaintext RN-PM-03 O sistema deve calcular o valor base da multa multiplicando dias-multa pelo valor do dia-multa. RN-IDX-04 Não deve ser possível cadastrar dois índices para o mesmo mês/ano e mesmo tipo (IPCA-E ou SELIC). RN-PM-05 O valor do dia-multa deve respeitar os limites legais: mínimo de 1/30 do salário mínimo vigente à época do fato; máximo de 5 vezes o salário mínimo vigente à época do fato. RN-DOC-05 A reimpressão deve gerar exatamente o mesmo documento do cálculo original (snapshot com índices do momento da geração). ``` **Características:** * é estável — não muda a cada sprint; * descreve uma regra de negócio ou restrição legal; * pode ser verificado de forma objetiva. **Prefixo dos requisitos:** o código segue o padrão `RN-[sigla]-[número]`. | Sigla | Significado | Exemplo | | ----- | -------------------------------- | ----------- | | `PM` | Registro e cálculo da pena multa | `RN-PM-03` | | `IDX` | Índices econômicos | `RN-IDX-04` | | `DOC` | Documentos e certidões | `RN-DOC-05` | | `AUD` | Auditoria | `RN-AUD-01` | > Não criar requisitos com numeração solta sem prefixo. Novas siglas são definidas junto com a criação da feature no Captei. --- ### Funcionalidade (Feature) Um conjunto de comportamentos do sistema que resolve um problema do usuário. É algo que o usuário percebe — uma capacidade entregue pelo sistema. **Exemplo:** a Funcionalidade `FT-PM-01 — Realizar cálculo da pena multa` entrega ao servidor judicial a capacidade de calcular o valor atualizado da multa. Uma funcionalidade pode implementar vários requisitos: ```plaintext FT-PM-01 — Realizar cálculo da pena multa implementa → RN-PM-01, RN-PM-03, RN-PM-07, RN-PM-08, RN-PM-09 FT-PM-05 — Gerenciar IPCA-E implementa → RN-IDX-03, RN-IDX-04, RN-IDX-05, RN-IDX-06 FT-PM-08 — Emitir certidão de cálculo implementa → RN-DOC-01, RN-DOC-02, RN-DOC-03 ``` --- ### História de Usuário Descreve como um usuário interage com uma funcionalidade para atingir um objetivo. Não descreve regra jurídica — descreve uso do sistema. **Formato:** `Como [usuário], quero [ação], para [objetivo].` **Exemplos:** ```plaintext Como servidor da vara, quero calcular automaticamente a pena de multa, para evitar erros manuais no cálculo. Como servidor da vara, quero consultar o histórico de cálculos da minha unidade, para localizar e reimprimir certidões anteriores sem refazer o preenchimento. Como administrador, quero cadastrar e editar índices mensais do IPCA-E e da SELIC, para manter a tabela histórica sempre atualizada. ``` --- ### Critério de Aceite Define como verificar que uma história de usuário foi implementada corretamente. É a condição objetiva que precisa ser verdadeira para a história ser considerada concluída. **Formato:** `O sistema deve [comportamento verificável] quando [condição].` **Exemplos:** ```plaintext CA-PM-01 O sistema deve calcular o valor nominal como SM(data do crime) × fração × dias-multa, com precisão de R$ 0,009 em relação à planilha oficial. CA-IDX-01 O sistema deve rejeitar o cadastro de índice com mensagem explicativa quando o mês/ano já existir para o mesmo tipo (IPCA-E ou SELIC). CA-DOC-01 O botão "Gerar PDF" deve estar disponível apenas para cálculos com status CALCULADO; cálculos com outros status não devem exibir o botão. ``` **Diferença em relação ao Requisito:** o Requisito diz _o que o sistema deve fazer_; o Critério de Aceite diz _como confirmar que foi feito corretamente_. Todo Critério de Aceite deve ser testável — se não der para escrever um teste a partir dele, provavelmente está mal formulado. --- ### Descrição Texto explicativo que contextualiza uma funcionalidade ou orienta a equipe. Não é um tipo de requisito e não tem força normativa. **Uso:** aparece nos Feature Specs para explicar o problema de negócio, o contexto jurídico ou decisões de design. **Exemplo:** ```plaintext Esta funcionalidade automatiza o cálculo da pena de multa, considerando dias-multa, valor do dia-multa, correção monetária pelo IPCA-E e juros pela taxa SELIC. ``` --- ### Épico Agrupamento de funcionalidades relacionadas sob um mesmo objetivo de negócio. Não é entregável por si só — é entregue por meio das features que o compõem. **Exemplos:** ```plaintext EP-PM-01 — Cálculo da Pena Multa agrupa → FT-PM-01 Realizar cálculo da pena multa FT-PM-02 Registrar e visualizar memória de cálculo FT-PM-03 Recalcular pena multa EP-PM-02 — Parâmetros Econômicos agrupa → FT-PM-04 Gerenciar salário mínimo FT-PM-05 Gerenciar IPCA-E FT-PM-06 Gerenciar SELIC FT-PM-07 Controlar atualização de índices objetivo → garantir que os índices econômicos (IPCA-E, SELIC e salário mínimo) estejam sempre disponíveis e atualizados para os cálculos. EP-PM-03 — Documentos agrupa → FT-PM-08 Emitir certidão de cálculo FT-PM-09 Consultar certidões e baixas FT-PM-10 Registrar log de auditoria objetivo → gerar e rastrear os documentos necessários ao fluxo processual da pena de multa. ``` --- ### Task Unidade de trabalho técnico vinculada a uma história de usuário. É o nível de decomposição onde o desenvolvedor atua diretamente. As tasks ficam no Captei e são referenciadas nos commits. **Prefixo obrigatório no nome da task:** | Prefixo | Camada | Exemplos de uso | | -------- | --------------------- | --------------------------------------------------------------------- | | `[BE]` | Backend (Java/Spring) | Entities, repositories, services, controllers, DTOs, validações | | `[FE]` | Frontend (Angular) | Componentes, templates, interfaces TypeScript, integração com service | | `[TEST]` | Testes automatizados | Testes unitários e de integração | | `[DB]` | Banco de dados | Migrations Flyway — criação de tabelas, seeds, alterações de schema | > O prefixo permite que backend e frontend sejam trabalhados em paralelo por desenvolvedores diferentes dentro da mesma User Story. Tasks `[TEST]` também podem ser distribuídas independentemente. **Exemplos:** ```plaintext [BE] Entity: PenaMulta [BE] Service: PenaMultaCalculoService — fórmula completa (valor nominal, IPCA-E, SELIC, fiança) [FE] Component: wizard step 2 — formulário de condenação com dataIntimacao [FE] Service: adicionar métodos de SM em PenaMultaService [TEST] Unitário: PenaMultaCalculoService — precisão R$ 0,009 vs. planilha oficial [TEST] Integração: POST /calcular/salvar — persistência e retorno com ID [DB] Migration: criar tabela pena_multa [DB] Migration: seed histórico IPCA-E desde 03/1994 ``` --- ### Relação entre os elementos ```plaintext Requisito → define a regra que o sistema deve respeitar Funcionalidade → entrega o comportamento que implementa os requisitos História → descreve como o usuário usa a funcionalidade Critério → define como verificar que a história foi bem implementada Task → detalha o trabalho técnico para implementar a história Código → é onde tudo isso se materializa ``` **Exemplo real do projeto:** ```plaintext Requisito RN-PM-03 valor_base = dias_multa × fracao × salario_minimo(data_crime) ↓ Funcionalidade FT-PM-01 — Realizar cálculo da pena multa ↓ História de Usuário US-PM-01 Como servidor, quero informar os parâmetros do cálculo para obter o valor atualizado da multa. ↓ Critério de Aceite CA-PM-01 Valor nominal = SM(data do crime) × fração × dias-multa, precisão de R$ 0,009 vs. planilha oficial. ↓ Task Implementar PenaMultaCalculoService.calcularValorNominal() ↓ Código PenaMultaCalculoService.java ``` --- ### Erros comuns — evitar **❌ Escrever história de usuário no lugar de requisito:** ```plaintext RN-PM-03 Como usuário, quero calcular a multa. ``` Isso é história de usuário. Requisito não tem "Como \[usuário]" — tem "O sistema deve". **❌ Escrever requisito no lugar de critério de aceite:** ```plaintext CA-PM-01 O sistema deve calcular pelo IPCA-E. ``` Isso é requisito (`RN`), não critério de aceite (`CA`). O CA precisa ser verificável: _como_ confirmar que o IPCA-E foi aplicado corretamente? Com qual precisão? Em relação a qual referência? --- --- ## 17. Observação final O projeto **Cálculo Pena Multa** segue os padrões de organização e desenvolvimento já adotados pelo COBJUD PRO, garantindo compatibilidade com o fluxo de trabalho da equipe. A documentação no repositório complementa o backlog do **Captei**, preservando o conhecimento funcional e técnico do sistema sem duplicar informações. Dúvidas sobre o escopo ou regras de negócio devem ser encaminhadas à equipe do **CIJEPI** (demandante formal) via processo SEI ou reunião registrada em ata. ---   ---
▶ 10 Abr
✔ 10 Abr
Estratégia
sim
0

Alta

Sem Investimento

Médio

N/D

TJPI/Corregedoria

Responsabilidades (Grupos Internos)
Responsabilidade Membro Área
Responsabilidades (Grupos Externos)
Responsabilidade Membro Área
Gestão de Riscos

Nenhum risco cadastrado para este projeto

Orçamento do Projeto
Recurso
Unid.
Qtde
Valor(R$)
Total(R$)
Executado(R$)
Custo do Projeto R$ 0,00
Reserva de Contingência R$ 0,00
TOTAL DO PROJETO R$ 0,00
Total Executado R$ 0,00