Pular para o conteúdo principal

Casos de Uso

1. Code Shift em uma análise e refatoração do código Java

Confira um exemplo do módulo CNPJ Alfanumérico para análise e refatoração de código Java. Ele utiliza uma análise baseada em AST (Abstract Syntax Tree) e listas de palavras-chave para identificar o uso de CNPJ nos repositórios. A partir disso, ele sugere melhorias no tratamento do CNPJ em Aplicações Java com StackSpot AI.

1. Busca por declarações de variáveis com CNPJ

O objetivo é identificar variáveis cujo nome ou tipo esteja relacionado às palavras-chave do CNPJ.

Exemplo:

private long cnpj;
Long cnpj = Long.parseLong(cnpjString);

2. Busca por declarações de métodos com CNPJ

O objetivo é localizar métodos que manipulem ou exponham o CNPJ.

Exemplo:

public long getCnpj() { ... }
public void setCnpj(long cnpj) { ... }

3. Busca por atribuição de valores a CNPJ

O objetivo é detectar atribuições diretas de valores a campos ou variáveis de CNPJ.

Exemplo:

cnpjLong = 34110468000150L;
anotherClient.setCnpj(45997418000153L);

4. Busca por instanciação de classes com CNPJ

O objetivo é identificar construtores ou métodos que recebem CNPJ como parâmetro.

Exemplo:

public EmpresaPública(String razaoSocial, String endereco, long cnpj) { ... }
Optional<ClientePJ> findByCnpj(Long cnpj);

5. Busca por chamadas encadeadas (Builders) com CNPJ

O objetivo é detectar uso de CNPJ em padrões de builder, por exemplo, Lombok, especialmente com tipos inadequados.

Exemplo:


// Antes:
NovaEmpresaRequest empresaAntes = NovaEmpresaRequest.builder()
.nomeFantasia("Tech Solutions")
.razaoSocial("Tech Solutions LTDA")
.cnpj(12345678000190L) // ⚠️ uso de long em vez de String
.inscricaoEstadual("1234567890")
.emailContato("contato@techsolutions.com")
.telefoneContato("(11) 98765-4321")
.endereco("Av. Paulista, 1000 - São Paulo/SP")
.build();
// Depois:
NovaEmpresaRequest empresaDepois = NovaEmpresaRequest.builder()

6. Busca por comparações com CNPJ

O objetivo é identificar comparações diretas de CNPJ, especialmente com tipos numéricos.

Exemplo:


if (cnpj == 34110468000150L) { ... } // ⚠️ uso de long em vez de String

7. Filtro por tipagem inadequada

O objetivo é listar todas as ocorrências de CNPJ com tipos diferentes de String.

Tipos analisados:

  • byte;
  • short;
  • int;
  • long;
  • float;
  • double;
  • Integer.

8. Refatoração automatizada via StackSpot AI

Os principais objetivos são:

  • Encontrar os pontos de alteração.
  • Refatorar o código para garantir que o CNPJ seja tratado como String.
  • Manter a compatibilidade com tipos numéricos.
  • Ajustar testes automatizados.

Exemplo:

// Antes:
public class Empresa {
private long cnpj; // ⚠️ CNPJ como long
public void setCnpj(long cnpj) {
this.cnpj = cnpj;
}
public long getCnpj() {
return cnpj;
}
}
// Depois:
public class Empresa {
private String cnpj; // ✅ CNPJ como String
public void setCnpj(long cnpj) {
this.cnpj = String.valueOf(cnpj);
}
public void setCnpj(String cnpj) {
this.cnpj = cnpj;
}
public String getCnpj() {
return cnpj;
}
}

9. Busca por anotações e validações do CNPJ

O objetivo é identificar uso de anotações de validação e sugerir padronização.

Exemplo:

// Antes:
public class Empresa {
@ValidCnpj
private String cnpj;
}

// Depois:
public class Empresa {
@CNPJ // Anotação padronizada para validação de CNPJ
private String cnpj;
}

10. Busca por Máscaras de CNPJ

O objetivo é detectar implementações manuais de máscara/validação.

Exemplo:

String cnpjFormatado = cnpj.substring(0,2) + "." + ...;

11. Busca por serialização e desserialização de CNPJ

O objetivo é identificar problemas em serialização/desserialização de CNPJ.

Exemplo:

@JsonProperty("cnpj")
private String cnpj;

12. Comentários sobre CNPJ

O objetivo é identificar comentários relacionados ao campo CNPJ no código, sugerindo alterações para garantir que a descrição esteja de acordo.

Exemplo:

// Antes:
/**
* CNPJ da empresa deve conter apenas números.
*/
private String cnpj;
// Depois:
/**
* CNPJ da empresa pode conter caracteres alfanuméricos.
*/
private String cnpj;


2. Code Shift em uma análise e refatoração do código Cobol

Confira um exemplo usando o módulo CNPJ Alfanumérico para análise e refatoração de código Cobol, utilizando listas de palavras-chave para identificar o uso de CNPJ nos repositórios, sugerindo melhorias no tratamento do CNPJ em aplicações Cobol com a StackSpot AI.

