☕ 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 cartões. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta cartões. Mostrar todas as mensagens

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.

quarta-feira, 23 de outubro de 2024

🕶️ DIABOLIK NO MAINFRAME — O Roubo Perfeito e o Risk Score que Percebeu Tudo

 

Bellacosa Mainframe e o Risk Score

☕ Um Café no Bellacosa Mainframe

🕶️ DIABOLIK NO MAINFRAME — O Roubo Perfeito e o Risk Score que Percebeu Tudo

Fraude, AML, comportamento, dispositivos, transações, grafos e Risk Scoring em tempo real — porque o criminoso perfeito não precisa cometer um erro. Basta fazer algo que não combine com a vítima.

Há uma diferença fundamental entre um ladrão comum e Diabolik.

O ladrão comum tenta abrir a porta.

Diabolik já sabe onde está a chave.

O ladrão comum aparece diante da câmera.

Diabolik estudou o ângulo morto.

O ladrão comum rouba o cartão.

Diabolik prefere que o banco continue acreditando que o verdadeiro dono está usando o cartão.

E é justamente por isso que ele é um excelente personagem para entendermos o Risk Scoring moderno.

Imagine uma noite qualquer.

03:17.

Em algum lugar da cidade, um cliente chamado João dorme tranquilamente.

Seu cadastro no banco diz:

CUSTOMER: JOAO
KYC: OK
PEP: NO
SANCTIONS: NO
ACCOUNT AGE: 8 YEARS
RISK: LOW

Tudo parece normal.

O problema é que João não está usando sua conta.

Diabolik está.

E nosso sistema tem poucos milissegundos para perceber isso.

Bem-vindo ao estranho mundo onde conhecer a identidade do cliente já não basta.



🕶️ CAPÍTULO 1 — Diabolik não quer parecer Diabolik

O Risk Scoring tradicional tinha uma visão relativamente confortável do mundo.

O cliente chegava, apresentava seus documentos, passava pelas verificações necessárias e recebia determinada classificação:

LOW
MEDIUM
HIGH

Era quase uma fotografia.

No momento em que João abriu sua conta, o banco verificou identidade, endereço, documentos, profissão, renda e outros elementos necessários ao processo.

Depois disso:

JOAO = LOW RISK

O problema está na palavra é.

João não é necessariamente LOW RISK.

João estava associado a determinado nível de risco naquele contexto e naquele momento.

Meses depois, muita coisa pode ter mudado.

O cliente pode trocar de telefone, viajar, mudar endereço, começar a movimentar valores diferentes, adicionar beneficiários, alterar senhas e utilizar novos dispositivos.

E existe ainda uma possibilidade mais inquietante:

João continua sendo João.

Mas alguém conseguiu assumir sua identidade digital.

Diabolik não precisa modificar o cadastro.

Pelo contrário.

Quanto menos alterar, melhor.



🎭 CAPÍTULO 2 — A melhor máscara é uma identidade verdadeira

Essa é uma das ideias mais interessantes da fraude digital.

Imagine que um criminoso tenha:

CPF correto
nome correto
endereço correto
data de nascimento correta
credenciais corretas

Uma verificação baseada exclusivamente em identidade pode encontrar:

IDENTITY = VALID

E isso pode ser perfeitamente verdadeiro.

A identidade realmente existe.

O problema é outro:

quem está controlando aquela identidade naquele instante?

É uma diferença monumental.

Podemos ter:

IDENTITY RISK = LOW

e simultaneamente:

BEHAVIOR RISK = HIGH
DEVICE RISK   = HIGH
SESSION RISK  = HIGH

Por isso o Risk Scoring moderno deixa de perguntar apenas:

Quem é você?

E começa a perguntar:

O que está acontecendo?



📸 CAPÍTULO 3 — O velho sistema guardava fotografias

Vamos imaginar um sistema fictício chamado BELLABANK.

No cadastro de João encontramos:

CUSTOMER-ID : 00091827364
NAME        : JOAO SILVA
KYC-STATUS  : APPROVED
PEP-FLAG    : N
AML-RISK    : LOW
COUNTRY     : BR

Excelente.

Só que o cadastro não consegue contar sozinho a história seguinte:

03:17 NEW DEVICE

03:19 PASSWORD RESET

03:21 NEW BENEFICIARY

03:22 TRANSFER R$ 9.800

Cada evento isoladamente pode ser legítimo.

Pessoas compram celulares.

Pessoas esquecem senhas.

Pessoas cadastram beneficiários.

Pessoas transferem R$9.800.

Mas a sequência inteira é muito mais interessante.

É aí que começamos a sair da fotografia e entrar no filme.


Bellacosa Mainframe e o risk scoring

🎬 CAPÍTULO 4 — Risk Scoring transforma fotografia em filme

No modelo contínuo, o cliente não recebe apenas uma etiqueta eterna.

Podemos imaginar:

09:00 RISK = 12

Compra café.

09:17 RISK = 11

Usa o mesmo celular.

12:30 RISK = 10

Compra almoço num estabelecimento habitual.

Tudo normal.

Então:

03:17 NEW DEVICE

Score:

10 -> 22

Logo depois:

PASSWORD RESET

Score:

22 -> 39

Novo beneficiário:

39 -> 58

Transferência incomum:

58 -> 84

Diabolik ainda possui usuário e senha corretos.

O cadastro continua correto.

Mas agora o sistema diz:

IDENTITY = OK

BEHAVIOR = NOT OK

Esse é o coração da mudança.



🧮 CAPÍTULO 5 — O Risk Score entra em cena

Para um programador COBOL iniciante, podemos começar pensando em algo simples:

RISK-SCORE = 0

Cada fator acrescenta ou reduz pontos:

IF NEW-DEVICE = 'Y'
   ADD 10 TO RISK-SCORE
END-IF

IF PASSWORD-RESET = 'Y'
   ADD 15 TO RISK-SCORE
END-IF

IF NEW-BENEFICIARY = 'Y'
   ADD 20 TO RISK-SCORE
END-IF

IF UNUSUAL-AMOUNT = 'Y'
   ADD 25 TO RISK-SCORE
END-IF.

Teríamos:

10 + 15 + 20 + 25 = 70

E poderíamos estabelecer:

00-20 LOW
21-40 MEDIUM
41-60 HIGH
61-100 CRITICAL

É apenas um exemplo didático. Um sistema real exigiria muito mais cuidado com pesos, regras, contexto, validação, calibração e governança.

Mas a essência está aqui:

SIGNALS
   ↓
WEIGHTS
   ↓
RULES
   ↓
SCORE
   ↓
DECISION

💎 CAPÍTULO 6 — Nem todo diamante vale os mesmos pontos

Aqui Diabolik começa a rir do nosso programa COBOL.

Porque ele percebeu uma fragilidade.

Se nosso modelo simplesmente somar:

NEW DEVICE        +10
PASSWORD RESET    +10
NEW BENEFICIARY   +10
TRANSFER          +10

teremos:

RISK = 40

Mas talvez essa combinação específica represente risco muito maior.

É a diferença entre observar quatro acontecimentos e observar uma história formada por quatro acontecimentos.

Considere:

A = NEW DEVICE
B = PASSWORD RESET
C = NEW BENEFICIARY
D = LARGE TRANSFER

Não podemos assumir sempre que:

RISK(A+B+C+D)
=
RISK(A)+RISK(B)+RISK(C)+RISK(D)

A sequência pode produzir um risco adicional.

Em segurança, contexto importa.

Em fraude, ordem também importa.


⏱️ CAPÍTULO 7 — Diabolik conhece o relógio

Imagine:

01/08 NEW DEVICE
15/08 PASSWORD RESET
02/09 NEW BENEFICIARY
15/09 TRANSFER

Pode ser perfeitamente normal.

Agora:

03:17 NEW DEVICE
03:18 PASSWORD RESET
03:20 NEW BENEFICIARY
03:22 TRANSFER

Os eventos são praticamente os mesmos.

Mas o significado mudou completamente.

Entrou uma nova dimensão:

velocity.

Não basta perguntar:

WHAT?

Precisamos perguntar:

WHAT?
WHEN?
HOW OFTEN?
IN WHICH ORDER?

Em sistemas transacionais, tempo também é dado.


🧬 CAPÍTULO 8 — O melhor suspeito de João é o próprio João

Agora chegamos ao comportamento.

