☕ Um Café no Bellacosa Mainframe
Gostou do conteúdo? Ajude a manter o café quente, o COBOL compilando e o mainframe acordado. 😄
☕ Pague um café ao Bellacosa

Translate

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

sábado, 3 de outubro de 2026

REXX 1995: O dia em que a IBM quis conquistar o mundo — uma aventura mainframe sob a batuta de Spike Spiegel

 

Bellacosa Mainframe comenta sobre a conferencia que apresentou o REXX ao mundo

☕ UM CAFÉ NO BELLACOSA MAINFRAME

REXX 1995: O dia em que a IBM quis conquistar o mundo — uma aventura mainframe sob a batuta de Spike Spiegel

Bellacosa Mainframe — Arqueologia da Computação, COBOL, REXX e os fantasmas do código legado

Por Vagner Bellacosa — Bellacosa Mainframe

“See you, Space Cowboy…” — Cowboy Bebop







1. Introdução — Uma nave chamada IBM e um caçador de recompensas chamado REXX

Imagine a cena.

Estamos em maio de 1995. A Internet começa a conquistar universidades, empresas e os primeiros aventureiros digitais. O Windows 95 ainda não chegou oficialmente ao mercado. O Linux é uma promessa jovem, o OS/2 tenta conquistar seu território e os mainframes IBM continuam processando uma quantidade gigantesca de informações empresariais.

Em algum ponto desse universo tecnológico, 130 especialistas se reúnem no Stanford Linear Accelerator Center, na Califórnia, para discutir o futuro de uma linguagem que nasceu discretamente nos corredores da IBM.

Seu nome: REXX.

Agora imagine Spike Spiegel, o despreocupado caçador de recompensas de Cowboy Bebop, entrando numa sala repleta de terminais, fitas magnéticas e programadores experientes.

De mãos nos bolsos, observa as telas, pergunta onde está o café e descobre que há uma recompensa muito mais interessante do que alguns milhares de woolongs.

A recompensa é compreender como uma linguagem criada em 1979 estava se preparando para conquistar o universo da computação.

A bordo desta Bebop imaginária, nossa tripulação será formada por COBOL, REXX, JCL, CICS, Db2 e alguns personagens históricos da IBM.

Spike assume a batuta narrativa. Mike Cowlishaw é o arquiteto da linguagem. Melinda Varian, de Princeton, é nossa correspondente especial no simpósio.

E o programador COBOL iniciante? Esse será o novo tripulante que aprenderá a navegar por sistemas com décadas de história.

O mais interessante é que o simpósio realmente aconteceu.

O Sexto Simpósio Internacional de REXX, realizado de 1 a 3 de maio de 1995, deixou um documento histórico extraordinário: o relatório de Melinda Varian, preservado pela REXX Language Association.

Nele encontramos anúncios controversos, discussões técnicas, ideias inovadoras, previsões ousadas e até comentários sobre decisões equivocadas de projeto.

Vamos embarcar nessa aventura.


2. Episódio 1 — A origem de REXX: uma ideia no meio da noite

Nossa viagem começa em março de 1979.

Mike Cowlishaw, engenheiro da IBM no laboratório de Hursley, na Inglaterra, desperta durante a noite pensando em uma nova linguagem de programação.

Sua preocupação não era simplesmente produzir mais uma ferramenta.

Ele queria desenvolver uma linguagem fácil de aprender, fácil de lembrar e suficientemente expressiva para resolver problemas reais.

Naquela época, usuários de VM/CMS trabalhavam com linguagens como EXEC e EXEC2.

Essas ferramentas eram úteis, mas podiam produzir programas difíceis de ler, especialmente pela quantidade de símbolos e convenções sintáticas.

Cowlishaw desejava algo diferente.

Uma linguagem em que o programador pudesse concentrar a atenção no problema, e não na pontuação.

Foi assim que nasceu o REXX, cujo nome se relaciona à expressão Restructured Extended Executor.

A primeira implementação foi distribuída pela rede interna VNET da IBM em 21 de maio de 1979.

Essa rede conectava profissionais distribuídos por diferentes instalações da empresa.

Cowlishaw enviava propostas, recebia comentários, corrigia comportamentos e desenvolvia novas funcionalidades.

A linguagem cresceu por meio da colaboração.

Curiosidade: uma espécie de desenvolvimento comunitário antes do GitHub

O processo descrito por Cowlishaw lembra bastante práticas modernas de engenharia de software.

Primeiro, ele documentava uma funcionalidade.

Depois, compartilhava a proposta com outros profissionais.

Em seguida, escrevia exemplos para verificar se a ideia realmente fazia sentido.

Somente então avançava na implementação.

Hoje chamaríamos parte desse processo de desenvolvimento orientado por especificações, testes e feedback.

Em 1979, tudo isso acontecia por uma rede corporativa.

Ao final do primeiro ano, Cowlishaw havia dedicado aproximadamente mil horas ao projeto, produzido dez mil linhas de Assembler e escrito cinco mil linhas de documentação.

Observe o detalhe: o interpretador era desenvolvido em Assembler, mas seu objetivo era oferecer ao usuário uma linguagem muito mais acessível.

É como construir uma nave espacial sofisticadíssima para que seu piloto precise lidar apenas com comandos compreensíveis.

Primeiro programa REXX

/* BELLACOSA - PRIMEIRO REXX */

say "Bem-vindo ao universo mainframe"
say "Ano historico: 1995"
say "Missao: aprender REXX"
exit 0

A instrução SAY apresenta uma mensagem.

Os comentários ficam entre /* e */.

A instrução EXIT 0 encerra o programa indicando conclusão normal.

Simples, não?

Agora compare com um programa COBOL equivalente.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. PRIMEIRO.
       PROCEDURE DIVISION.
           DISPLAY "Bem-vindo ao universo mainframe"
           DISPLAY "Ano historico: 1995"
           DISPLAY "Missao: aprender COBOL"
           GOBACK.

O exemplo COBOL utiliza formato fixo tradicional, com as instruções iniciando na área apropriada.

Ambos apresentam mensagens, mas suas estruturas são diferentes.

COBOL é especialmente adequado ao desenvolvimento de aplicações empresariais com regras de negócio e dados estruturados.

REXX é excelente para automação, interpretação de comandos e criação de utilitários.

Primeira lição da Bebop: não existe obrigação de escolher uma linguagem e abandonar todas as outras. O bom programador aprende a utilizar a ferramenta apropriada para cada missão.


3. Episódio 2 — A reunião secreta de 1995

Avancemos dezesseis anos.

Stanford Linear Accelerator Center, Califórnia.

Programadores, pesquisadores e especialistas se reúnem para o Sexto Simpósio Internacional de REXX.

Entre os participantes estão Mike Cowlishaw, Charles Daney, Ian Collier e Anders Christensen.

Cada um representa uma parte da evolução da linguagem.

O encontro tinha aproximadamente 130 participantes, o dobro do ano anterior.

Durante três dias, discutiram o REXX tradicional, sua evolução orientada a objetos, ferramentas de desenvolvimento, UNIX, Web, sistemas distribuídos, OS/2 e CICS.

Mas havia uma notícia que preocupava a comunidade.

A IBM havia anunciado a transferência do desenvolvimento de REXX de Endicott, nos Estados Unidos, para Böblingen, na Alemanha.

Segundo Melinda Varian, nenhum dos desenvolvedores existentes seria transferido junto com o projeto.

A autora demonstrou grande preocupação com essa decisão.

Ela estimou que a transferência poderia provocar um período de 18 a 24 meses de pouco avanço.

Essa estimativa era uma opinião registrada em 1995, não uma medição posterior do que efetivamente aconteceu.

O problema do conhecimento que desaparece

Imagine um sistema COBOL desenvolvido durante vinte anos.

Seu programador original conhece particularidades do código, regras de negócio, registros históricos e situações especiais que talvez nunca tenham sido documentadas.

Agora imagine que a equipe inteira seja substituída.

O código continua funcionando.

Os datasets continuam armazenados.

As transações CICS continuam sendo executadas.

Mas parte do conhecimento desaparece.

É exatamente essa a preocupação expressa por Varian.

Um dos maiores riscos de um sistema legado não é sua idade. É perder o conhecimento necessário para compreendê-lo e mantê-lo.

Essa lição permanece relevante para empresas que dependem de COBOL, PL/I, Assembler, REXX e JCL.

Dica Bellacosa Mainframe

Sempre que encontrar um programa antigo, investigue:

  1. Quem desenvolveu o programa?

  2. Qual problema empresarial ele resolve?

  3. Quais arquivos e tabelas utiliza?

  4. Quais outros programas dependem dele?

  5. Como é executado?

  6. Quais são seus códigos de retorno?

  7. Existem procedimentos documentados para recuperação de erros?

Documentação é uma forma de preservar conhecimento.

E conhecimento preservado reduz o custo de manutenção.


4. Episódio 3 — A IBM queria levar REXX para Linux

Entre os anúncios apresentados no simpósio estava uma novidade surpreendente.

A IBM planejava disponibilizar Object REXX para diferentes plataformas.

O cronograma divulgado incluía:

PlataformaPrevisão apresentada
LinuxJulho de 1995
PowerPCSetembro de 1995
OS/2Outubro de 1995
MVSDezembro de 1995
AIXDurante 1995
WindowsDurante 1995
VMMarço de 1996

Atenção: essas eram previsões divulgadas no evento, não comprovação de que todos os lançamentos ocorreram nas datas propostas.

O plano para Linux possuía uma característica especialmente interessante.

A IBM pretendia disponibilizar o código-fonte de sua implementação, permitindo que terceiros construíssem versões para outros sistemas UNIX e comercializassem suas soluções sem pagar royalties à empresa.

Não se tratava necessariamente de software livre nos moldes da GPL.

O anúncio estabelecia condições próprias.

Mesmo assim, para 1995, era uma decisão estratégica importante.

A IBM reconhecia que sua linguagem poderia ter um futuro além dos sistemas operacionais tradicionais da companhia.

Uma linguagem viajando entre planetas

Dentro da nossa analogia com Cowboy Bebop, cada sistema operacional representa um planeta.

VM/CMS é um dos mundos antigos.

MVS é uma enorme estação espacial corporativa.

OS/2 é uma colônia de computadores pessoais.

UNIX e Linux representam novos territórios.

REXX seria um viajante tentando circular entre todos eles.

Naturalmente, cada implementação possui particularidades.

Um script que executa comandos específicos de TSO não funcionará automaticamente em Linux.

A sintaxe básica pode ser semelhante, mas os comandos disponíveis dependem do ambiente.

Essa distinção é fundamental para iniciantes.

Portabilidade da linguagem não significa portabilidade automática de todos os programas.

Um script REXX que utiliza SAY, IF, DO e operações comuns sobre strings pode ser relativamente simples de adaptar.

Já um script que utiliza LISTDS, ALLOC, EXECIO ou serviços específicos de TSO/E exige um ambiente compatível ou alterações.


5. Episódio 4 — COBOL encontra REXX: duas linguagens, uma missão

Vamos imaginar uma empresa financeira.

Todos os dias, um programa COBOL processa movimentações e produz resultados.

O programa executa cálculos, valida registros e grava informações.

Mas alguém precisa preparar o ambiente, executar o processamento, conferir retornos e produzir relatórios.

É aqui que o REXX pode ajudar.

COBOL executa a regra de negócio.

JCL descreve e submete o trabalho em lote.

REXX pode automatizar tarefas operacionais e de desenvolvimento, inclusive a submissão de jobs e a análise de informações.

Vejamos um pequeno laboratório.

Laboratório 1 — Criando um programa COBOL para calcular saldos

Nosso programa inicial não acessará um banco de dados real nem movimentará dinheiro.

Ele trabalhará com valores fixos para facilitar a aprendizagem.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. SALDOB01.

       DATA DIVISION.
       WORKING-STORAGE SECTION.

       01 WS-SALDO-INICIAL PIC 9(7)V99 VALUE 1500.00.
       01 WS-DEPOSITO      PIC 9(7)V99 VALUE 250.00.
       01 WS-SAQUE         PIC 9(7)V99 VALUE 100.00.
       01 WS-SALDO-FINAL   PIC 9(7)V99 VALUE ZERO.
       01 WS-SALDO-EDIT    PIC Z(6)9.99.

       PROCEDURE DIVISION.

           COMPUTE WS-SALDO-FINAL =
               WS-SALDO-INICIAL
               + WS-DEPOSITO
               - WS-SAQUE

           MOVE WS-SALDO-FINAL TO WS-SALDO-EDIT

           DISPLAY "BELLACOSA MAINFRAME"
           DISPLAY "SALDO FINAL: " WS-SALDO-EDIT

           GOBACK.

