BankLab — Um laboratório Open Source para engenharia de sistemas financeiros
- BankLab — Um laboratório Open Source para engenharia de sistemas financeiros
- BankLab: ZTA MVP com senha transacional
Índice
- 1. Objetivo
- 2. Princípios do projeto
- 3. Escopo atual
- 4. Fora do escopo por enquanto
- 5. Stack
- 5.1. API
- 5.2. Mobile
- 5.3. Infra local
- 6. Estrutura do repositório
- 7. O que já existe
- 7.1. API em Go
- 7.2. Mobile em Flutter
- 8. Como rodar localmente
- 8.1. Pré-requisitos
- 8.2. 1. Subir a API
- 8.3. 2. Rodar o app mobile
- 9. Endpoints principais
- 10. Comandos úteis
- 11. Como contribuir
- 12. Sugestões de primeiras contribuições
- 13. Documentação
- 13.1. Geral
- 13.2. API
- 13.3. Mobile
- 14. Status
- 15. Licença
BankLab é um laboratório open source para estudar e praticar engenharia aplicada a sistemas financeiros, unindo backend em Go, app mobile em Flutter, consistência transacional, onboarding e evolução futura para Zero Trust Architecture.

O projeto nasceu de uma lacuna prática: depois de estudar Zero Trust em aplicações financeiras, faltava um ambiente próprio onde fosse possível transformar pesquisa, artigos e decisões arquiteturais em implementação real, com tempo para errar, revisar, documentar e amadurecer o desenho.
Um domínio bancário, mesmo simplificado, é uma boa base para esse tipo de estudo porque obriga a lidar com problemas que aparecem em sistemas reais: identidade, autenticação, aprovação de usuários, movimentações financeiras, rastreabilidade, contratos de API, integração mobile/backend e fluxos de cadastro que não podem ser tratados como simples formulários.
A ideia central do BankLab é tratar movimentações financeiras como fonte da verdade. O saldo de uma conta não é apenas um número solto: ele deve ser consequência dos registros no ledger, persistidos na tabela transactions.
O projeto, atualmente, possui duas aplicações principais:
- API em Go: implementa o núcleo bancário, incluindo autenticação, clientes, contas e movimentações financeiras.
- Mobile em Flutter: consome a API e valida fluxos ponta a ponta de autenticação, contas e transações.
Este repositório ainda está em evolução. A proposta é que ele sirva como um laboratório prático para estudar backend, mobile, testes, produto financeiro, documentação técnica e colaboração em um projeto com cara de sistema real.
Objetivo
Construir, de forma incremental, uma base bancária simplificada capaz de:
- cadastrar usuários e clientes;
- aprovar usuários antes do acesso completo;
- abrir e consultar contas;
- registrar movimentações financeiras;
- consultar saldo e extrato;
- realizar transferências internas;
- manter rastreabilidade e consistência dos dados.
O foco não é ter muitas funcionalidades rapidamente. O foco é construir pouco, mas com cuidado: regras claras, testes, documentação e decisões técnicas bem explicadas.
Princípios do projeto
- Integridade financeira: toda alteração relevante deve ser registrada.
- Atomicidade: operações críticas, como transferências, devem acontecer por completo ou não acontecer.
- Rastreabilidade: mudanças de saldo precisam ser auditáveis.
- Ledger como autoridade: os registros em
transactionssão a fonte da verdade para movimentações. - Consistência antes de volume: o projeto privilegia confiabilidade, não quantidade de telas ou endpoints.
- Arquitetura explícita: as camadas e responsabilidades devem ser fáceis de entender.
Escopo atual
| Domínio | Responsabilidades |
|---|---|
| Autenticação | registro, login, refresh token, usuário atual e controle por JWT |
| Usuários | cadastro, estado de aprovação e fluxo administrativo |
| Clientes | criação automática a partir do usuário, CPF e email |
| Contas | abertura, listagem, consulta de saldo e ciclo de vida |
| Ledger | depósito, saque, transferência interna e histórico de movimentações |
| Extrato | listagem paginada de transações por conta |
| Mobile | experiência Flutter integrada com a API |
Fora do escopo por enquanto
- Pix, TED ou integrações bancárias externas;
- antifraude e análise de risco;
- notificações por email, push ou SMS;
- múltiplas moedas;
- conciliação bancária externa;
- processamento assíncrono de transações financeiras.
Esses pontos podem aparecer no roadmap futuro, mas a base precisa ficar sólida primeiro.
Stack
API
- Go 1.26.1
- PostgreSQL 17 com
pg_cron net/httppgx/v5- JWT
- migrations com
golang-migrate
Mobile
- Flutter
- Dart SDK ^3.11.4
diogo_routerflutter_secure_storageauto_injector
Infra local
- Docker
- Docker Compose
- imagem PostgreSQL customizada em
infra/docker/postgres - Makefile para comandos de desenvolvimento
Estrutura do repositório
banklab/ ├── CHANGELOG.md # Registro de mudanças no projeto ├── CONTRIBUTING.md # Diretrizes para contribuições ├── LICENSE # Licença do projeto ├── Makefile # Atalhos de desenvolvimento ├── README.md # Documentação principal em português ├── README_en.md # Documentação principal em inglês ├── api/ # Backend em Go ├── docker-compose.yml # Configuração PostgreSQL local com pg_cron ├── docs/ # Roadmap, backlogs, decisões e relatórios ├── infra/ # Scripts e configurações de infraestrutura ├── mobile/ # App Flutter BankFlow ├── packages/ # Futuro repositório de pacotes auxiliares ├── templates/ # Templates do pandoc └── tools/postman/ # Coleções e apoio para testar a API
O que já existe
API em Go
- registro, login, refresh token e usuário atual;
- criação automática de cliente durante o cadastro;
- fluxo de aprovação administrativa de usuários pendentes;
- abertura e listagem de contas;
- consulta de saldo;
- transferências internas;
- recibo de transferência;
- extrato paginado;
- persistência append-only das movimentações em
transactions; - testes automatizados em módulos importantes.
Mobile em Flutter
- fluxo de autenticação com JWT;
- tratamento de usuário pendente de aprovação;
- visualização e criação de contas;
- transferência entre contas;
- histórico de transações;
- integração com a API local.
Como rodar localmente
Pré-requisitos
- Docker e Docker Compose;
- Go 1.26.1 ou superior;
- Flutter configurado na máquina;
golang-migrate.
No macOS, o golang-migrate pode ser instalado com:
brew install golang-migrate
1. Subir a API
Na raiz do repositório:
make run
Esse comando valida o Docker, sobe o PostgreSQL, aguarda o banco ficar pronto, aplica as migrations e inicia a API.
O banco local é criado a partir de uma imagem customizada baseada em PostgreSQL 17 com pg_cron. A extensão é usada para rotinas agendadas de manutenção do banco, como a limpeza diária de verificações temporárias de contato.
URL padrão da API:
http://localhost:8080
2. Rodar o app mobile
Em outro terminal:
cd mobile flutter pub get flutter run --dart-define-from-file=dev.env
Os guias detalhados ficam em:
Endpoints principais
POST /auth/register
POST /auth/login
POST /auth/refresh
GET /auth/me
POST /admin/users/{id}/approve
POST /admin/customers/{customer_id}/accounts
GET /customers/me
GET /accounts
GET /accounts/{id}/balance
GET /accounts/internal-transfers/recipients
POST /accounts/internal-transfers
GET /accounts/transfer/{transaction_reference}/receipt
GET /accounts/{id}/statementAs rotas de registro e login exigem X-App-Token. As demais rotas exigem autenticação por JWT. Rotas administrativas também exigem um usuário com papel de administrador.
Comandos úteis
make help # ambiente local make setup make run make reset # API make api-build make api-tests # Mobile make mobile-tests make mobile-test-unit # Todos os testes make tests make api-tests make mobile-tests # Docker make docker-up make docker-down make docker-logs make docker-clean
Como contribuir
O BankLab está aberto para colaboração de pessoas que queiram praticar, aprender e crescer junto com um projeto de engenharia aplicada.
Boas frentes para contribuir:
- Backend Go: novos casos de uso, testes, handlers, regras de domínio e melhoria de consistência.
- Flutter: telas, navegação, estados de erro, componentes e experiência de uso.
- Testes: unitários, integração, cenários de concorrência e cobertura de fluxos críticos.
- Documentação: guias de setup, explicação da arquitetura, diagramas e exemplos de uso.
- Produto financeiro: modelagem de fluxos, regras de negócio e refinamento do roadmap.
- Infra e DevEx: automação, scripts, CI, ambiente local e coleções Postman.
Para organizar o trabalho, use o padrão descrito em CONTRIBUTING.md. A ideia é classificar cada tarefa por tipo, área e prioridade, facilitando a entrada de novos colaboradores.
Sugestões de primeiras contribuições
- revisar o guia de setup e reportar pontos confusos;
- melhorar mensagens de erro no mobile;
- adicionar testes para cenários de transferência;
- criar exemplos de payload para endpoints principais;
- documentar fluxos com diagramas simples;
- melhorar telas de extrato e recibo;
- propor issues pequenas com escopo bem definido.
Documentação
Geral
- CONTRIBUTING.md
- docs/README.md
- docs/ROADMAP.md
- docs/backlogs/README.md
- docs/backlogs/mobile – Mobile backlogs abertos
- docs/backlogs/api – API backlogs abertos
- CHANGELOG.md
- tools/postman/README.md
API
- api/README.md
- api/docs/ARCHITECTURE.md
- api/docs/00-getting_started.md
- api/docs/01-domain_model.md
- api/docs/02-use_case_flows.md
- api/docs/03-application_model.md
- api/docs/04-consistency_and_concorrency.md
- api/docs/05-error_and_response.md
- api/docs/06-implementation.md
- api/docs/07-api-rest.md
- api/docs/08-auth_implementation.md
- api/docs/09-database.md
- api/docs/infra.md
Mobile
- mobile/README.md
- mobile/docs/ARCHITECTURE.md
- mobile/docs/00-getting_started.md
- mobile/docs/01-implemented-features.md
Status
Projeto em desenvolvimento ativo. A base já permite estudar fluxos reais de uma aplicação bancária simplificada, mas ainda há espaço para evoluir produto, testes, documentação e experiência mobile.
Licença
MIT. Veja LICENSE.
Deixe uma resposta