Translate

Mostrar mensagens com a etiqueta vsam. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta vsam. Mostrar todas as mensagens

domingo, 26 de julho de 2026

A Academia Jedi do COBOL: Tudo o Que um Padawan Precisa Saber para Dominar o Mainframe

 

Bellacosa Mainframe e a academia mainframe

 A Academia Jedi do COBOL: Tudo o Que um Padawan Precisa Saber para Dominar o Mainframe

FUNDAMENTOS DO DESENVOLVIMENTO COBOL


1. Conceitos Básicos

Antes de escrever uma linha de código, o aluno precisa entender o que é COBOL.

COBOL significa:

COmmon Business Oriented Language

Criada em 1959 para resolver problemas de negócios.

Enquanto linguagens modernas nasceram para matemática ou sistemas operacionais, COBOL nasceu para:

  • Folha de pagamento

  • Bancos

  • Seguros

  • Governo

  • Contabilidade

  • Controle financeiro

Exemplo:

Imagine um banco processando:

  • 50 milhões de contas

  • 300 milhões de transações por dia

Grande parte disso ainda roda em COBOL.


Estrutura clássica

IDENTIFICATION DIVISION.
ENVIRONMENT DIVISION.
DATA DIVISION.
PROCEDURE DIVISION.

Comparação:

COBOLCasa
IdentificationNome do dono
EnvironmentInfraestrutura
DataMóveis
ProcedureO que acontece dentro

2. Tipos de Programas

Um erro comum é achar que existe apenas um tipo de programa COBOL.

Na prática temos:


Programas Batch

Executados sem interação humana.

Exemplo:

Processamento noturno do banco.

23:00 Início
04:00 Fim

Milhões de registros processados.


Programas Online

Executados pelo usuário.

Exemplo:

Caixa eletrônico.

Saque
Extrato
Transferência

Normalmente via CICS.


Subprogramas

Programas chamados por outros programas.

Exemplo:

CALL 'CALCJURO'

Reutilização de código.


Utilitários

Ferramentas auxiliares.

Exemplo:

  • Conversão de arquivos

  • Formatação

  • Migração de dados


3. Etapas para Desenvolvimento

Aqui o aluno aprende que programar é apenas uma parte do trabalho.


Levantamento de requisitos

Perguntas:

  • O que o usuário quer?

  • Quais entradas existem?

  • Quais saídas são necessárias?


Análise

Transformar regra de negócio em lógica.

Exemplo:

Se idade >= 65
então aposentado

Projeto

Definir:

  • Arquivos

  • Variáveis

  • Fluxo

  • Relatórios


Codificação

Somente agora começa o COBOL.


Testes

Muitos iniciantes pulam esta etapa.

Erro gravíssimo.

Um programa sem testes:

COMPILA ≠ FUNCIONA

4. Terminologia, Conceitos e Recursos

Aqui nasce o vocabulário do programador.


Registro

Uma linha lógica.

Exemplo:

001 João      2500.00

Campo

Parte do registro.

Nome
Salário
CPF

Arquivo

Conjunto de registros.


Programa

Conjunto de instruções.


Job

Execução do programa.

No Mainframe:

//STEP01 EXEC PGM=FOLHA001

☕💣 LÓGICA DE PROGRAMAÇÃO


5. Ferramentas de Planejamento

O pior programador é aquele que abre o editor antes de pensar.

Planejamento economiza horas.


Diagrama de Processo

Entrada
 ↓
Validação
 ↓
Cálculo
 ↓
Saída

Tabela de Decisão

Muito usada em bancos.

Exemplo:

SaldoCrédito
>10000Sim
<10000Não

6. Projeto Estruturado

A filosofia:

Resolver problemas grandes
dividindo em pequenos problemas

Exemplo:

Sistema de Folha

LER FUNCIONÁRIO
CALCULAR SALÁRIO
CALCULAR IMPOSTOS
IMPRIMIR

Cada parte vira um parágrafo.


7. Fluxogramas

Antes do COBOL existia o fluxograma.

Exemplo:

INÍCIO
  |
LER ARQUIVO
  |
FIM DO ARQUIVO?
 /      \
SIM      NÃO
 |         |
FIM      PROCESSA

Benefícios

  • Facilita entendimento

  • Ajuda documentação

  • Facilita manutenção


8. Pseudocódigo

Traduz a regra para linguagem humana.

Exemplo:

LER CLIENTE

SE IDADE >= 18
   APROVAR
SENÃO
   REJEITAR
FIM-SE

Depois converte para COBOL.

IF IDADE >= 18
   MOVE 'S' TO APROVADO
ELSE
   MOVE 'N' TO APROVADO
END-IF.

9. Instruções e Operadores

Comandos básicos.


MOVE

MOVE SALARIO TO SALARIO-ANTIGO

COMPUTE

COMPUTE TOTAL = VALOR + JUROS

ADD

ADD 100 TO SALDO

SUBTRACT

SUBTRACT 50 FROM SALDO

MULTIPLY

MULTIPLY QTDE BY PRECO
    GIVING TOTAL

DIVIDE

DIVIDE TOTAL BY PARCELAS
    GIVING VALOR-PARCELA

10. Estruturas de Controle

O cérebro do programa.


IF

IF SALDO > 0

EVALUATE

Equivalente ao SWITCH.

EVALUATE TIPO
   WHEN 1
      ...
   WHEN 2
      ...
END-EVALUATE

PERFORM

Laços de repetição.

PERFORM 100 TIMES

PERFORM UNTIL

PERFORM UNTIL EOF = 'S'

Muito usado em batch.


☕💣 PADRÕES PROFISSIONAIS


11. Padrões de Nomes

Programador júnior:

01 X.
01 Y.

Programador profissional:

01 WS-SALDO-CLIENTE.
01 WS-LIMITE-CREDITO.

Prefixos comuns

PrefixoSignificado
WSWorking Storage
LKLinkage
FDFile Description
INEntrada
OUTSaída

Parágrafos

Ruim:

1000.

Bom:

1000-LER-CLIENTE.
2000-PROCESSAR-CLIENTE.
3000-EMITIR-RELATORIO.

☕💣 ARQUIVOS E RELATÓRIOS


12. Arquivos Sequenciais

A base histórica do COBOL.

Imagine uma fita magnética.

Leitura:

READ ARQ-CLIENTE

Fluxo clássico:

OPEN INPUT ARQ

PERFORM UNTIL EOF
   READ ARQ
END-PERFORM

CLOSE ARQ

13. Relatórios

Objetivo:

Transformar dados em informação.

Exemplo:

RELATÓRIO DE VENDAS

TOTAL VENDIDO:
R$ 1.500.000

Aspectos importantes:

  • Cabeçalho

  • Detalhes

  • Totais

  • Quebras de controle


Quebra de Controle

Exemplo:

Departamento A
Total A

Departamento B
Total B

Técnica extremamente usada em batch.


☕💣 NÍVEL CORPORATIVO


14. Arquivos Indexados

Aqui o aluno entra no mundo dos bancos e seguradoras.


Sequencial

Procurar conta 9000

1
2
3
4
...
9000

Lento.


Indexado

Índice → Registro

Busca quase instantânea.


Exemplo VSAM KSDS:

READ CLIENTE-KSDS
     KEY IS CPF

15. Tabelas Internas

Equivalente aos arrays modernos.

01 TAB-CLIENTES.
   05 CLIENTE OCCURS 100 TIMES.

Acesso:

CLIENTE(15)

Busca binária:

SEARCH ALL

Tema importantíssimo para entrevistas.


16. Subprogramas

Onde o aluno começa a pensar como arquiteto.


Programa principal:

CALL 'CALCIR'

Subprograma:

LINKAGE SECTION.

Recebe parâmetros.


Benefícios:

  • Reuso

  • Manutenção

  • Modularidade

  • Padronização


O QUE ESTÁ FALTANDO PARA O MERCADO ATUAL?

Se eu fosse enriquecer esse módulo para formar um desenvolvedor COBOL moderno, incluiria também:

Módulo Extra 1 – JCL Básico

  • JOB

  • EXEC

  • DD

  • Condições de execução

  • Return Codes


Módulo Extra 2 – VSAM

  • KSDS

  • ESDS

  • RRDS

  • Alternates Index


Módulo Extra 3 – DB2

  • SELECT

  • INSERT

  • UPDATE

  • CURSOR


Módulo Extra 4 – CICS

  • MAPS

  • COMMAREA

  • Pseudo-conversação


Módulo Extra 5 – Debugging

  • Abend S0C7

  • Abend S0C4

  • FILE STATUS

  • CEEDUMP

  • SYSUDUMP


Módulo Extra 6 – Boas Práticas de Mainframe

  • Naming standards

  • Estrutura de parágrafos

  • Controle de versões

  • Revisão de código

  • Performance

  • Segurança RACF


Visão de carreira do Padawan COBOL

A evolução típica é:

Padawan
 ↓
Programador Júnior
 ↓
Programador Pleno
 ↓
Programador Sênior
 ↓
Analista de Sistemas
 ↓
Arquiteto Mainframe
 ↓
Especialista Corporativo

O segredo não está em decorar comandos COBOL, mas em compreender profundamente processamento de dados, regras de negócio, arquivos, bancos de dados, performance e arquitetura corporativa, pois é exatamente isso que diferencia um simples codificador de um verdadeiro Jedi do Mainframe. ☕💣🚀



quinta-feira, 16 de julho de 2026

🚀 Quer Começar uma Carreira em IBM Mainframe? Estes Cursos Gratuitos São o Melhor Ponto de Partida

 

Bellacosa Mainframe inicie sua carreira em ibm mainframe tudo gratuito

☕ Um Café no Bellacosa Mainframe

🚀 Quer Começar uma Carreira em IBM Mainframe? Estes Cursos Gratuitos São o Melhor Ponto de Partida

Durante muitos anos, aprender Mainframe significava ter acesso a um IBM Z físico ou trabalhar em uma grande empresa. Hoje esse cenário mudou completamente. A IBM e sua comunidade disponibilizam uma excelente coleção de cursos gratuitos, laboratórios práticos e trilhas de aprendizado que permitem a qualquer pessoa iniciar uma carreira em uma das áreas mais estáveis e valorizadas da Tecnologia da Informação.