Esse exemplo usa formato fixo tradicional de COBOL, apropriado para ilustrar fontes clássicos.

Vamos entender os elementos.

WORKING-STORAGE SECTION contém variáveis usadas durante a execução.

PIC 9(7)V99 define um campo numérico com sete posições inteiras e duas decimais implícitas.

A letra V não ocupa espaço físico no campo.

COMPUTE executa o cálculo.

MOVE transfere o resultado para um campo editado.

DISPLAY apresenta informações na saída do programa.

GOBACK retorna o controle ao chamador ou ao ambiente de execução.

O saldo esperado é:

1500 + 250 − 100 = 1650.

O programa deverá apresentar o valor formatado como 1650.00, com os espaços iniciais previstos no campo editado.

O que acontece num sistema real?

Em uma aplicação empresarial, esses valores provavelmente seriam obtidos de arquivos sequenciais, VSAM, Db2 ou outra fonte.

Também seria necessário verificar saldos insuficientes, tipos de operação, consistência dos registros e possíveis falhas.

O programa acima demonstra apenas o cálculo.

A vantagem é que o iniciante consegue compreender sua estrutura antes de acrescentar complexidade.

6. Episódio 5 — JCL: o controlador de tráfego da Bebop

No ambiente z/OS, programas batch frequentemente são executados por meio de jobs descritos em JCL.

JCL significa Job Control Language.

Não é uma linguagem de programação de aplicação como COBOL.

Sua função é informar ao sistema quais programas executar, quais recursos utilizar e como tratar entradas e saídas.

Supondo que nosso programa COBOL já esteja compilado e linkeditado numa biblioteca de carga, poderíamos utilizar um job semelhante ao seguinte:

//BELLJOB  JOB (ACCT),'BELLACOSA',
//             CLASS=A,MSGCLASS=X,
//             NOTIFY=&SYSUID
//*
//RUNCOB   EXEC PGM=SALDOB01
//STEPLIB  DD DSN=USER.COBOL.LOAD,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSOUT   DD SYSOUT=*
//

Os nomes de dataset e os parâmetros do JOB são ilustrativos e devem ser adaptados às regras da instalação.

A instrução JOB identifica o trabalho.

EXEC PGM=SALDOB01 solicita a execução do programa.

STEPLIB informa uma biblioteca de carga em que o sistema poderá localizar o módulo executável.

SYSOUT e SYSPRINT representam definições de saída frequentemente utilizadas em jobs.

O que acontece quando o job é submetido?

O JES recebe o trabalho, verifica suas condições de execução e o encaminha conforme a configuração do sistema.

O programa é carregado.

O cálculo é executado.

A saída pode ser examinada no spool, utilizando SDSF ou ferramentas equivalentes.

Passo a passo no ambiente TSO/ISPF

Passo 1: acesse o ambiente de desenvolvimento autorizado.

Passo 2: crie um membro de fonte COBOL em uma biblioteca apropriada.

Passo 3: digite o programa SALDOB01.

Passo 4: compile o programa utilizando o procedimento de compilação disponível na instalação.

Passo 5: verifique mensagens de erro, warnings e o código de retorno.

Passo 6: confirme que o módulo executável foi gravado na biblioteca de carga.

Passo 7: adapte o JCL de execução.

Passo 8: submeta o job.

Passo 9: examine o resultado no SDSF.

Passo 10: compare o saldo apresentado com o valor esperado.

Em muitos ambientes educacionais, existem procedimentos de compilação prontos. Utilize-os antes de tentar construir um JCL de compilação completo.

Dica de veterano

Um código de retorno zero geralmente representa conclusão normal, mas o significado depende da aplicação e de seus contratos de execução.

Não trate todos os retornos diferentes de zero como iguais.

Investigue também mensagens, condições de execução e eventuais abends.

Uma aplicação pode produzir resultado incorreto mesmo terminando com retorno zero.

7. Episódio 6 — REXX entra na sala de controle

Agora precisamos automatizar parte da missão.

Suponha que o programador execute frequentemente o mesmo job COBOL.

Em vez de navegar manualmente até o membro JCL e submetê-lo repetidamente, podemos criar um pequeno exec REXX.

No TSO/E, uma forma de submeter um membro JCL é utilizar o comando SUBMIT.

/* BELLJOB - ENVIO DE JOB COBOL */

say "BELLACOSA MAINFRAME"
say "Iniciando submissao do job..."

address tso

"SUBMIT 'USER.JCL(BELLJOB)'"

say "Retorno do comando SUBMIT:" rc

exit rc

Observe os elementos.

ADDRESS TSO direciona os comandos ao ambiente TSO.

O comando SUBMIT envia o JCL ao JES.

A variável especial RC recebe o código de retorno do comando executado.

O programa apresenta esse valor e termina.

Importante: o retorno de SUBMIT não representa necessariamente o resultado final do processamento COBOL. Ele informa o retorno do comando de submissão.

O job pode ter sido aceito e ainda estar aguardando execução.

Para conhecer o resultado final, será necessário verificar o job no JES/SDSF ou usar uma interface apropriada de consulta.

Essa distinção evita um erro comum entre iniciantes.

Como executar o REXX

Em uma instalação TSO/E, você pode criar um membro chamado BELLJOB numa biblioteca REXX e executá-lo com uma instrução semelhante a:

EXEC 'USER.REXX(BELLJOB)' EXEC

A biblioteca precisa existir, e o usuário deve ter as permissões necessárias.

O nome USER é apenas ilustrativo.

Em ambientes reais, cada instalação define seus padrões de nomenclatura, segurança e autorização.

O que ganhamos?

Ganhamos repetibilidade.

Uma operação executada várias vezes pode ser encapsulada em um procedimento simples.

Mas não devemos exagerar.

O pequeno exec não substitui o monitoramento do JES, não resolve falhas de aplicações e não transforma automaticamente um programa COBOL em um serviço Web.

Ele automatiza uma tarefa específica.

E esse é justamente um dos segredos da produtividade: começar automatizando tarefas pequenas, repetitivas e bem compreendidas.

8. Episódio 7 — REXX dentro do CICS: uma revolução inesperada

Entre as apresentações mais interessantes do simpósio estava a de Bob Vogel, gerente de desenvolvimento da IBM.

Seu tema era REXX for CICS/ESA.

Para compreender a importância dessa apresentação, precisamos conhecer o CICS.

CICS significa Customer Information Control System.

Ele é um servidor de aplicações transacionais utilizado em ambientes empresariais.

Imagine milhares de usuários consultando saldos, registrando pedidos, atualizando contas ou realizando operações simultaneamente.

CICS ajuda a gerenciar a execução dessas transações, coordenando programas e recursos conforme a arquitetura da aplicação.

Historicamente, COBOL ocupa um lugar importante nesse ecossistema.

No simpósio de 1995, Bob Vogel apresentou uma implementação de REXX destinada ao CICS.

Ela utilizava como base o núcleo do interpretador TSO/E REXX.

A solução acrescentava recursos específicos para CICS, incluindo integração com Db2, editor de texto, shell interativo, facilidades de painéis e um sistema de arquivos baseado em VSAM.

A surpresa: produtividade de 10 a 20 vezes

Vogel relatou que sua equipe, composta principalmente de programadores COBOL/CICS, estimava ganhos de produtividade entre dez e vinte vezes em determinadas atividades realizadas com REXX.

Calma, jovem tripulante!

Isso não significa que um programa REXX execute vinte vezes mais rápido que um programa COBOL.

Também não demonstra que REXX seja universalmente superior ao COBOL.

A declaração se referia à produtividade percebida pelos desenvolvedores em seu contexto de trabalho.

São coisas completamente diferentes.

Uma ferramenta pode permitir construir um protótipo em poucas horas sem necessariamente oferecer o melhor desempenho para processar milhões de registros.

Quando utilizar cada tecnologia?

NecessidadeTecnologia frequentemente adequada
Regras empresariais complexasCOBOL
Aplicações transacionaisCICS com COBOL ou outras linguagens suportadas
Processamento batchCOBOL e JCL
Automação TSO/ISPFREXX
Consultas e atualização de dados relacionaisSQL/Db2
Organização da execução batchJCL/JES
Investigação de jobsSDSF e ferramentas associadas

Essas tecnologias podem colaborar.

Não precisam disputar espaço como inimigas.

O sucesso de uma arquitetura depende da combinação correta de responsabilidades.

9. Episódio 8 — Object REXX: quando a linguagem ganhou novos poderes

Outra grande atração do simpósio foi o Object REXX.

Rick McGuire apresentou funcionalidades relacionadas à programação orientada a objetos.

Para um iniciante, orientação a objetos pode parecer um conceito complicado.

Mas sua ideia básica é relativamente simples.

Imagine que precisamos representar uma conta bancária.

Uma conta possui características:

  • Número.

  • Titular.

  • Saldo.

  • Situação.

E possui operações:

  • Consultar saldo.

  • Depositar.

  • Sacar.

  • Bloquear.

Em programação orientada a objetos, podemos organizar parte desses dados e comportamentos numa estrutura chamada classe.

Os objetos são instâncias dessa classe.

A proposta do Object REXX era acrescentar recursos desse modelo à linguagem tradicional.

Exemplo conceitual em Object REXX

/* Exemplo para Object REXX / ooRexx */

conta = .Conta~new
conta~depositar(250)

say "Saldo:" conta~saldo

::class Conta

::attribute saldo get

::method init
  expose saldo
  saldo = 1000

::method depositar
  expose saldo
  use arg valor
  saldo = saldo + valor

Esse exemplo ilustra uma implementação moderna compatível com os conceitos centrais de Object REXX. Não deve ser interpretado como uma reprodução literal de uma demonstração de 1995.

A classe Conta define um objeto.

O método init estabelece o saldo inicial.

O método depositar altera o saldo.

O símbolo ~ é utilizado para enviar mensagens aos objetos.

Mas COBOL também possui orientação a objetos?

Sim. Existem extensões e funcionalidades de COBOL orientado a objetos, dependendo do compilador e do ambiente.

Entretanto, é importante diferenciar o COBOL procedural tradicional das implementações com recursos orientados a objetos.

Grande parte dos sistemas empresariais COBOL utiliza estruturas procedurais, chamadas de programas, divisões, seções, parágrafos e módulos.

Para quem está começando, é mais importante dominar primeiro:

  • Estrutura de programa.

  • Tipos de dados.

  • Instruções condicionais.

  • Laços.

  • Processamento de arquivos.

  • Chamadas entre programas.

  • Tratamento de erros.

Depois disso, aprender novos paradigmas torna-se muito mais fácil.

10. Episódio 9 — REXX na Internet antes de muita gente conhecer a Web

Talvez a apresentação mais visionária do simpósio tenha sido a de Les Cottrell e Bebo White.

O assunto era a construção de scripts CGI para a World Wide Web utilizando REXX.

CGI significa Common Gateway Interface.

Era uma maneira de permitir que servidores Web executassem programas externos para produzir respostas dinâmicas.

Imagine que alguém acessa uma página de consulta.

O servidor recebe a solicitação.

Um programa processa informações.

O resultado é devolvido ao navegador.

Hoje esse modelo parece bastante familiar.

Mas em 1995 a Web ainda estava em sua infância.

Segundo o relatório, o SLAC havia instalado o primeiro servidor Web dos Estados Unidos em setembro de 1991.

Os apresentadores demonstraram principalmente soluções UNIX utilizando Uni-REXX, mas também discutiram ambientes VM.

Um exemplo didático de resposta HTTP

Um script CGI muito simples poderia produzir algo semelhante a:

/* Exemplo conceitual de CGI com REXX */

say "Content-Type: text/html"
say
say "<html>"
say "<body>"
say "<h1>Bellacosa Mainframe</h1>"
say "<p>REXX e a historia da Web</p>"
say "</body>"
say "</html>"

Em um ambiente CGI devidamente configurado, a primeira linha define o tipo de conteúdo.

A linha vazia separa os cabeçalhos do corpo da resposta.

O restante forma uma pequena página HTML.

Naturalmente, um servidor real precisaria estar configurado para executar o interpretador e o programa com permissões apropriadas.

Esse exemplo tem finalidade histórica e educacional. Não é uma recomendação para publicar diretamente um CGI antigo na Internet atual.

O alerta de segurança de 1995

Os apresentadores também discutiram riscos de segurança.

Melinda Varian destacou o cuidado necessário com a instrução INTERPRET.

Em REXX, INTERPRET permite executar uma string como instruções da linguagem.

Imagine receber um texto de um usuário externo e executá-lo diretamente.

Se o conteúdo não for confiável, o resultado poderá ser extremamente perigoso.

A mesma categoria de problema aparece em outras linguagens quando desenvolvedores utilizam recursos equivalentes a eval com entradas não confiáveis.

