Translate

Mostrar mensagens com a etiqueta programacao cobol. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta programacao cobol. Mostrar todas as mensagens

segunda-feira, 1 de junho de 2026

☕💣 DÍVIDA TÉCNICA: O MONSTRO INVISÍVEL QUE ESTÁ COMENDO O SEU COBOL DESDE O SÉCULO PASSADO

 

Bellacosa Mainframe e o monstro da divida tecnica 

☕💣 DÍVIDA TÉCNICA: O MONSTRO INVISÍVEL QUE ESTÁ COMENDO O SEU COBOL DESDE O SÉCULO PASSADO

"O sistema funciona perfeitamente. Só ninguém sabe como."

Se você trabalha com Mainframe há algum tempo, provavelmente já ouviu frases como:

  • "Não mexe nisso que funciona."

  • "Esse programa está em produção há 20 anos."

  • "Só o João sabe alterar esse módulo."

  • "Depois a gente documenta."

  • "Precisamos entregar hoje."

Parabéns.

Você acabou de encontrar alguns dos maiores sintomas de uma das doenças mais comuns da tecnologia moderna:

A Dívida Técnica.

E não, ela não acontece apenas em Java, Python ou aplicações web modernas.

Na verdade, muitos dos maiores casos de dívida técnica do planeta estão rodando neste exato momento em sistemas COBOL responsáveis por bancos, seguradoras, governos, companhias aéreas e bolsas de valores.

Vamos entender o que é, como identificar, controlar e principalmente como sobreviver a ela.


O QUE É DÍVIDA TÉCNICA?

A definição mais simples é:

Dívida Técnica é o custo futuro gerado quando escolhemos uma solução rápida hoje em vez da melhor solução possível.

Imagine que você recebeu uma demanda urgente.

O gerente aparece correndo:

"Precisamos colocar essa alteração em produção amanhã."

Você sabe que o correto seria:

  • revisar a arquitetura;

  • atualizar documentação;

  • criar casos de teste;

  • revisar impactos;

  • atualizar fluxogramas.

Mas o prazo não permite.

Então você faz um ajuste rápido.

Entrega.

Todo mundo feliz.

Até que seis meses depois alguém precisa alterar novamente aquele trecho.

Agora ninguém entende mais nada.

A dívida venceu.

E os juros começaram a ser cobrados.


A ANALOGIA COM O CARTÃO DE CRÉDITO

A comparação mais famosa é com uma dívida financeira.

Quando você compra algo parcelado:

Você ganha agora.

Mas paga depois.

Na dívida técnica acontece exatamente o mesmo.

Você ganha:

  • velocidade;

  • prazo;

  • entrega rápida.

Mas paga depois com:

  • bugs;

  • retrabalho;

  • manutenção cara;

  • incidentes de produção.

Quanto mais tempo passa, maiores ficam os juros.


O COBOL NÃO CRIA DÍVIDA TÉCNICA

Essa é uma das maiores injustiças da informática.

Muitos dizem:

"Cobol é dívida técnica."

Errado.

COBOL não é dívida técnica.

COBOL mal mantido é dívida técnica.

Existem programas COBOL escritos há 30 anos que continuam:

  • legíveis;

  • documentados;

  • organizados;

  • eficientes.

E existem aplicações modernas escritas há seis meses que já parecem um filme de terror.

A linguagem não é o problema.

A disciplina é.


COMO A DÍVIDA TÉCNICA NASCE

Ela normalmente surge de quatro formas.

1. Pressão por prazo

O caso mais comum.

"Entrega primeiro."

"Arruma depois."

O problema é que o depois quase nunca chega.


2. Falta de documentação

O desenvolvedor conhece tudo.

Então ele pensa:

"Não preciso documentar."

Dois anos depois ele muda de empresa.

Agora ninguém entende o programa.


3. Correções emergenciais

Produção caiu.

Cliente está ligando.

Diretoria está nervosa.

O objetivo vira apenas:

"Faça voltar."

Nesse momento quase ninguém pensa em qualidade.


4. Sistemas legados

Bibliotecas antigas.

COPYBOOKs herdados.

Macros esquecidas.

JCLs copiados durante décadas.

Tudo isso acumula dívida.


EXEMPLO REAL DE DÍVIDA TÉCNICA EM COBOL

Imagine um cálculo de desconto.

Versão original:

IF CLIENTE-VIP
   COMPUTE DESCONTO = VALOR * 0.15
END-IF

Simples.

Legível.

Agora passam dez anos.

Novas regras surgem.

Resultado:

IF CLIENTE-TIPO = 'A'
...
ELSE
IF CLIENTE-TIPO = 'B'
...
ELSE
IF CLIENTE-TIPO = 'C'
...

Mais tarde:

IF CLIENTE-TIPO = 'A'
...
ELSE
IF CLIENTE-TIPO = 'B'
...
ELSE
IF CLIENTE-TIPO = 'C'
...
ELSE
IF REGIAO = 'S'
...

Depois de centenas de mudanças:

Ninguém sabe mais como o cálculo funciona.

O programa funciona.

Mas ninguém entende.

Isso é dívida técnica.


OS SINTOMAS MAIS PERIGOSOS

Se você encontrar estes sinais, ligue o alerta.

Programas gigantes

Mais de 10.000 linhas.

COPYBOOKs duplicados

A mesma estrutura em vários lugares.

JCLs clonados

Mudam apenas o nome do JOB.

Falta de comentários

Tudo depende da memória dos analistas.

Testes manuais

Ninguém consegue validar rapidamente.

Dependência de uma pessoa

"O Carlos sabe."

Quando você ouve isso, existe dívida técnica.


O EFEITO JUROS COMPOSTOS

Aqui está a parte assustadora.

Dívida técnica cresce de forma parecida com juros compostos.

Um bug gera:

  • remendo;

  • novo remendo;

  • ajuste do remendo;

  • correção da correção.

Depois de alguns anos ninguém consegue alterar sem medo.

O custo explode.


COMO MAPEAR DÍVIDA TÉCNICA

Primeiro passo:

Pare de adivinhar.

Crie um inventário.

Faça uma planilha simples.

Colunas:

  • Sistema

  • Programa

  • Problema

  • Impacto

  • Complexidade

  • Prioridade

Exemplo:

ProgramaProblemaImpacto
COBCLI01Sem documentaçãoAlto
COBFAT0212.000 linhasAlto
COBPAG03Sem testesMédio

Agora a dívida virou algo visível.


MÉTRICAS IMPORTANTES

Um programador júnior deve aprender a medir.

Algumas métricas úteis:

Número de ABENDs

Se cresce continuamente:

há algo errado.


Tempo de correção

Quanto tempo leva para corrigir um incidente?

Quanto maior, maior a dívida.


Quantidade de módulos sem documentação

Métrica simples e poderosa.


Cobertura de testes

Quanto mais baixa, maior o risco.


FERRAMENTAS ÚTEIS NO MAINFRAME

Muitos iniciantes acham que Mainframe não possui ferramentas modernas.

Possui.

E muitas.

IBM Application Discovery

Mapeia dependências.

Excelente para sistemas gigantes.


IBM ADDI

Application Discovery and Delivery Intelligence.

Mostra relacionamentos entre:

  • COBOL

  • JCL

  • DB2

  • CICS


IBM Debug Tool

Ajuda a entender comportamento de programas complexos.


IBM Fault Analyzer

Investiga ABENDs.


IBM File Manager

Analisa arquivos rapidamente.


IBM Dependency Based Build

Automação moderna para pipelines Mainframe.


COMO REDUZIR A DÍVIDA

Agora vem a parte prática.


Passo 1 – Pare de criar dívida nova

Antes de pagar a antiga.

Evite criar mais.

Parece óbvio.

Mas é onde tudo começa.


Passo 2 – Refatore pequenos trechos

Não tente reescrever tudo.

Ataque pequenas áreas.

Exemplo:

  • nomes ruins;

  • IFs excessivos;

  • parágrafos gigantes.


Passo 3 – Documente enquanto aprende

Cada descoberta vira documentação.

Não espere um projeto oficial.


Passo 4 – Automatize testes

Mesmo testes simples ajudam.

Menos medo de alterar.

Mais velocidade.


Passo 5 – Padronize

Defina padrões.

Por exemplo:

  • nomenclatura;

  • comentários;

  • estrutura de programas;

  • organização de COPYBOOKs.


O ERRO MAIS COMUM DOS JUNIORES

Achar que refatorar significa reescrever tudo.

Não.

Refatoração significa melhorar sem alterar comportamento.

Você limpa.

Organiza.

Simplifica.

Sem mudar resultado.


O SEGREDO DOS ANALISTAS SENIORES

Muitos iniciantes acreditam que profissionais experientes sabem tudo.

Não sabem.

A diferença é que eles:

  • documentam mais;

  • investigam melhor;

  • evitam atalhos perigosos;

  • controlam a dívida técnica.

O conhecimento não está apenas no código.

Está na disciplina.


EASTER EGG DOS MAINFRAMEIROS