Se você é um Programador COBOL Padawan, considere esta lista como sua Academia da Frota Estelar. Antes de assumir o controle da USS Enterprise (ou de um IBM Z), é preciso dominar os fundamentos.


🖖 1. IBM Z Mainframe Skills Depot (A Academia Oficial da IBM)

O melhor ponto de partida para quem deseja aprender Mainframe.

A plataforma reúne centenas de horas de treinamento organizadas por trilhas de carreira, incluindo:

  • COBOL

  • JCL

  • Db2

  • CICS

  • IMS

  • VSAM

  • RACF

  • z/OS

  • DevOps

  • Segurança

  • Modernização

  • Linux on IBM Z

👉 IBM Z Mainframe Skills Depot


🎮 2. IBM Z Xplore

Aprender jogando.

O IBM Z Xplore transforma o aprendizado em desafios práticos. Você resolve missões reais, ganha badges digitais e aprende utilizando um ambiente IBM Z.

Ideal para quem nunca teve contato com Mainframe.

Você encontrará desafios envolvendo:

  • COBOL

  • JCL

  • TSO/ISPF

  • USS

  • Python

  • Db2

  • VS Code

  • Linux on Z

👉 IBM Z Xplore


💻 3. Learning COBOL Programming with VS Code

Um dos melhores cursos gratuitos para iniciantes.

Ao invés de começar diretamente na tradicional tela verde, você aprende COBOL utilizando o Visual Studio Code e ferramentas modernas.

Conteúdo:

  • Introdução ao COBOL

  • Variáveis

  • IF

  • PERFORM

  • Arquivos

  • Estruturas de dados

  • Desenvolvimento moderno

👉 Learning COBOL Programming with VS Code


🎓 4. IBM Training

O portal oficial de treinamento da IBM reúne centenas de cursos gratuitos e pagos sobre IBM Z, LinuxONE, automação, segurança, IA e diversas tecnologias corporativas.

👉 IBM Training


🌎 5. IBM SkillsBuild

Excelente plataforma para desenvolver competências em tecnologia.

Além de Mainframe, oferece cursos de:

  • Computação em Nuvem

  • Inteligência Artificial

  • Segurança

  • Programação

  • Dados

  • Soft Skills

Tudo isso ajuda a formar um profissional completo.

👉 IBM SkillsBuild


⚙️ 6. IBM Developer

Portal com artigos, tutoriais, exemplos de código, projetos e conteúdos produzidos por especialistas da IBM.

Ideal para aprofundar os estudos depois dos cursos básicos.

👉 IBM Developer


📚 7. Open Mainframe Project

Uma excelente fonte para conhecer o ecossistema open source voltado ao IBM Z.

Você encontrará projetos como:

  • Zowe

  • Feilong

  • COBOL Programming Course

  • Modernização

  • DevOps

👉 Open Mainframe Project


🧑‍💻 8. IBM Redbooks

Os famosos "livros vermelhos" da IBM.

São referências técnicas escritas por especialistas e cobrem praticamente todos os assuntos relacionados ao IBM Z.

👉 IBM Redbooks


🚀 Roteiro recomendado para iniciar

Não tente aprender tudo de uma vez. Uma sequência eficiente é:

  1. Conceitos de Mainframe e z/OS

  2. COBOL

  3. JCL

  4. VSAM e QSAM

  5. SQL e Db2

  6. CICS

  7. IMS

  8. TSO/ISPF

  9. REXX

  10. RACF

  11. Git e DevOps para IBM Z

  12. APIs e Modernização (z/OS Connect, REST)

  13. Ansible, Zowe e automação

  14. IA aplicada ao IBM Z


💡 Dicas para o Programador COBOL Padawan

  • Não estude apenas COBOL: o ecossistema Mainframe é composto por diversas tecnologias que trabalham em conjunto.

  • Faça os laboratórios sempre que possível; a prática acelera o aprendizado.

  • Conquiste badges e certificados para enriquecer seu currículo e perfil no LinkedIn.

  • Participe de comunidades, eventos e programas como IBM Z Day e IBM TechXchange.

  • Compartilhe seus projetos e aprendizados. Ensinar também é uma excelente forma de consolidar conhecimento.


🖖 Mensagem Final

Na USS Enterprise, o conhecimento era a ferramenta mais valiosa da tripulação. No universo IBM Z, a lógica, a disciplina e o aprendizado contínuo desempenham o mesmo papel. Com tantos recursos gratuitos disponíveis hoje, nunca foi tão acessível iniciar uma carreira em Mainframe. O importante é começar, evoluir um passo de cada vez e transformar curiosidade em experiência prática.

Como diria o Sr. Spock:

"A lógica é o começo da sabedoria, não o fim."

Que sua jornada no universo IBM Mainframe seja longa, próspera e repleta de novos conhecimentos. 🖖

sábado, 11 de julho de 2026

CNPJ Alfanumérico sem Mistérios

 

Bellacosa Mainframe e o cnpj alfanumerico sem misterios

☕ Um Café no Bellacosa Mainframe

CNPJ Alfanumérico sem Mistérios

Quando o Programador COBOL Descobre que o Campo Continua com 14 Posições, mas o Mundo Inteiro ao Redor Dele Precisa Mudar

Durante décadas, o programador COBOL brasileiro olhou para o CNPJ como quem observa uma estrutura absolutamente estável:

99.999.999/9999-99

Quatorze algarismos. Sempre numérico. Frequentemente armazenado em um campo PIC 9(14), talvez compactado em COMP-3, validado por uma rotina de módulo 11 e utilizado como chave em arquivos VSAM, tabelas Db2, mapas BMS, mensagens MQ, arquivos fiscais e milhões de transações batch.

Parecia um daqueles contratos eternos do processamento corporativo.

Mas eis que surge uma nova especificação no horizonte:

AA.AAA.AAA/AAAA-99

O tamanho permanece com 14 posições, a máscara visual continua praticamente igual e os dois dígitos verificadores permanecem numéricos. Porém, as primeiras doze posições passam a aceitar números e letras maiúsculas de A a Z.

Para um usuário comum, isso pode parecer uma pequena mudança de formulário.

Para um programador COBOL, é uma alteração estrutural capaz de atravessar todo o ecossistema corporativo.

É aquele tipo de manutenção em que alguém diz:

“É só permitir letras no CNPJ.”

E três semanas depois existe uma War Room com quarenta pessoas, cinco fornecedores, dois bancos de dados, quatro sistemas satélites e um arquivo histórico criado em 1997 que ninguém sabia que ainda estava em produção.

Bem-vindo, Padawan, ao verdadeiro significado de mudança de domínio de dados.


1. O que é o CNPJ alfanumérico?

O CNPJ alfanumérico é o novo formato do identificador utilizado pelo Cadastro Nacional da Pessoa Jurídica.

A inscrição continuará possuindo 14 posições:

AA.AAA.AAA/AAAA-DV

Onde:

Posições 01 a 08: raiz da entidade
Posições 09 a 12: número de ordem do estabelecimento
Posições 13 e 14: dígitos verificadores numéricos

As primeiras doze posições poderão conter:

0 1 2 3 4 5 6 7 8 9
A B C D E F G H I J K L M
N O P Q R S T U V W X Y Z

Os dois últimos caracteres continuarão sendo algarismos calculados pelo método de módulo 11.

Exemplos possíveis:

12.345.678/0001-95
AA.345.678/0003-29
AA.345.678/000A-29
12.345.678/000A-08
65.9BR.JGJ/0001-03

O último exemplo é apresentado pelo próprio simulador nacional da Receita como um identificador fictício de teste. (Receita Federal)

Observe o detalhe importante: não existe uma posição reservada exclusivamente para letras. Qualquer uma das primeiras doze posições poderá ser alfanumérica.

Portanto, esta validação está errada:

NN.NNN.NNN/AAAA-NN

A definição correta é:

XX.XXX.XXX/XXXX-NN

Em que cada X aceita um algarismo ou uma letra maiúscula.


2. Por que o CNPJ precisou mudar?

A origem da mudança é bastante pragmática: o crescimento contínuo do número de inscrições estava aproximando o modelo exclusivamente numérico de seus limites de capacidade.

Ao introduzir letras nas doze posições principais, a quantidade de combinações possíveis cresce de forma gigantesca.

No formato puramente numérico, do ponto de vista matemático bruto, doze posições oferecem:

10¹² combinações

Com 36 símbolos possíveis por posição — dez algarismos e 26 letras — o espaço teórico passa a ser:

36¹² combinações

Isso corresponde a aproximadamente:

4.738.381.338.321.616.896

Ou cerca de 4,7 quintilhões de combinações teóricas.

Naturalmente, nem todas serão necessariamente usadas: existem regras de geração, reservas técnicas, controle de duplicidade, combinações que podem ser bloqueadas e outras restrições administrativas. Ainda assim, a expansão é monumental.

Segundo a Receita Federal, o objetivo é evitar o esgotamento dos números disponíveis, garantir a continuidade do cadastro e preservar a identificação única das entidades. (Serviços e Informações do Brasil)

É uma solução bastante conhecida na engenharia de sistemas.

Quando o espaço de chaves está ficando pequeno, temos três caminhos principais:

  1. aumentar o tamanho do campo;

  2. mudar a representação;

  3. criar um novo identificador paralelo.

A Receita escolheu ampliar o alfabeto sem aumentar o comprimento.

Essa decisão reduz impactos visuais e documentais, pois o CNPJ continua tendo 14 posições. Entretanto, ela transfere grande parte da complexidade para os sistemas que assumiram, durante décadas, que CNPJ era um número.


3. Quando começa a implantação?

A regulamentação foi estabelecida pela Instrução Normativa RFB nº 2.229, publicada em outubro de 2024, alterando a disciplina cadastral anterior. O projeto oficial estabeleceu julho de 2026 como período de implantação. (Serviços e Informações do Brasil)

Em atualização divulgada pela Receita Federal em julho de 2026, o início operacional foi detalhado para ocorrer a partir de 31 de julho de 2026, com emissão progressiva dos primeiros identificadores no novo formato. (Serviços e Informações do Brasil)