Imagine que João normalmente faça:

R$ 70
R$ 150
R$ 380
R$ 600
R$ 1.200

Então aparece:

R$ 9.800

Interessante.

Mas Maria administra uma empresa e normalmente movimenta:

R$ 30.000
R$ 70.000
R$ 120.000

Hoje ela movimentou:

R$ 9.800

Se tivermos uma regra burra:

IF AMOUNT > 5000
   HIGH-RISK
END-IF

João e Maria recebem tratamento semelhante.

Mas os comportamentos são completamente diferentes.

O sistema moderno procura estabelecer um baseline.

Ou seja:

como este cliente normalmente se comporta?

Isso permite comparar:

CURRENT BEHAVIOR
       versus
EXPECTED BEHAVIOR

A pergunta deixa de ser:

R$9.800 é muito?

E passa a ser:

R$9.800 é estranho para João?

Isso é muito mais poderoso.


🌍 CAPÍTULO 9 — Diabolik viaja rápido demais

Imagine:

20:00 LOGIN SAO PAULO

Depois:

20:35 LOGIN TOKYO

Talvez João tenha descoberto teletransporte.

Talvez seja VPN.

Talvez seja problema na geolocalização.

Talvez sejam sessões diferentes.

Ou talvez tenhamos uma conta comprometida.

Um bom sistema não deveria automaticamente concluir:

FRAUD!

Ele deveria produzir algo semelhante a:

IMPOSSIBLE_TRAVEL +25
NEW_DEVICE        +15
UNKNOWN_IP        +10

E combinar isso com todo o restante.

Essa é outra diferença fundamental.

Sinal não é sentença.

Sinal é evidência.


🕸️ CAPÍTULO 10 — O Inspetor Ginko descobre o grafo

Diabolik conseguiu ser perfeito.

Nenhuma transferência parece absurda.

Nenhum login parece impossível.

Nenhuma senha foi redefinida.

Individualmente, cada conta parece normal.

Então entra o equivalente digital do Inspetor Ginko.

Ele deixa de olhar apenas indivíduos e começa a observar relações.

              DEVICE-X
             /    |    \
            /     |     \
         JOAO   MARIA   CARLOS
           |      |       |
        ACCOUNT ACCOUNT ACCOUNT

Interessante.

Três pessoas diferentes utilizam o mesmo dispositivo.

Isso é fraude?

Não necessariamente.

Pode ser uma família.

Pode ser uma empresa.

Pode ser um equipamento compartilhado.

Agora descobrimos:

DEVICE-X
   |
   +--- ACCOUNT-A
   |
   +--- ACCOUNT-B
   |
   +--- ACCOUNT-C
   |
   +--- ACCOUNT-D

E duas dessas contas tiveram fraude confirmada.

A relação ficou mais interessante.

Estamos entrando no mundo de graph analytics.

Clientes, contas, cartões, dispositivos, IPs, telefones, endereços, merchants e beneficiários podem ser representados como nós conectados.

O risco pode estar não apenas no indivíduo.

Pode estar na rede à qual ele pertence.


💳 CAPÍTULO 11 — Diabolik entra no BELLACARD

Vamos colocar nosso ladrão dentro de um sistema de cartões.

Diabolik conseguiu utilizar o cartão de João.

Uma autorização chega:

CARD
AMOUNT
MERCHANT
MCC
COUNTRY
TERMINAL
TIMESTAMP

O sistema tradicional verifica:

CARD VALID?
ACCOUNT ACTIVE?
LIMIT AVAILABLE?
CARD BLOCKED?
PIN/CVV VALID?

Mas agora adicionamos:

RISK ENGINE

Arquiteturalmente:

POS / ATM / MOBILE
        |
        v
 TRANSACTION
        |
        v
+----------------+
| AUTHORIZATION  |
+----------------+
        |
   +----+-----+
   |          |
   v          v
ACCOUNT    RISK ENGINE
   |          |
   +----+-----+
        |
        v
 DECISION ENGINE
        |
 +------+------+------+
 |      |      |      |
APPROVE MONITOR VERIFY DECLINE

Agora o Risk Score passa a participar da decisão.


🚦 CAPÍTULO 12 — Nem todo suspeito deve ser preso

Essa talvez seja a parte mais importante do conceito inteiro.

Imagine:

RISK 12

Resposta:

APPROVE

Score:

RISK 32

Talvez:

APPROVE + MONITOR

Score:

RISK 54

Talvez:

STEP-UP AUTHENTICATION

Peça biometria.

Confirmação adicional.

MFA.

Outro fator.

Score:

RISK 72

Talvez:

REVIEW

Score:

RISK 96

Talvez:

DECLINE
BLOCK
INVESTIGATE

Perceba a mudança.

Risk Scoring não serve exclusivamente para dizer:

NÃO.

Ele pode ajudar o sistema a decidir quanto de confiança adicional precisa antes de dizer SIM.


💰 CAPÍTULO 13 — Prender todo mundo também custa dinheiro

Imagine uma instituição aterrorizada com fraude.

Ela cria:

IF TRANSACTION-AMOUNT > 5000
   DECLINE
END-IF

Fraudes diminuem.

O diretor comemora.

Até aparecer outro relatório:

APPROVAL RATE ↓
CUSTOMER SATISFACTION ↓
REVENUE ↓
ABANDONMENT ↑
SUPPORT CALLS ↑

Descobrimos o false positive.

O cliente era legítimo.

Nosso sistema o tratou como criminoso.

Diabolik escapou enquanto prendíamos João.

É quase poeticamente apropriado.


⚖️ CAPÍTULO 14 — O Risk Engine vive entre dois erros

Todo sistema antifraude vive numa tensão.

Se for permissivo demais:

FRAUD ↑
LOSSES ↑

Se for rígido demais:

FALSE POSITIVES ↑
CUSTOMER FRICTION ↑
DECLINES ↑
REVENUE ↓

Então existe uma espécie de equação empresarial:

MAXIMIZE

LEGITIMATE APPROVALS
REVENUE
CUSTOMER EXPERIENCE

MINIMIZE

FRAUD
AML EXPOSURE
CHARGEBACKS
OPERATIONAL COST
REGULATORY RISK

Risk Scoring não elimina essa tensão.

Ele nos permite administrá-la com maior granularidade.


🏦 CAPÍTULO 15 — Fraud e AML moram no mesmo prédio, mas não são irmãos gêmeos

Fraude e AML podem utilizar muitos sinais semelhantes:

IDENTITY
TRANSACTIONS
DEVICES
LOCATION
BENEFICIARIES
BEHAVIOR
NETWORK

Mas não são exatamente o mesmo problema.

Fraude normalmente está preocupada com apropriação indevida, engano, abuso de contas, pagamentos ou recursos.

AML olha para riscos associados à movimentação e possível lavagem de recursos, entre outras tipologias de crime financeiro.

Podemos ter:

FRAUD SCORE
     |
     +------+
            |
            v
      COMPOSITE RISK
            ^
            |
     +------+
     |
AML SCORE

A vantagem está em compartilhar sinais sem destruir as particularidades de cada disciplina.


🤖 CAPÍTULO 16 — Então chega a Inteligência Artificial

Até aqui podemos fazer muita coisa com regras.

Mas temos milhões de eventos.

Centenas de variáveis.

Relações complexas.

Padrões temporais.

Machine Learning pode ajudar a encontrar combinações que seriam extremamente difíceis de escrever manualmente.

O problema aparece quando recebemos:

MODEL OUTPUT = 97

Perguntamos:

WHY?

E o computador responde metaforicamente:

¯\_(ツ)_/¯

Não.

Ginko não aceitaria.

O auditor muito menos.

Um sistema robusto precisa oferecer reason codes, evidências, rastreabilidade e governança.

Por exemplo:

RISK SCORE = 91

REASONS:

R017 NEW DEVICE
R042 IMPOSSIBLE TRAVEL
R071 UNUSUAL AMOUNT
R103 NEW BENEFICIARY
R121 HIGH VELOCITY

Agora o número possui uma história.


🗄️ CAPÍTULO 17 — Ginko entra no Db2

Vamos finalmente entrar no IBM Z.

Podemos imaginar:

CHANNELS
 |
 +-- MOBILE
 +-- WEB
 +-- ATM
 +-- POS
 |
 v
API / MESSAGE LAYER
 |
 v
CICS
 |
 +----------+
 |          |
 v          v