Lição de segurança: nunca transforme dados fornecidos por usuários em comandos executáveis sem controles rigorosos.

Evitar a execução dinâmica de conteúdo externo costuma ser a abordagem mais segura.

Em sistemas empresariais, valide dados, restrinja permissões e utilize interfaces estruturadas.

Esse aviso já estava presente em 1995.

Os piratas digitais não nasceram ontem.

11. Episódio 10 — O grande segredo: REXX e a preservação dos sistemas legados

Uma das mensagens mais importantes do simpósio não estava relacionada a uma funcionalidade específica.

Era a preocupação com a continuidade tecnológica.

Melinda Varian registrou o receio de que a transferência da equipe de desenvolvimento provocasse perda de conhecimento.

Mike Cowlishaw explicou como a linguagem havia evoluído graças ao retorno de seus usuários.

Os participantes demonstraram interesse em manter a compatibilidade e ampliar a presença do REXX.

Tudo isso revela uma realidade que permanece fundamental nos ambientes mainframe.

Sistemas empresariais são construídos por pessoas.

Programas sobrevivem décadas porque equipes os mantêm, documentam, corrigem e adaptam.

Um sistema COBOL de 1985 pode continuar útil em 2026.

Mas sua manutenção dependerá de profissionais capazes de compreender tanto o código quanto as regras de negócio.

A idade do programa, isoladamente, não determina sua qualidade.

O que importa é sua confiabilidade, segurança, documentação, desempenho, suporte e capacidade de evolução.

Dica prática: seja um arqueólogo de código

Quando receber a missão de analisar um programa COBOL desconhecido, não comece alterando instruções.

Primeiro, investigue a estrutura.

Procure o PROGRAM-ID.

Identifique arquivos no FILE-CONTROL.

Examine os registros na FILE SECTION.

Observe variáveis na WORKING-STORAGE SECTION.

Localize o início do processamento na PROCEDURE DIVISION.

Procure instruções CALL, READ, WRITE, REWRITE, START e EXEC SQL.

Depois, construa um mapa das dependências.

Somente então prepare testes.

Se houver REXX associado ao processo, examine o que ele automatiza.

Se houver JCL, identifique o fluxo dos jobs.

Se houver CICS, investigue as transações, programas e recursos envolvidos.

Essa metodologia permite compreender o sistema antes de modificá-lo.

12. Episódio 11 — Um pequeno laboratório de automação

Vamos criar um segundo exemplo REXX.

Desta vez, nosso objetivo será validar dados numéricos antes de realizar um cálculo.

/* BELLVAL - VALIDACAO SIMPLES */

saldo = "1500.00"
deposito = "250.00"
saque = "100.00"

if \datatype(saldo, "N") |
   \datatype(deposito, "N") |
   \datatype(saque, "N") then do

   say "ERRO: VALOR NAO NUMERICO"
   exit 8
end

saldoFinal = saldo + deposito - saque

say "SALDO INICIAL:" saldo
say "DEPOSITO:" deposito
say "SAQUE:" saque
say "SALDO FINAL:" saldoFinal

exit 0

A função DATATYPE verifica características de um valor.

Com o argumento "N", podemos testar se o conteúdo corresponde a uma representação numérica aceita pelo interpretador.

O operador \ representa negação lógica.

O operador | representa OU lógico.

A estrutura IF ... THEN DO ... END permite executar várias instruções quando uma condição é verdadeira.

Esse exemplo é apenas uma validação introdutória.

Para operações financeiras reais, também seria necessário verificar escala decimal, limites, valores negativos, regras monetárias e consistência empresarial.

Exercício para o leitor

Modifique o programa para que o saque seja maior do que o saldo disponível.

Depois acrescente uma condição impedindo que o saldo fique negativo.

Uma possível solução é:

if saque > saldo + deposito then do
   say "ERRO: SALDO INSUFICIENTE"
   exit 12
end

Repare que agora estamos aproximando um script simples de uma regra de negócio.

É exatamente nesse ponto que o programador precisa pensar na responsabilidade de cada componente.

Uma validação feita em REXX não deve substituir os controles obrigatórios da aplicação COBOL que efetivamente processa a transação.

A segurança e a integridade devem ser garantidas no componente responsável pela operação.

13. Episódio 12 — Easter eggs e curiosidades do simpósio

Toda boa aventura possui seus segredos.

E o encontro de 1995 preservou alguns detalhes deliciosos para quem gosta da história da computação.

Easter egg 1 — A letra X de um milhão de dólares

Segundo Cowlishaw, a mudança do nome REX para REXX teria provocado custos internos estimados em aproximadamente um milhão de dólares.

O motivo envolvia atualizações de documentação e materiais já existentes.

Uma simples letra.

Um milhão de dólares.

É o tipo de história que demonstra como pequenas mudanças podem produzir enormes efeitos em ambientes corporativos.

Easter egg 2 — A mudança que quebrou milhões de programas

Cowlishaw também mencionou que a alteração de ARGS para ARG teria afetado aproximadamente 2,5 milhões de programas.

Essa quantidade era uma estimativa histórica apresentada pelo próprio criador da linguagem.

Para o programador COBOL iniciante, a lição é clara.

Alterar uma interface utilizada por outros sistemas pode produzir consequências muito maiores do que modificar uma variável local.

Compatibilidade é um patrimônio.

Easter egg 3 — O criador reconheceu os próprios erros

Cowlishaw comentou decisões que reconsideraria.

Entre elas estavam as comparações sensíveis a maiúsculas e minúsculas, o uso de DO em diferentes estruturas e a complexidade do mecanismo de parsing.

Essa atitude merece destaque.

Reconhecer limitações de projeto é uma qualidade importante de engenharia.

O fato de uma linguagem possuir milhões de usuários não significa que todas as escolhas originais tenham sido perfeitas.

Easter egg 4 — Perl virou motivo de brincadeira

Melinda Varian registrou uma piada em que Perl foi comparado ao REXX escrito apenas com caracteres especiais.

É uma brincadeira relacionada à conhecida densidade sintática de certas construções em Perl.

A curiosidade revela como as comunidades de programação já discutiam legibilidade, produtividade e estilos de linguagem.

Easter egg 5 — Os exemplos eram distribuídos em disquete

O simpósio começou com tutoriais apresentados por Chip Davis.

Os programas demonstrados foram disponibilizados no disquete do evento.

Hoje compartilhamos exemplos por repositórios digitais e plataformas de colaboração.

Naquela época, um pequeno disco magnético transportava parte do conhecimento técnico da conferência.

Easter egg 6 — Um problema real com ASCII, EBCDIC e PostScript

No final do relatório, Melinda Varian incluiu um exemplo de REXX e CMS Pipelines para processar um arquivo PostScript relacionado à proposta do padrão ANSI.

O arquivo apresentava diferenças nas terminações de linha e exigia conversões de caracteres.

A autora utilizou recursos de pipelines, conversão ASCII/EBCDIC e separação do documento em partes.

Esse trecho demonstra algo valioso: REXX também era uma ferramenta prática para resolver problemas de interoperabilidade entre sistemas.

Quem trabalha com mainframe conhece a importância de compreender codificações, formatos de registros e convenções de armazenamento.

Um arquivo aparentemente simples pode se tornar um quebra-cabeça quando atravessa plataformas.

14. Episódio 13 — O que o iniciante deve estudar depois dessa viagem?

A melhor maneira de aproveitar essa história é transformá-la em conhecimento prático.

Proponho uma trilha de estudos organizada em sete missões.

Missão 1 — COBOL básico. Aprenda a estrutura de um programa, campos PIC, instruções MOVE, DISPLAY, COMPUTE, IF, EVALUATE e PERFORM.

Missão 2 — JCL. Compreenda JOB, EXEC, DD, bibliotecas de carga, datasets, condições de execução e códigos de retorno.

Missão 3 — TSO/ISPF. Aprenda a navegar por bibliotecas, editar membros e localizar programas e jobs.

Missão 4 — REXX. Estude SAY, PARSE, IF, DO, DATATYPE, ADDRESS e o tratamento da variável RC.

Missão 5 — SDSF. Aprenda a consultar a execução de jobs, examinar saídas e interpretar mensagens.

Missão 6 — CICS e Db2. Conheça os fundamentos das aplicações transacionais e dos dados relacionais.

Missão 7 — Automação segura. Construa utilitários pequenos, documentados e testados para reduzir tarefas repetitivas.

O importante é não tentar aprender tudo simultaneamente.

Domine um fundamento.

Pratique.

Cometa erros em um ambiente autorizado de laboratório.

Leia as mensagens.

Corrija.

Depois avance.

Um programador não se torna experiente apenas assistindo a demonstrações.

Ele precisa executar, investigar e compreender.

15. Episódio 14 — O legado de 1995 em 2026

Trinta e um anos se passaram desde o simpósio.

O mercado de computação mudou profundamente.

A Internet se tornou infraestrutura essencial.

Linux passou a ocupar um lugar central em servidores e ambientes corporativos.

Serviços distribuídos, APIs, contêineres, computação em nuvem e inteligência artificial transformaram a maneira como construímos sistemas.

Mas COBOL continua presente em aplicações empresariais importantes.

REXX ainda é utilizado para automação em ambientes IBM Z.

JCL permanece essencial em muitos fluxos batch.

CICS e Db2 continuam associados a aplicações críticas.

Isso não significa que todos os planos apresentados em 1995 tenham se concretizado.

Alguns produtos evoluíram.

Outros perderam espaço.

Algumas arquiteturas foram substituídas por soluções diferentes.

O ponto importante é que a necessidade de integrar sistemas, preservar conhecimento e automatizar operações não desapareceu.

Ela apenas ganhou novas ferramentas.

Hoje podemos utilizar REXX para tarefas tradicionais, Python para automações externas, Zowe para interação com recursos z/OS, APIs para integração e ferramentas de DevOps para organizar entregas.

Cada tecnologia precisa ser avaliada conforme o ambiente, a segurança, o suporte e os objetivos do projeto.

A lição do simpósio é que modernização não começou com a computação em nuvem.

Ela já era uma preocupação concreta dos desenvolvedores de mainframe em 1995.

16. Episódio final — O último café da Bebop

Nossa nave retorna ao presente.

Spike Spiegel observa um antigo terminal.

Na tela, um programa COBOL apresenta seu resultado.

Ao lado, um pequeno exec REXX automatiza uma tarefa.

No spool do JES, um job termina normalmente.

Nada parece extraordinário.

Entretanto, cada componente carrega décadas de decisões arquiteturais, aprendizagem e engenharia.

O REXX nasceu da vontade de tornar a programação mais acessível.

O COBOL consolidou-se como instrumento fundamental para representar e executar regras empresariais.

O JCL organizou a execução de trabalhos.

O CICS ajudou a construir ambientes transacionais.

E os profissionais que desenvolveram essas tecnologias enfrentaram muitos dos mesmos problemas que encontramos hoje: produtividade, interoperabilidade, documentação, segurança e preservação do conhecimento.

O simpósio de 1995 nos ensina que o futuro raramente surge completamente separado do passado.

Muitas vezes ele nasce de uma melhoria aparentemente pequena, de uma necessidade operacional ou de uma ideia discutida entre programadores.

Como na jornada de Spike Spiegel, cada missão deixa alguma coisa para trás.

Algumas decisões não podem ser desfeitas.

Alguns erros continuam presentes.

Mas há sempre uma nova oportunidade para compreender melhor o sistema e construir uma solução mais elegante.

Para o novo programador COBOL, fica uma última recomendação.

Não trate o mainframe como uma caixa-preta.

Abra os manuais.

Leia os programas.

Experimente REXX.

Entenda JCL.

Investigue os jobs.

Aprenda com os profissionais que vieram antes.

E, quando encontrar um programa escrito há trinta ou quarenta anos, lembre-se de que alguém precisou imaginar, desenvolver, testar e colocar aquele código em produção.

Um sistema legado não é apenas um programa antigo. É uma história que continua sendo executada.

Até a próxima missão.

See you, Space Cowboy…


Referências históricas

  1. Melinda Varian — REXX Symposium, May 1995. Relatório do Sexto Simpósio Internacional de REXX, publicado em 1995.
    https://www.rexxla.org/events/1995/report.html

  2. Proceedings of the 6th International REXX Symposium. SLAC-R-95-464, Stanford Linear Accelerator Center.
    https://www.slac.stanford.edu/pubs/slacreports/reports21/slac-r-464.pdf

  3. Mike Cowlishaw — REXX 1995: The Growth of a Language. Apresentação histórica sobre as origens e a evolução do REXX, incluída nos anais do simpósio.

  4. REXX Language Association — Arquivo de apresentações históricas.
    https://www.rexxla.org/events/presentation.rsp

