projudi

Shared Kernel 🔗

Conceito

O Shared Kernel contĂ©m elementos fundamentais do domĂ­nio que sĂŁo compartilhados entre mĂșltiplos bounded contexts, como value objects, enums e utilitĂĄrios bĂĄsicos que representam conceitos universais do sistema judicial.

Escopo do Shared Kernel

Value Objects Fundamentais

// Identificadores Ășnicos
ProcessoId, ServentiaId, UsuarioId, ComarcaId, CargoId, AreaId
AssessorId, AdvogadoId, ParteId, GuiaId, AudienciaId

// Dados estruturados
CPF, CNPJ, RG, OAB, Email, Telefone
CEP, Endereco, NumeroProcesso

// PerĂ­odos e datas
PeriodoProcessual, DataAudiencia, PrazoLegal

Enums e Constantes

// Status universais
StatusProcesso, StatusPendencia, StatusAudiencia, StatusGuia

// Tipos e classificaçÔes
TipoProcesso, TipoMovimentacao, TipoPendencia, TipoAudiencia
PerfilUsuario, TipoDocumento, GrauInstancia

// ConfiguraçÔes do sistema
ConfiguracaoSistema, ParametrosGerais

Utilitårios e ValidaçÔes

// Validadores de domĂ­nio
ValidadorCPF, ValidadorCNPJ, ValidadorOAB
ValidadorNumeroProcesso, ValidadorCodigoAcesso

// Formatadores
FormatadorProcesso, FormatadorDocumento, FormatadorData

// ExceçÔes de domínio base
DominioException, ValidacaoException, NegocioException

Eventos de DomĂ­nio Base

// Eventos fundamentais
ProcessoCriado, ProcessoAlterado, MovimentacaoRealizada
PendenciaGerada, AudienciaAgendada, ConclusaoRealizada

Estrutura do Shared Kernel

src/main/java/br/gov/go/tj/projudi/
└── shared/
    ├── valueobject/          # Value Objects
    │   ├── identificador/    # ProcessoId, UsuarioId, etc.
    │   ├── documento/        # CPF, CNPJ, RG, etc.
    │   ├── endereco/         # CEP, Endereco, etc.
    │   └── periodo/          # Datas, prazos, períodos
    ├── enums/               # Enums e constantes
    │   ├── status/          # Status diversos
    │   ├── tipo/            # Tipos e classificaçÔes
    │   └── configuracao/    # ConfiguraçÔes
    ├── validation/          # Validadores de domínio
    ├── formatter/           # Formatadores
    ├── exception/           # ExceçÔes base de domĂ­nio
    ├── event/              # Eventos de domínio base
    └── util/               # Utilitários compartilhados

Regras de Governança do Shared Kernel

✅ O QUE PODE

❌ O QUE NÃO PODE

🔄 Processo de Evolução

  1. Proposta: Qualquer equipe pode propor inclusão/alteração
  2. AnĂĄlise: Verificar se Ă© usado por 3+ contextos
  3. Consenso: Aprovação de representantes de todos os contextos afetados
  4. Versionamento: Mudanças seguem versionamento semùntico
  5. Migração: Período de deprecação para mudanças breaking

Exemplo de Uso

// No contexto de Processo
public class Processo {
    private ProcessoId id;
    private NumeroProcesso numero;
    private StatusProcesso status;
    private ComarcaId comarca;
    // ...
}

// No contexto de PendĂȘncia
public class Pendencia {
    private PendenciaId id;
    private ProcessoId processoId; // Reutiliza do Shared Kernel
    private StatusPendencia status;
    private UsuarioId responsavel; // Reutiliza do Shared Kernel
    // ...
}

Estrutura de Pacotes com Shared Kernel

src/main/java/br/gov/go/tj/projudi/
├── shared/                 # 🔗 Shared Kernel
│   ├── valueobject/
│   ├── enums/
│   ├── validation/
│   ├── exception/
│   └── event/
├── conclusao/              # ConclusĂ”es e DecisĂ”es
├── pendencia/              # PendĂȘncias e Cumprimentos  
├── audiencia/              # AudiĂȘncias, SessĂ”es e Agenda
├── processo/
│   ├── ciclovida/         # Ciclo de Vida do Processo
│   └── consulta/          # Consulta e Dados do Processo
├── identidadeacesso/       # Identidade, Acesso e Equipes
├── ato/                   # Atos e Instrumentos Judiciais
├── configuracao/          # ConfiguraçÔes e Automação
├── relatorio/
│   ├── produtividade/     # Estatísticas e Produtividade
│   └── gerencial/         # Relatórios Gerenciais
├── documento/             # Gestão Documental
├── movimentacao/          # MovimentaçÔes Processuais
├── parte/                 # Partes e Representação
├── financeiro/            # Financeiro — Guias e Custas
└── api/publica/           # APIs PĂșblicas e Serviços

BenefĂ­cios do Shared Kernel

✅ Reutilização: Elimina duplicação de conceitos fundamentais
✅ ConsistĂȘncia: Uso padronizado de value objects e validaçÔes
✅ Integridade: Garantia de que conceitos fundamentais são tratados uniformemente
✅ Manutenibilidade: Centralização de mudanças em conceitos base
✅ EficiĂȘncia: Reduz tempo de desenvolvimento ao reutilizar componentes validados