Db2       IBM MQ
 |          |
 |          v
 |       EVENTS
 |          |
 +-----> RISK ENGINE
            |
      +-----+-----+
      |     |     |
    RULES  ML   GRAPH
      |     |     |
      +-----+-----+
            |
            v
        RISK SCORE
            |
            v
      DECISION ENGINE

O detalhe crucial:

o cliente está esperando.

No supermercado, João não quer assistir a uma arquitetura de 47 microsserviços discutindo se deve aprovar seu café.

Ele quer:

BIP!
APROVADO

Portanto latência importa.

Muito.


⚡ CAPÍTULO 18 — O roubo perfeito dura milissegundos

Uma transação online pode precisar executar diversas verificações:

CARD VALIDATION
ACCOUNT LOOKUP
LIMIT CHECK
STATUS CHECK
FRAUD RULES
RISK SCORE
AUTHORIZATION
LOGGING

Tudo dentro de um orçamento de latência.

Essa é uma das razões pelas quais a arquitetura de sistemas críticos é tão fascinante.

Não basta calcular corretamente.

Precisamos calcular corretamente a tempo.

O Risk Engine que responde depois que a transação terminou é como Ginko chegando ao cofre na manhã seguinte.

Interessante para investigação.

Inútil para impedir aquele evento.


🧯 CAPÍTULO 19 — O sistema também precisa investigar a si mesmo

Imagine uma nova regra.

Ela bloqueia 40% das transações de determinado segmento.

Fraude cai 2%.

Parece bom?

Talvez não.

Precisamos observar:

APPROVAL RATE
DECLINE RATE
FRAUD RATE
FALSE POSITIVE RATE
CHARGEBACK RATE
CHALLENGE RATE
MANUAL REVIEW RATE

Também:

RULE HIT RATE
SCORE DISTRIBUTION
REASON CODES

E algo que considero particularmente interessante:

SCORE MIGRATION

Quem passou:

LOW -> MEDIUM

Quem passou:

MEDIUM -> HIGH

E principalmente:

LOW -> CRITICAL

O valor não está somente em descobrir quem está perigoso.

Está em descobrir quem está mudando rapidamente.


⌛ CAPÍTULO 20 — Até suspeitas envelhecem

João viajou.

Usou um novo dispositivo.

Fez uma transação diferente.

Seu score subiu:

RISK = 68

Depois voltou para casa.

Utilizou normalmente sua conta por semanas.

Nada estranho aconteceu.

Deveria continuar em 68 para sempre?

Provavelmente não.

Podemos introduzir o conceito de risk decay.

Conforme o tempo passa sem novos sinais relevantes:

68
 |
 v
55
 |
 v
41
 |
 v
28

Isso impede que eventos antigos se transformem em condenações eternas.

Tempo não serve apenas para aumentar risco.

Também pode ajudar a contextualizá-lo.


🎯 CAPÍTULO 21 — O Risk Score também pode ser atacado

Aqui Diabolik percebe outra coisa.

Se conseguir descobrir as regras, poderá tentar permanecer abaixo dos thresholds.

Suponha:

R$10.000 = HIGH RISK

Então ele tenta:

R$4.800
R$4.700
R$4.900

Uma regra olha para cada evento:

OK
OK
OK

Um sistema contextual observa:

3 TRANSACTIONS
SHORT WINDOW
TOTAL R$14.400
UNUSUAL VELOCITY

E responde:

RISK ↑

Isso nos ensina outra coisa importante:

fraudadores também observam sistemas antifraude.

O Risk Engine não enfrenta um fenômeno estático.

Existe um adversário adaptativo do outro lado.


🧪 CAPÍTULO 22 — Champion contra Challenger

Se alterarmos um modelo de risco diretamente em produção, podemos criar nosso próprio desastre.

Então imagine:

CHAMPION MODEL

É o modelo atualmente utilizado.

Ao lado:

CHALLENGER MODEL

O challenger pode receber os mesmos eventos sem necessariamente controlar a decisão final.

Depois comparamos:

FRAUD DETECTION
FALSE POSITIVES
APPROVAL RATE
LATENCY
STABILITY

Se realmente for melhor, pode tornar-se o novo champion.

Isso transforma Risk Scoring em processo de engenharia, e não numa coleção de palpites.


🧾 CAPÍTULO 23 — Diabolik odeia auditoria

Imagine que seis meses depois alguém pergunte:

Por que a transação 918273 foi recusada?

Não podemos responder:

Porque o score estava alto.

Precisamos conseguir reconstruir:

TRANSACTION
MODEL VERSION
RULE VERSION
INPUT DATA
SCORE
REASON CODES
DECISION
TIMESTAMP

Idealmente:

03:17:01 EVENT RECEIVED
03:17:01 DEVICE RULE HIT
03:17:01 VELOCITY RULE HIT
03:17:01 SCORE 82
03:17:01 STEP-UP REQUESTED
03:17:04 MFA FAILED
03:17:04 DECLINED

Isso é auditabilidade.

E em sistemas financeiros ela não é decoração arquitetural.

É parte do produto.


🕵️ CAPÍTULO 24 — A máquina encontra a pista; Ginko monta o caso

Automação não significa necessariamente remover o investigador.

Significa evitar que ele desperdice seu tempo procurando palha.

Imagine um analista recebendo:

CASE 827364

CUSTOMER: JOAO
RISK: 93

TRIGGERS:
NEW DEVICE
PASSWORD RESET
NEW BENEFICIARY
UNUSUAL TRANSFER
SHARED DEVICE

RELATED:
7 ACCOUNTS

CONFIRMED FRAUD:
2 ACCOUNTS

Agora existe um caso investigável.

A máquina percorreu milhões de eventos.

O humano recebeu uma exceção relevante.

MACHINE
   |
   v
DETECT
   |
   v
CORRELATE
   |
   v
PRIORITIZE
   |
   v
HUMAN INVESTIGATION

Essa parceria é muito mais interessante do que a fantasia de simplesmente substituir todo investigador por IA.


💎 CAPÍTULO 25 — Finalmente Diabolik chega ao cofre

Às 03:17, Diabolik inicia sua operação.

Primeiro:

LOGIN

Nada acontece.

Depois:

NEW DEVICE

Pequena alteração.

Depois:

PASSWORD RESET

Outra alteração.

Depois:

NEW BENEFICIARY

O sistema começa a ficar desconfiado.

Finalmente:

TRANSFER R$ 48.000

O antigo sistema talvez enxergasse:

JOAO
KYC OK
ACCOUNT ACTIVE
BALANCE AVAILABLE

O novo sistema enxerga:

JOAO
+
NEW DEVICE
+
PASSWORD RESET
+
NEW BENEFICIARY
+
UNUSUAL AMOUNT
+
HIGH VELOCITY
+
BEHAVIORAL DEVIATION

Resultado:

RISK SCORE = 94

Decision Engine:

STEP-UP AUTHENTICATION

Diabolik possui usuário.

Possui senha.

Possui dados pessoais.

Mas falta alguma coisa que João possui.

A operação falha.

Não porque o sistema descobriu:

Este homem é Diabolik.

Isso seria impossível.

Ele descobriu algo muito mais útil:

Quem quer que esteja realizando esta operação não está se comportando como João.

Esse é o verdadeiro poder da análise comportamental.


🐣 EASTER EGG — 03:17

Quem já visitou algumas vezes o Bellacosa Mainframe percebeu.

Algo sempre acontece às:

03:17

É o horário em que ninguém deveria estar olhando.

O batch está trabalhando.

O operador tomou café.

O desenvolvedor jurou que não mexeu em produção.

E algum JOB misterioso aparece:

JOBNAME  DIABOLIK
OWNER    UNKNOWN
STATUS   EXECUTING

Ginko abre o SDSF.

Procura o JOB.

Nada.

Só encontra no SYSOUT:

ICH408I
USER(DIABOLIK) ACCESS DENIED

Desta vez, RACF ganhou.

☕


🧠 CAPÍTULO 26 — O que o programador COBOL iniciante precisa guardar

Depois de toda essa perseguição, podemos reduzir o Risk Scoring a uma cadeia bastante compreensível:

RECEIVE EVENT
     |
     v
IDENTIFY CUSTOMER
     |
     v
LOAD CONTEXT
     |
     v
READ HISTORY
     |
     v
CALCULATE SIGNALS
     |
     v