Se encontrar um comentário parecido com:

* NÃO REMOVER
* FUNCIONA ASSIM DESDE 1994

Você provavelmente encontrou um artefato arqueológico corporativo.

Trate com respeito.

Mas investigue.

Porque muitas vezes ele esconde uma dívida técnica histórica.


A REGRA DOS 5 MINUTOS

Uma dica poderosa.

Se você gastou cinco minutos para entender algo complicado:

documente.

O próximo desenvolvedor agradecerá.

E talvez esse próximo desenvolvedor seja você daqui a seis meses.


COMO EVOLUIR NA CARREIRA ATRAVÉS DA DÍVIDA TÉCNICA

Os melhores profissionais não são os que criam mais código.

São os que reduzem complexidade.

Quando você aprende a:

  • mapear problemas;

  • documentar;

  • simplificar;

  • automatizar;

  • refatorar;

você deixa de ser apenas um programador.

Você passa a ser um engenheiro de software.


CONCLUSÃO

Dívida técnica não é um bug.

Não é um ABEND.

Não é um programa COBOL antigo.

Ela é o resultado de decisões acumuladas ao longo do tempo.

Algumas são necessárias.

Outras são perigosas.

O segredo não é eliminar toda dívida técnica.

Isso é impossível.

O segredo é conhecê-la, monitorá-la e pagá-la antes que ela assuma o controle do sistema.

Porque, no final das contas, o verdadeiro problema não é aquele programa COBOL de 1987.

O problema é ninguém mais entender por que ele ainda funciona.

E quando esse dia chega...

o próximo chamado de produção costuma acontecer às 03:17 da manhã de um domingo.

Aproveite e conheça BACKLOG

https://eljefemidnightlunch.blogspot.com/2025/01/backlog-o-arquivo-secreto-que-separa-um.html

Backlog


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.

sexta-feira, 27 de março de 2015

☕🔥 BOAS PRÁTICAS COBOL — A DIFERENÇA ENTRE “CÓDIGO QUE FUNCIONA” E “CÓDIGO QUE SOBREVIVE 30 ANOS”

 

Bellacosa Mainframe e as Boas praticas em cobol

☕🔥 BOAS PRÁTICAS COBOL — A DIFERENÇA ENTRE “CÓDIGO QUE FUNCIONA” E “CÓDIGO QUE SOBREVIVE 30 ANOS”

O material enviado é excelente porque toca num dos assuntos mais importantes do mundo Enterprise:

COBOL não é só linguagem.
COBOL é engenharia de continuidade operacional.

E isso muda completamente a maneira de programar.

No mercado bancário, seguradoras, adquirentes, cartões, previdência, governo e clearing houses…

o programa COBOL NÃO é feito para durar meses.

Ele é feito para durar décadas.

Muitos sistemas bancários críticos hoje ainda possuem módulos escritos entre:

  • 1978

  • 1986

  • 1992

  • 1999

e continuam processando:

  • PIX

  • TED

  • SWIFT

  • cartão

  • folha

  • empréstimo

  • câmbio

  • risco

  • antifraude

  • compensação

  • open finance

com volumes absurdos.


☕ O GRANDE SEGREDO DO COBOL CORPORATIVO

Em sistemas Enterprise:

O custo da MANUTENÇÃO é MUITO maior que o custo da implementação inicial.

Em bancos:

  • 70% a 90% do trabalho é manutenção

  • não projeto novo

Então o verdadeiro objetivo do COBOL é:

  • previsibilidade

  • legibilidade

  • estabilidade

  • rastreabilidade

  • auditabilidade

  • recuperação

  • facilidade de troubleshooting

e NÃO “código bonito”.


☕ O QUE DIFERENCIA UM JÚNIOR DE UM PROGRAMADOR COBOL ENTERPRISE?

Junior:

  • “funciona”

Senior:

  • “isso vai sobreviver 20 anos?”

Especialista banco:

  • “isso vai sobreviver 20 anos SEM derrubar batch?”

Arquiteto:

  • “isso vai sobreviver auditoria BACEN?”


☕ 1 — IDENTIFICATION DIVISION NÃO É ENFEITE

O texto fala algo extremamente importante:

Muita gente ignora IDENTIFICATION DIVISION.

No mundo real isso é gravíssimo.

Porque em bancos:

  • programas possuem milhares de versões

  • dezenas de equipes

  • auditorias

  • SOX

  • BACEN

  • LGPD

  • rastreabilidade


EXEMPLO CORPORATIVO REAL

IDENTIFICATION DIVISION.
PROGRAM-ID. CRD0450.