Nota editorial: os personagens e as situações envolvendo Spike Spiegel e a nave Bebop constituem uma homenagem narrativa a Cowboy Bebop. Não representam acontecimentos reais do simpósio. Os programas didáticos foram elaborados para este artigo, e não extraídos literalmente das apresentações históricas. Os números de mercado, previsões de lançamento e estimativas de produtividade são apresentados no contexto em que foram relatados em 1995.


Bellacosa Mainframe
Preservando o passado, compreendendo o presente e programando o futuro.

See you, Mainframe Cowboy…

sexta-feira, 2 de outubro de 2026

Inteligência Artificial e Engenharia de Prompts: o novo superpoder do programador COBOL no Mainframe

 

Bellacosa Mainframe e a inteligencia artificial no mundo cobol

Inteligência Artificial e Engenharia de Prompts: o novo superpoder do programador COBOL no Mainframe

Como utilizar IA para compreender sistemas legados, desenvolver programas COBOL, corrigir erros, otimizar aplicações e modernizar o ambiente IBM Z sem perder o controle sobre a tecnologia.

Por Vagner Bellacosa — Bellacosa Mainframe



1. Introdução — Quando a Inteligência Artificial encontra o COBOL

Imagine a seguinte situação.

Você é um programador COBOL trabalhando em uma instituição financeira. Numa bela segunda-feira, recebe uma solicitação aparentemente simples: modificar o cálculo de juros de um sistema bancário.

Até aqui, nenhuma novidade!

O problema começa quando você descobre que a aplicação foi desenvolvida há 35 anos, possui milhares de linhas de código, utiliza diversos COPYBOOKs, acessa tabelas Db2, processa arquivos VSAM e executa rotinas tanto em ambiente batch quanto em transações CICS.

Para completar, o programador original já se aposentou, a documentação está desatualizada e ninguém sabe explicar exatamente por que determinado parágrafo executa uma operação aparentemente desnecessária.

Bem-vindo ao maravilhoso universo dos sistemas legados!

Quem trabalha com mainframe conhece essa história. Muitas vezes, a dificuldade não está em escrever novas instruções COBOL, mas em compreender decisões arquitetônicas tomadas décadas atrás.

É justamente nesse cenário que a Inteligência Artificial começa a demonstrar seu verdadeiro potencial.

A grande revolução da IA no mainframe não consiste em substituir o COBOL, mas em ampliar a capacidade dos profissionais que trabalham com ele.

Ferramentas baseadas em modelos de linguagem podem auxiliar na compreensão de programas, geração de código, análise de dependências, elaboração de testes, documentação e investigação de erros.

Entretanto, existe um detalhe fundamental: uma IA não conhece automaticamente as particularidades de sua instalação z/OS, as regras comerciais de sua empresa ou os compromissos de compatibilidade assumidos por aplicações que funcionam há décadas.

Para obter resultados úteis, precisamos aprender a conversar tecnicamente com essas ferramentas.

E isso nos leva à engenharia de prompts.



2. O que é um prompt e por que ele importa para um programador COBOL?

Um prompt é uma instrução fornecida a um modelo de Inteligência Artificial para orientar sua resposta.

Podemos compará-lo a uma especificação funcional.

Quando um analista solicita a criação de um programa COBOL, precisa informar quais dados serão recebidos, quais operações devem ocorrer, quais resultados são esperados e como tratar situações excepcionais.

Com a IA ocorre algo semelhante.

Considere este pedido:

Escreva um programa COBOL para calcular juros.

O modelo provavelmente conseguirá produzir algum código. Entretanto, não saberá se estamos utilizando COBOL fixed-format, free-format, processamento batch, CICS ou uma versão específica do Enterprise COBOL.

Também não conhecerá a escala decimal exigida pela aplicação.

Agora compare com um prompt profissional:

Atue como programador sênior IBM Enterprise COBOL em ambiente z/OS. Desenvolva um programa batch, em formato fixo, para calcular juros simples utilizando campos COMP-3. Utilize precisão decimal, valide os dados de entrada, trate situações de overflow e apresente exemplos de execução. Explique cada divisão do programa e identifique pontos que exigem validação funcional.

A diferença é enorme.

O segundo pedido fornece contexto técnico e estabelece critérios de qualidade.

Os seis elementos de um bom prompt mainframe

1. Papel: determine qual especialidade a IA deve assumir.

Exemplo: analista COBOL, especialista Db2, operador z/OS ou engenheiro DevOps.

2. Ambiente: especifique a plataforma.

Exemplo: IBM z/OS, Enterprise COBOL 6.x, CICS, Db2, VSAM e JCL.

3. Objetivo: explique o problema que deseja resolver.

4. Restrições: informe formatos, regras de negócio, limites, convenções e aspectos de segurança.

5. Resultado esperado: solicite código, documentação, casos de teste ou análise técnica.

6. Validação: exija que a IA identifique suas hipóteses e explique como verificar o resultado.

Uma dica importante: peça sempre que o modelo diferencie informações comprovadas de suposições.

Isso reduz o risco de aceitar explicações tecnicamente convincentes, mas incorretas.



3. A IA como arqueóloga de sistemas legados

Existe uma atividade que todo programador mainframe conhece: a arqueologia de software.

Imagine abrir um programa COBOL desenvolvido em 1987.

Encontramos parágrafos como:

  • 1000-INICIALIZA

  • 2000-LE-ARQUIVO

  • 3000-PROCESSA

  • 4000-ATUALIZA

  • 9000-FINALIZA

Até aqui, tudo parece organizado.

Entretanto, quando investigamos a PROCEDURE DIVISION, encontramos centenas de PERFORMs, variáveis globais, regras comerciais espalhadas e chamadas a subprogramas cuja finalidade não está documentada.

A IA pode auxiliar nessa investigação.

Exemplo de prompt para compreender um programa antigo

Analise o programa COBOL fornecido. Identifique sua finalidade, entradas, saídas, arquivos utilizados, COPYBOOKs, chamadas externas, regras comerciais e tratamento de erros. Explique o fluxo de execução e identifique possíveis dependências. Não invente o conteúdo de módulos que não foram fornecidos.

O resultado pode servir como ponto de partida para construir documentação técnica.

Mas atenção!

A IA somente consegue analisar as dependências às quais teve acesso.

Se determinada rotina utiliza um COPYBOOK não fornecido, ela não poderá garantir a interpretação correta dos campos.

O mesmo vale para programas chamados dinamicamente, definições CICS, procedimentos JCL e estruturas de tabelas Db2.

Curiosidade histórica

O COBOL foi concebido no final da década de 1950, e sua primeira especificação surgiu em 1960.

Uma das ideias fundamentais era criar uma linguagem relativamente próxima da linguagem utilizada em atividades comerciais.

Décadas depois, modelos de IA conseguem interpretar muitos desses comandos quase como descrições de regras empresariais.

Há algo fascinante nisso!

Uma linguagem criada para facilitar a compreensão humana dos sistemas comerciais agora também permite que modelos de linguagem auxiliem na recuperação de conhecimento institucional.

É como se programas escritos há várias décadas recebessem uma nova oportunidade de explicar suas próprias histórias.



4. Laboratório prático — Desenvolvendo um programa COBOL com auxílio da IA

Vamos construir um exemplo simples.

Nosso objetivo será calcular juros simples sobre um capital de R$ 10.000,00, considerando uma taxa mensal de 1,5% durante 12 meses.

A fórmula é:

Juros = Capital × Taxa × Tempo

Portanto:

10.000 × 0,015 × 12 = 1.800

O resultado esperado é R$ 1.800,00.

Passo 1 — Descrever o problema para a IA

Informe o ambiente de execução, o formato do código, os tipos de dados e a fórmula.

Para este laboratório, utilizaremos campos numéricos decimais com representação COMP-3.

Passo 2 — Gerar o código

       IDENTIFICATION DIVISION.
       PROGRAM-ID. CALCJURO.

       DATA DIVISION.
       WORKING-STORAGE SECTION.

       01 WS-CAPITAL       PIC S9(11)V99 COMP-3
                           VALUE 10000.

       01 WS-TAXA          PIC 9V9(6) COMP-3
                           VALUE 0.015.

       01 WS-MESES         PIC 9(4) COMP
                           VALUE 12.

       01 WS-JUROS         PIC S9(11)V99 COMP-3.

       01 WS-INTERMED      PIC S9(15)V9(8) COMP-3.

       01 WS-JUROS-EDIT    PIC Z(11)9.99.

       PROCEDURE DIVISION.

           IF WS-CAPITAL < ZERO
              OR WS-TAXA > 1
              OR WS-MESES = ZERO
               DISPLAY "PARAMETROS INVALIDOS"
               MOVE 12 TO RETURN-CODE
               GOBACK
           END-IF

           COMPUTE WS-INTERMED =
               WS-CAPITAL * WS-TAXA * WS-MESES

           COMPUTE WS-JUROS ROUNDED =
               WS-INTERMED
               ON SIZE ERROR
                   DISPLAY "ERRO NO CALCULO"
                   MOVE 12 TO RETURN-CODE
                   GOBACK
           END-COMPUTE

           MOVE WS-JUROS TO WS-JUROS-EDIT

           DISPLAY "JUROS: " WS-JUROS-EDIT

           MOVE ZERO TO RETURN-CODE

           GOBACK.

O programa é didático, utiliza valores definidos internamente e precisa ser compilado e testado no ambiente de destino.

Passo 3 — Compreender os campos

O campo WS-CAPITAL utiliza:

PIC S9(11)V99 COMP-3

Isso representa um número decimal assinado, com onze posições inteiras e duas casas decimais, armazenado em formato decimal compactado.

O V representa uma posição decimal implícita.

Ele não ocupa uma posição física contendo um ponto decimal.

Já COMP-3 é particularmente importante em aplicações financeiras por representar valores decimais sem depender de aproximações de ponto flutuante binário.

O campo WS-INTERMED possui mais posições decimais para preservar resultados intermediários.

Entretanto, seu dimensionamento deve ser conferido conforme os limites reais de capital, taxa e prazo.

Passo 4 — Examinar o arredondamento

A instrução:

           COMPUTE WS-JUROS ROUNDED =
               WS-INTERMED

Solicita o arredondamento do resultado para a escala definida pelo campo de destino.

Isso merece atenção especial.

Em aplicações financeiras, diferenças mínimas podem causar divergências significativas quando milhões de registros são processados.

A IA pode explicar o comportamento esperado, mas o desenvolvedor precisa confirmar a regra de arredondamento exigida pelo negócio.

Passo 5 — Validar o resultado

O valor calculado deve ser:

JUROS: 1800.00

A formatação exata dependerá da máscara de edição e das convenções utilizadas.

O objetivo não é simplesmente executar o programa.

É verificar se o resultado corresponde à regra funcional.



5. IA e JCL — Automatizando a preparação de testes

Quem desenvolve COBOL em mainframe sabe que escrever o código não é suficiente.

Precisamos compilar, executar e analisar os resultados.

Em ambiente batch, isso normalmente envolve JCL.

A IA pode auxiliar na criação de modelos de JOBs, parametrização de datasets e interpretação de mensagens.

Considere um JCL didático para executar um programa já compilado e disponível numa biblioteca de carga.

//BCJURO   JOB (ACCT),'TESTE IA',
//             CLASS=A,MSGCLASS=X,
//             NOTIFY=&SYSUID
//STEP01   EXEC PGM=CALCJURO
//STEPLIB  DD DISP=SHR,
//             DSN=USR.COBOL.LOAD
//SYSPRINT DD SYSOUT=*
//SYSOUT   DD SYSOUT=*

As classes, a informação contábil e os nomes dos datasets precisam ser adaptados às normas da instalação.

Esse JOB não executa a compilação: ele pressupõe que o módulo CALCJURO já esteja disponível na biblioteca indicada.

Um prompt útil seria:

Analise este JCL para execução de um programa COBOL batch. Explique cada instrução, identifique dependências de configuração da instalação e sugira verificações para diagnosticar erros de execução. Não presuma que os nomes de datasets ou classes sejam válidos no meu ambiente.

Dica profissional

Solicite que a IA explique separadamente:

  • Erros de sintaxe JCL.

  • Falhas de alocação de datasets.

  • Problemas de autorização.

  • Return codes do programa.

  • ABENDs durante a execução.

Essa separação evita confundir problemas do sistema operacional com erros da lógica COBOL.


6. IA como assistente de depuração — Investigando ABENDs

Imagine que um programa encerrou com ABEND S0C7.

Esse código está frequentemente associado a uma exceção de dados decimais.

Uma situação clássica ocorre quando operações numéricas encontram conteúdo incompatível com a representação esperada.

