# Requisitos do Sistema

Requisitos de hardware, software, rede e certificados para instalacao do FluxiQ PIX em diferentes ambientes.

## Pre-requisitos

- Leitura da [Introducao](./introduction.md) e [Arquitetura](./architecture.md)
- Acesso administrativo ao ambiente de destino (servidor, cloud ou cluster Kubernetes)

## Requisitos de Hardware

### Desenvolvimento

| Componente | Minimo | Recomendado |
|------------|--------|-------------|
| CPU | 4 cores | 8 cores |
| RAM | 8 GB | 16 GB |
| Disco | 20 GB SSD | 50 GB SSD |
| Rede | 100 Mbps | 1 Gbps |

### Staging / Homologacao

| Componente | Minimo | Recomendado |
|------------|--------|-------------|
| **App Nodes** (x2) | 4 vCPU, 8 GB RAM | 8 vCPU, 16 GB RAM |
| **PostgreSQL** | 4 vCPU, 8 GB RAM, 100 GB SSD | 8 vCPU, 16 GB RAM, 200 GB SSD |
| **Redis** | 2 vCPU, 4 GB RAM | 4 vCPU, 8 GB RAM |
| **NATS** (x3) | 2 vCPU, 4 GB RAM | 4 vCPU, 8 GB RAM |
| Rede | 1 Gbps | 10 Gbps |

### Producao (5.000 TPS)

| Componente | Minimo | Recomendado |
|------------|--------|-------------|
| **App Nodes** (x3+) | 8 vCPU, 16 GB RAM cada | 16 vCPU, 32 GB RAM cada |
| **PostgreSQL** (HA) | 8 vCPU, 32 GB RAM, 500 GB SSD | 16 vCPU, 64 GB RAM, 1 TB NVMe |
| **Redis** (Sentinel) | 4 vCPU, 8 GB RAM (x3) | 8 vCPU, 16 GB RAM (x3) |
| **NATS** (cluster) | 4 vCPU, 8 GB RAM (x3) | 8 vCPU, 16 GB RAM (x3) |
| **Load Balancer** | 2 vCPU, 4 GB RAM | 4 vCPU, 8 GB RAM |
| Rede | 10 Gbps | 25 Gbps |

::: tip DIMENSIONAMENTO
O pool de conexoes do banco e calculado como: `POOL_SIZE x 4 repos x numero_de_pods`. Para producao com POOL_SIZE=200 e 2 pods, o total e 1.600 conexoes. Configure `max_connections` do PostgreSQL de acordo.
:::

## Requisitos de Software

### Docker (Desenvolvimento e Docker Compose)

| Software | Versao Minima | Comando de Verificacao |
|----------|---------------|----------------------|
| Docker Engine | 24.0+ | `docker --version` |
| Docker Compose | 2.20+ | `docker compose version` |

### Kubernetes

| Software | Versao Minima | Comando de Verificacao |
|----------|---------------|----------------------|
| Kubernetes | 1.25+ | `kubectl version --client` |
| Helm | 3.14+ | `helm version` |
| kubectl | 1.28+ | `kubectl version --client` |

### On-Premises (Instalacao Manual)

| Software | Versao | Descricao |
|----------|--------|-----------|
| PostgreSQL | 16 | Banco de dados principal (8 schemas, 25 migrations) |
| Redis | 7 | Cache, rate limiting, token blacklist, idempotencia |
| NATS Server | 2.10+ | Mensageria com JetStream habilitado |
| HAProxy | 2.8+ | Load balancer para alta disponibilidade |
| nginx | 1.27+ | Proxy reverso e terminacao TLS |

### Build a partir do Codigo-Fonte (Opcional)

| Software | Versao | Descricao |
|----------|--------|-----------|
| Elixir | 1.17 | Runtime do backend (NAO usar 1.19 — nao existe) |
| Erlang/OTP | 27 | Maquina virtual BEAM |
| Node.js | 20 LTS | Build do frontend Vue 3 |
| npm | 10+ | Gerenciador de pacotes do frontend |

::: danger ATENCAO
Elixir 1.19 **NAO EXISTE**. A versao correta e 1.17. A imagem Docker de base e `hexpm/elixir:1.17.3-erlang-27.2-alpine-3.21.0`.
:::

## Requisitos de Rede

### Portas Necessarias