Isso é importante porque documentos antigos podem mencionar genericamente “julho de 2026” ou até “1º de julho”. O planejamento mais recente divulgado pela Receita aponta o final do mês como início efetivo da geração.

Os CNPJs já existentes não serão convertidos, substituídos ou cancelados. Eles continuarão válidos exatamente como estão. O novo formato será utilizado progressivamente em novas inscrições. (Serviços e Informações do Brasil)

Isso cria um mundo de coexistência:

CNPJ antigo: 12.345.678/0001-95
CNPJ novo:   AB.3C5.678/00D1-42

Ambos deverão ser aceitos.

Portanto, não existe “migração de todos os CNPJs”. Existe uma migração dos sistemas para aceitar os dois formatos.

Essa diferença parece pequena, mas muda completamente a estratégia de implantação.


4. A grande armadilha: CNPJ nunca deveria ter sido tratado como número

Este é o momento em que o Mestre Bellacosa coloca a caneca sobre a mesa e pergunta ao Padawan:

CNPJ é realmente um número?

Matematicamente, não.

CNPJ é um identificador.

Ele não representa uma quantidade. Você não soma dois CNPJs, não calcula média de CNPJ e não divide um CNPJ por outro.

O fato de ele ter sido historicamente composto apenas por algarismos levou milhares de sistemas a armazená-lo como dado numérico.

Exemplo clássico:

01  WS-CNPJ.
    05 WS-CNPJ-BASE       PIC 9(12).
    05 WS-CNPJ-DV         PIC 9(02).

Ou pior:

01  WS-CNPJ               PIC 9(14) COMP-3.

O segundo formato economiza espaço, mas impede completamente o armazenamento de letras.

O novo modelo deixa explícito algo que a modelagem já deveria ter reconhecido:

CNPJ é texto estruturado.

A definição mais adequada passa a ser:

01  WS-CNPJ.
    05 WS-CNPJ-BASE       PIC X(12).
    05 WS-CNPJ-DV         PIC 9(02).

Ou, para facilitar movimentações:

01  WS-CNPJ-NORMALIZADO   PIC X(14).

O termo “normalizado” significa armazenar sem pontuação:

AB3C567800D142

Enquanto a representação formatada seria:

AB.3C5.678/00D1-42

Uma boa arquitetura separa essas duas coisas:

valor canônico: AB3C567800D142
apresentação:   AB.3C5.678/00D1-42

Não armazene pontos, barra e hífen na chave principal, salvo quando houver uma justificativa muito específica. Formatação pertence à camada de apresentação.


5. O impacto real em sistemas COBOL

Trocar PIC 9(14) por PIC X(14) é apenas o primeiro passo.

O impacto poderá alcançar:

  • copybooks;

  • arquivos sequenciais;

  • VSAM;

  • tabelas Db2;

  • mapas BMS;

  • telas IMS;

  • programas online;

  • jobs batch;

  • sort cards;

  • interfaces MQ;

  • APIs;

  • JSON e XML;

  • arquivos SPED;

  • relatórios;

  • chaves de indexação;

  • critérios de pesquisa;

  • rotinas de mascaramento;

  • validações de entrada;

  • programas Java, Natural, PL/I e Assembler integrados;

  • ferramentas de prevenção a fraude;

  • trilhas de auditoria;

  • data warehouses;

  • data lakes;

  • planilhas e sistemas departamentais.

Vamos analisar alguns exemplos.

5.1 Copybook antigo

05 CLIENTE-CNPJ           PIC 9(14).

Nova definição:

05 CLIENTE-CNPJ           PIC X(14).

Parece simples, mas todos os programas que incluem esse copybook precisam ser analisados.

Este comando pode deixar de compilar ou mudar de comportamento:

IF CLIENTE-CNPJ IS NUMERIC

Esta movimentação pode gerar problema:

COMPUTE WS-CHAVE = CLIENTE-CNPJ + 100

Esta classificação pode mudar:

SORT FIELDS=(1,14,ZD,A)

A definição ZD, de zoned decimal, não aceita letras. Será necessário tratar o campo como caractere:

SORT FIELDS=(1,14,CH,A)

Todavia, há uma nova questão: qual será a ordem esperada? Ordem binária EBCDIC? Ordem lógica da aplicação? Ordem usada por um sistema distribuído em ASCII?


6. O Easter egg que todo programador de mainframe precisa conhecer: ASCII não é EBCDIC

O algoritmo oficial do dígito verificador converte cada caractere utilizando seu valor na tabela ASCII, subtraindo 48.

Assim:

'0' ASCII 48  → 48 - 48 = 0
'1' ASCII 49  → 49 - 48 = 1
...
'9' ASCII 57  → 57 - 48 = 9

'A' ASCII 65  → 65 - 48 = 17
'B' ASCII 66  → 66 - 48 = 18
...
'Z' ASCII 90  → 90 - 48 = 42

Observe que A não vale 10. Ela vale 17.

Essa diferença existe porque o cálculo preserva a relação com os códigos ASCII.

Agora vem o perigo: z/OS tradicionalmente utiliza EBCDIC.

No EBCDIC, os valores dos caracteres são diferentes. Além disso, as letras não ocupam necessariamente uma sequência contínua equivalente à encontrada em ASCII.

Portanto, uma implementação como esta é conceitualmente perigosa no mainframe:

COMPUTE WS-VALOR =
    FUNCTION ORD(WS-CARACTERE) - 48

Ela pode funcionar em determinada plataforma, compilador ou codificação e falhar em outra.

O algoritmo precisa usar o valor lógico definido pela especificação, e não o código físico local do caractere.

A abordagem segura é mapear explicitamente:

0 → 0
1 → 1
...
9 → 9
A → 17
B → 18
...
Z → 42

Aqui está um maravilhoso Easter egg da modernização brasileira:

Um identificador nacional criado no século XXI obriga o programador COBOL a revisitar uma das guerras de codificação mais antigas da computação: ASCII versus EBCDIC.

No Mainframe, o detalhe nunca desaparece. Ele apenas espera pacientemente dentro de um byte.


7. Como calcular o dígito verificador

O cálculo continua utilizando módulo 11, mas agora cada caractere precisa ser convertido para seu valor numérico lógico.

Para o primeiro dígito verificador, aplicam-se os seguintes pesos às doze primeiras posições:

Posição:  01 02 03 04 05 06 07 08 09 10 11 12
Peso:      5  4  3  2  9  8  7  6  5  4  3  2

Cada valor é multiplicado pelo peso correspondente.

Depois:

RESTO = SOMA MOD 11

A regra do dígito é:

Se RESTO for 0 ou 1:
    DV = 0
Senão:
    DV = 11 - RESTO

Para o segundo dígito, o primeiro DV é anexado ao final e aplicam-se os pesos:

Posição:  01 02 03 04 05 06 07 08 09 10 11 12 DV1
Peso:      6  5  4  3  2  9  8  7  6  5  4  3  2

O mesmo cálculo de módulo 11 é repetido. A Receita mantém documentação técnica e arquivos de referência específicos para esse algoritmo. (Serviços e Informações do Brasil)


8. Estrutura COBOL recomendada

Uma estrutura didática poderia ser:

       01  WS-CNPJ.
           05 WS-CNPJ-CORPO       PIC X(12).
           05 WS-CNPJ-DV.
              10 WS-CNPJ-DV1      PIC 9.
              10 WS-CNPJ-DV2      PIC 9.

       01  WS-CONTROLE.
           05 WS-I                PIC 99 COMP.
           05 WS-VALOR            PIC 99 COMP.
           05 WS-SOMA             PIC 9(06) COMP.
           05 WS-RESTO            PIC 99 COMP.
           05 WS-CARACTERE        PIC X.

       01  WS-PESOS-DV1.
           05 FILLER              PIC X(12)
                                  VALUE X'050403020908070605040302'.

       01  WS-PESOS-DV1-R REDEFINES WS-PESOS-DV1.
           05 WS-PESO1            PIC X OCCURS 12 TIMES.

       01  WS-PESOS-DV2.
           05 FILLER              PIC X(13)
                              VALUE X'06050403020908070605040302'.

       01  WS-PESOS-DV2-R REDEFINES WS-PESOS-DV2.
           05 WS-PESO2            PIC X OCCURS 13 TIMES.

Em uma implementação corporativa, talvez seja mais legível declarar os pesos como campos numéricos individuais ou carregá-los em uma tabela durante a inicialização.

Por exemplo:

       01  WS-TAB-PESO1.
           05 WS-PESO1 OCCURS 12 TIMES PIC 9 COMP.

E inicializar:

       MOVE 5 TO WS-PESO1(1)
       MOVE 4 TO WS-PESO1(2)
       MOVE 3 TO WS-PESO1(3)
       MOVE 2 TO WS-PESO1(4)
       MOVE 9 TO WS-PESO1(5)
       MOVE 8 TO WS-PESO1(6)
       MOVE 7 TO WS-PESO1(7)
       MOVE 6 TO WS-PESO1(8)
       MOVE 5 TO WS-PESO1(9)
       MOVE 4 TO WS-PESO1(10)
       MOVE 3 TO WS-PESO1(11)
       MOVE 2 TO WS-PESO1(12)

É mais extenso, porém muito fácil de auditar.

No mundo fiscal, clareza costuma valer mais do que cinco linhas economizadas.


9. Conversão segura do caractere