AUTHOR. V BELLACOSA.
INSTALLATION. BANK XYZ.
DATE-WRITTEN. 2026-05-21.

REMARKS.
* PROCESSA BAIXA DE PARCELAS
* MODULO UTILIZADO NO FECHAMENTO D+1
* INTEGRADO COM CICS E DB2
* CHAMADO PELO SCHEDULER CA7

☕ POR QUE ISSO É IMPORTANTE?

Imagine:

Batch falhou às 02:15 da manhã.

Operação liga para suporte.

O operador precisa descobrir:

  • o que o programa faz

  • qual sistema impactado

  • qual cadeia batch

  • quem mantém

  • dependências

Sem IDENTIFICATION adequada:

  • caos

Com documentação:

  • troubleshooting rápido


☕ 2 — COMENTÁRIOS NÃO DEVEM EXPLICAR “O QUE”

Esse trecho do artigo é ouro puro.

Programador ruim comenta:

* SOMA VALOR
ADD WS-VALOR TO WS-TOTAL

Isso é inútil.

O COBOL já é quase inglês.


☕ O QUE DEVE SER COMENTADO?

REGRA DE NEGÓCIO

Exemplo bancário:

* BACEN CIRCULAR 4588
* JUROS DEVEM SER ESTORNADOS
* QUANDO LIQUIDACAO OCORRER EM D-1
* CHAMADO 458921 - TIME RISCO

IF WS-DT-LIQ < WS-DT-VENC
   SUBTRACT WS-JUROS
      FROM WS-SALDO
END-IF

Isso salva vidas em produção.

Porque explica:

  • por que existe

  • quem pediu

  • qual regra

  • qual auditoria

  • qual legislação


☕ 3 — NOMENCLATURA EM COBOL É CIÊNCIA

O texto explica muito bem padrões de nomes.

Em sistemas bancários grandes:

nomenclatura é arquitetura.


☕ EXEMPLO RUIM

01 X.
01 Y.
01 TOTAL1.
01 CONT.

Isso destrói manutenção.


☕ EXEMPLO ENTERPRISE

01 WS-VR-TOTAL-PAGAMENTO    PIC S9(13)V99 COMP-3.
01 WS-QT-PARCELAS-ATRASO    PIC 9(05) COMP.
01 WS-DT-LIQUIDACAO         PIC 9(08).
01 WS-ST-CLIENTE-INAD       PIC X(01).

Agora qualquer pessoa entende:

  • VR = valor

  • QT = quantidade

  • DT = data

  • ST = status


☕ PADRÃO BANCÁRIO MAIS COMUM

Prefixos clássicos

PrefixoSignificado
WSWorking-Storage
LKLinkage
DFHCICS
SQLDb2
INEntrada
OUTSaída
ACAcumulador
CTContador
FLGFlag

☕ 4 — EVALUATE É UMA DAS MAIORES ARMAS DO COBOL MODERNO

O artigo mostra um IF gigantesco.

Isso é MUITO comum em sistemas antigos.


☕ O PROBLEMA DOS IFs GIGANTES

Eles causam:

  • difícil manutenção

  • bugs

  • nesting infernal

  • scope errado

  • END-IF perdido

  • regressão


☕ COMO BANCOS MODERNIZAM ISSO?

Com:

EVALUATE WS-TP-MOVIMENTO

   WHEN '01'
      PERFORM 100-CREDITO

   WHEN '02'
      PERFORM 200-DEBITO

   WHEN '03'
      PERFORM 300-ESTORNO

   WHEN OTHER
      PERFORM 900-ERRO

END-EVALUATE

☕ BENEFÍCIOS

1. Legibilidade absurda

2. Menos bugs

3. Fácil inclusão de novas regras

4. Melhor debugging

5. Melhor análise de fluxo


☕ 5 — END-IF SALVOU O MAINFRAME

O artigo cita delimitadores de escopo.

Isso foi uma revolução.

Antes:

IF A = B
   IF C = D
      MOVE 1 TO X.

O ponto encerrava TUDO.

Isso gerava:

  • bugs monstruosos

  • IF acidentalmente fechado

  • corrupção lógica


☕ BOA PRÁTICA MODERNA

IF WS-SALDO > ZERO

   IF WS-LIMITE > ZERO
      PERFORM 100-LIBERA
   END-IF

END-IF

☕ REGRA DE OURO DOS BANCOS

NUNCA dependa de ponto para fechar escopo.

Sempre:

  • END-IF

  • END-EVALUATE

  • END-PERFORM

  • END-READ

  • END-EXEC


☕ 6 — CÓDIGO MORTO É VENENO CORPORATIVO