| Porta | Protocolo | Servico | Direcao |
|-------|-----------|---------|---------|
| 4001 | TCP | Dict Service | Interno |
| 4002 | TCP | SPI Service | Interno |
| 4003 | TCP | Settlement Service (API Gateway) | Interno + Externo |
| 5432 | TCP | PostgreSQL | Interno |
| 6379 | TCP | Redis | Interno |
| 4222 | TCP | NATS (clientes) | Interno |
| 6222 | TCP | NATS (cluster routing) | Interno |
| 8222 | TCP | NATS (HTTP monitoring) | Interno |
| 80 | TCP | HTTP (redirect para HTTPS) | Externo |
| 443 | TCP | HTTPS (TLS) | Externo |
| 9568 | TCP | Prometheus metrics | Interno |

### Requisitos de Conectividade

| Destino | Porta | Protocolo | Descricao |
|---------|-------|-----------|-----------|
| BACEN DICT (Homologacao) | 16522 | HTTPS + mTLS | `dict-h.pi.rsfn.net.br` |
| BACEN ICOM/SPI Primario (Homologacao) | 16522 | HTTPS + mTLS | `icom-h.pi.rsfn.net.br` (CPM) |
| BACEN ICOM/SPI Secundario (Homologacao) | 17522 | HTTPS + mTLS | `icom-sec-h.pi.rsfn.net.br` (CSM) |
| BACEN DICT (Producao) | 443 | HTTPS + mTLS | `dict.pi.rsfn.net.br` |
| BACEN ICOM/SPI Primario (Producao) | 16422 | HTTPS + mTLS | `icom.pi.rsfn.net.br` (CPM) |
| BACEN ICOM/SPI Secundario (Producao) | 17422 | HTTPS + mTLS | `icom-sec.pi.rsfn.net.br` (CSM) |

::: warning REDE RSFN
O acesso as APIs do Banco Central requer conectividade com a Rede do Sistema Financeiro Nacional (RSFN). Verifique com seu provedor de conectividade RSFN as configuracoes de rede necessarias.
:::

## Certificados Digitais

### ICP-Brasil (Obrigatorio para Producao)

Para integracao real com o Banco Central, sao necessarios 2 tipos de certificados ICP-Brasil:

| Certificado | Tipo | Uso |
|-------------|------|-----|
| **CPIC** | Certificado de Participante para Identificacao e Comunicacao | mTLS — autenticacao na conexao HTTPS com BACEN |
| **CPIA** | Certificado de Participante para Assinatura | XMLDSig — assinatura digital de mensagens ISO 20022 |

**Especificacao de assinatura:**
- Canonicalizacao: Exclusive XML C14N (`xml-exc-c14n#`)
- Assinatura: RSA-SHA256 (`rsa-sha256`)
- Digest: SHA-256 (`sha256`)

**Para mensagens SPI:** 3 References (KeyInfo por ID, AppHdr URI vazio, Document sem URI), `<Sgntr>` dentro de `<AppHdr>`

**Para mensagens DICT:** 2 References (AppHdr + Document)

### TLS para Servicos Internos (Recomendado)

Para comunicacao entre servicos em producao, recomenda-se o uso de certificados TLS:

| Componente | Tipo | Emissao |
|------------|------|---------|
| Load Balancer | TLS (publico) | Let's Encrypt ou CA comercial |
| Comunicacao interna | mTLS (interno) | CA interna ou cert-manager |
| PostgreSQL | TLS (servidor) | CA interna |

### Ambiente de Homologacao / Desenvolvimento

Para ambientes que nao se conectam ao BACEN real, o FluxiQ PIX inclui um simulador BACEN integrado (`SIMULATOR_ENABLED=true`) que nao requer certificados ICP-Brasil.

## Acesso ao BACEN

### Requisitos para Homologacao

1. **Registro como participante** no SPI junto ao Banco Central
2. **ISPB** (Identificador do Sistema de Pagamentos Brasileiro) atribuido
3. **Acesso a RSFN** (Rede do Sistema Financeiro Nacional) configurado
4. **Certificados ICP-Brasil** (CPIC + CPIA) validos e instalados
5. **Credenciais de homologacao** fornecidas pelo BACEN

### Requisitos para Producao

Todos os requisitos de homologacao, mais:

1. **Aprovacao nos testes de homologacao** do BACEN
2. **Certificados de producao** ICP-Brasil
3. **Plano de contingencia** documentado e testado
4. **Equipe de suporte** 24/7 conforme exigido pelo BACEN
5. **Monitoramento de ANS** configurado (SLA de 1,6 segundos para liquidacao)

## Resultado Esperado

Ao final desta secao, voce tera:

- Lista completa de requisitos de hardware para seu ambiente-alvo
- Versoes de software necessarias verificadas
- Portas de rede documentadas para configuracao de firewall
- Entendimento dos certificados necessarios para integracao BACEN
- Clareza sobre os passos de registro junto ao Banco Central