A IA pode ajudar a organizar a investigação.

Exemplo de prompt

Estou investigando um ABEND S0C7 numa aplicação Enterprise COBOL em z/OS. Analise as mensagens disponíveis, o trecho do programa e os layouts de dados. Identifique possíveis causas relacionadas a dados numéricos inválidos, conversões, campos COMP-3 e movimentações entre áreas. Explique como confirmar cada hipótese utilizando informações do dump e do programa compilado.

O importante é fornecer evidências.

Sem o dump, a identificação da instrução envolvida e as estruturas de dados, a IA poderá oferecer hipóteses, mas dificilmente confirmar a causa exata.

Curiosidade — O perigo dos dados históricos

Sistemas antigos podem conter registros criados por diferentes versões de programas.

Um campo que hoje deveria armazenar números válidos pode ter recebido dados irregulares no passado.

Alterações de layout, validações insuficientes ou conversões inadequadas podem transformar esses registros em armadilhas para versões modernas.

Por isso, modernizar código não significa necessariamente modernizar os dados existentes.

Em muitos projetos, a qualidade histórica da informação representa um desafio tão grande quanto a manutenção do software.


7. IA, COBOL e Db2 — Investigando desempenho SQL

Outro campo promissor é a análise de SQL embutido em programas COBOL.

Considere:

           EXEC SQL
               SELECT SALDO
                 INTO :WS-SALDO
                 FROM CONTAS
                WHERE NUM_CONTA = :WS-CONTA
           END-EXEC

Uma IA pode explicar a consulta e identificar aspectos que merecem atenção:

A coluna NUM_CONTA possui índice adequado?

A consulta pode retornar mais de uma linha?

Como são tratados os SQLCODEs?

O programa considera valores nulos?

Existe concorrência entre atualizações?

O acesso ocorre dentro de um loop executado milhões de vezes?

Essa última pergunta é particularmente importante.

Imagine uma rotina que executa individualmente uma consulta SQL para cada um dos dez milhões de registros de um arquivo.

Mesmo que cada consulta seja rápida, a quantidade de operações poderá produzir um custo significativo.

A IA pode sugerir alternativas, como técnicas de processamento em conjuntos ou revisão da estratégia de acesso.

Entretanto, não devemos alterar SQL de produção sem examinar access paths, índices, estatísticas, concorrência e semântica transacional.

Uma modificação aparentemente simples pode aumentar o locking, alterar a consistência dos resultados ou comprometer o tempo disponível para processamento batch.


8. O grande desafio — Como impedir que a IA invente soluções?

Os modelos de linguagem possuem uma característica perigosa: podem produzir respostas incorretas com aparência de grande segurança técnica.

Esse fenômeno costuma ser chamado de alucinação.

Num ambiente mainframe, isso pode aparecer de várias maneiras.

A IA pode inventar uma opção de compilação, utilizar uma sintaxe COBOL incompatível com a versão instalada, sugerir um parâmetro JCL inexistente ou interpretar incorretamente uma mensagem do sistema.

O perigo é maior quando o desenvolvedor não possui conhecimento suficiente para reconhecer o erro.

Por isso, recomendo uma regra simples:

Nunca permita que a IA seja simultaneamente autora e única responsável pela validação de uma alteração.

O código precisa passar por ferramentas independentes.

A validação deve envolver o compilador, testes automatizados, comparação de resultados, revisão humana e, quando necessário, análise de desempenho.

Técnica dos três prompts

Uma metodologia interessante consiste em separar o trabalho em três interações.

Primeiro prompt — Desenvolvimento

Solicite a implementação da funcionalidade.

Segundo prompt — Revisão crítica

Peça uma análise independente do código, procurando problemas de overflow, precisão, compatibilidade e comportamento excepcional.

Terceiro prompt — Testes

Solicite uma matriz de testes com entradas, saídas esperadas e casos-limite.

Essa abordagem não garante correção, mas ajuda a explorar diferentes perspectivas.

O resultado final precisa continuar sendo confrontado com a execução real.


9. Ferramentas modernas — O mainframe também participa da revolução da IA

Durante muitos anos, o desenvolvimento mainframe ficou associado quase exclusivamente a terminais 3270.

Essas interfaces continuam extremamente úteis.

Entretanto, o ecossistema IBM Z também conta com ferramentas modernas de desenvolvimento.

IBM watsonx Code Assistant for Z

O watsonx Code Assistant for Z integra recursos de Inteligência Artificial voltados à compreensão, geração, explicação e modernização de aplicações mainframe.

Dependendo da versão e dos recursos disponíveis, pode auxiliar em atividades de análise e transformação de código.

O ponto mais interessante é que a IA pode participar da evolução de aplicações COBOL sem exigir que todo o sistema seja imediatamente reescrito em outra linguagem.

IBM Z Open Editor

Permite desenvolver programas COBOL e outros artefatos mainframe usando Visual Studio Code.

Oferece recursos como realce de sintaxe, navegação e suporte a estruturas comuns do ambiente.

O editor não deve ser confundido com um modelo de IA: ele fornece parte da infraestrutura na qual diferentes ferramentas podem trabalhar.

Zowe Explorer

Permite acessar recursos do z/OS por meio do VS Code, conforme os serviços disponíveis e as autorizações concedidas.

O desenvolvedor pode navegar por datasets, trabalhar com arquivos USS, submeter jobs e consultar resultados.

IBM Dependency Based Build

O IBM DBB auxilia na automação de processos de build e no tratamento das dependências entre componentes de aplicações mainframe.

Em conjunto com Git, pipelines e ferramentas de integração contínua, pode ajudar a aproximar o desenvolvimento COBOL das práticas modernas de DevOps.

Uma arquitetura interessante

Imagine o seguinte fluxo:

  1. O desenvolvedor recebe uma alteração funcional.

  2. Utiliza a IA para compreender o código existente.

  3. Solicita uma proposta de modificação.

  4. Revisa os campos, as regras e as dependências.

  5. Edita o programa no VS Code.

  6. Executa o processo de build no ambiente autorizado.

  7. Analisa os erros encontrados.

  8. Utiliza a IA para ajudar na investigação.

  9. Executa testes automatizados.

  10. Submete a alteração à revisão e aprovação.

Observe que a IA participa de diversas etapas, mas não substitui os mecanismos de engenharia necessários.


10. Engenharia de prompts aplicada ao trabalho diário

A melhor maneira de utilizar IA não é criar um prompt isolado para cada problema.

É construir uma biblioteca de prompts reutilizáveis.

Eu organizaria essa biblioteca em cinco categorias.

Prompt 1 — Compreensão de código

Atue como especialista COBOL. Explique a finalidade do programa fornecido, suas entradas, saídas, estruturas de dados, regras comerciais e dependências. Identifique informações não disponíveis e não invente componentes externos.

Prompt 2 — Diagnóstico de falhas

Analise as mensagens de erro de uma aplicação COBOL em z/OS. Classifique possíveis causas, relacione evidências disponíveis e apresente um procedimento de diagnóstico seguro em ambiente de testes.

Prompt 3 — Revisão de código

Revise o código COBOL apresentado. Procure problemas de precisão decimal, tratamento de erros, compatibilidade, inicialização de variáveis, desempenho e legibilidade. Explique os riscos antes de sugerir alterações.

Prompt 4 — Geração de testes

Elabore uma matriz de testes para esta rotina COBOL. Inclua situações normais, valores-limite, entradas inválidas, overflow, arredondamento e comportamentos excepcionais. Apresente os resultados esperados e as regras utilizadas para calculá-los.

Prompt 5 — Análise de impacto

Analise a alteração proposta considerando COPYBOOKs, programas chamados, layouts de arquivos, acessos Db2, definições CICS e JCL. Identifique dependências comprovadas, riscos potenciais e pontos que precisam ser investigados antes da implantação.

Esses prompts podem ser adaptados para diferentes projetos e armazenados em um repositório interno.

A vantagem está na padronização da qualidade das solicitações.


11. Um laboratório de cinco dias para aprender IA aplicada ao COBOL

Para um programador iniciante, proponho uma experiência prática organizada em cinco dias.

Dia 1 — Aprendendo a ler COBOL com IA

Escolha um programa pequeno.

Solicite que a IA explique a IDENTIFICATION DIVISION, DATA DIVISION, WORKING-STORAGE SECTION e PROCEDURE DIVISION.

Depois, confira manualmente cada explicação.

Objetivo: aprender a utilizar a IA como instrumento de estudo, não como fonte infalível.

Dia 2 — Criando uma rotina financeira

Desenvolva o programa de juros apresentado anteriormente.

Solicite a geração do código, revise os campos PIC e verifique os resultados.

Modifique a taxa, o capital e o prazo.

Objetivo: compreender como pequenas alterações nos dados influenciam os cálculos.

Dia 3 — Executando com JCL

Prepare um JOB para executar o programa compilado.

Submeta a execução em ambiente autorizado.

Consulte as mensagens produzidas e peça à IA que explique os resultados.

Objetivo: relacionar a lógica COBOL ao funcionamento do sistema operacional.

Dia 4 — Testando situações excepcionais

Crie casos de teste com valores extremos, taxa inválida e prazos inadequados.

Solicite que a IA identifique situações de risco.

Verifique se os resultados correspondem às regras estabelecidas.

Objetivo: desenvolver disciplina de testes.

Dia 5 — Documentando e evoluindo

Modifique a rotina para receber dados de entrada por meio de um arquivo ou uma estrutura parametrizada.

Solicite à IA documentação funcional e técnica.

Compare a versão original com a modificada.

Objetivo: compreender o ciclo completo de manutenção de uma aplicação.

Ao final, o aluno terá aprendido não apenas a escrever prompts, mas a investigar, implementar, testar e documentar soluções.


12. Segurança — Não entregue as chaves do mainframe para a IA

Este talvez seja o aspecto mais importante em ambientes corporativos.

Uma aplicação COBOL pode processar dados bancários, informações pessoais, registros comerciais, operações governamentais ou outros conteúdos sensíveis.

Copiar indiscriminadamente fontes, dumps e arquivos para serviços externos de IA pode criar riscos de confidencialidade e conformidade.

Antes de utilizar uma ferramenta, verifique as políticas de sua organização.

Sempre que necessário, utilize exemplos sintéticos ou informações previamente autorizadas.

Jamais inclua senhas, credenciais RACF, chaves criptográficas, tokens ou dados pessoais reais em prompts destinados a ferramentas não aprovadas.

Além disso, a IA deve operar com permissões compatíveis com a função do profissional.

Ter capacidade de sugerir uma alteração não significa possuir autorização para executá-la.

Uma boa arquitetura de IA corporativa precisa respeitar os mesmos controles de segurança e segregação de responsabilidades aplicados aos demais sistemas.


13. Curiosidades — O encontro entre uma linguagem de 1959 e a tecnologia do futuro

Existe certa ironia histórica nessa revolução.

O COBOL nasceu numa época em que computadores ocupavam salas inteiras e o armazenamento era medido em unidades que hoje parecem insignificantes.

A linguagem foi projetada para aplicações comerciais e para facilitar a descrição de procedimentos empresariais.

Décadas depois, continuamos utilizando COBOL em sistemas críticos.

Enquanto isso, a IA generativa ganhou destaque justamente pela capacidade de interpretar e produzir linguagem natural e código.

Agora imagine combinar esses dois mundos.

Um programa escrito em COBOL nos anos 1970 pode ser examinado por uma ferramenta de IA desenvolvida no século XXI.

O modelo pode auxiliar um profissional a compreender sua estrutura, explicar seus cálculos e levantar possíveis regras comerciais.

Mas há uma diferença fundamental entre compreender a sintaxe e conhecer a história de um sistema.

Um trecho aparentemente redundante pode existir porque, em determinado momento, uma legislação exigiu uma exceção.

Uma rotina incomum pode representar a solução para um problema ocorrido décadas atrás.

Um campo que ninguém utiliza diretamente pode fazer parte de uma interface compartilhada com outro programa.

Eliminar esses elementos sem investigar suas origens pode provocar consequências graves.

Easter egg — O fantasma do parágrafo 9999

Imagine encontrar o seguinte código:

       9999-ROTINA-ESPECIAL.
           IF WS-ANO = 1999
               PERFORM 9998-AJUSTE-ANTIGO
           END-IF.

O programador iniciante pergunta:

“Por que existe uma rotina para o ano de 1999 num sistema que estamos executando em 2026?”

A IA pode sugerir que se trata de código obsoleto.

Entretanto, será que esse campo representa realmente o ano corrente?

Será que a rotina ainda participa do reprocessamento de arquivos históricos?

Será que existe uma exigência de auditoria para reproduzir cálculos antigos?