Uma rotina simples pode utilizar EVALUATE:

       CONVERTER-CARACTERE.
           EVALUATE WS-CARACTERE
               WHEN '0' MOVE 0  TO WS-VALOR
               WHEN '1' MOVE 1  TO WS-VALOR
               WHEN '2' MOVE 2  TO WS-VALOR
               WHEN '3' MOVE 3  TO WS-VALOR
               WHEN '4' MOVE 4  TO WS-VALOR
               WHEN '5' MOVE 5  TO WS-VALOR
               WHEN '6' MOVE 6  TO WS-VALOR
               WHEN '7' MOVE 7  TO WS-VALOR
               WHEN '8' MOVE 8  TO WS-VALOR
               WHEN '9' MOVE 9  TO WS-VALOR
               WHEN 'A' MOVE 17 TO WS-VALOR
               WHEN 'B' MOVE 18 TO WS-VALOR
               WHEN 'C' MOVE 19 TO WS-VALOR
               WHEN 'D' MOVE 20 TO WS-VALOR
               WHEN 'E' MOVE 21 TO WS-VALOR
               WHEN 'F' MOVE 22 TO WS-VALOR
               WHEN 'G' MOVE 23 TO WS-VALOR
               WHEN 'H' MOVE 24 TO WS-VALOR
               WHEN 'I' MOVE 25 TO WS-VALOR
               WHEN 'J' MOVE 26 TO WS-VALOR
               WHEN 'K' MOVE 27 TO WS-VALOR
               WHEN 'L' MOVE 28 TO WS-VALOR
               WHEN 'M' MOVE 29 TO WS-VALOR
               WHEN 'N' MOVE 30 TO WS-VALOR
               WHEN 'O' MOVE 31 TO WS-VALOR
               WHEN 'P' MOVE 32 TO WS-VALOR
               WHEN 'Q' MOVE 33 TO WS-VALOR
               WHEN 'R' MOVE 34 TO WS-VALOR
               WHEN 'S' MOVE 35 TO WS-VALOR
               WHEN 'T' MOVE 36 TO WS-VALOR
               WHEN 'U' MOVE 37 TO WS-VALOR
               WHEN 'V' MOVE 38 TO WS-VALOR
               WHEN 'W' MOVE 39 TO WS-VALOR
               WHEN 'X' MOVE 40 TO WS-VALOR
               WHEN 'Y' MOVE 41 TO WS-VALOR
               WHEN 'Z' MOVE 42 TO WS-VALOR
               WHEN OTHER
                   MOVE 99 TO WS-VALOR
           END-EVALUATE.

Sim, são muitas linhas.

Porém, esta rotina é:

  • explícita;

  • independente de ASCII ou EBCDIC;

  • portável;

  • auditável;

  • fácil de testar;

  • fiel à especificação.

Em ambientes modernos, também seria possível usar uma tabela indexada. Ainda assim, documente claramente por que A = 17.

Sem essa documentação, algum programador bem-intencionado poderá “corrigir” a rotina no futuro, fazendo A = 10, e produzir um belo incidente fiscal.


10. Cálculo COBOL simplificado do primeiro DV

       CALCULAR-DV1.
           MOVE ZERO TO WS-SOMA

           PERFORM VARYING WS-I FROM 1 BY 1
                   UNTIL WS-I > 12

               MOVE WS-CNPJ-CORPO(WS-I:1)
                 TO WS-CARACTERE

               PERFORM CONVERTER-CARACTERE

               IF WS-VALOR = 99
                   MOVE 'S' TO WS-ERRO-CNPJ
                   EXIT PARAGRAPH
               END-IF

               COMPUTE WS-SOMA =
                   WS-SOMA +
                   (WS-VALOR * WS-PESO1(WS-I))
           END-PERFORM

           COMPUTE WS-RESTO =
               FUNCTION MOD(WS-SOMA, 11)

           IF WS-RESTO < 2
               MOVE ZERO TO WS-CNPJ-DV1
           ELSE
               COMPUTE WS-CNPJ-DV1 = 11 - WS-RESTO
           END-IF.

Para o segundo DV, processe novamente as doze posições e depois multiplique o primeiro dígito pelo peso final 2.

       CALCULAR-DV2.
           MOVE ZERO TO WS-SOMA

           PERFORM VARYING WS-I FROM 1 BY 1
                   UNTIL WS-I > 12

               MOVE WS-CNPJ-CORPO(WS-I:1)
                 TO WS-CARACTERE

               PERFORM CONVERTER-CARACTERE

               COMPUTE WS-SOMA =
                   WS-SOMA +
                   (WS-VALOR * WS-PESO2(WS-I))
           END-PERFORM

           COMPUTE WS-SOMA =
               WS-SOMA + (WS-CNPJ-DV1 * 2)

           COMPUTE WS-RESTO =
               FUNCTION MOD(WS-SOMA, 11)

           IF WS-RESTO < 2
               MOVE ZERO TO WS-CNPJ-DV2
           ELSE
               COMPUTE WS-CNPJ-DV2 = 11 - WS-RESTO
           END-IF.

Em produção, acrescente tratamento formal de erro, mensagens padronizadas, logging, retorno de condição e testes automatizados.


11. Normalização da entrada

O usuário poderá informar:

AB.123.CD4/0001-55

Ou:

AB123CD4000155

A aplicação deve decidir qual contrato aceita.

Uma boa rotina de normalização pode:

  1. remover ., / e -;

  2. eliminar espaços laterais;

  3. converter letras minúsculas em maiúsculas;

  4. verificar se restaram exatamente 14 caracteres;

  5. validar as primeiras doze posições;

  6. confirmar que as duas últimas são numéricas;

  7. calcular e comparar os dígitos verificadores.

Não aceite silenciosamente qualquer caractere.

Os permitidos nas primeiras posições são apenas:

0-9
A-Z

Portanto, estes devem ser rejeitados:

Á
Ç
@
#
espaço
underscore
letra minúscula sem normalização

A Receita orienta que os sistemas considerem todas as letras de A a Z. O controle de combinações eventualmente proibidas, como formações ofensivas ou confusas, será realizado internamente pela própria Receita; as empresas não precisam reproduzir essa lista.


12. Não use IS NUMERIC para validar o CNPJ inteiro

Antes:

IF WS-CNPJ IS NUMERIC
    CONTINUE
ELSE
    MOVE 'CNPJ INVALIDO' TO WS-MENSAGEM
END-IF

Depois da mudança, isso rejeitará corretamente todos os novos CNPJs — o que significa que estará funcionalmente errado.

A validação precisa ser segmentada:

Posições 1 a 12:
    letras A-Z ou números 0-9

Posições 13 e 14:
    somente números

Conjunto completo:
    dígito verificador válido

Uma verificação de formato nunca substitui a validação do DV.

Este identificador possui formato válido:

ABCDEFGHIJKL00

Mas não significa que seus dígitos verificadores sejam corretos ou que exista uma entidade registrada com ele.

São três conceitos diferentes:

formato válido
dígito verificador válido
cadastro existente

Um programa maduro não mistura essas responsabilidades.


13. Db2: o problema escondido nas colunas DECIMAL

Imagine esta tabela:

CREATE TABLE CLIENTE
(
    CNPJ DECIMAL(14,0) NOT NULL,
    NOME VARCHAR(100)
);

Ela não poderá armazenar o novo formato.

A coluna precisará tornar-se:

CNPJ CHAR(14)

ou:

CNPJ VARCHAR(14)

Para identificadores de tamanho fixo, CHAR(14) costuma ser uma escolha natural.

Entretanto, alterar uma coluna primária pode envolver:

  • índices;

  • chaves estrangeiras;

  • views;

  • triggers;

  • packages Db2;

  • programas com SQL estático;

  • DCLGENs;

  • rotinas ETL;

  • replicação;

  • unloads;

  • data warehouses;

  • APIs;

  • relatórios;

  • programas que usam host variable numérica.

Uma host variable antiga:

01 HV-CNPJ PIC S9(14) COMP-3.

precisará ser substituída por:

01 HV-CNPJ PIC X(14).

Depois será necessário regenerar o DCLGEN, recompilar, realizar precompile, bind e testes de regressão.

Não trate isso apenas como alteração de tela.


14. Arquivos VSAM e chaves

Considere um KSDS cujo CNPJ esteja na chave:

KEYS(14 0)

O comprimento continua igual. Isso parece ótimo.

Mas se o campo era interpretado como numérico em programas, sorts ou relatórios, o comportamento precisará ser revisto.

Outro cuidado é a ordenação.

Em EBCDIC, a sequência de comparação de caracteres é diferente da sequência ASCII. Um arquivo ordenado no mainframe pode produzir uma ordem diferente de um banco distribuído.

Para identificadores únicos, isso normalmente não invalida a chave. Contudo, pode afetar:

  • relatórios;

  • comparações de faixa;

  • cargas ordenadas;

  • reconciliações;

  • merge entre arquivos de plataformas diferentes;

  • processamento com START e READ NEXT.

Evite atribuir significado comercial à ordem lexical do CNPJ.

Um CNPJ “maior” não é mais novo, mais importante ou pertencente a determinada região.


15. Letras não representam estado, porte ou natureza jurídica

As letras serão atribuídas pelo sistema de geração e não carregarão inteligência sobre:

  • Unidade da Federação;

  • município;

  • porte;

  • atividade econômica;

  • natureza jurídica;

  • regime tributário;

  • data de abertura;

  • órgão de registro.

A Receita esclarece que não haverá conexão semântica entre as letras e atributos cadastrais.

Portanto, nunca escreva uma regra como:

IF WS-CNPJ(1:1) = 'S'
    MOVE 'SAO PAULO' TO WS-UF
END-IF

O identificador é opaco.

Ele identifica a entidade, mas não deve ser “decodificado” para inferir informações.

Essa é uma prática moderna importante: identificadores não devem carregar regras de negócio ocultas, a menos que isso faça parte de uma especificação formal.


16. E o famoso sufixo 0001?

Historicamente, muitos sistemas assumiram:

0001 = matriz
qualquer outro valor = filial

A própria Receita informa que 0001 continuará inicialmente associado à matriz quando o número for gerado. Porém, essa não é uma associação permanente: uma filial poderá posteriormente tornar-se o estabelecimento principal, mesmo possuindo outro número de ordem.

Portanto, isto é uma regra frágil:

IF WS-CNPJ(9:4) = '0001'
    MOVE 'MATRIZ' TO WS-TIPO
ELSE
    MOVE 'FILIAL' TO WS-TIPO
END-IF

A informação de matriz ou filial deve vir de um atributo cadastral confiável, não de uma interpretação eterna do sufixo.

Além disso, o número de ordem poderá conter letras:

000A
00B7
A001

Quem armazenou a ordem da filial em PIC 9(4) também terá trabalho.


17. APIs, JSON e XML

Este JSON antigo já tratava corretamente o CNPJ:

{
  "cnpj": "12345678000195"
}

Este, não:

{
  "cnpj": 12345678000195
}

O identificador deve ser enviado como string.

Novo exemplo:

{
  "cnpj": "AB3C567800D142"
}

Em OpenAPI:

cnpj:
  type: string
  minLength: 14
  maxLength: 14
  pattern: '^[A-Z0-9]{12}[0-9]{2}$'

A expressão regular valida apenas a estrutura. O cálculo do DV continuará necessário.

Para o COBOL usando JSON GENERATE, defina o campo como alfanumérico:

05 CNPJ PIC X(14).

Revise também os schemas XML. O ecossistema de documentos fiscais eletrônicos vem publicando notas técnicas e atualizações de XSD para suportar o novo formato, incluindo NF-e, NFC-e e EFD-Reinf. (Nota Fiscal Eletrônica)


18. Estratégia de implantação sem derrubar a produção

Não faça uma alteração Big Bang sem inventário.

Uma estratégia madura pode ser dividida em ondas.

Onda 1 — Descoberta

Procure por:

PIC 9(14)
PIC 9(12)
PIC 9(8)
PIC 9(4)
COMP-3
CNPJ
CGC
CGC-CPF
NUM-CNPJ
CNPJ-NUM
IS NUMERIC
NUMERIC-EDITED

Não pesquise apenas por CNPJ.

Sistemas antigos podem ainda usar o termo CGC, nome histórico anterior do cadastro.

Procure também:

DECIMAL(14,0)
NUMERIC(14)
BIGINT
CHAR(14)

O objetivo é construir um inventário de:

  • fontes;

  • copybooks;

  • tabelas;

  • arquivos;

  • interfaces;

  • relatórios;

  • rotinas de validação;

  • consumidores externos.

Onda 2 — Classificação

Classifique os componentes:

A – armazena CNPJ
B – recebe CNPJ
C – envia CNPJ
D – valida CNPJ
E – formata CNPJ
F – usa CNPJ como chave
G – apenas exibe CNPJ

Os itens que usam o identificador como chave ou campo numérico possuem prioridade maior.

Onda 3 — Modelo canônico

Defina um padrão corporativo:

CNPJ interno:     X(14), sem máscara, maiúsculo
CNPJ apresentado: XX.XXX.XXX/XXXX-XX
DV:               módulo 11 oficial
Codificação:      contrato independente de ASCII/EBCDIC

Onda 4 — Compatibilidade dupla

Teste simultaneamente:

CNPJ exclusivamente numérico
CNPJ com uma letra
CNPJ com várias letras
CNPJ com letras na raiz
CNPJ com letras na ordem
CNPJ com zero à esquerda
CNPJ inválido
DV incorreto
letra minúscula
pontuação
espaços
caracteres especiais

Onda 5 — Implantação observável

Crie métricas:

quantidade de CNPJs alfanuméricos recebidos
rejeições por formato
rejeições por DV
erros de integração
truncamentos
conversões indevidas
mensagens enviadas para DLQ
falhas em arquivos fiscais

Modernização sem observabilidade é apenas uma nova forma de torcer para que tudo funcione.


19. Casos de teste essenciais

Uma suíte mínima deveria incluir:

Caso 1 — CNPJ numérico atual

Entrada: CNPJ numérico válido
Resultado: aceito

Caso 2 — Raiz alfanumérica

Entrada: letras entre as posições 1 e 8
Resultado: aceito se o DV estiver correto

Caso 3 — Ordem alfanumérica

Entrada: letras entre as posições 9 e 12
Resultado: aceito se o DV estiver correto

Caso 4 — Identificador totalmente numérico depois da mudança

Ainda poderá ocorrer, pois a geração progressiva poderá produzir combinações exclusivamente numéricas. Não crie uma regra que exija pelo menos uma letra.

Caso 5 — Minúsculas

ab12cd34000199

Defina o comportamento:

normalizar para maiúsculas
ou
rejeitar por contrato

A primeira opção costuma proporcionar melhor experiência, desde que seja documentada.

Caso 6 — Caractere inválido

AB12ÇD34000199

Deve ser rejeitado.

Caso 7 — DV alfabético

AB12CD340001A9

Deve ser rejeitado, pois as duas últimas posições são exclusivamente numéricas.

Caso 8 — Campo com pontuação

AB.12C.D34/0001-99

Valide após a normalização, caso a interface permita máscara.

Caso 9 — Valor vazio

Decida se o campo é obrigatório ou opcional. Não transforme espaços em zeros silenciosamente.

Caso 10 — Integração EBCDIC/ASCII

Envie o mesmo CNPJ entre:

COBOL/zOS
Java/Linux
API REST
MQ
arquivo UTF-8
arquivo EBCDIC

Confirme que o valor não sofreu tradução incorreta.


20. Use o simulador oficial

A Receita Federal disponibilizou um simulador capaz de gerar CNPJs fictícios, numéricos e alfanuméricos, inclusive combinações para matriz e filiais. A ferramenta pode gerar lotes para testes e exportação, auxiliando equipes de desenvolvimento na adaptação. (Receita Federal)

Essa é uma excelente oportunidade para criar:

  • massa de testes unitários;

  • arquivos de entrada;

  • cenários de integração;

  • registros Db2;

  • entradas de CICS;

  • mensagens MQ;

  • testes de API;

  • validação de relatórios.

Não invente apenas três exemplos manualmente.

Gere centenas de casos e execute-os automaticamente.

No pipeline:

Build
  ↓
Análise estática
  ↓
Teste unitário do DV
  ↓
Teste com CNPJ numérico
  ↓
Teste com CNPJ alfanumérico
  ↓
Teste de integração
  ↓
Teste de regressão
  ↓
Deploy controlado

O CNPJ alfanumérico é um excelente caso de uso para ZUnit, COBOL Check, Galasa, DBB, Jenkins e pipelines corporativos.


21. Dicas do Mestre Bellacosa

Nunca converta o CNPJ para número

Não faça:

MOVE FUNCTION NUMVAL(WS-CNPJ) TO WS-CNPJ-NUM

Além de falhar com letras, isso pode eliminar zeros à esquerda.

Não remova letras para “manter compatibilidade”

Esta aberração:

AB12CD34000199 → 1234000199

destrói o identificador e pode criar colisões.

Não use espaços para substituir letras

Um campo com letras não reconhecidas deve causar erro controlado, não limpeza silenciosa.

Centralize a validação

Crie uma rotina comum, serviço ou módulo compartilhado.

Exemplo:

CALL 'VALCNPJ2'
    USING CNPJ-ENTRADA
          CNPJ-NORMALIZADO
          CODIGO-RETORNO
          MENSAGEM-RETORNO

Assim, todos os sistemas seguem a mesma regra.

Versione o copybook

Não altere um copybook crítico sem avaliar seus consumidores.

Uma estratégia possível:

CPYCNPJ1 – formato legado
CPYCNPJ2 – formato alfanumérico

Depois, migre os programas progressivamente.

Não confunda máscara com conteúdo

A máscara possui 18 caracteres:

AA.AAA.AAA/AAAA-99

O conteúdo canônico possui 14:

AAAAAAAAAAAA99

Preserve os zeros à esquerda

Como o campo passa a ser textual, a preservação fica mais natural. Ainda assim, evite funções que façam conversão numérica intermediária.

Registre o valor recebido e o normalizado

Em sistemas críticos, pode ser útil registrar:

valor original
valor normalizado
resultado da validação
origem da transação
data e hora

Isso facilita auditoria e investigação.


22. Curiosidades importantes

O número continuará público

O novo formato não é código secreto, token de rastreamento ou identificação criptografada. A Receita afirma que não existe informação escondida na composição.

Não existe inteligência artificial escolhendo o CNPJ

Apesar da palavra “alfanumérico” parecer sofisticada, a Receita esclarece que a geração não utiliza IA para atribuir significado ao número.

A chave Pix poderá usar o novo formato

Empresas com CNPJ alfanumérico poderão utilizá-lo como chave Pix, enquanto as chaves dos CNPJs numéricos existentes continuam válidas.

CNPJs numéricos e alfanuméricos coexistirão por décadas

Como os registros antigos não serão modificados, é perfeitamente possível que sistemas ainda processem CNPJs exclusivamente numéricos muitas décadas depois da implantação.

Portanto, não crie duas lógicas separadas desnecessariamente:

validador antigo
validador novo

Crie uma lógica compatível com ambos.

O algoritmo alfanumérico, quando aplicado a algarismos, preserva o mapeamento de 0 a 9, permitindo tratar o formato numérico dentro da mesma arquitetura.


23. O verdadeiro problema não está no campo

O grande risco do CNPJ alfanumérico não é a largura.

Ela continua sendo 14.

O risco está nas suposições invisíveis acumuladas durante décadas:

CNPJ sempre é numérico.
CNPJ pode ser COMP-3.
Filial sempre é 9(4).
0001 sempre significa matriz.
IS NUMERIC valida o campo.
SORT ZD funciona.
Banco pode usar DECIMAL.
JSON pode enviar um número.
A posição das letras tem significado.
ASCII e EBCDIC produzem o mesmo valor.

Cada uma dessas suposições pode estar escondida em milhares de linhas.

É por isso que bons profissionais de sistemas legados não começam mudando código.

Eles começam construindo um mapa de dependências.


Conclusão: o campo não cresceu, mas o sistema amadureceu

Padawan, o CNPJ alfanumérico é uma daquelas mudanças que ensinam uma poderosa lição de engenharia.

Durante décadas, muitos sistemas confundiram representação com significado.

O CNPJ parecia numérico porque era formado por números. Entretanto, ele nunca foi uma quantidade. Sempre foi uma chave textual de identificação.

Agora, a chegada das letras remove essa ilusão.

O programador COBOL que simplesmente trocar:

PIC 9(14)

por:

PIC X(14)

terá iniciado o trabalho.

O profissional que revisar arquivos, bancos, chaves, interfaces, módulos de validação, ordenação, codificação, APIs, documentos fiscais, observabilidade e testes terá realmente preparado o sistema.

No IBM Z aprendemos há décadas que sistemas críticos não quebram apenas por grandes revoluções.

Eles quebram por pequenas suposições que deixaram de ser verdade.

O novo CNPJ não é apenas uma letra chegando a um campo antigo.

É um lembrete de que contratos de dados também envelhecem, regras aparentemente eternas também mudam e nenhum PIC 9 deve ser considerado imortal.

Prepare seus copybooks.