O artigo fala sobre código comentado antigo.

Isso é uma praga em mainframe.


☕ EXEMPLO REAL

* COMPUTE WS-JUROS = WS-SALDO * 0.12
MOVE ZERO TO WS-JUROS

10 anos depois:

  • ninguém sabe qual regra vale

  • auditoria confunde

  • manutenção vira inferno


☕ MELHOR PRÁTICA

Use:

  • ChangeMan

  • Endevor

  • Git

  • ISPW

Versionamento existe para isso.


☕ O CÓDIGO DEVE REPRESENTAR:

o presente

Não o passado arqueológico do sistema.


☕ 7 — COPYBOOKS: O DNA DO MAINFRAME

O artigo comenta reuso moderado.

Esse é um dos temas mais importantes do COBOL bancário.


☕ O QUE É COPYBOOK?

É um INCLUDE reutilizável.


☕ EXEMPLO

COPY CLIENTE.
COPY DFHAID.
COPY SQLCA.

☕ PRINCIPAIS COPYBOOKS BANCÁRIOS

1. Layouts de arquivos

CNAB:

  • 240

  • 400


2. Áreas CICS

DFHCOMMAREA

3. Estruturas Db2

DCLGEN

4. APIs corporativas

PIX
SWIFT
Open Finance


☕ PERIGO DO EXCESSO DE COPYBOOK

Já vi programas com:

  • 120 COPYs

  • impossível entender fluxo

Isso gera:

  • compilação lenta

  • impacto gigante

  • acoplamento monstruoso


☕ BOA PRÁTICA

Reuse:

  • layouts

  • APIs

  • estruturas comuns

  • tratamento corporativo

NÃO reuse:

  • lógica besta

  • MOVE ZERO

  • regras triviais


☕ 8 — COMP, COMP-3 E PERFORMANCE

O artigo toca num ponto extremamente avançado.

Muita gente não entende isso.


☕ DISPLAY vs COMP vs COMP-3

DISPLAY

PIC 9(10)

Armazenado:

  • caractere por caractere

Mais lento.


☕ COMP

PIC S9(9) COMP

Binário.

Muito mais rápido.

Ideal:

  • contadores

  • loops

  • índices


☕ COMP-3

PIC S9(11)V99 COMP-3

Packed decimal.

Perfeito para:

  • financeiro

  • bancos

  • dinheiro

Porque:

  • precisão decimal exata


☕ POR QUE BANCOS AMAM COMP-3?

Porque dinheiro NÃO pode ter erro binário.

Exemplo clássico:

Floating Point

0.1 + 0.2 = 0.3000000000004

Em banco:

  • isso seria catastrófico


☕ COBOL RESOLVE ISSO

Com decimal packed:

01 WS-VALOR PIC S9(09)V99 COMP-3.

Precisão decimal real.


☕ 9 — NÍVEL 88 É SUBESTIMADO

O artigo comenta condition names.

Isso é uma maravilha do COBOL.


☕ SEM NÍVEL 88

IF WS-ST-CLIENTE = 'A'

'A' significa o quê?


☕ COM NÍVEL 88

01 WS-ST-CLIENTE PIC X(01).

   88 CLIENTE-ATIVO VALUE 'A'.
   88 CLIENTE-BLOQUEADO VALUE 'B'.
   88 CLIENTE-INADIMPLENTE VALUE 'I'.

Agora:

IF CLIENTE-INADIMPLENTE

Fica quase inglês.


☕ 10 — PRINCIPAIS SOLUÇÕES BANCÁRIAS COBOL

Agora vamos entrar no mundo REAL Enterprise.


☕ ARQUITETURA MAIS COMUM EM BANCOS

ONLINE

CICS + COBOL + Db2

Processa:

  • saldo

  • PIX

  • TED

  • cartão

  • ATM

  • mobile


☕ BATCH

JCL + COBOL + SORT + IDCAMS + Db2 Utilities

Processa:

  • fechamento

  • extrato

  • billing

  • juros

  • risco

  • liquidação


☕ MIDDLEWARE

MQ
Kafka
IBM Integration Bus
z/OS Connect

Integra:

  • APIs

  • microsserviços

  • nuvem

  • mobile


☕ SEGURANÇA

RACF

Controla:

  • datasets

  • transações

  • usuários

  • APIs


☕ ALTA DISPONIBILIDADE

Sysplex
GDPS
Parallel Sysplex


☕ MONITORAMENTO

OMEGAMON
MainView
SYSVIEW


☕ DEVOPS MAINFRAME