Sem essas respostas, remover o parágrafo seria uma decisão precipitada.

Moral da história: no mainframe, até os fantasmas do passado podem possuir contratos de manutenção ativos!

Eis uma excelente lição para qualquer profissional que deseja utilizar IA na modernização de sistemas legados.


14. O futuro — Um assistente especializado em cada aplicação

Vamos imaginar um cenário mais avançado.

Uma organização possui centenas de aplicações COBOL, milhares de programas, COPYBOOKs, JCLs e documentos acumulados durante décadas.

Grande parte desse conhecimento está distribuída entre repositórios, bibliotecas, documentos e profissionais experientes.

Seria possível construir um assistente de IA especializado nesse ambiente?

Sim, desde que a arquitetura forneça acesso controlado às fontes de informação relevantes.

Uma abordagem é utilizar Retrieval-Augmented Generation, conhecida como RAG.

Em vez de depender exclusivamente do conhecimento geral do modelo, o sistema recupera informações de repositórios internos autorizados e utiliza esses documentos como contexto para responder.

Imagine perguntar:

Quais programas utilizam o COPYBOOK CLIENTE01 e quais interfaces poderão ser afetadas se alterarmos o tamanho do campo COD-CLIENTE?

Um assistente conectado a índices confiáveis, metadados e ferramentas de análise de dependências poderia ajudar a localizar componentes relacionados.

Entretanto, a resposta precisaria distinguir referências encontradas de dependências ainda não investigadas, como chamadas dinâmicas.

Outro exemplo:

Explique por que o programa FATB120 apresenta aumento de tempo de execução no fechamento mensal.

Para responder adequadamente, o assistente precisaria consultar métricas reais, históricos de execução, informações de SQL e registros operacionais.

Somente o código-fonte não seria suficiente.

É aqui que aparece uma oportunidade extraordinária: integrar o conhecimento tradicional dos especialistas mainframe com mecanismos modernos de recuperação, análise e Inteligência Artificial.


15. O programador COBOL será substituído?

Essa pergunta aparece frequentemente quando discutimos Inteligência Artificial.

Minha avaliação é que parte das atividades repetitivas de programação poderá ser automatizada, especialmente tarefas de documentação, geração de estruturas simples e preparação inicial de testes.

Entretanto, sistemas corporativos complexos exigem muito mais do que a capacidade de produzir instruções sintaticamente corretas.

É necessário compreender as regras do negócio, a arquitetura das aplicações, as dependências técnicas, as exigências de segurança e as consequências operacionais.

Um bom programador COBOL conhece aspectos que podem estar ausentes de qualquer documentação.

Ele sabe, por exemplo, que determinado processamento precisa terminar antes da abertura do expediente bancário.

Compreende que alterar a ordem de atualização de duas tabelas pode provocar inconsistências.

Reconhece que determinado COPYBOOK é compartilhado por diversos programas e que modificar um campo aparentemente simples pode exigir recompilações e testes extensivos.

A IA pode ajudar a localizar e organizar essas informações.

Mas não elimina a necessidade de profissionais capazes de interpretá-las e tomar decisões responsáveis.

Na realidade, vejo surgir um novo perfil profissional: o desenvolvedor COBOL capaz de combinar fundamentos sólidos de mainframe, ferramentas modernas e engenharia de prompts.

Esse profissional poderá trabalhar com maior produtividade e assumir desafios de análise e modernização que anteriormente exigiam enormes esforços manuais.


16. Dez mandamentos do programador COBOL que utiliza IA

  1. Conheça sua plataforma. Informe sempre o ambiente z/OS, a versão do compilador e as tecnologias envolvidas.

  2. Especifique antes de gerar. Um prompt bem elaborado começa com requisitos claros.

  3. Preserve a precisão decimal. Em aplicações financeiras, cada centavo precisa ser tratado corretamente.

  4. Respeite os sistemas legados. Código antigo não significa necessariamente código inútil.

  5. Nunca confie cegamente na IA. Verifique a sintaxe, as hipóteses e as regras funcionais.

  6. Compile e execute. Uma resposta convincente não substitui a validação real.

  7. Crie testes de regressão. Toda alteração precisa demonstrar que não comprometeu comportamentos existentes.

  8. Proteja as informações. Utilize somente ferramentas e dados autorizados pela organização.

  9. Documente suas descobertas. Transforme conhecimento individual em patrimônio técnico compartilhado.

  10. Continue estudando COBOL. Quanto mais você compreender a linguagem e o ambiente, melhores serão suas perguntas e decisões.


17. Conclusão — O Mainframe não ficou no passado. Ele trouxe o passado para o futuro!

Durante décadas, muita gente anunciou o desaparecimento do mainframe.

Depois vieram a arquitetura cliente-servidor, a internet, os sistemas distribuídos, a virtualização e a computação em nuvem.

Agora chegou a Inteligência Artificial.

E o mainframe continua participando da evolução tecnológica.

A diferença é que a IA oferece uma oportunidade especialmente interessante: tornar mais acessível o conhecimento acumulado em sistemas que evoluíram durante várias gerações de profissionais.

Podemos utilizar prompts para compreender programas antigos, desenvolver novas funcionalidades, analisar problemas, criar testes e documentar aplicações.

Podemos combinar ferramentas modernas com COBOL, JCL, CICS, Db2 e VSAM.

Podemos aproximar novos desenvolvedores de tecnologias consideradas difíceis e contribuir para preservar o conhecimento de especialistas experientes.

Mas o princípio fundamental permanece inalterado:

A Inteligência Artificial deve ampliar a competência do programador, nunca substituir seu senso crítico.

O futuro não pertence apenas a quem conhece COBOL.

Também não pertence exclusivamente a quem sabe escrever prompts.

Ele será construído por profissionais capazes de compreender profundamente os sistemas, utilizar novas ferramentas e validar cuidadosamente os resultados.

E, para quem deseja se tornar um verdadeiro Mestre Jedi do Mainframe, talvez essa seja uma das habilidades mais importantes dos próximos anos.

Afinal, como diríamos no universo Bellacosa Mainframe:

Que a força do COBOL esteja com você — e que sua IA nunca faça um COMMIT sem autorização!


Bellacosa Mainframe — Compartilhando conhecimento, preservando a história da computação e preparando uma nova geração de profissionais IBM Z.

Referências recomendadas para aprofundamento:

Nota técnica: os exemplos são didáticos e devem ser adaptados, compilados e testados em um ambiente autorizado antes de qualquer utilização operacional.

segunda-feira, 14 de setembro de 2026

💳 BELLACARD — Como seria um sistema de cartões de crédito dentro de um IBM Mainframe?

 

Bellacosa Mainframe e o processamento do cartão de credito

☕ Um Café no Bellacosa Mainframe

💳 BELLACARD — Como seria um sistema de cartões de crédito dentro de um IBM Mainframe?

Do “BIP!” da maquininha ao COBOL, CICS, Db2, MQ, JCL, RACF, criptografia, antifraude, clearing, settlement e bilhões de transações que ninguém percebe.

Imagine a cena.

Você entra numa cafeteria, pede um café, aproxima o cartão da maquininha e...

BIP!

TRANSAÇÃO APROVADA
R$ 17,50

Você guarda o cartão, pega o café e continua a vida.

Talvez tenham se passado dois segundos.

Para o consumidor, acabou.

Para um programador mainframe curioso, porém, aconteceu uma pequena maravilha tecnológica.

Aqueles poucos segundos podem envolver terminal de pagamento, adquirente, rede de cartões, banco emissor, sistemas de autorização, criptografia, verificação do cartão, consulta de limites, regras de segurança, sistemas antifraude, bancos de dados, logs, mensagens entre plataformas e uma resposta que precisa percorrer boa parte desse caminho no sentido contrário.

E ainda não acabou.

Mais tarde haverá processamento financeiro, clearing, settlement, conciliação, lançamento da compra, fechamento da fatura, eventual parcelamento, pagamento, contabilização, estorno, contestação e talvez até um chargeback.

A humilde compra do café abriu uma pequena saga computacional.

E é exatamente por isso que cartões de crédito são um excelente laboratório para entender por que mainframes existem.

Então coloque café na caneca.

Hoje construiremos mentalmente o:

💳 BELLACARD — Credit Card Processing System for z/OS



Não será o projeto real de nenhum banco ou bandeira. Será uma arquitetura didática para entendermos como tecnologias como COBOL, CICS, Db2, MQ, JCL/JES2, RACF, criptografia, SMF, WLM e Parallel Sysplex podem participar de um grande sistema financeiro.



🏪 Capítulo 1 — Tudo começa com R$ 100

Imagine uma compra:

CLIENTE:       JOÃO
VALOR:         R$ 100,00
ESTABELECIMENTO: CAFÉ DO MAINFRAME
FORMA:         CARTÃO

O cartão é apresentado.

A maquininha não conhece necessariamente o saldo da conta do cliente.

O estabelecimento também não.

A adquirente não é necessariamente quem concedeu o crédito.

Existe uma cadeia.

Simplificando:

CARDHOLDER
    │
    ▼
MERCHANT
    │
    ▼
ACQUIRER
    │
    ▼
CARD NETWORK
    │
    ▼
ISSUER

Visa e Mastercard, por exemplo, operam redes que conectam os participantes do ecossistema.

O banco emissor é quem conhece o cartão, sua situação, conta relacionada, limite e diversas regras necessárias para decidir se aquela operação pode prosseguir.

Portanto, eventualmente surge uma pergunta:

“Banco, você autoriza esta compra?”

É aí que nosso BELLACARD acorda.



📨 Capítulo 2 — Uma mensagem bate à porta

Imagine que recebamos uma representação simplificada da operação:

TRANSACTION TYPE : PURCHASE
CARD TOKEN        : 987654321
AMOUNT            : 100.00
CURRENCY          : BRL
MERCHANT ID       : 785932
MCC               : 5812
COUNTRY            : BRA
ENTRY MODE         : CONTACTLESS
DATE               : 20260914
TIME               : 031700

Sim.

03:17.

Quem acompanha o Bellacosa Mainframe sabe que esse horário nunca aparece por acidente.

😏

Nosso primeiro easter egg já foi registrado.

Em sistemas reais, mensagens de cartões podem utilizar padrões e protocolos próprios do setor, incluindo famílias baseadas em ISO 8583, além de APIs e formatos modernos dependendo da integração.

Para nosso iniciante COBOL, entretanto, vamos imaginar simplesmente um registro chegando ao mainframe.



🖥️ Capítulo 3 — CICS, atenda a porta!

Dentro do z/OS poderíamos possuir uma transação CICS:

AUTH

Sua missão:

processar uma solicitação de autorização.

Conceitualmente:

REQUEST
   │
   ▼
 CICS
   │
   ▼
AUTHORIZATION PROGRAM
   │
   ├── VALIDATE CARD
   ├── CHECK STATUS
   ├── CHECK LIMIT
   ├── CHECK RULES
   ├── CHECK RISK
   │
   ▼
APPROVE / DECLINE

Um pseudocódigo COBOL extremamente simplificado poderia parecer:

       PROCEDURE DIVISION.

           PERFORM VALIDATE-REQUEST
           PERFORM READ-CARD
           PERFORM CHECK-CARD-STATUS
           PERFORM CHECK-AVAILABLE-LIMIT
           PERFORM CHECK-RISK

           IF WS-AUTHORIZED
               PERFORM CREATE-AUTHORIZATION
               PERFORM RESERVE-LIMIT
               MOVE '00' TO WS-RESPONSE-CODE
           ELSE
               MOVE '05' TO WS-RESPONSE-CODE
           END-IF.

Não copie isso para instalar amanhã no banco. 😁

Estamos construindo um modelo didático.

O importante é compreender o fluxo.


💳 Capítulo 4 — O cartão existe?

Nossa primeira pergunta parece ridícula:

O cartão existe?

Mas sistemas robustos começam validando o básico.

Podemos possuir algo conceitualmente semelhante a:

CARD
---------------------------
CARD_ID
ACCOUNT_ID
CARD_TOKEN
STATUS
EXPIRATION_DATE
PRODUCT_CODE
BLOCK_CODE

O programa consulta:

SELECT STATUS,
       ACCOUNT_ID,
       EXPIRATION_DATE
FROM CARD
WHERE CARD_TOKEN = :WS-CARD-TOKEN

E descobre:

STATUS = ACTIVE

Ótimo.

Mas poderia encontrar:

BLOCKED
CANCELLED
EXPIRED
LOST
STOLEN

Nesse caso, dependendo das regras:

DECLINED

Observe algo importante para quem está aprendendo COBOL.

O programa não está simplesmente “fazendo contas”.

Ele está implementando regras de negócio.

Essa é uma das essências do COBOL empresarial.