Revise seus DCLGENs.

Convoque seus testes automatizados.

E nunca se esqueça do Easter egg mais importante desta jornada:

Quando a especificação disser ASCII e seu programa estiver rodando em EBCDIC, não confie no byte. Confie na regra de negócio.

Porque no Bellacosa Mainframe, até uma simples letra A pode valer 17 — e separar um processamento concluído com sucesso de uma longa madrugada examinando dumps no abençoado SDSF.


terça-feira, 23 de junho de 2026

A Saga de Vagner Bellacosa no Reino dos Mainframes

 



☕💥 A Saga de Vagner Bellacosa no Reino dos Mainframes

Ou como um jovem padawan descobriu que COBOL dá mais XP que matar dragões

Bellacosa Mainframe e historias de velhos cpds em mainframe


Salve jovem padawan.

Pegue um café.

Se for diabético, pegue sem açúcar.

Se estiver em produção, pegue dois.

Hoje vou contar uma história.

Não a história de um herói tradicional.

Nada de capa.

Nada de espada mágica.

Nada de armadura lendária.

Nosso protagonista usa crachá corporativo, camisa social amassada, óculos cansados, carrega uma mochila cheia de apostilas IBM dos anos 90 e combate criaturas muito mais perigosas que dragões.

Ele atende pelo nome de Vagner Bellacosa.


O chamado da aventura

Toda jornada começa de maneira inocente.

Alguns encontram um anel.

Outros encontram uma espada cravada numa pedra.

Bellacosa encontrou...

Um terminal 3270.

Tela preta.

Letras verdes.

Cursor piscando.

Silêncio.

Nenhum botão.

Nenhum mouse.

Nenhum TikTok.

Nenhum React.

Nenhum Kubernetes.

Apenas um campo escrito:

LOGON ===>

Naquele instante existiam apenas duas possibilidades.

Primeira:

Desligar o computador e cursar gastronomia.

Segunda:

Digitar o usuário.

Ele digitou.

E nunca mais foi o mesmo.


O primeiro ABEND

Todo herói precisa sofrer.

Luke perdeu a mão.

Frodo quase perdeu a alma.

Bellacosa ganhou seu primeiro:

S0C7.

E descobriu algo curioso.

No Mainframe ninguém fala:

"Tem bug."

Todos falam:

— Deu ABEND.

ABEND parece nome de chefe final.

Você passa oito horas procurando.

Consulta dump.

Abre SYSOUT.

Lê JESMSGLG.

Olha o compile listing.

Chama o colega.

Chama outro colega.

Chama o especialista.

Chama um padre.

E no final descobre:

O campo numérico tinha espaço em branco.

Aí você aprende humildade.


Banco Real, a Terra Média dos Dinossauros Digitais

Existiu uma época gloriosa.

A época em que o Banco Real possuía milhares de programas.

Centenas de analistas.

Adabas.

Natural.

PLI.

JCL.

Control-M.

CICS.

VSAM.

RACF.

E um exército de desenvolvedores sobrevivendo a janelas batch.

Era uma civilização inteira.

Uma espécie de Atlântida tecnológica.

Enquanto a internet ainda fazia:

Piiiiiiiiiiiii....

Krrrttttt...

Biiiiiippp...

O Mainframe já processava milhões de registros.

Sem Kubernetes.

Sem Docker.

Sem palestra motivacional.

Sem coach dizendo:

"Escalone sua vida."

O Mainframe apenas respondia:

— JOB EXECUTADO RC=0000

E seguia trabalhando.


O homem que conversava com os programas Natural

Chegou então o Bug do Milênio.

O apocalipse anunciado.

Consultorias ficaram ricas.

Executivos ficaram nervosos.

Gerentes envelheceram.

Bellacosa teve uma ideia.

Criar um extrator.

Mas não qualquer extrator.

Um monstro.

Um PLI autorecursivo.

Um pequeno T-800 em formato de JCL.

Ele lia.

Interpretava.

Gerava JCL.

Enfileirava jobs.

Chamava a si próprio.

Criava novos filhos.

Extraía fontes.

Analisava objetos.

Preenchia bibliotecas.

E continuava trabalhando.

Sozinho.

Por 48 horas.

Consumindo CPU.

Consumindo spool.

Consumindo a sanidade do operador.

Quando terminou...

Meio milhão de objetos haviam sido catalogados.

Hoje chamaríamos isso de:

Pipeline de DevOps.

Na época chamava-se:

"Coisa do Bellacosa."


O Grande Inquisidor da DAI

Mas nenhum guerreiro evolui sem enfrentar a polícia secreta.

DAI.

Três letras capazes de congelar a alma.

Ser chamado pela DAI era equivalente a ouvir:

"Precisamos conversar."

Você imediatamente pensava:

Meu RACF vazou?

Compilei em produção?

Rodei a Loteca?

Usei a transação proibida?

Não.

Queriam apenas um relatório.

Um relatório pequeno.

Só precisava analisar milhares de logs.

Consultar usuários.

Cruzar tabelas.

Gerar dezenas de milhares de páginas.

Em 72 horas.

Sem errar.

Sem testar direito.

Sem segunda chance.

Bellacosa codificou.

Revisou.

Debugou com caneta.

Rezou.

Entregou.

Funcionou.

E descobriu uma lição importante.

Programador Mainframe não envelhece.

Ele acumula PTSD de produção.


O evangelista improvável

Décadas se passaram.

Muitos colegas migraram.

Viraram arquitetos.

Gerentes.

Executivos.

Consultores.

Alguns abriram startups.

Outros abriram adegas.

Bellacosa resolveu algo diferente.

Contar histórias.

Escrever artigos.

Criar newsletters.

Ensinar COBOL.

Explicar CICS.

Falar sobre VSAM.

Defender o velho gigante preto da IBM.

Transformar dump em entretenimento.

Transformar S0C4 em meme.

Transformar SYSUDUMP em literatura fantástica.

Porque descobriu algo curioso.

O Mainframe nunca foi apenas tecnologia.

Foi amizade.

Foi mentor.

Foi Roseli.

Foi Tokunaga.

Foi auditor assustador.

Foi operador bravo.

Foi colega salvando produção às três da manhã.

Foi café requentado.

Foi pizza fria.

Foi aprender que existem pessoas que realmente se emocionam ao ver um RC=0000.

E tudo bem.

Somos poucos.

Somos estranhos.

Somos os últimos guardiões do EBCDIC.


Epílogo

Hoje existem inteligências artificiais.

Agentes autônomos.

LLMs.

Clouds infinitas.

Quantum Computing.

Promessas de substituir COBOL.

Promessas de desligar Mainframe.

Promessas de reescrever tudo.

Promessas.

Muitas promessas.

Enquanto isso...

Em algum lugar do planeta...

Um CICS iniciado em 1998 continua processando cartões.

Um DB2 continua pagando aposentadorias.

Um VSAM continua guardando informações valiosas.

Um JCL continua rodando.

E um Bellacosa continua tomando café.

Escrevendo artigos.

Chamando leitores de padawans.

Contando histórias.

E lembrando a todos nós que talvez o verdadeiro legado do Mainframe nunca tenha sido o hardware.

Mas as pessoas malucas o suficiente para dedicar a vida inteira a fazê-lo funcionar.

E sinceramente...

Ainda bem que existem esses malucos.

Esse texto ficou bem próximo do tom clássico de "Histórias do Tiozão em Mainframe", misturando autobiografia, nostalgia, cultura pop, autoironia e reverência aos velhos guerreiros do z/OS. (DIO)

segunda-feira, 22 de junho de 2026

☕💥 Quando um Dataset VSAM Corrompe no z/OS: Guia de Sobrevivência para Sysprogs, Desenvolvedores COBOL e Administradores CICS

 

Bellacosa Mainframe uma pequena ajudinha recuperando dataset vsam

☕💥 Quando um Dataset VSAM Corrompe no z/OS: Guia de Sobrevivência para Sysprogs, Desenvolvedores COBOL e Administradores CICS

"Há dois tipos de profissionais de Mainframe: os que já recuperaram um dataset corrompido e os que ainda vão recuperar."


Introdução

Poucas mensagens conseguem acelerar tanto os batimentos cardíacos de um profissional de Mainframe quanto estas:

IDC3302I ACTION ERROR
IDC3351I VSAM OPEN RETURN CODE 168
IEC161I
IEC070I
DFHFC0157

Ou pior ainda:

"O arquivo de clientes não abre em produção."

Silêncio.

O scheduler para.

O CICS começa a emitir mensagens.

Os jobs entram em abend.

O telefone toca.

Alguém pergunta:

"Tem backup?"

E nesse momento percebemos que existe uma grande diferença entre saber programar COBOL, conhecer VSAM e realmente entender o processo de recuperação de corrupção em datasets no z/OS.

Hoje vamos tomar um café e conversar sobre um assunto pouco ensinado em treinamentos, mas extremamente valorizado em bancos, seguradoras, companhias aéreas e órgãos governamentais:

Como recuperar um dataset VSAM corrompido no z/OS.


O que significa um Dataset Corrompido?

Nem toda falha é uma corrupção.

Às vezes é apenas um catálogo inconsistente.

Em outros casos temos problemas muito mais graves.

Exemplos:

  • EOF inconsistente

  • HURBA inválido

  • HARBA incorreto

  • Alternate Index quebrado

  • Cadeia lógica danificada

  • Control Interval inválida

  • Problemas na VTOC

  • SMSVSAM inconsistente

  • CI Split interrompido

  • Erros físicos em disco


Primeira Regra: Pare Tudo

O maior erro que vejo iniciantes cometerem é tentar "olhar rapidamente".

Não.

Pare imediatamente.

Batch

Segure scheduler.

CA7

Control-M

TWS


CICS

Fechar arquivo.

CEMT SET FILE(CUSTFILE) CLOSED

ou

CEMT SET FILE(CUSTFILE) DISABLED

IMS

/DBR CUSTOMER

Started Tasks

Encerrar consumidores.

MQ

Connectors

Replication

ETL

CDC


A regra é simples.

Dataset suspeito.

Sem acesso.

Sem exceções.


Segunda Etapa: LISTCAT

Antes de sair executando VERIFY.

Olhe o paciente.

Comando