Endevor
ISPW
Git + DBB
Jenkins
UrbanCode


☕ EXEMPLO REAL — TRANSAÇÃO PIX

PASSO A PASSO


1 — APP MOBILE

Cliente envia PIX.


2 — API GATEWAY

Chama:

  • z/OS Connect

  • MQ

  • CICS


3 — CICS

Executa transação COBOL.


4 — COBOL

Valida:

  • saldo

  • limite

  • antifraude

  • horário

  • BACEN


5 — Db2

Atualiza:

  • saldo

  • ledger

  • histórico


6 — MQ/Kafka

Publica evento.


7 — Batch Noturno

Concilia:

  • compensação

  • liquidação

  • auditoria


☕ O QUE ISSO ENSINA?

Que COBOL moderno NÃO vive isolado.

Ele é:

  • coração transacional

  • motor financeiro

  • camada de consistência


☕ CONCLUSÃO

O artigo enviado aborda algo fundamental:

boas práticas COBOL não existem para “embelezar código”.

Elas existem para:

  • manter sistemas vivos

  • reduzir risco operacional

  • evitar incidentes bancários

  • facilitar auditoria

  • garantir continuidade

  • permitir manutenção segura

E isso é exatamente o motivo pelo qual:

  • bancos

  • bolsas

  • seguradoras

  • governos

  • adquirentes

continuam confiando bilhões de dólares ao COBOL diariamente.


sexta-feira, 16 de agosto de 2013

☕🔥 EIBRESP no CICS — O “DNA” dos Erros e Respostas do Mainframe

 



☕🔥 EIBRESP no CICS — O “DNA” dos Erros e Respostas do Mainframe

No universo CICS, existe uma verdade absoluta:

“Se você não trata RESP e RESP2… o CICS tratará você.”

O campo EIBRESP é um dos mecanismos mais importantes do ambiente transacional IBM Mainframe.

Ele informa:

  • se o comando executou corretamente

  • qual erro ocorreu

  • qual condição excepcional aconteceu

  • se houve problema de terminal

  • erro de VSAM

  • problema de comunicação

  • rollback

  • timeout

  • lock

  • storage

  • autorização

  • spool

  • task

  • map

  • TSQ

  • TDQ

  • intersystem

  • e dezenas de outros cenários


☕ O que é EIBRESP?

O EIBRESP pertence ao:

EXEC CICS HANDLE CONDITION

e principalmente ao:

RESP()
RESP2()

Exemplo clássico:

EXEC CICS READ
     FILE('CLIENTE')
     INTO(WS-REGISTRO)
     RIDFLD(WS-CHAVE)
     RESP(WS-RESP)
     RESP2(WS-RESP2)
END-EXEC

Após o comando:

  • WS-RESP recebe o código principal

  • WS-RESP2 traz detalhes adicionais


☕ Por que isso é tão importante?

Porque no CICS:

Nem todo erro gera ABEND.

Na verdade:

  • a maioria dos problemas retorna EIBRESP

  • e o programa CONTINUA

Ou seja:

se você não tratar…

o sistema segue em frente silenciosamente.

Isso é perigosíssimo.


☕ Exemplo clássico de desastre

Imagine:

EXEC CICS READ FILE('CLIENTE')
END-EXEC

Registro não existe.

O CICS retorna:

RESP = 13 (NOTFND)

Mas o programador ignorou.

Resultado:

  • dados inválidos

  • tela lixo

  • cálculos incorretos

  • SQL errado

  • corrupção lógica

Sem abend.
Sem dump.
Sem aviso.

O erro fica “fantasma”.


☕ Arquitetura Interna do EIB

O EIB é:

EXEC Interface Block

Área automática criada pelo CICS para cada task.

Contém:

  • EIBRESP

  • EIBRESP2

  • EIBTRNID

  • EIBTASKN

  • EIBTIME

  • EIBDATE

  • EIBAID

  • EIBCALEN

  • EIBFN

  • etc.

É literalmente o “contexto vivo” da transação.


☕ O fluxo REAL do CICS

Internamente:

Programa envia comando EXEC CICS
↓
Translator converte para CALL DFHEI1
↓
Kernel EXEC Interface processa
↓
Resource Manager executa
↓
Retorno é gravado em EIBRESP
↓
Programa decide o que fazer

Ou seja:

EIBRESP é praticamente o “status code” do kernel CICS.


☕ As categorias dos EIBRESP

Os códigos podem ser agrupados em:

CategoriaExemplos
Arquivo VSAMNOTFND, DUPKEY, ENDFILE
ComunicaçãoTERMERR, SYSIDERR
StorageNOSTG
SegurançaNOTAUTH
QueueQZERO, QBUSY
MAP/BMSMAPFAIL
ProgramasPGMIDERR
TransaçõesTRANSIDERR
SyncpointROLLEDBACK
InterSystemISCINVREQ

☕ Os códigos MAIS IMPORTANTES do mundo real


🔥 01 — ERROR

Erro genérico.

Normalmente significa:

  • comando falhou

  • condição inesperada

  • sem tratamento específico

Exemplo:

IF WS-RESP = DFHRESP(ERROR)

Curiosidade:

Muitos dumps antigos de CICS começam aqui.


🔥 13 — NOTFND

O mais famoso de todos.

Registro não encontrado.

Exemplo:

EXEC CICS READ
     FILE('CLIENTE')
     RIDFLD(WS-ID)
     RESP(WS-RESP)
END-EXEC

Se chave não existir:

RESP = 13

☕ Analogia real

É o equivalente mainframe de:

SELECT * FROM TABELA
WHERE ID=999

Sem linhas retornadas.


☕ Dica profissional

TODO READ deveria tratar:

EVALUATE WS-RESP
   WHEN DFHRESP(NORMAL)
      CONTINUE

   WHEN DFHRESP(NOTFND)
      MOVE 'N' TO WS-EXISTE

   WHEN OTHER
      PERFORM 9000-ERRO
END-EVALUATE

🔥 14 — DUPREC

Registro duplicado.

Muito comum em ESDS/RRDS.


🔥 15 — DUPKEY

Chave duplicada no KSDS.

Clássico de cadastro.

Exemplo:

EXEC CICS WRITE
     FILE('CLIENTE')

Tentou inserir chave já existente.


☕ Curiosidade

Em muitos bancos:

  • o COBOL captura DUPKEY

  • e transforma em mensagem amigável:

CLIENTE JÁ CADASTRADO

Sem o usuário perceber que foi um erro VSAM.


🔥 16 — INVREQ

“Invalid Request”.

Talvez o erro MAIS traiçoeiro do CICS.

Significa:

“Você pediu algo inválido para ESTE contexto.”

Exemplos:

  • READ sem arquivo aberto

  • START inválido

  • LINK incorreto

  • COMMAREA errada

  • comando proibido


☕ Easter Egg técnico

Grande parte dos:

AEI*

internamente começa com INVREQ.


🔥 17 — IOERR

Erro físico/lógico de I/O.

Pode indicar:

  • VSAM corrompido

  • CI quebrado

  • erro disco

  • problema buffer

  • catálogo inconsistente

Quando aparece:

⚠️ operadores começam a ficar nervosos.


🔥 18 — NOSPACE

Sem espaço.

Pode ocorrer em:

  • TSQ

  • TDQ

  • datasets

  • spool

  • buffers

Muito comum em ambientes mal dimensionados.


🔥 22 — LENGERR

Erro de tamanho.

Lenda absoluta do CICS.

Exemplo clássico:

EXEC CICS RECEIVE
     MAP('TELA1')
     INTO(WS-AREA-100)
END-EXEC

Mas o mapa possui 120 bytes.

Boom:

LENGERR

☕ O terror do COBOL antigo

Copys desatualizadas.

O mapa mudou.
O programa não recompilou.

Resultado:

RESP=22

🔥 25 — QBUSY

Queue ocupada.

Muito comum em concorrência pesada.


🔥 27 — PGMIDERR

Programa não encontrado.

Causas:

  • PPT errado

  • programa não instalado

  • nome incorreto

  • loadlib ausente

Exemplo:

EXEC CICS LINK
     PROGRAM('PGMXYZ')

Se não existir:

PGMIDERR

☕ Curiosidade histórica

Nos anos 80:

PGMIDERR era um dos erros mais comuns em produção noturna.

Especialmente após promotes manuais.


🔥 28 — TRANSIDERR

Transação inexistente.

Exemplo:

EXEC CICS START
     TRANSID('ABCD')

Se não existir no PCT:

TRANSIDERR

🔥 29 — ENDDATA

Fim de dados.

Muito comum em:

  • TSQ

  • TDQ

  • browse

Equivalente ao EOF lógico.


🔥 36 — MAPFAIL

Talvez o mais famoso do BMS.

Ocorre quando:

  • usuário pressionou ENTER sem dados

  • MDT desligado

  • campo vazio

  • RECEIVE não trouxe informação


☕ Exemplo REAL

Usuário entra na tela:

CPF: ________

Pressiona ENTER vazio.

CICS:

MAPFAIL

☕ Dica profissional importantíssima