🏦 Capítulo 5 — A conta e o limite

Encontramos a conta:

ACCOUNT_ID       = 100238
CREDIT_LIMIT     = 10000.00
AVAILABLE_LIMIT  = 5800.00
CURRENT_BALANCE  = 3400.00
PENDING_AUTH     = 800.00

A compra solicitada é:

100.00

Temos limite.

Mas cuidado.

Não deveríamos simplesmente fazer:

SUBTRACT 100 FROM AVAILABLE-LIMIT.

Por quê?

Porque provavelmente existem milhares de transações concorrentes.

Imagine duas compras quase simultâneas.

AVAILABLE LIMIT = R$ 500

COMPRA A = R$ 400
COMPRA B = R$ 400

Dois programas consultam:

R$ 500 disponível.

A conclui:

aprovado.

B conclui:

aprovado.

Parabéns.

Acabamos de autorizar R$ 800 usando R$ 500.

Bem-vindo ao maravilhoso universo da concorrência transacional.


🔒 Capítulo 6 — COMMIT e ROLLBACK não são frescura

Aqui começamos a compreender por que sistemas transacionais possuem mecanismos tão sofisticados.

Nossa operação poderia ser tratada como uma Unit of Work.

BEGIN UOW
    │
    ├── READ ACCOUNT
    │
    ├── CHECK LIMIT
    │
    ├── CREATE AUTHORIZATION
    │
    ├── RESERVE LIMIT
    │
    └── WRITE AUDIT
           │
           ▼
         COMMIT

Mas imagine:

CREATE AUTHORIZATION → OK
RESERVE LIMIT        → OK
WRITE SOMETHING      → ERROR

Não podemos deixar metade da operação concluída.

Precisamos de:

ROLLBACK

A ideia fundamental é:

Ou a unidade lógica de trabalho acontece de maneira consistente, ou voltamos ao estado apropriado.

Esse é um dos conceitos que um programador COBOL iniciante deveria tatuar mentalmente.

Em aplicações financeiras, inconsistência pode significar dinheiro.


🧠 Capítulo 7 — O limite existe, mas devemos autorizar?

Não necessariamente.

Imagine:

LIMITE DISPONÍVEL: R$ 20.000
COMPRA:            R$ 7.000

Matematicamente:

7000 < 20000

Então aprova?

Talvez.

Agora acrescente:

CLIENTE NORMALMENTE COMPRA: Brasil
HORÁRIO:                     03:17
VALOR MÉDIO:                 R$ 80
COMPRA ATUAL:                R$ 7.000
PAÍS:                        outro país
MERCHANT:                    desconhecido

🚨

Entra o Risk/Fraud Engine.


🚨 Capítulo 8 — O Sherlock Holmes das transações

O sistema antifraude pode observar dezenas ou centenas de sinais.

Por exemplo:

VALUE
TIME
COUNTRY
MERCHANT
MCC
DEVICE
TRANSACTION VELOCITY
HISTORICAL BEHAVIOR
AUTHENTICATION
PREVIOUS DECLINES
GEOGRAPHICAL PATTERNS

Imagine:

23:10 São Paulo
R$ 37,50

23:18 São Paulo
R$ 83,00

23:22 Tokyo
R$ 9.700

Não precisamos ser Hercule Poirot para levantar uma sobrancelha.

Nosso sistema poderia calcular:

RISK SCORE = 947

E possuir regras como:

000-300   LOW
301-700   MEDIUM
701-850   HIGH
851-1000  DECLINE/REVIEW

Atualmente esse ambiente pode combinar regras determinísticas, estatística, análise comportamental e machine learning.

Mas COBOL continua perfeitamente capaz de executar regras determinísticas essenciais.

IF WS-RISK-SCORE > 850
    MOVE 'N' TO WS-AUTHORIZED
END-IF.

Às vezes não precisamos de inteligência artificial.

Precisamos apenas de:

IF COISA-ABSURDA
   NÃO-FAÇA
END-IF

Uma tecnologia revolucionária conhecida desde tempos imemoriais como bom senso programado.


⚡ Capítulo 9 — Tudo isso precisa ser rápido

Esse é um requisito extraordinário.

O consumidor está esperando.

Ele não quer ver:

PROCESSANDO...

PROCESSANDO...

PROCESSANDO...

enquanto o sistema gera um relatório gerencial de 400 páginas.

Por isso workloads diferentes possuem prioridades diferentes.

Entra o WLM — Workload Manager.

Conceitualmente:

AUTHORIZATION     CRITICAL
PAYMENT           HIGH
CUSTOMER QUERY    HIGH
REPORTING         MEDIUM
ANALYTICS BATCH   LOWER

Quando existe competição por recursos, o sistema operacional precisa compreender que:

autorizar a compra do cliente é mais urgente do que imprimir o relatório do chefe.

Embora alguns chefes possam discordar.


📨 Capítulo 10 — MQ: nem todo mundo precisa esperar

Imagine que a compra foi aprovada.

Precisamos responder imediatamente.

Mas também queremos:

  • registrar eventos;

  • enviar notificação;

  • alimentar analytics;

  • avisar sistemas antifraude;

  • atualizar outros ambientes;

  • produzir informações para aplicações móveis.

Seria absurdo fazer o consumidor esperar tudo isso.

Então:

CICS AUTH
    │
    ├──────────────► RESPONSE
    │
    │
    └──────────────► MQ
                         │
               ┌─────────┼─────────┐
               ▼         ▼         ▼
             FRAUD    ANALYTICS   ALERT
                                   │
                                   ▼
                           "Compra aprovada"

Aqui aparece uma das grandes ideias de arquitetura:

separe o caminho crítico das tarefas que podem acontecer assincronamente.

IBM MQ encaixa-se maravilhosamente nesse tipo de integração.


🧾 Capítulo 11 — APPROVED não significa “acabou”

Esse é provavelmente um dos conceitos mais interessantes do sistema.

A compra foi autorizada:

AUTHORIZATION

VALUE  = 100.00
STATUS = PENDING

Mas autorização e lançamento financeiro definitivo são coisas diferentes.

Posteriormente chegam informações financeiras que precisam ser conciliadas com aquela autorização.

Simplificando:

AUTHORIZATION
      │
      ▼
PRESENTMENT
      │
      ▼
MATCHING
      │
      ▼
POSTING

Finalmente:

POSTED TRANSACTION

Por que essa separação?

Porque o mundo real é bagunçado.


🏨 Capítulo 12 — O hotel de R$ 1.000 que virou R$ 873,42

Você chega a um hotel.

Pode ocorrer uma autorização inicial:

R$ 1.000

Sua conta final acaba sendo:

R$ 873,42

Agora nosso sistema precisa compreender que existe relacionamento entre as operações.

Situações semelhantes aparecem em:

  • hotéis;

  • locadoras;

  • restaurantes;

  • postos;

  • cancelamentos;

  • ajustes;

  • estornos.

Portanto:

AUTHORIZATION ≠ FINAL TRANSACTION

Esse é um daqueles detalhes que parecem insignificantes até você precisar construir o sistema.

Então tornam-se gigantescos.


📦 Capítulo 13 — E das profundezas surge o BATCH

Durante o dia, imagine:

CICS
CICS
CICS
CICS
CICS
CICS
CICS

Transações chegando continuamente.

Em paralelo ou em determinados ciclos, precisamos executar processamento massivo.

Entra:

JES2 + JCL + COBOL Batch

Poderíamos possuir uma cadeia didática:

RECEIVE CLEARING
       │
       ▼
VALIDATE
       │
       ▼
MATCH AUTHORIZATION
       │
       ▼
POST TRANSACTION
       │
       ▼
UPDATE ACCOUNT
       │
       ▼
BILLING
       │
       ▼
SETTLEMENT
       │
       ▼
RECONCILIATION

Um JCL fictício:

//BELCARD JOB ...
//STEP010 EXEC PGM=BCLR001
//STEP020 EXEC PGM=BVAL001
//STEP030 EXEC PGM=BMAT001
//STEP040 EXEC PGM=BPOS001
//STEP050 EXEC PGM=BBIL001
//STEP060 EXEC PGM=BSET001

Cada programa possui responsabilidade específica.

Isso permite restart, controle, auditoria e operacionalização muito melhores do que construir um monstro chamado:

FAZTUDO.CBL

com 187 mil linhas.

Embora algum arqueólogo de sistemas provavelmente já tenha encontrado algo parecido.


🧮 Capítulo 14 — A fábrica de faturas

Chegamos ao billing.

Para cada conta precisamos considerar:

SALDO ANTERIOR
+
COMPRAS
+
PARCELAS
+
ENCARGOS
+
JUROS
-
PAGAMENTOS
-
CRÉDITOS
-
ESTORNOS
=
NOVO SALDO

Em COBOL:

COMPUTE WS-NEW-BALANCE =
        WS-PREVIOUS-BALANCE
      + WS-PURCHASES
      + WS-INSTALLMENTS
      + WS-FEES
      + WS-INTEREST
      - WS-PAYMENTS
      - WS-CREDITS.

E aqui COBOL está em casa.

Valores decimais, regras empresariais, processamento de registros e grandes volumes de dados são precisamente o tipo de problema para o qual COBOL nasceu.


🇧🇷 Capítulo 15 — A entidade brasileira chamada PARCELAMENTO

Agora compramos:

R$ 1.200 em 12x

Nosso sistema registra:

PURCHASE_ID = 9838172
TOTAL       = 1200.00
QTY         = 12

E teremos:

01/12  100
02/12  100
03/12  100
...
12/12  100

Parece simples.

Até alguém perguntar:

“E se houver estorno na parcela 7?”

Ou:

“E se for estorno parcial?”

Ou:

“E se o cliente contestar a compra?”

Ou:

“E se houver renegociação?”

Ou:

“E se existir juros?”

Ou:

“E se o comerciante fizer refund?”

É assim que programas pequenos envelhecem e viram programas COBOL de 30 mil linhas.

Não necessariamente porque os programadores antigos eram malucos.

Frequentemente porque 30 anos de realidade foram sendo incorporados ao código.

Essa é uma lição importantíssima para quem entra hoje no mainframe.

Código legado muitas vezes é também:

regra de negócio fossilizada.

Não apague antes de descobrir por que existe.


🔐 Capítulo 16 — RACF: não, estagiário, você não pode consultar todos os cartões

Nosso BELLACARD contém informações extremamente sensíveis.

Precisamos controlar:

WHO
CAN DO WHAT
TO WHICH RESOURCE
UNDER WHICH CONDITIONS

RACF pode participar do controle de acesso ao ambiente z/OS.

Podemos proteger datasets, transações, usuários, grupos e diversos recursos.

Conceitualmente:

USER VAGNER
    │
    ├── AUTH → READ/EXECUTE
    ├── BILL → READ
    └── ADMIN → NO ACCESS

O princípio essencial é:

LEAST PRIVILEGE.

Um programa deve possuir apenas os acessos necessários.

Um operador também.

Um desenvolvedor também.

E definitivamente ninguém deveria possuir acesso porque:

“Vai que um dia eu precise.”


🔑 Capítulo 17 — E as chaves criptográficas?

Agora entramos em território ainda mais sensível.

Cartões envolvem criptografia, autenticação, tokens, PINs e material criptográfico.

A regra de ouro é:

chaves críticas não devem virar variáveis COBOL espalhadas pela aplicação.

Algo como:

01 SUPER-SECRET-KEY PIC X(32)
   VALUE 'MINHACHAVE123...'.

é praticamente uma carta de demissão escrita em COBOL.

😂

Ambientes financeiros utilizam infraestrutura criptográfica especializada e HSMs — Hardware Security Modules — para determinadas operações e proteção de chaves.

A aplicação solicita uma operação criptográfica.

O segredo permanece protegido.


🕵️ Capítulo 18 — “Eu não fiz essa compra.”

Três meses depois o cliente telefona:

Eu nunca fiz essa compra.

O sistema precisa reconstruir o passado.

Queremos saber:

QUANDO?
QUAL CARTÃO?
QUAL MERCHANT?
QUAL VALOR?
QUAL CANAL?
QUAL RESPOSTA?
QUAL SISTEMA?
QUAL REGRA?
QUAL RESULTADO?

Logs e trilhas de auditoria tornam-se fundamentais.

No universo z/OS, SMF e informações produzidas pelos subsistemas ajudam a construir observabilidade e auditoria.

Nosso sistema deveria conseguir reconstruir algo como:

03:17:00.103 REQUEST RECEIVED
03:17:00.108 CARD VALIDATED
03:17:00.112 STATUS ACTIVE
03:17:00.119 LIMIT OK
03:17:00.127 RISK SCORE 214
03:17:00.133 AUTH CREATED
03:17:00.139 LIMIT RESERVED
03:17:00.145 COMMIT
03:17:00.151 APPROVED