APPLY RULES
     |
     v
CALCULATE SCORE
     |
     v
MAKE DECISION
     |
     v
LOG EVERYTHING

Veja que curioso.

Quando retiramos os nomes modernos, aparecem conceitos conhecidos:

INPUT
VALIDATION
LOOKUP
BUSINESS RULE
CALCULATION
DECISION
AUDIT
COMMIT

O programador COBOL de 1985 reconheceria boa parte da lógica.

O que mudou foi a quantidade de contexto disponível e a velocidade necessária para correlacioná-lo.

Hoje podemos acrescentar:

DEVICE
IP
LOCATION
BEHAVIOR
VELOCITY
GRAPH
ML
REAL-TIME EVENTS

Mas o problema fundamental continua lindamente familiar:

DADOS
  +
REGRAS
  +
CONTEXTO
  =
DECISÃO

☕ EPÍLOGO — Ginko nunca precisou saber quem estava atrás da máscara

Essa talvez seja a grande lição de Risk Scoring.

O modelo antigo queria classificar pessoas:

LOW
MEDIUM
HIGH

O modelo moderno procura compreender situações:

CUSTOMER
+
TRANSACTION
+
DEVICE
+
LOCATION
+
TIME
+
BEHAVIOR
+
HISTORY
+
RELATIONSHIPS

E calcula novamente quando o contexto muda.

Isso muda também a relação entre segurança e negócio.

Um bom cliente realizando uma operação compatível com seu comportamento pode receber menos atrito.

Uma pequena anomalia pode receber monitoramento.

Uma situação intermediária pode receber autenticação adicional.

Uma sequência altamente suspeita pode ser bloqueada ou enviada para investigação.

Portanto:

RISK ≠ BLOCK

Risk é informação para decidir qual controle é proporcional à situação.

É isso que torna o Risk Scoring moderno tão interessante para fintechs, bancos, adquirentes, sistemas de cartões e arquiteturas de pagamentos.

A missão não é bloquear o maior número possível de transações.

É algo muito mais difícil:

bloquear Diabolik sem impedir João de comprar o jantar.

E existe uma ironia maravilhosa nisso.

Diabolik passou décadas aperfeiçoando máscaras, identidades falsas, disfarces e planos perfeitos.

No mundo digital, porém, talvez ele encontre um adversário diferente.

Não uma câmera procurando seu rosto.

Não um policial procurando seu nome.

Não um cadastro perguntando quem ele diz ser.

Mas um Risk Engine silencioso perguntando:

Você possui as credenciais de João.

Você conhece os dados de João.

Você entrou na conta de João.

Mas...

por que não está se comportando como João?

No outro lado da tela, Ginko sorri.

O RISK-SCORE muda:

17
29
46
68
94

Diabolik aperta ENTER.

O mainframe responde:

TRANSACTION DECLINED

REASON:
BEHAVIORAL RISK

RETURN-CODE: 08

E em algum lugar do data center, provavelmente ao lado de um programa COBOL que ninguém ousa recompilar desde 1997, o JOB continua EXECUTING.

Porque no Risk Scoring moderno, o crime perfeito não precisa deixar uma impressão digital.

Basta deixar uma anomalia. ☕🕶️💻



terça-feira, 25 de junho de 2024

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

 

Bellacosa Mainframe e o sistema de cartões

☕ Um Café no Bellacosa Mainframe

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

Compra → captura → autorização → resposta → clearing → settlement → reconciliação

Imagine Patrick Jane entrando em um grande banco.

Nada de CBI. Nada de assassinato. Nenhuma fita amarela isolando a cena do crime.

Desta vez há uma War Room.

Nas paredes, enormes monitores exibem gráficos de CICS, filas de mensagens, utilização de CPU, tempos de resposta, quantidade de transações aprovadas e recusadas.

Analistas observam SDSF.

Programadores procuram mensagens nos logs.

DBAs verificam Db2.

Especialistas de infraestrutura garantem:

— O mainframe está normal.

O pessoal de redes responde:

— A comunicação está normal.

O suporte de cartões diz:

— Temos clientes reclamando.

No centro da confusão existe apenas uma transação de R$ 100.

Patrick Jane olha para o quadro durante alguns segundos.

Pega uma xícara de café.

E pergunta:

— Vocês estão procurando R$ 100. Eu quero saber a história desses R$ 100.

Silêncio.

Bem-vindo ao mundo de processamento de cartões.



🕵️ 1. O crime aparentemente perfeito

João entra no Café Bellacosa.

Pede alguma coisa.

Valor:

R$ 100.

Encosta o cartão na maquininha.

A tela apresenta:

PROCESSANDO...

Poucos segundos depois:

APROVADO.

Para João, terminou.

Para o comerciante, aparentemente terminou.

Para quem está começando em mainframe, talvez também pareça que terminou.

Mas para Patrick Jane a investigação acabou de começar.

Porque aquela pequena palavra — APROVADO — esconde uma infraestrutura gigantesca.

Por trás dela encontramos:

  • cardholder;

  • merchant;

  • POS;

  • acquirer;

  • scheme/network;

  • issuer;

  • cadastro;

  • conta de cartão;

  • produto;

  • plafond;

  • autorização;

  • risco;

  • tarifas;

  • clearing;

  • settlement;

  • billing;

  • cobrança;

  • contabilidade;

  • chargeback;

  • reconciliação.

E ainda temos CICS, COBOL, Db2, VSAM, MQ, batch, JCL, logs, auditoria e diversos sistemas distribuídos conversando com o ambiente bancário.

O primeiro ensinamento de Jane seria:

Nunca confunda aquilo que o cliente vê com aquilo que realmente aconteceu nos sistemas.



💳 2. Conhecendo os suspeitos

Antes de investigar qualquer transação precisamos saber quem estava na sala.

Cardholder

É o portador do cartão.

No nosso caso:

João.

Merchant

É o estabelecimento comercial.

Café Bellacosa.

Acquirer

É a instituição adquirente que mantém o relacionamento de aceitação com o estabelecimento e encaminha a transação para o ecossistema apropriado.

Scheme / Network

É a rede/bandeira que estabelece regras e permite a interoperabilidade entre participantes.

Issuer

É o emissor do cartão.

É no lado do issuer que encontramos boa parte da inteligência necessária para decidir:

“Posso autorizar esta compra?”

O fluxo simplificado fica:

JOÃO
 │
 ▼
CAFÉ BELLACOSA
 │
 ▼
MAQUININHA / POS
 │
 ▼
ACQUIRER
 │
 ▼
SCHEME / NETWORK
 │
 ▼
ISSUER

Só que isso ainda é o desenho visto de helicóptero.

Patrick Jane quer entrar no prédio.



🧩 3. Antes do cartão existe o cliente

O banco conhece João antes de conhecer aquela compra.

Existe um universo de cadastro:

CUSTOMER
 │
 ├── identificação
 ├── documentos
 ├── endereço
 ├── contatos
 ├── status
 ├── relacionamento
 └── informações cadastrais

Depois temos a conta de cartão.

E depois os cartões associados.

Uma das primeiras pegadinhas para o iniciante é imaginar:

CLIENTE = CARTÃO

Não.

Podemos ter:

CUSTOMER
   │
   ├── CARD ACCOUNT A
   │       ├── CARD 1
   │       └── ADDITIONAL CARD
   │
   └── CARD ACCOUNT B
           └── CARD 2

O plástico pode vencer.

O cartão pode ser substituído.

O cliente continua existindo.

A conta pode continuar existindo.

Portanto:

CUSTOMER ≠ CARD ACCOUNT ≠ CARD

Esse relacionamento é fundamental.





🏷️ 4. O sistema de produtos entra na investigação

Jane encontra algo interessante no cadastro:

PRODUCT-ID = 003

Ele pergunta:

— O que significa 003?

Alguém responde:

— Bellacard Platinum.

A partir daqui descobrimos outra camada.

Um cartão não é simplesmente “um cartão de crédito”.

Ele pertence a determinado produto.

Imagine:

001 BELLACARD CLASSIC
002 BELLACARD GOLD
003 BELLACARD PLATINUM
004 BELLACARD CORPORATE
005 BELLACARD VIRTUAL

Cada produto pode possuir parâmetros e características diferentes.