Casos de uso detalhados

1. Declaração de variáveis PIC do CNPJ

O objetivo é padronizar a declaração de variáveis PIC do CNPJ para o tipo alfanumérico adequado.

Exemplo:


# Antes:
01 CNPJ-EMPRESA PIC 9(14).
01 CNPJ-CLIENTE PIC S9(14).
01 CNPJ-FORNECEDOR PIC S9(15).

# Depois:
01 CNPJ-EMPRESA PIC X(14).
01 CNPJ-CLIENTE PIC X(14).
01 CNPJ-FORNECEDOR PIC X(15).

2. Identificação de variáveis COMP-3 do CNPJ

O objetivo é padronizar a declaração de variáveis COMP-3 do CNPJ para o tipo alfanumérico adequado.

  • Exemplo 1: COMP / COMP-3 / USAGE COMP com FILLER

# Antes:
03 NUM-CNPJ PIC 9(18) COMP. *> Cenário COMP
...
03 XPTO-FILLER PIC X(60). *> FILLER ORIGINAL NO FINAL DO BLOCO
* ESPACO RESERVADO

# Depois
03 FILLER PIC 9(18) COMP. *> Mantido para compatibilidade
...
03 NUM-CNPJ PIC X(18). *> CNPJALFA
03 XPTO-FILLER PIC X(42). *> FILLER ORIGINAL AJUSTADO (CNPJALFA)
* ESPACO RESERVADO

  • Exemplo 2: COMP / COMP-3 / USAGE COMP com FILLER e uso total do espaço

# Antes:
03 NUM-CNPJ PIC 9(14) COMP-3. *> Cenário COMP-3
...
03 XPTO-FILLER PIC X(10). *> FILLER ORIGINAL NO FINAL DO BLOCO
* ESPACO RESERVADO

# Depois
03 FILLER PIC 9(14) COMP-3. *> Mantido para compatibilidade (CNPJALFA)
...
03 NUM-CNPJ PIC X(14). *> CNPJALFA
03 XPTO-FILLER PIC X(10). *> FILLER ORIGINAL COMENTADO (CNPJALFA)
* ESPACO RESERVADO


A conversão de COMP-3 para alfanumérico pode impactar o layout de registros em copybooks compartilhados.

3. Atribuição e movimentação de valores

O objetivo é ajustar comandos MOVE, INITIALIZE, redefinições e conversões de tipos para o novo padrão do CNPJ.

Exemplo:


# Antes:
MOVE ZEROS TO CNPJ-EMPRESA.

# Depois:
MOVE SPACES TO CNPJ-EMPRESA.

4. Validação de CNPJ Alfanumérico

O objetivo é padronizar a validação do campo CNPJ para garantir que ele possua exatamente 14 caracteres alfanuméricos.

Regras de conversão

Condição OriginalConversão ObrigatóriaContextoDocumentar Como
EQUAL ZEROSEQUAL SPACESCampos alfanuméricoscondition
GREATER ZEROSNOT EQUAL LOW-VALUESCampos alfanuméricoscondition
IS NUMERICNOT EQUAL SPACESValidação de campo vaziocondition
NOT NUMERICEQUAL LOW-VALUESValidação de campo vaziocondition
NOT NUMERIC OR EQUAL ZEROSEQUAL LOW-VALUES OR EQUAL SPACESValidação combinadacondition
ZEROS OR SPACESLOW-VALUES OR SPACESValidação de campo vaziocondition
VALUE ZEROSVALUE SPACESInicializaçãofield_declaration
VALUE 0VALUE SPACESInicializaçãofield_declaration
VALUE ZEROESVALUE SPACESInicializaçãofield_declaration
MOVE ZEROSMOVE SPACESAtribuiçãomove_operation
  • Exemplo 1: validação de campo vazio:

# Antes:
VARCNPJ EQUALS SPACES OR ZEROS


# Depois:
VARCNPJ EQUALS SPACES *> CNPJALFA

  • Exemplo 2: validação combinada
# Antes
IF VARCNPJCGC NOT NUMERIC OR VARCNPJCGC EQUAL ZEROS

# Depois
IF VARCNPJCGC EQUAL LOW-VALUES OR VARCNPJCGC EQUAL SPACES *> CNPJALFA

5. Tratamento de campos compartilhados (REDEFINES)

O objetivo é ajustar o uso de REDEFINES para permitir o compartilhamento de campos entre CNPJ.

Exemplo:


# Antes:
01 VAR-CGC PIC 9(14). *> Cenário REDEFINES
01 WCGC-VAR-CGC REDEFINES VAR-CGC
03 CGC1-VAR-CGC PIC 9(08).
03 CGC2-VAR-CGC PIC 9(04).
03 DACCGC-VAR-CGC PIC 9(02).

# Depois:
01 VAR-CGC PIC X(14). *> CNPJALFA - Cenário REDEFINES corrigido
01 WCGC-VAR-CGC REDEFINES VAR-CGC
03 CGC1-VAR-CGC PIC X(08).
03 CGC2-VAR-CGC PIC X(04).
03 DACCGC-VAR-CGC PIC X(02).