E aí descobrimos outra característica dos sistemas financeiros:

não basta fazer certo. Precisamos conseguir demonstrar posteriormente o que aconteceu.


🏰 Capítulo 19 — E se o mainframe cair?

Imagine milhões de pessoas tentando pagar almoço e recebendo:

HOST UNAVAILABLE

O problema deixa rapidamente de ser “um incidente de TI”.

Vira problema comercial, financeiro e reputacional.

Daí entram conceitos de alta disponibilidade e arquiteturas como Parallel Sysplex.

Didaticamente:

                 REQUESTS
                     │
                     ▼
               WORKLOAD ROUTING
                     │
          ┌──────────┴──────────┐
          ▼                     ▼
       z/OS A                 z/OS B
        CICS                   CICS
          │                     │
          └──────────┬──────────┘
                     ▼
                   Db2
               Data Sharing

Falhou um componente?

A arquitetura é desenhada para evitar que isso necessariamente signifique:

TODO MUNDO PARA.

É aqui que redundância, recuperação, data sharing, workload management, automação operacional e engenharia de resiliência deixam de ser palavras bonitas de PowerPoint.


🏙️ Capítulo 20 — As duas cidades do cartão

Eu gosto de imaginar o BELLACARD dividido em duas grandes cidades.

⚡ Cidade Online

Seu prefeito é o CICS.

Sua pergunta principal:

POSSO COMPRAR?

REQUEST
   │
   ▼
CICS
   │
   ▼
CARD
LIMIT
RISK
RULES
   │
   ▼
YES / NO

Velocidade, disponibilidade e consistência dominam essa cidade.


🏭 Cidade Financeira

Aqui vivem:

Db2 + COBOL Batch + JES2 + MQ + sistemas contábeis.

Sua pergunta é diferente:

O QUE ACONTECEU COM O DINHEIRO?

AUTHORIZATION
      ↓
TRANSACTION
      ↓
POSTING
      ↓
ACCOUNT
      ↓
STATEMENT
      ↓
PAYMENT
      ↓
ACCOUNTING
      ↓
RECONCILIATION

Aqui cada centavo precisa encontrar seu destino.


🧩 Capítulo 21 — Afinal, onde cada tecnologia entra?

Agora nosso iniciante consegue enxergar o tabuleiro inteiro.

COBOL
│
├── business rules
├── authorization
├── billing
├── posting
└── batch processing

CICS
│
├── online transactions
├── transaction management
└── units of work

Db2
│
├── accounts
├── cards
├── authorizations
├── transactions
└── statements

MQ
│
├── asynchronous messaging
├── events
├── integration
└── notifications

JCL/JES2
│
├── batch
├── billing
├── reconciliation
└── settlement processing

RACF
│
└── access control

CRYPTO/HSM
│
└── sensitive cryptographic operations

SMF/MONITORING
│
├── auditing
└── observability

WLM
│
└── workload priorities

PARALLEL SYSPLEX
│
└── availability/scalability

Percebe a diferença?

Agora COBOL, CICS, Db2, MQ e JCL deixaram de ser matérias isoladas de um curso.

Cada tecnologia apareceu porque tínhamos um problema para resolver.

É assim que eu gosto de ensinar mainframe.


🎓 Capítulo 22 — Construindo o BELLACARD como projeto educacional

Eu transformaria essa arquitetura numa trilha prática.

O aluno começa pequeno.

Nível 1 — COBOL

Criar:

CUSTOMER
CARD
ACCOUNT

Depois:

PURCHASE
PAYMENT
LIMIT

Finalmente:

STATEMENT

Nível 2 — Arquivos

Guardar clientes e contas.

Começar sequencialmente.

Depois introduzir VSAM.

Agora o aluno entende por que acesso indexado importa.


Nível 3 — Db2

Migramos para:

CUSTOMER
ACCOUNT
CARD
AUTHORIZATION
TRANSACTION
PAYMENT
STATEMENT

Aprendemos:

SELECT
INSERT
UPDATE
DELETE
COMMIT
ROLLBACK

Não como comandos aleatórios de SQL.

Mas porque nosso banco precisa deles.


Nível 4 — CICS

Criamos:

AUTH = Authorization
ACCT = Account Inquiry
PAYM = Payment
BLCK = Block Card

Agora nosso COBOL deixou de ser apenas batch.

Temos um pequeno sistema transacional.


Nível 5 — MQ

A compra aprovada produz:

CARD.PURCHASE.APPROVED

Outro consumidor recebe.

Depois outro.

Aprendemos arquitetura assíncrona.


Nível 6 — Batch

Criamos:

POSTING
BILLING
PAYMENT PROCESSING
STATEMENT GENERATION
RECONCILIATION

Finalmente o aluno entende por que empresas ainda executam workloads batch gigantescos.


Nível 7 — Segurança

Introduzimos:

RACF
AUDIT
CRYPTOGRAPHY
TOKENIZATION

Agora nosso brinquedo começa a parecer uma plataforma empresarial.


Nível 8 — Operação

Provocamos problemas.

DB2 TIMEOUT
MQ QUEUE FULL
CICS ABEND
JOB RC=12
DATASET FULL
AUTHORIZATION LATENCY

E perguntamos:

O que o suporte N2 faria?

Depois:

E o N3?

Agora nasceu uma pequena War Room BELLACARD.


🔥 Capítulo 23 — O exercício mais importante: quebrar o sistema

Eu faria questão de criar erros propositalmente.

Por exemplo:

AVAILABLE LIMIT = 500

Disparamos simultaneamente:

PURCHASE A = 400
PURCHASE B = 400

Se ambas forem aprovadas incorretamente, descobrimos uma falha de concorrência.

Outro teste:

INSERT AUTHORIZATION = SUCCESS
UPDATE LIMIT         = FAILURE

O sistema ficou inconsistente?

Se sim:

faltou tratar corretamente a unidade de trabalho.

Outro:

MQ unavailable

A autorização precisa parar?

Talvez não.

Essa pergunta ensina arquitetura melhor que vinte slides.


👻 Capítulo 24 — O fantasma das 03:17

Chegamos ao easter egg.

Todos os dias exatamente às:

03:17

o BELLACARD começa a apresentar:

AUTH RESPONSE TIME
120ms
180ms
350ms
900ms
2.1s

Nenhum erro.

CPU normal.

Db2 aparentemente normal.

MQ normal.

CICS sem ABEND.

Mas a latência explode durante sete minutos.

Nosso programador iniciante recebe seu primeiro chamado:

INCIDENT #0317

SEVERITY: HIGH
DESCRIPTION:
Intermittent authorization latency.

Começa a investigação.

RMF.

SMF.

CICS statistics.

Db2 accounting.

WLM.

JES2.

Até descobrir...

Um antigo job chamado:

//MONSTR17 JOB

executado diariamente às 03:17, realizando uma consulta monstruosa contra tabelas utilizadas pelo sistema online.

O programa foi criado em 1997.

O comentário no topo:

      * DO NOT REMOVE.
      * BUSINESS REQUIREMENT.
      * JSMITH - 1997-04-13

Ninguém sabe quem é JSMITH.

Ninguém sabe qual era o requisito.

Mas todos têm medo de remover.

🤣

Bem-vindo ao mainframe corporativo.


🧠 Curiosidade — O verdadeiro patrimônio não é apenas o código

Esse é talvez o conhecimento mais importante de todo o artigo.

Quando alguém encontra um programa COBOL com milhares de linhas, pode pensar:

“Que coisa velha.”

Mas aquele programa pode conter décadas de:

  • regras;

  • exceções;

  • regulamentações;

  • incidentes;

  • fraudes descobertas;

  • produtos descontinuados;

  • produtos ainda ativos;

  • acordos comerciais;

  • tratamentos especiais;

  • correções;

  • conhecimento empresarial.

É quase arqueologia.

Um comentário de 1997 pode explicar por que determinada operação de 2026 ainda funciona.

Por isso modernização responsável começa com:

compreender antes de substituir.


🏛️ Capítulo 25 — O mainframe como cidade invisível

Voltamos finalmente à cafeteria.

Você aproximou o cartão.

BIP!

Apareceu:

APROVADO

Você levou seu café.

Talvez nunca pense novamente naquela transação.

Mas atrás daquele pequeno momento poderia existir conceitualmente uma cidade inteira:

                   💳 CARD
                      │
                      ▼
                 POS / APP
                      │
                      ▼
                  ACQUIRER
                      │
                      ▼
               CARD NETWORK
                      │
                      ▼
╔══════════════════════════════════════╗
║               IBM Z                  ║
║                                      ║
║              CICS                    ║
║                │                     ║
║       ┌────────┼────────┐            ║
║       ▼        ▼        ▼            ║
║     CARD     LIMIT     RISK          ║
║       │        │        │            ║
║       └────────┼────────┘            ║
║                ▼                     ║
║               Db2                    ║
║                │                     ║
║               MQ                     ║
║                                      ║
║   COBOL • JCL • JES2 • RACF • SMF   ║
║        WLM • CRYPTO • SYSPLEX        ║
╚══════════════════════════════════════╝
                      │
                      ▼
                   APPROVED

O consumidor viu:

APROVADO.

O mainframer vê:

arquitetura.


☕ Conclusão — o BIP que esconde uma catedral

Talvez essa seja uma das melhores maneiras de explicar mainframe para alguém que está começando.

Não comece dizendo:

“COBOL possui DIVISION, SECTION e PARAGRAPH.”

Comece dizendo:

“Você acabou de passar um cartão. Quer descobrir o que pode existir atrás daquele BIP?”

Então COBOL ganha propósito.

CICS ganha propósito.

Db2 ganha propósito.

MQ ganha propósito.

JCL ganha propósito.

RACF ganha propósito.

SMF ganha propósito.

WLM ganha propósito.

Parallel Sysplex ganha propósito.

O iniciante deixa de decorar siglas e começa a compreender problemas.

E tecnologia empresarial é exatamente isso:

uma coleção de soluções para problemas que ficaram grandes demais para serem resolvidos de qualquer jeito.

Da próxima vez que aproximar seu cartão e ouvir:

BIP!

talvez você enxergue algo diferente.

Não apenas uma compra.

Mas uma mensagem atravessando redes, chegando a sistemas que verificam identidade, estado, crédito e risco; uma unidade de trabalho sendo protegida; registros sendo preservados; eventos sendo produzidos; sistemas financeiros preparando o que acontecerá depois.

Tudo isso para devolver uma pequena palavra:

       ┌────────────────────────┐
       │                        │
       │       APPROVED         │
       │                        │
       │         RC=00          │
       │                        │
       └────────────────────────┘

E talvez exista, em algum canto de algum sistema que ninguém ousa desligar, um programa COBOL escrito décadas atrás, trabalhando silenciosamente para que seu café seja pago.

Sem aplausos.

Sem interface bonita.

Sem ninguém perceber.

Como tantas outras coisas no mainframe.

Porque a melhor infraestrutura é aquela que desaparece atrás do serviço que presta.

E enquanto o mundo vê apenas o BIP, nós sabemos que atrás dele pode existir uma verdadeira catedral transacional construída byte por byte, regra por regra e geração por geração de programadores.

☕ Um Café no Bellacosa Mainframe

Onde até uma compra de R$ 17,50 pode acabar em CICS, Db2, COBOL e uma War Room às 03:17.



☕ Um Café no Bellacosa Mainframe

🕵️ The Mentalist no Mainframe — O Caso dos R$ 100 que Atravessaram um Sistema de Cartões

Entenda como uma compra de R$ 100 atravessa POS, adquirente, bandeira, emissor, autorização, plafond, clearing, settlement, cobrança, contabilidade e reconciliação em um ambiente bancário e mainframe.

💳 Como funciona uma transação de cartão de crédito?

Uma compra aparentemente simples percorre diversos participantes e sistemas. O cliente apresenta o cartão ao estabelecimento, a maquininha envia a transação ao adquirente, a rede encaminha a solicitação ao emissor e o banco verifica cartão, conta, produto, plafond, regras e risco antes de autorizar ou recusar.

Depois da autorização, a transação ainda pode passar por reversal, clearing, settlement, faturamento, cobrança, contabilização, reconciliação, disputa e chargeback.

Principais assuntos: IBM Mainframe, IBM Z, COBOL, CICS, Db2, cartões de crédito, POS, adquirente, emissor, autorização, plafond, clearing, settlement, tarifas, cobrança, contabilidade e reconciliação.

🔎 Ler o artigo original: The Mentalist no Mainframe

Bellacosa Mainframe — conteúdo educacional sobre IBM Z, COBOL, CICS, sistemas bancários e processamento de cartões.

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...