Skip to content

Arquitetura do Sistema / System Architecture

Visão Geral

O Banking Challenges é um monorepo gerenciado pelo Turborepo com pnpm workspaces. Cada desafio é um pacote independente, mas todos compartilham a mesma visão: simular sistemas financeiros brasileiros reais com a tecnologia mais adequada para cada problema.

Switch: TypeScript vs Go

Stack Completo

CamadaTecnologiaDesafios
BackendTypeScript (Koa, Fastify, Express)01, 05, 06, 07, 08, 09
FrontendNext.js 14, Vite + React10, 11
DatabaseMongoDB, PostgreSQL, RedisTodos
InfraDocker, Kubernetes, Proxmox12
CI/CDGitHub Actions, GitLab CI13
DocsVitePressTodos

Diagrama de Arquitetura

┌─────────────────────────────────────────────────────────────────┐
│                      Clientes / Consumers                        │
│  GraphQL Playground │ REST Clients │ Web Browser │ Postman       │
└──────────────────────────┬──────────────────────────────────────┘

┌──────────────────────────▼──────────────────────────────────────┐
│                      API Gateway (opcional)                      │
│                  Roteamento, autenticação, rate-limit            │
└──┬──────────┬──────────┬──────────┬──────────┬─────────────────┘
   │          │          │          │          │
┌──▼──┐  ┌────▼────┐ ┌──▼──┐  ┌───▼───┐  ┌───▼───┐
│Ledger│  │SPI/ICOM│ │DICT  │  │ISO8583│  │Workflow│
│      │  │        │ │      │  │       │  │Engine  │
│ Koa  │  │Fastify │ │Express│  │TCP    │  │Redis   │
│GraphQl│  │ISO20022│ │REST  │  │Server │  │Graph   │
│MongoDB│  │Go(Gin) │ │JSON  │  │Binário│  │DAG     │
└──┬───┘  └───┬────┘ └──┬───┘  └───┬───┘  └───┬───┘
   │          │         │          │          │
   │     ┌────▼────┐ ┌──▼───┐  ┌──▼───┐  ┌───▼───┐
   │     │Open Fin │ │NFS-e │  │Report│  │Leaky  │
   │     │Fastify  │ │SOAP  │  │Fastify│  │Bucket │
   │     │REST+FAPI│ │XML   │  │PG+MinIO│  │Redis  │
   └─────┴─────────┴──┴─────┴──┴──────┴──┴───────┘

Princípios Arquiteturais

PrincípioDescrição
IndependênciaCada desafio é um pacote isolado
Simulação RealistaReplicam sistemas financeiros reais
Infra LocalDocker Compose: MongoDB, PostgreSQL, Redis, MinIO
TypeScript NativoBackend 100% TypeScript
Padrões FinanceirosISO 20022, ISO 8583, ABRASF

Mapeamento de Desafios

#DesafioStack PrincipalDatabase
01Ledger GraphQLKoa + GraphQL + RelayMongoDB
02SPI SimulatorGo (Gin) + ISO 20022In-memory
03DICT SimulatorGo (Gin) + RESTIn-memory
04ISO 8583TCP ServerPostgreSQL
05Workflow EngineFastify + DAG + WebSocketsRedis
06Open FinanceFastify + FAPI + OAuth 2.0PostgreSQL
07NFS-eFastify + SOAP + XMLPostgreSQL
08Report SystemFastify + StreamingPostgreSQL + MinIO
09Leaky BucketFastify + Lua ScriptsRedis
10Landing PageNext.js 14 + Tailwind-
11KYC SystemVite + ReactPostgreSQL
12Proxmox + IaCTerraform + Ansible-
13CI/CDGitHub Actions / GitLab CI-
14RFC / ADRMarkdown + Mermaid-
15PISPOpen Finance + FAPIPostgreSQL
16AntecipaçãoPricing EnginePostgreSQL

Fluxo de Dados

Segurança

CamadaTecnologia
TransporteTLS 1.3, mTLS
AutenticaçãoJWT, OAuth 2.0, FAPI
CriptografiaAES-256, RSA, 3DES
Rate LimitingLeaky Bucket (Redis + Lua)
AuditLogs imutáveis, 5+ anos

Como testar

bash
# Subir tudo
docker compose up -d

# Testar Ledger
curl -X POST http://localhost:3001/graphql \
  -H "Content-Type: application/json" \
  -d '{"query":"{ accounts { id name balance } }"}'

# Testar SPI (Go)
cd packages/backend/spi-simulator-go
go run .

# Testar ISO 8583
echo "0100..." | nc localhost 3004

Lições aprendidas

  1. Monorepo com Turborepo — Independência entre desafios, compartilhamento de código
  2. Go para serviços críticos — SPI, DICT, ISO 8583 precisam de performance
  3. TypeScript para APIs — GraphQL, REST, webhooks são mais produtivos em TS
  4. Docker Compose — Infraestrutura local completa (MongoDB, PostgreSQL, Redis, MinIO)
  5. Padrões financeiros — ISO 20022, ISO 8583, ABRASF não são opcionais
  6. Segurança em camadas — TLS, JWT, mTLS, rate limiting, audit
  7. Documentação viva — VitePress com i18n PT/EN
  8. CI/CD obrigatório — Toda mudança passa por testes e aprovação