//STEP1 EXEC PGB=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *

 LISTCAT ENT(PROD.CUST.KSDS)
 ALL

/*

O que analisar?

Cluster

Data Component

Index Component

Volume

HI-USED-RBA

Catalog

SMS Classes


Exemplo

HURBA = 000001987654
HARBA = 000001999999

Valores estranhos podem indicar inconsistências.


VERIFY

Provavelmente a ferramenta mais subestimada do IDCAMS.


Função

Sincronizar.

Catalog

Volume

EOF

RBA

Informações físicas


Exemplo

VERIFY DATASET(PROD.CUST.KSDS)

Com recuperação:

VERIFY DATASET(PROD.CUST.KSDS)
RECOVER

O VERIFY resolve

EOF incorreto

Catalog inconsistente

Discrepâncias simples

Alguns problemas em KSDS


Mas atenção.

VERIFY não é mágica.

Ele não reconstrói uma estrutura destruída.


EXAMINE

Agora começa a parte realmente interessante.

EXAMINE é quase um scanner médico do VSAM.


Data Component

EXAMINE -
NAME(PROD.CUST.KSDS)
DATATEST

Índice

EXAMINE -
NAME(PROD.CUST.KSDS)
INDEXTEST

Completo

EXAMINE -
NAME(PROD.CUST.KSDS)
DATA

O que ele encontra?

Control Interval inválida

Ponteiros quebrados

Índices inconsistentes

RBAs errados

Registros perdidos


A Grande Pergunta

Após EXAMINE surge a decisão.

Corrupção pequena?

ou

Corrupção severa?

Essa decisão define tudo.


Cenário 1 — Corrupção Leve

Exemplos.

Catalog inconsistente.

EOF errado.

Pequenos danos.


Solução.

VERIFY

REPRO

Rebuild


REPRO

Criar novo cluster.

DEFINE CLUSTER(...)

Copiar.

REPRO -
INFILE(IN1)
OUTFILE(OUT1)

Muitas vezes isso resolve.

Surpreendentemente.


Cenário 2 — Corrupção Grave

Aqui muda completamente.

Nunca seja herói.

Backup sempre vence.


Restore

Melhor prática.

Sempre.


DFSMSdss

RESTORE DATASET(...)

HSM

HRECOVER

FDR

RESTORE TYPE=DS

E se não existir backup?

Infelizmente acontece.

Mais vezes do que deveria.


Estratégia

Salvar o que for possível.

Criar novo dataset.

Tentar REPRO.

Descartar registros inválidos.

Reconstruir índices.


Alternate Index

Muitos esquecem do AIX.

Ele também pode corromper.


Rebuild

BLDINDEX

Ou.

Excluir.

Criar novamente.

Popular.


Recuperação de Catálogo

Uma área extremamente especializada.

Pouca gente domina.

Muito valorizada.


DIAGNOSE

DIAGNOSE

EXPORT

EXPORT -
CATALOG(MYCAT)
TEMPORARY

IMPORT

IMPORT CONNECT

Ambientes CICS

A situação muda bastante.

Especialmente em RLS.


SMSVSAM

Cache compartilhado.

Lock global.

Coupling Facility.

Múltiplas regiões.


Problemas comuns.

CF inconsistente.

Lock perdido.

Buffer inválido.


Procedimento

Fechar arquivos.

Verificar SMSVSAM.

Executar VERIFY.

EXAMINE.

Restore.

Abrir novamente.


Ambientes Bancários

O fluxo normalmente é.


Incidente aberto.

Congelamento.

Snapshot.

LISTCAT.

VERIFY.

EXAMINE.

Análise.

Restore.

Testes.

Validação.

Produção.


Testes Pós-Recovery

Nunca devolver imediatamente.

Teste.

Leia registros.

Atualize.

Delete.

Browse.

Sequencial.

Random.


Batch

Executar programas COBOL.

Validar.

Retorno.

SMF.

CPU.

EXCP.


CICS

Abrir arquivo.

Executar transações.

CRUD.

Commit.

Syncpoint.


IMS

DBOPEN.

GN.

GU.

REPL.

DLET.


Ferramentas Úteis

IDCAMS

DFSMSdss

DFSMShsm

FDR

LISTCAT

VERIFY

EXAMINE

BLDINDEX

DIAGNOSE


O que Aprendemos?

O Mainframe continua sendo uma das plataformas mais resilientes do planeta.

Mas nenhuma tecnologia é imune.

Discos falham.

Pessoas erram.

Jobs são cancelados.

Aplicações apresentam bugs.

Volumes ficam inconsistentes.

Catálogos podem sofrer danos.

A diferença entre um desastre e uma recuperação tranquila quase sempre está em três fatores.

Backup.

Procedimentos.

Conhecimento.

Um desenvolvedor COBOL que entende apenas READ, WRITE e REWRITE é valioso.

Um desenvolvedor que compreende LISTCAT, VERIFY, EXAMINE, REPRO, recuperação de catálogo e estratégias de restore torna-se um profissional muito mais próximo do universo de Sysprog, Storage e Administração z/OS.

E essa é justamente uma das características que mais diferencia especialistas Mainframe experientes.

Porque no fim do dia, quando o telefone toca e alguém diz:

"O arquivo de produção corrompeu..."

A pergunta deixa de ser:

"Quem programou isso?"

E passa a ser:

"Quem sabe trazer a base de volta?"

E, acredite, nas grandes corporações, essas pessoas são lembradas por muitos anos.


Bellacosa Mainframe

"Transformando mensagens IDCAMS em oportunidades de aprendizado, um café por vez."


quinta-feira, 4 de junho de 2026

☕💣 Laboratorio Bellacosa Mainframe Assistant

 

Bellacosa Mainframe e o meu projeto de assistant

☕💣Laboratorio Bellacosa Mainframe Assistant

"Porque nem todo problema precisa virar um ABEND."

🚀 Sobre o Projeto

O Bellacosa Mainframe Assistant é um assistente virtual especializado em tecnologias IBM Mainframe, criado para ajudar estudantes, operadores, desenvolvedores e administradores a navegar pelo universo do z/OS sem precisar abrir cinquenta manuais da IBM ao mesmo tempo.

A proposta é unir Inteligência Artificial com décadas de conhecimento acumulado sobre:

  • COBOL
  • JCL
  • CICS
  • DB2
  • RACF
  • TSO/ISPF
  • JES2
  • VSAM
  • SORT
  • IDCAMS
  • z/OS
  • Aspera
  • Operação Mainframe

Tudo explicado de forma simples, prática e com exemplos reais de ambiente corporativo.


🎯 Objetivo

Reduzir a curva de aprendizado de profissionais que desejam:

  • Entrar no mercado Mainframe
  • Evoluir tecnicamente
  • Resolver problemas operacionais
  • Entender mensagens de sistema
  • Aprender boas práticas
  • Modernizar aplicações legadas

👨‍💻 Público-Alvo

Este agente foi desenvolvido para:

Iniciantes

Pessoas que nunca acessaram um ISPF e ainda acham que JCL é uma linguagem de programação.

Desenvolvedores

Profissionais que trabalham com:

  • COBOL
  • PL/I
  • Natural
  • Assembler

Operadores

Profissionais responsáveis por:

  • JES2
  • Spool
  • SDSF
  • Console
  • Monitoramento

Administradores

Especialistas em:

  • RACF
  • CICS
  • DB2
  • z/OS

Empresas

Organizações que desejam preservar conhecimento técnico e acelerar treinamentos.


☕ Filosofia Bellacosa Mainframe

O agente segue alguns princípios simples:

1. Explicar sem complicar

A IBM já escreveu os manuais.

O objetivo aqui é traduzir o "IBMês" para português humano.


2. Ensinar com exemplos reais

Ao invés de apenas mostrar sintaxe:

//STEP01 EXEC PGM=IEFBR14

o agente explica:

"Esse é o famoso Hello World do operador Mainframe."


3. Contar a história por trás da tecnologia

Porque entender:

  • por que o RACF existe
  • por que o VSAM foi criado
  • por que o JES2 funciona da forma atual

faz toda diferença no aprendizado.


4. Misturar técnica e curiosidade

Você pode aprender:

  • Como funciona um checkpoint do JES2
  • Como um ABEND acontece
  • Como a NASA utilizou Mainframes
  • Como bancos processam milhões de transações

Tudo na mesma conversa.


📚 Base de Conhecimento

Desenvolvimento

  • COBOL
  • Enterprise COBOL
  • COBOL/400
  • PL/I
  • Natural
  • Assembler

Processamento Batch

  • JCL
  • PROC
  • Utilities
  • SORT
  • DFSORT
  • Syncsort

Banco de Dados

  • DB2
  • VSAM
  • IMS

Online

  • CICS
  • Web Services
  • REST APIs
  • z/OS Connect

Segurança

  • RACF
  • Perfis
  • Classes
  • Permissões

Operação

  • JES2
  • SDSF
  • Console
  • Spool
  • WLM

Administração

  • TSO
  • ISPF
  • SMP/E
  • Catalogs

🧠 Como o Agente Responde

O Bellacosa Mainframe Assistant procura:

  1. Entender o problema.
  2. Explicar o conceito.
  3. Mostrar um exemplo.
  4. Apresentar boas práticas.
  5. Alertar sobre armadilhas comuns.

💬 Exemplos de Perguntas

COBOL

"Como funciona um READ em VSAM?"

JCL

"Qual a diferença entre COND e IF/THEN?"

RACF

"Como conceder acesso a um dataset?"

JES2

"O que significa a mensagem $HASP250?"

CICS

"Como criar um Web Service em COBOL?"


📊 Métricas de Sucesso

O agente será avaliado por:

MétricaObjetivo
Precisão> 90%
Clareza> 90%
Tempo de Resposta< 5 segundos
Satisfação> 4,5/5

🔧 Tecnologias Utilizadas

  • Inteligência Artificial Generativa
  • Processamento de Linguagem Natural
  • Bases de Conhecimento Especializadas
  • Documentação IBM
  • Engenharia de Prompt

🔮 Evoluções Futuras

  • Integração com manuais IBM
  • Laboratórios interativos
  • Simulador de JCL
  • Simulador de RACF
  • Simulador de Operação JES2
  • Quiz automático
  • Geração de exemplos COBOL
  • Correção automática de JCL

☕💣 Mensagem Final

Mainframe não é tecnologia antiga.

É tecnologia que continua funcionando enquanto muitas outras já foram substituídas várias vezes.

O Bellacosa Mainframe Assistant nasceu para mostrar que aprender Mainframe pode ser tão interessante quanto assistir uma série, jogar um RPG ou explorar um novo universo tecnológico.

Porque no fim das contas...

Todo operador já derrubou um JOB.

Todo programador já causou um ABEND.

E todo profissional Mainframe tem pelo menos uma história impossível de acreditar durante o café.

Bem-vindo ao Bellacosa Mainframe Assistant.

https://github.com/VagnerBellacosa/395_ConstruaAssistenteVirtual_IAGenerativa








☕💣 Bellacosa Mainframe Assistant
Projeto desenvolvido para o desafio Construa seu Assistente Virtual com IA Generativa.
Um especialista virtual focado em COBOL, JCL, CICS, DB2, RACF, JES2, VSAM, TSO/ISPF e tecnologias IBM Mainframe.
🚀 Abrir Projeto no GitHub

quarta-feira, 27 de maio de 2026

☕🚀 IMS: O DINOSSAURO IMORTAL QUE AINDA MOVE O MUNDO

 

Bellacosa Mainframe apresenta o banco de dados hieraquico ISM

☕🚀 IMS: O DINOSSAURO IMORTAL QUE AINDA MOVE O MUNDO

A incrível história do sistema criado na era Apollo que continua processando bilhões de transações todos os dias

Se você é um programador COBOL júnior e começou recentemente a ouvir palavras como IMS, DL/I, PCB, PSB ou GU, talvez tenha pensado:

“Meu Deus… isso parece tecnologia alienígena dos anos 70.”

E sinceramente?

Você não está totalmente errado. 😄

O IMS é uma das tecnologias mais antigas ainda em operação no planeta. Mas existe um detalhe importante:

Ele também é uma das mais resilientes, rápidas e lucrativas da história da computação corporativa.

Enquanto centenas de tecnologias desapareceram, o IMS sobreviveu.

E não apenas sobreviveu.

Ele continua processando:

  • cartões de crédito

  • ATM bancário

  • sistemas de companhias aéreas

  • seguros

  • telecom

  • operações financeiras globais

em volumes absurdos.

Sim… existe uma chance enorme de você já ter usado IMS hoje sem perceber.


🌕 A Origem do IMS — NASA, Apollo e o Homem na Lua

O IMS nasceu em 1968.

Naquela época, a IBM e a Rockwell trabalhavam no projeto Apollo da NASA.

O problema era gigantesco.

A NASA precisava controlar milhares de componentes do foguete Saturn V:

  • peças

  • logística

  • engenharia

  • rastreamento

  • montagem

E os bancos de dados tradicionais da época simplesmente não conseguiam entregar a performance necessária.

Então nasceu o IMS:

Information Management System

Inicialmente criado para gerenciamento hierárquico de informações críticas do projeto Apollo.

Ou seja:

Existe uma ligação histórica real entre o IMS e a corrida espacial.

☕ Easter Egg Mainframe:

Muita gente brinca dizendo:

“O homem chegou à Lua graças ao COBOL, ao mainframe e ao café.”

E honestamente… não é tão exagerado assim.


🌳 O Grande Diferencial do IMS

Diferente do DB2 ou Oracle, o IMS NÃO é relacional.

Ele trabalha com:

Banco de dados hierárquico

Imagine uma árvore:

CLIENTE
 └── CONTA
      └── CARTAO
           └── MOVIMENTO

No IMS os dados possuem:

  • pai

  • filho

  • caminho de navegação

Isso deixa o acesso extremamente rápido.

Enquanto um banco relacional precisa pensar em:

  • JOIN

  • optimizer

  • plano de acesso

  • estatísticas

o IMS normalmente já sabe exatamente onde navegar.

É quase como um labirinto secreto onde o programa já conhece o caminho.


⚡ Por Que o IMS é Tão Rápido?

Porque ele foi criado numa época brutalmente limitada.

Nos anos 60 e 70:

  • CPU era caríssima

  • disco era lento

  • memória era minúscula

Então a IBM projetou o IMS para minimizar ao máximo o número de acessos físicos ao disco.

O resultado?

Uma arquitetura extremamente otimizada.

O IMS utiliza:

  • ponteiros físicos

  • navegação direta

  • acesso hierárquico

  • estruturas previsíveis

Em vez de perguntar:

“Como encontrar o dado?”

o IMS trabalha com:

“Eu já sei exatamente onde ele está.”


💾 Como os Dados São Gravados Fisicamente?

Aqui entra uma das partes mais fascinantes do IMS.

Fisicamente os dados normalmente são armazenados em datasets z/OS usando:

  • VSAM

  • OSAM

Mas o IMS NÃO grava tabelas como um banco relacional.

Ele grava:

Segmentos hierárquicos

Exemplo:

CLIENTE
   ↓ ponteiro físico
CONTA
   ↓ ponteiro físico
MOVIMENTO

Os segmentos ficam ligados fisicamente por ponteiros internos.

Isso permite uma navegação extremamente rápida entre os registros.

É quase como se o banco tivesse túneis secretos ligando os dados.


🧠 O Que é DL/I?

Se existe um coração no IMS…

Esse coração é o:

DL/I — Data Language One

O DL/I é a interface usada pelos programas COBOL para conversar com o IMS.

No DB2 usamos:

SELECT
INSERT
UPDATE
DELETE

No IMS usamos comandos como:

  • GU

  • GN

  • GNP

  • ISRT

  • REPL

  • DLET

Tudo via:

CALL 'CBLTDLI'

Ou seja:

O programa COBOL literalmente navega pela árvore do banco.


👨‍💻 Exemplo Simples de Acesso IMS

Imagine que queremos localizar um cliente.

A chamada clássica seria:

CALL 'CBLTDLI'
     USING 'GU  '
           DB-PCB
           CLIENTE-AREA
           CLIENTE-SSA.

O comando:

GU

significa:

Get Unique

O IMS então:

  1. usa o índice

  2. localiza o segmento

  3. posiciona o ponteiro

  4. devolve o registro

Tudo absurdamente rápido.


🔑 PCB, PSB e SSA — As Siglas Misteriosas

Quando alguém começa IMS pela primeira vez, parece que caiu num filme cyberpunk dos anos 70.

As siglas assustam.

Mas a lógica é simples.

PCB

Program Communication Block

Define o acesso ao banco.

PSB

Program Specification Block

Define quais bancos e PCBs o programa pode usar.

SSA

Segment Search Argument

É quase um “WHERE” do IMS.

Exemplo:

CLIENTE(COD=00001)

📜 IMS e JCL

No mundo IMS, o JCL também ganha superpoderes.

Um programa batch IMS normalmente roda com:

//STEP01 EXEC PGM=DFSRRC00,
// PARM='DLI,PROGIMS,PSBTEST'

O famoso:

DFSRRC00

é praticamente o “portal mágico” do batch IMS.

☕ Curiosidade Bellacosa Mainframe:

Quando um iniciante vê um JCL IMS pela primeira vez, normalmente reage assim:

“Isso é um JCL… ou um ritual arcano da IBM?”

😄


⚔️ IMS vs DB2

Essa é uma guerra clássica.

O IMS possui:

✅ performance monstruosa
✅ baixo overhead
✅ TPS absurdamente alto

Mas o DB2 possui:

✅ SQL flexível
✅ analytics
✅ joins
✅ consultas ad-hoc

Por isso muitos bancos usam:

IMS + DB2 juntos

IMS processa o core transacional.

DB2 faz relatórios e analytics.

É como:

IMS = motor Fórmula 1
DB2 = cérebro analítico

🤖 IMS Moderno — Sim, Ele Continua Evoluindo

Muita gente pensa que IMS ficou preso nos anos 70.

Errado.

Hoje o IMS conversa com:

  • APIs REST

  • JSON

  • Java

  • OpenShift

  • Cloud híbrida

  • Mobile banking

  • z/OS Connect

Ou seja:

Seu aplicativo de banco no celular pode estar conversando com um software criado há mais de 50 anos.

Isso é simplesmente absurdo.

E incrível.


💼 Vale a Pena Aprender IMS?

Para um programador COBOL júnior?

SIM. MUITO.

Porque existem poucos especialistas.

E muitos profissionais IMS estão se aposentando.

O mercado procura gente que entenda:

  • COBOL

  • IMS

  • JCL

  • VSAM

  • CICS

  • DB2

Essa combinação continua extremamente valorizada.

Especialmente em:

  • bancos

  • seguradoras

  • telecom

  • aviação

  • governo


☕ O Dinossauro Que Nunca Morreu

O IMS é um paradoxo fascinante.

Ele nasceu antes da internet moderna.

Antes do Windows.

Antes do Linux.

Antes do SQL dominar o mundo.

E mesmo assim continua vivo.

Mais do que vivo.

Continua movimentando bilhões de dólares diariamente.

Porque no fim das contas, empresas gigantes não querem apenas “tecnologia nova”.

Elas querem:

  • estabilidade

  • velocidade

  • segurança

  • confiabilidade

E nisso o IMS ainda é um verdadeiro monstro.

Ou como muita gente brinca no mundo mainframe:

“Tecnologia antiga não significa tecnologia ultrapassada.”

Especialmente quando ela ainda move o planeta.

Vagner Renato Bellacosa, IBM Champion e especialista em IBM Mainframe
IBM Z17 SYSTEM ONLINE
Sobre o autor

Vagner Renato Bellacosa

IBM Champion 2026 • Especialista em IBM Mainframe

Vagner Renato Bellacosa trabalha com IBM Mainframe desde 1988 , é IBM Champion e especialista em COBOL, CICS, Db2, z/OS e IBM Z. Compartilha experiências profissionais, conhecimento técnico, história da computação e práticas do universo mainframe para aproximar novas gerações das tecnologias que sustentam empresas, bancos e governos ao redor do mundo.

IBM Champion IBM Z COBOL CICS Db2 z/OS Mainframe desde 1988
GitHub LinkedIn
Inicializando conteúdo...