PRODUCT
 │
 ├── Network
 ├── Currency
 ├── Billing Rules
 ├── Credit Rules
 ├── Transaction Rules
 ├── Fee Plan
 ├── Interest Rules
 ├── Rewards
 ├── Risk Parameters
 └── Channel Rules

E aqui aparece uma importante filosofia de sistemas financeiros.

Não queremos escrever um COBOL diferente para cada cartão.

Queremos separar:

código

de

política de negócio.

O programa sabe calcular.

O produto e seus parâmetros dizem o que calcular e quais regras aplicar.



💰 5. Plafond — quanto João realmente pode gastar?

Agora chegamos ao limite de crédito, também chamado em diversos contextos de plafond.

Imagine:

PLAFOND TOTAL       R$ 10.000
UTILIZADO           R$  3.000
PENDENTE            R$    500
DISPONÍVEL          R$  6.500

João deseja gastar:

R$ 100

Parece simples.

Mas Jane desconfia de coisas simples.

Porque limite disponível pode depender de muito mais que:

LIMITE - COMPRAS

Podem existir:

  • autorizações pendentes;

  • parcelamentos;

  • reservas;

  • bloqueios;

  • limites temporários;

  • limites específicos por operação;

  • regras internacionais;

  • saques;

  • operações ainda não apresentadas no clearing;

  • ajustes e pagamentos.

Portanto, antes de responder APROVADO, o issuer precisa consultar o contexto financeiro correto.



🧠 6. A sala de interrogatório: Authorization

A mensagem finalmente chega ao autorizador.

No universo mainframe poderíamos imaginar conceitualmente:

NETWORK
   │
   ▼
GATEWAY
   │
   ▼
CICS
   │
   ▼
AUTHORIZATION
   │
   ├── CARD STATUS
   ├── ACCOUNT STATUS
   ├── PRODUCT RULES
   ├── AVAILABLE CREDIT
   ├── RISK/FRAUD
   ├── MERCHANT INFORMATION
   └── SECURITY CONTROLS

Começa o interrogatório.

O cartão existe?

Sim.

Está ativo?

Sim.

Está vencido?

Não.

Está bloqueado?

Não.

A conta está habilitada?

Sim.

O produto permite essa operação?

Sim.

Existe plafond?

Sim.

Os controles de risco permitem continuar?

Sim.

Então:

APPROVED

Pode surgir também um:

AUTHORIZATION CODE

que ajuda a identificar aquela autorização.

Mas aqui está uma das maiores lições deste artigo:

AUTORIZAÇÃO NÃO É LIQUIDAÇÃO.

A aprovação não significa simplesmente:

“R$ 100 já chegaram à conta bancária do Café Bellacosa.”

Significa que aquela solicitação percorreu o processo de autorização e recebeu uma resposta positiva.


🚫 7. Decline — quando Jane diz não

Se alguma regra impedir a autorização, teremos um decline.

Por exemplo:

AVAILABLE CREDIT = R$ 80
PURCHASE         = R$100

Resultado:

DECLINED

Mas insuficiência de limite é apenas uma possibilidade.

Podem existir recusas relacionadas a:

  • status do cartão;

  • vencimento;

  • bloqueio;

  • restrições;

  • produto;

  • risco;

  • tipo de operação;

  • condições da conta.

A grande descoberta aqui é que uma transação não possui apenas dois estados:

EXISTE
NÃO EXISTE

Ela possui um ciclo de vida.

RECEIVED
   ↓
VALIDATING
   ↓
AUTHORIZED
   ↓
CLEARED
   ↓
SETTLED
   ↓
RECONCILED

E pode desviar:

DECLINED
REVERSED
PENDING
DISPUTED
CHARGEBACK

O cartão é praticamente uma gigantesca máquina de estados financeiros.


⏱️ 8. O mistério do timeout

João faz a compra.

O issuer recebe a solicitação.

Processa.

Autoriza.

Envia a resposta.

Mas a resposta se perde pelo caminho.

POS
 │
 ▼
ACQUIRER
 │
 ▼
NETWORK
 │
 ▼
ISSUER
 │
 ├── APPROVED
 │
 X
 X comunicação interrompida
 X

A maquininha pode concluir:

TIMEOUT.

Agora temos um problema fascinante.

Para um sistema:

AUTHORIZED

Para outro:

TIMEOUT

Os sistemas possuem percepções diferentes do mesmo acontecimento.

E isso nos leva a uma das regras de ouro da investigação:

Estado técnico e estado de negócio não são necessariamente a mesma coisa.


🔄 9. Reversal — desfazendo uma autorização

Se uma autorização precisa ser desfeita, podemos encontrar um reversal.

Conceitualmente:

AUTHORIZATION
     │
     ▼
RESERVE / AFFECT AVAILABLE CREDIT

Depois:

REVERSAL
     │
     ▼
RELEASE / ADJUST

Por isso o investigador não pode parar quando encontra:

APPROVED

Precisa continuar:

APPROVED
   │
   ├── REVERSAL?
   │
   ├── CLEARING?
   │
   └── WHAT HAPPENED NEXT?

Jane nunca encerra a investigação na primeira evidência.


👯 10. O caso dos gêmeos: Duplicate Transaction

Agora encontramos:

10:32:01 R$100
10:32:03 R$100

Temos duas compras?

Ou uma transação retransmitida?

Essa é a essência do problema de duplicate transaction.

Para descobrir precisamos correlacionar informações como:

merchant
terminal
amount
timestamps
transaction identifiers
trace/reference numbers
authorization information

dependendo do protocolo e arquitetura envolvidos.

O iniciante procura:

“R$100.”

O especialista pergunta:

“Qual é a identidade dessa transação?”

Essa pergunta vai nos acompanhar até o fim.


📡 11. A maquininha também é um computador administrado

Jane pega a POS do Café Bellacosa.

Ela parece pequena.

Mas possui identidade e configuração.

Conceitualmente podemos encontrar:

TERMINAL-ID
MERCHANT-ID
STORE-ID
SERIAL
MODEL
APPLICATION VERSION
CONFIGURATION
CAPABILITIES
NETWORK PARAMETERS
SECURITY CONTEXT

Ela é um endpoint transacional.

E alguém precisa administrar potencialmente milhares ou milhões desses endpoints.

Entra em cena o:

TMS — Terminal Management System

                   MATRIZ
                     │
                     ▼
                    TMS
                     │
       ┌─────────────┼─────────────┐
       │             │             │
 CONFIGURATION    SOFTWARE     PARAMETERS
       │             │             │
       └─────────────┼─────────────┘
                     │
                  NETWORK
                     │
        ┌────────────┼────────────┐
        ▼            ▼            ▼
       POS          POS          POS

🏢 12. A conversa entre matriz e maquininhas

Precisamos separar duas conversas.

A primeira é a transação financeira:

CARD
 ↓
POS
 ↓
ACQUIRER
 ↓
NETWORK
 ↓
ISSUER

É online.

O cliente está esperando.

Latência importa muito.

A segunda é administrativa:

TMS
 ↓
POS

Pode envolver, conforme a solução:

  • parâmetros;

  • perfis;

  • configurações;

  • versões de aplicação;

  • atualizações;

  • informações operacionais.

Não devemos confundir:

TRANSACTION PROCESSING

com:

TERMINAL MANAGEMENT.


🏪 13. Merchant, loja e terminal

Também precisamos conhecer a hierarquia:

MERCHANT
   │
   ├── STORE 001
   │      ├── POS 001
   │      ├── POS 002
   │      └── POS 003
   │
   └── STORE 002
          ├── POS 004
          └── POS 005

Agora podemos localizar uma transação com muito mais precisão.

Não aconteceu simplesmente no:

Café Bellacosa.

Pode ter ocorrido no:

MERCHANT 8472
STORE    0004
TERMINAL 0009

Para troubleshooting isso é ouro.


🧬 14. A árvore de configuração

Administrar cada terminal individualmente seria impraticável.

Uma arquitetura pode trabalhar com hierarquias conceituais como:

GLOBAL
  ↓
COUNTRY
  ↓
ACQUIRER
  ↓
MERCHANT SEGMENT
  ↓
MERCHANT
  ↓
STORE
  ↓
TERMINAL

Uma configuração global pode valer para enorme quantidade de equipamentos.

Mas podem existir exceções.

GLOBAL
CONTACTLESS = YES

MERCHANT 8472
CONTACTLESS = NO

Então a pergunta de Jane muda.

Ele não pergunta:

“Qual é a configuração global?”

Pergunta:

“Qual era a configuração efetiva desse terminal?”


🔐 15. Segurança — não confie simplesmente em quem bate à porta

A POS também precisa participar de uma arquitetura segura.

O ecossistema de pagamentos utiliza diversos mecanismos e padrões envolvendo conceitos como:

EMV
HSM
KEY MANAGEMENT
CRYPTOGRAPHIC KEYS
CERTIFICATES
PIN SECURITY
MESSAGE INTEGRITY
PCI CONTROLS

A implementação exata depende do ambiente.

Mas o princípio é simples:

Uma maquininha não deveria simplesmente anunciar uma identidade e receber confiança automaticamente.

Identidade, autenticidade, integridade e proteção do material criptográfico são fundamentais.


🏷️ 16. O outro produto que esquecemos

Existe o produto do cardholder.

Mas também existe o lado comercial do merchant.

O adquirente possui relacionamento contratual com o estabelecimento.

MERCHANT
   │
   ├── CONTRACT
   ├── MCC
   ├── SETTLEMENT RULE
   ├── PRICING PLAN
   ├── BANK ACCOUNT
   └── TERMINALS

Portanto temos dois universos:

ISSUER                       ACQUIRER
   │                            │
CARD PRODUCT              MERCHANT PRODUCT
   │                            │
CARDHOLDER                    MERCHANT

Isso explica por que estudar cartões olhando apenas para o issuer deixa metade do mapa em branco.


🏪 17. MCC — que tipo de estabelecimento é esse?

O merchant possui classificação de atividade no ecossistema, incluindo o Merchant Category Code — MCC.

Essa informação pode participar de diferentes regras de:

  • autorização;

  • risco;

  • rewards;

  • relatórios;

  • políticas comerciais;

  • regras da rede.

Imagine um programa de pontos:

RESTAURANT → 2X
GENERAL    → 1X

Aquela pequena classificação passa a produzir consequências em outros sistemas.

Mais uma pista para Jane.


💰 18. O misterioso mundo das tarifas

Agora aparece na fatura:

R$12

Cliente pergunta:

— O que é isso?

Resposta ruim:

— Tarifa.

Patrick Jane imediatamente:

— Qual tarifa? Gerada por qual evento? Segundo qual produto? Sob qual regra? Em qual vigência?

Essa é a investigação correta.

Um sistema de tarifas pode possuir algo como:

FEE-ID
DESCRIPTION
PRODUCT
EVENT
CALCULATION METHOD
VALUE
VALID-FROM
VALID-TO
STATUS

Podemos ter eventos como:

ANNUAL_FEE
CASH_ADVANCE
LATE_PAYMENT
CARD_REPLACEMENT
SERVICE

conforme contrato, produto e regras aplicáveis.


🧮 19. O Fee Engine

Podemos imaginar:

BUSINESS EVENT
      │
      ▼
   FEE ENGINE
      │
 ┌────┼─────┐
 │    │     │
PRODUCT CUSTOMER CONTRACT
 │    │     │
 └────┼─────┘
      │
    RULE
      │
      ▼
 CALCULATED FEE

Uma tarifa pode ser fixa:

R$12

percentual:

2%

por faixa:

0–1000
1001–5000
>5000

ou condicionada:

IF CUSTOMER-SEGMENT = X
    FEE = 0

Aqui fica clara outra diferença:

regra comercial não deveria ser confundida com lógica fixa enterrada no programa.


💵 20. E quanto o merchant paga?

O estabelecimento também possui seu universo econômico.

No acquiring podemos encontrar conceitos como:

  • MDR;

  • serviços contratados;

  • aluguel/serviços de terminal;

  • condições de recebimento;

  • antecipação de recebíveis;

  • outros componentes comerciais.

No ecossistema existe também interchange, conforme as regras do arranjo.

É importante não confundir:

MDR ≠ INTERCHANGE

E também não concluir que tudo aquilo que o merchant paga pertence ao issuer.

A compra de R$100 possui uma economia inteira escondida por trás dela.


📦 21. Clearing — “a compra voltou”

Algum tempo depois da autorização aparecem informações de clearing.

O iniciante pergunta:

— Mas ela já não tinha sido aprovada?

Sim.

Só que:

AUTHORIZATION

e:

CLEARING

não são a mesma coisa.

Uma maneira didática de pensar é:

Authorization:

“Posso permitir esta operação?”

Clearing:

“Aqui está a transação apresentada para o processamento financeiro correspondente.”

E podem existir situações nas quais valores apresentados e autorizados não sejam simplesmente idênticos.

Hotel é um bom exemplo conceitual:

AUTHORIZATION
R$1.000

FINAL / PRESENTED AMOUNT
R$870

Logo:

AUTHORIZATION ≠ CLEARING

embora os dois façam parte da história da mesma operação.


💰 22. Settlement — agora estamos falando de posições financeiras

Depois chegamos ao settlement.

É aqui que tratamos da liquidação das posições financeiras entre participantes conforme os processos e regras da rede.

Isso destrói outra imagem simplista:

“A mensagem de autorização carregou R$100 de um banco para outro.”

Não.

A autorização é uma decisão online.

Clearing e settlement fazem parte de processos posteriores relacionados ao processamento e liquidação financeira.

A mesma transação possui várias representações durante sua vida.


🧾 23. Billing — agora João precisa pagar

A transação apresentada/postada passa a compor o universo financeiro da conta de cartão conforme o produto.

CARD ACCOUNT
    │
    ├── PURCHASES
    ├── INSTALLMENTS
    ├── INTEREST
    ├── FEES
    ├── CREDITS
    └── ADJUSTMENTS

Chega o fechamento.

Conceitualmente:

SALDO ANTERIOR
+ COMPRAS
+ JUROS
+ TARIFAS
- PAGAMENTOS
- CRÉDITOS
----------------
= FATURA

Agora o sistema de cartão precisa conversar fortemente com o restante do ambiente bancário.


🏦 24. A ponte com o banco

João paga sua fatura.

Esse pagamento pode entrar através de diferentes canais e sistemas.

BANKING CHANNEL
      │
      ▼
PAYMENT PROCESSING
      │
      ▼
CARD ACCOUNT
      │
      ├── REDUCE BALANCE
      └── RESTORE / ADJUST AVAILABLE CREDIT

Perceba como a arquitetura cresceu.

Começamos com:

POS → AUTORIZADOR

Agora temos:

CUSTOMER
CARD
ACCOUNT
PRODUCT
LIMIT
AUTHORIZATION
CLEARING
BILLING
PAYMENT
BANKING
ACCOUNTING

O sistema de cartões é uma ponte entre o mundo do pagamento e o mundo bancário.


💸 25. Cobrança

E se João não pagar?

Outra porta se abre.

BILL
  │
  ▼
DUE DATE
  │
  ├── PAID
  │
  └── UNPAID
         │
         ▼
     DELINQUENCY
         │
         ▼
     COLLECTION

Agora entram regras de atraso, cobrança, encargos, negociação e tratamento do relacionamento conforme produto, contrato e regulamentação.

A compra de R$100 feita em segundos pode permanecer meses dentro dos sistemas.


📚 26. Contabilidade — toda história precisa fechar

Em algum momento, os eventos financeiros relevantes precisam produzir os registros contábeis apropriados.

Conceitualmente:

CARD EVENT
    │
    ▼
BUSINESS EVENT
    │
    ▼
ACCOUNTING INTERFACE
    │
    ▼
ACCOUNTING ENTRIES
    │
    ▼
GENERAL LEDGER

Aqui existe uma fronteira extremamente importante.

O sistema operacional de cartões sabe:

“O que aconteceu com a transação.”

A contabilidade precisa representar:

“Qual é o efeito econômico desse acontecimento.”

É outra visão da mesma realidade.


⚖️ 27. Chargeback — o morto voltou

Semanas depois João olha a fatura.

Encontra:

CAFÉ BELLACOSA    R$100

E diz:

— Não reconheço.

A transação que parecia encerrada retorna.

TRANSACTION
    │
    ▼
DISPUTE
    │
    ▼
INVESTIGATION
    │
    ▼
POSSIBLE CHARGEBACK

Dependendo do caso e das regras aplicáveis, existem processos adicionais de contestação, evidências, representação e resolução.

Isso demonstra uma propriedade importantíssima:

O ciclo de vida da transação pode durar muito mais que os segundos da autorização.


🧮 28. Reconciliação — finalmente encontramos Patrick Jane

Agora chegamos ao sistema que mais se parece com nosso detetive.

A reconciliação pergunta:

“Todos estão contando a mesma história?”

Imagine:

AUTHORIZATION     1.000
CLEARING            998
SETTLEMENT          998
ACCOUNTING          998

Jane imediatamente pergunta:

— Onde estão as duas?

Ou:

CARD SYSTEM       R$10.000.000
ACCOUNTING        R$ 9.999.900

Diferença:

R$100.

Nosso velho amigo voltou.


🕵️ 29. Reconciliação é forense financeira

Ela procura situações como:

AUTH SEM CLEARING
CLEARING SEM AUTH
DUPLICATE CLEARING
VALUE MISMATCH
CURRENCY MISMATCH
SETTLEMENT DIFFERENCE
REVERSAL PENDING
ACCOUNTING MISSING

Por isso gosto de pensar nela como:

forense financeira automatizada.

Não basta saber que existem registros.

Precisamos provar que universos independentes estão coerentes entre si.


⏳ 30. A quarta dimensão: tempo

Patrick Jane encontra uma tarifa:

GOLD ANNUAL FEE = R$300

Cliente reclama:

— Meu contrato dizia R$240.

O analista olha a tabela.

R$300.

Caso encerrado?

Jane pergunta:

— Quanto era a tarifa quando o evento aconteceu?

Silêncio.

Consultamos o histórico:

01/01/2024 – 31/12/2025    R$240

01/01/2026 – ...           R$300

A investigação muda completamente.

Em sistemas financeiros não basta perguntar:

Qual é a regra?

Muitas vezes precisamos perguntar:

Qual era a regra naquele instante?

Isso introduz:

VALID-FROM
VALID-TO
VERSION
STATUS
CREATED-AT
CHANGED-AT
APPROVED-BY

📡 31. O mesmo vale para a maquininha

Hoje:

POS VERSION = 120

Mas a transação problemática aconteceu ontem.

Ontem:

POS VERSION = 118

Portanto a pergunta:

“Qual é a versão atual?”

pode ser inútil.

Jane pergunta:

“Qual versão estava efetivamente ativa quando ocorreu o problema?”

Isso é troubleshooting de verdade.


📜 32. Logs são testemunhas

No mainframe podemos encontrar evidências espalhadas por diferentes tecnologias e componentes:

APPLICATION LOGS
CICS
MQ
Db2
VSAM
SMF
JES/SDSF
NETWORK RECORDS
BATCH REPORTS
AUDIT RECORDS
RECONCILIATION FILES

Um bom sistema deve permitir reconstruir uma narrativa.

Algo como:

10:32:01.003 RECEIVED
10:32:01.017 CARD VALID
10:32:01.025 LIMIT CHECK
10:32:01.041 RISK CHECK
10:32:01.055 APPROVED
10:32:01.061 AUTH CODE GENERATED
10:32:01.074 RESPONSE SENT

Depois:

02:17:43 CLEARING RECEIVED
02:17:44 AUTH MATCHED
02:17:44 ACCOUNT POSTED
02:17:45 ACCOUNTING GENERATED

Não são apenas linhas.

São depoimentos.


🧾 33. Auditoria pergunta quem mexeu na cena do crime

Imagine que alguém alterou uma tarifa.

Precisamos saber:

WHO?
WHEN?
OLD VALUE?
NEW VALUE?
WHO APPROVED?
WHEN EFFECTIVE?

Então podemos encontrar estruturas conceituais como:

FEE_CHANGE_AUDIT
────────────────────────
PRODUCT
FEE
OLD_VALUE
NEW_VALUE
REQUESTED_BY
APPROVED_BY
CHANGE_TIMESTAMP
EFFECTIVE_DATE
REFERENCE

A mesma filosofia pode ser aplicada a mudanças críticas em:

PRODUCT
LIMIT RULE
MERCHANT CONTRACT
TERMINAL PROFILE
SETTLEMENT RULE

Sistema financeiro precisa possuir memória.


🖥️ 34. E onde entra o mainframe?

Agora finalmente podemos olhar para tecnologias.

Uma arquitetura híbrida conceitual poderia ser:

POS
 │
 ▼
ACQUIRER EDGE
 │
 ▼
NETWORK
 │
══════════════════════════════════
           IBM Z / z/OS
══════════════════════════════════
 │
 ▼
CICS
 │
 ├── AUTHORIZATION
 ├── CARD ACCOUNT
 ├── PRODUCT
 ├── LIMIT
 └── BUSINESS RULES
 │
 ├── Db2
 ├── VSAM
 └── MQ
 │
 ▼
BATCH
 │
 ├── CLEARING
 ├── BILLING
 ├── SETTLEMENT
 ├── ACCOUNTING
 └── RECONCILIATION

Em ambientes reais essas funções podem estar distribuídas entre mainframe, sistemas distribuídos, cloud, gateways, appliances especializados e fornecedores.

A pergunta arquitetural fundamental não é:

“Está tudo no mainframe?”

A pergunta é:

“Quem é o System of Record de cada verdade?”


🧠 35. COBOL não é a primeira coisa que eu ensinaria

Se eu tivesse diante de mim vinte programadores COBOL iniciantes destinados a trabalhar em Cards & Payments, eu não começaria ensinando:

IDENTIFICATION DIVISION.

Começaria colocando R$100 sobre a mesa.

E perguntaria:

“O que acontece com este dinheiro quando alguém encosta um cartão numa maquininha?”

Primeiro ensinaríamos o negócio.

Depois:

CUSTOMER
 ↓
CARD
 ↓
PRODUCT
 ↓
PLAFOND
 ↓
MERCHANT
 ↓
POS
 ↓
ACQUIRER
 ↓
NETWORK
 ↓
ISSUER
 ↓
AUTHORIZATION
 ↓
CLEARING
 ↓
SETTLEMENT
 ↓
BILLING
 ↓
ACCOUNTING
 ↓
RECONCILIATION

Só então COBOL começa a fazer sentido.


🧰 36. Cada tecnologia finalmente ganha um motivo para existir

O aluno começa a perceber por que encontrará CICS em processamento transacional online.

Entende por que existem milhões de linhas de COBOL implementando regras de negócio.

Percebe o papel de Db2 e VSAM na persistência de diferentes tipos de informação conforme a arquitetura.

Entende como MQ pode participar da integração entre domínios.

Descobre por que JCL e processamento batch continuam extremamente importantes para volumes massivos, interfaces, fechamentos, billing, clearing, settlement, contabilização e reconciliação em determinadas implementações.

E entende finalmente por que logs, traces, auditoria e monitoramento não são burocracia.

São evidências.


🚨 37. WAR ROOM — 03:17

E aqui está nosso pequeno easter egg.

Telefone toca.

03:17.

Produção:

— Temos uma divergência de R$100.

O iniciante entra no SDSF.

Procura:

100.00

Encontra 8.743 ocorrências.

Excelente.

Agora temos 8.743 suspeitos.

😂

Patrick Jane toma café.

Pergunta:

— Qual é a identidade da transação?

Encontramos a primeira referência.

Então construímos:

03:16:57 AUTH REQUEST
03:16:58 APPROVED
03:17:01 TIMEOUT
03:17:04 RETRY
03:17:05 SECOND MESSAGE
03:17:07 REVERSAL

Horas depois:

CLEARING      1
SETTLEMENT    1
ACCOUNTING    0

Aha!

O problema nunca foi:

“sumiram R$100.”

O problema era:

o ciclo de vida da transação foi interrompido entre dois domínios que deveriam concordar.

Agora temos uma investigação.


🕵️ 38. Outro incidente: 50 mil maquininhas enlouqueceram

Alguns meses depois:

— Determinadas maquininhas deixaram de aceitar um tipo de operação.

War Room.

CICS:

GREEN.

Db2:

GREEN.

CPU:

GREEN.

MQ:

GREEN.

Network:

GREEN.

Issuer:

GREEN.

Todo mundo declara inocência.

Jane pergunta:

— Quando começou?

— Meia-noite.

— O que mudou à meia-noite?

Silêncio.

Descobrimos:

TERMINAL PROFILE
VERSION 118
VALID UNTIL 23:59:59

Uma parte da frota não recebeu ou não ativou adequadamente determinado perfil/configuração.