Nunca trate MAPFAIL como erro fatal.

É fluxo normal de tela.


🔥 40 — OVERFLOW

Overflow de armazenamento/dados.

Pode ocorrer em:

  • TSQ

  • COMMAREA

  • buffers


🔥 42 — NOSTG

Sem storage.

Extremamente sério.

O CICS está sem memória suficiente.

Operações podem começar a degradar rapidamente.


☕ Bastidores

Quando NOSTG aparece em sequência:

  • SOS condition

  • short-on-storage

  • risco de região cair

É situação crítica.


🔥 44 — QIDERR

Queue inexistente.

Muito comum em TSQ/TDQ.


🔥 53 — SYSIDERR

Erro de sistema remoto.

Clássico em:

  • MRO

  • ISC

  • IPIC

  • APPC

O sistema remoto:

  • caiu

  • não respondeu

  • não existe

  • sessão falhou


🔥 70 — NOTAUTH

Falha de autorização.

O RACF disse:

NO.

☕ Integração CICS + RACF

Aqui ocorre:

  • verificação de transação

  • FILE

  • TDQ

  • TSQ

  • PROGRAM

  • SURROGAT

  • resources


🔥 73 — WRONGSTAT

Estado inválido.

Muito comum em sessões/APPC.


🔥 76 — CCERROR

Erro de controle de comunicação.


🔥 77 — MAPERROR

Erro estrutural de mapa.

Diferente de MAPFAIL.

MAPERROR normalmente significa:

  • definição inconsistente

  • estrutura inválida

  • problema BMS


🔥 80 — NOSPOOL

Sem spool.

Muito comum em ambientes JES saturados.


🔥 81 — TERMERR

Erro terminal/dispositivo.

Pode indicar:

  • sessão caiu

  • VTAM problemático

  • LU desconectada

  • timeout terminal


🔥 82 — ROLLEDBACK

Rollback executado.

Um dos mais importantes do mundo transacional.

Significa:

SUAS ALTERAÇÕES FORAM DESFEITAS

☕ Cenário clássico

UPDATE CONTA A
UPDATE CONTA B
ERRO NO FINAL
SYNCPOINT ROLLBACK

CICS:

ROLLEDBACK

🔥 84 — DISABLED

Recurso desabilitado.

Pode ser:

  • FILE

  • TRANSACTION

  • TERMINAL

  • PROGRAM

  • CONNECTION


☕ A diferença entre RESP e RESP2

RESP:

erro genérico

RESP2:

detalhamento interno

Exemplo:

RESP  = INVREQ
RESP2 = 8

Cada RESP2 possui significado específico.

É aí que mora o troubleshooting avançado.


☕ Exemplo profissional completo

EXEC CICS READ
     FILE('CLIENTE')
     RIDFLD(WS-CHAVE)
     INTO(WS-REG)
     RESP(WS-RESP)
     RESP2(WS-RESP2)
END-EXEC

EVALUATE WS-RESP

   WHEN DFHRESP(NORMAL)
      CONTINUE

   WHEN DFHRESP(NOTFND)
      MOVE 'CLIENTE INEXISTENTE'
        TO WS-MSG

   WHEN DFHRESP(NOTAUTH)
      MOVE 'SEM AUTORIZACAO'
        TO WS-MSG

   WHEN OTHER
      DISPLAY 'RESP=' WS-RESP
      DISPLAY 'RESP2=' WS-RESP2
      PERFORM 9999-ABEND

END-EVALUATE

☕ Dica de arquiteto CICS

Os melhores sistemas enterprise:

✅ tratam TODOS os RESP
✅ logam RESP2
✅ possuem tabelas de tradução
✅ transformam erro técnico em mensagem funcional
✅ evitam abends desnecessários


☕ Curiosidade histórica

Antes do uso massivo de:

RESP()

muitos programas dependiam de:

HANDLE CONDITION

Isso tornava o fluxo:

  • difícil de rastrear

  • cheio de GO TO

  • quase impossível de debugar

RESP revolucionou o tratamento moderno.


☕ Easter Egg Mainframe

Veteranos conseguem identificar problemas olhando apenas:

AEI9
AEY9
ASRA
MAPFAIL
INVREQ
PGMIDERR

É quase uma linguagem secreta do CICS.


☕ Regra de ouro do CICS

“O comando EXEC CICS nunca deve ser confiado cegamente.”

Sempre:

  • RESP

  • RESP2

  • HANDLE CONDITION

  • HANDLE ABEND

Porque no mundo transacional:

o programa pode continuar funcionando…

mesmo completamente errado.