Resultado:

1.950.000 POS → OK
   50.000 POS → OLD PROFILE

Nenhum COBOL estava errado.

Nenhum CICS estava quebrado.

A máquina estava simplesmente executando a configuração que possuía.

Essa é uma lição magnífica:

Nem todo incidente de negócio é defeito de código.


🧩 39. O grande mapa do BELLACARD

Depois de toda nossa investigação, podemos finalmente desenhar o sistema:

                        CUSTOMER
                           │
                       CADASTRO
                           │
                     CARD ACCOUNT
                           │
             ┌─────────────┼──────────────┐
             │             │              │
          PRODUCT       PLAFOND        FEE PLAN
             │             │              │
             └─────────────┼──────────────┘
                           │
                          CARD
                           │
                           ▼
══════════════════════════════════════════════════
                        MERCHANT
                           │
                        CONTRACT
                           │
                      PRICING PLAN
                           │
                          MCC
                           │
                         STORE
                           │
                          POS
                           │
                    TERMINAL PROFILE
                           │
                          TMS
══════════════════════════════════════════════════
                           │
                        PURCHASE
                           │
                           ▼
                       ACQUIRER
                           │
                        NETWORK
                           │
                         ISSUER
                           │
                    AUTHORIZATION
                           │
                  ┌────────┴────────┐
                  │                 │
               DECLINE          APPROVED
                                    │
                               AUTH CODE
                                    │
                               REVERSAL?
                                    │
                                CLEARING
                                    │
                               SETTLEMENT
                                    │
              ┌─────────────────────┼──────────────────┐
              │                     │                  │
           BILLING              ACCOUNTING       RECONCILIATION
              │                     │
           PAYMENT              GENERAL LEDGER
              │
           BANKING
              │
          COLLECTION

             TRANSACTION
                  │
               DISPUTE
                  │
              CHARGEBACK

Agora podemos finalmente dizer:

isso é um ecossistema de cartões.


☕ 40. A verdadeira lição de The Mentalist

Patrick Jane não seria um excelente analista de produção porque sabe COBOL.

Provavelmente nem saberia escrever:

PERFORM UNTIL

Ele seria excelente porque sabe formular perguntas.

Quando aparece uma transação problemática, o iniciante pergunta:

“O programa deu erro?”

Jane perguntaria:

“Qual foi a última evidência confiável?”

O iniciante pergunta:

“A compra foi aprovada?”

Jane:

“Foi posteriormente revertida?”

O iniciante:

“Está no clearing?”

Jane:

“Com qual identidade?”

O iniciante:

“A tarifa é R$300.”

Jane:

“Era R$300 na data do evento?”

O iniciante:

“A POS está na versão 120.”

Jane:

“Estava na versão 120 quando aconteceu?”

O iniciante:

“O mainframe está verde.”

Jane:

“E quem disse que o problema está no mainframe?”

Essa mudança de mentalidade é talvez mais importante que decorar qualquer comando.


🔎 41. A regra Bellacosa para investigar cartões

Quando receber um incidente, não procure primeiro pelo erro.

Reconstrua a história.

Comece identificando:

WHO
 │
WHAT
 │
WHEN
 │
WHERE
 │
WHICH PRODUCT
 │
WHICH MERCHANT
 │
WHICH TERMINAL
 │
WHICH TRANSACTION
 │
WHICH AUTHORIZATION
 │
WHICH CLEARING RECORD
 │
WHICH SETTLEMENT
 │
WHICH ACCOUNTING EVENT
 │
WHICH VERSION
 │
WHICH RULE

Depois monte a timeline.

Só então mergulhe no código.

Isso evita horas investigando o componente errado.


🧠 42. Curiosidade — a mesma compra possui várias identidades

Esse talvez seja um dos conceitos mais importantes para um futuro especialista.

A compra que João conhece como:

“R$100 no Café Bellacosa”

pode aparecer tecnicamente de maneiras diferentes em:

POS
ACQUIRER
NETWORK
ISSUER
AUTHORIZATION
CLEARING
CARD ACCOUNT
SETTLEMENT
ACCOUNTING
RECONCILIATION

O grande trabalho investigativo é construir uma linha ligando essas representações.

Imagine o mural de The Mentalist:

POS REF
   │
   ▼
ACQUIRER REF
   │
   ▼
NETWORK REF
   │
   ▼
AUTHORIZATION
   │
   ▼
CLEARING REF
   │
   ▼
SETTLEMENT
   │
   ▼
ACCOUNTING REF

A linha vermelha entre elas é aquilo que chamamos de correlação.

Sem ela temos logs.

Com ela temos uma história.


🏛️ 43. E essa é a beleza escondida do mainframe

Quando alguém diz:

“COBOL é uma tecnologia velha.”

Talvez esteja olhando para o tijolo e ignorando a catedral.

O programa COBOL que verifica um status pode fazer parte de uma cadeia que permite que alguém compre um café às 10h32 numa cidade qualquer.

O CICS que executa uma transação pode estar no caminho entre uma maquininha e uma decisão financeira que precisa acontecer em segundos.

Um batch executado durante a madrugada pode estar processando milhões de registros de clearing.

Um job pode gerar contabilizações.

Outro pode reconciliar universos inteiros.

Uma fila MQ aparentemente insignificante pode representar a ponte entre duas partes críticas dessa história.

Uma tabela Db2 com uma data de vigência errada pode afetar milhares de clientes.

Um profile incorreto pode transformar milhares de maquininhas perfeitamente saudáveis em protagonistas de uma War Room.

E uma única transação de R$100 pode atravessar tudo isso.


☕ Epílogo — A última xícara de café

São 05:42.

A War Room finalmente está silenciosa.

O problema das 03:17 foi identificado.

A transação foi reconstruída.

Encontramos autorização.

Encontramos timeout.

Encontramos retry.

Encontramos reversal.

Encontramos clearing.

Encontramos settlement.

Encontramos a ausência da contabilização esperada.

A reconciliação fez exatamente aquilo para que foi criada:

percebeu que duas histórias não terminavam da mesma maneira.

Alguém pergunta a Patrick Jane:

— Como você descobriu?

Ele olha para os enormes monitores.

Depois para as milhares de linhas do log.

E responde:

“Vocês estavam procurando onde o sistema errou. Eu procurei onde os sistemas deixaram de concordar.”

Talvez essa seja uma das melhores definições para troubleshooting em sistemas de cartões.

Não somos apenas programadores COBOL.

Não somos operadores de CICS.

Não somos leitores de dumps.

Somos investigadores de sistemas.

Cada mensagem é uma pista.

Cada timestamp é uma testemunha.

Cada authorization code é uma evidência.

Cada reversal muda a história.

Cada versão possui seu momento.

Cada parâmetro possui sua vigência.

Cada clearing precisa encontrar sua origem.

Cada lançamento contábil precisa possuir uma explicação.

E toda reconciliação possui uma pergunta extremamente simples:

“As histórias fecham?”

Porque em um sistema financeiro podemos até aceitar que uma mensagem demore alguns milissegundos.

Podemos aceitar que um processo atravesse dezenas de sistemas.

Podemos conviver com COBOL escrito antes de alguns de seus atuais mantenedores nascerem.

O que não podemos aceitar é que R$100 desapareçam sem deixar uma história explicável.

E se um dia, às 03:17, alguém telefonar dizendo:

— Bellacosa, sumiram R$100.

Não procure 100.00 no log.

Pegue um café.

Abra o mural.

Descubra quem era o cliente, qual era o cartão, produto, plafond, merchant, loja e terminal.

Descubra a configuração vigente.

Encontre a autorização.

Procure o reversal.

Siga até o clearing.

Atravesse o settlement.

Cheque billing e cobrança quando aplicáveis.

Chegue à contabilidade.

E finalmente pergunte à reconciliação:

“Onde exatamente nossas histórias deixaram de ser iguais?”

Nesse momento você deixou de ser apenas um programador COBOL iniciante.

Você começou a pensar como um verdadeiro analista de sistemas de missão crítica.

Ou, como Patrick Jane provavelmente diria diante do nosso velho IBM Z:

o mainframe quase sempre deixa pistas. O segredo é saber quais perguntas fazer.

☕🕵️‍♂️💳

Bellacosa Mainframe
Onde até uma compra de R$100 pode virar uma investigação de madrugada.



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