Backend · Modelagem de domínio
OpenLedg
Fundação de um backend em .NET para perfis de participantes, permissões e roteamento. Regras no domínio e no PostgreSQL preparam a integração futura com um ledger financeiro.
Em andamento
- C#
- .NET 10
- ASP.NET Core
- EF Core
- PostgreSQL
- Docker
Minha contribuição
Projeto próprio de Felipe Winsch (felpzw): modelagem dos participantes, persistência, restrições de acesso, testes e documentação arquitetural. O histórico público consultado atribui os commits a felpzw.
Problema
Como representar pessoas, empresas e iniciadores de pagamento com regras diferentes, sem misturar perfis cadastrais com saldos e lançamentos? Um iniciador não pode receber uma conta de liquidação, inclusive quando o vínculo é criado diretamente por SQL.
Contexto e escopo
O recorte entregue é a fundação OLGP: domínio, persistência, migração e operação local. Os endpoints atuais são a identificação do serviço, /health/live e /health/ready. Não há endpoints de cadastro nem uma jornada de pagamentos disponível.
Arquitetura
Domain concentra invariantes sem depender do EF Core. Application define contratos; Infrastructure implementa persistência com EF Core/Npgsql; Api compõe dependências e health checks no Kestrel.
O PostgreSQL separa perfis, metadados de segurança e roteamento em schemas. Guarda referências de contas em formato decimal para preservar os 128 bits. Saldos e lançamentos ficam fora desse modelo; a porta ILedgerAccountDirectory ainda não tem adaptador TigerBeetle implementado.
- API / Kestrel · composição e saúde
- Infrastructure · EF Core / Npgsql
- PostgreSQL · perfis e roteamento
Decisões e trade-offs
TPH reúne os tipos de participante em uma tabela e evita joins de herança. Em troca, existem colunas nulas por subtipo e novos tipos exigem migrações dos CHECKs. O ADR não assume ganho de desempenho sem medição.
Chaves estrangeiras compostas e CHECKs reforçam as invariantes fora da aplicação. O papel da API pode operar perfis e roteamento, mas não tem DDL nem acesso ao schema security; bootstrap e migração usam um papel separado.
Separar o futuro ledger dos dados cadastrais torna explícita a responsabilidade de cada armazenamento. A contrapartida é planejar idempotência e reconciliação: não existe transação distribuída implementada.
Testes e evidências
Os testes xUnit inspecionados cobrem UUIDv4, estados iniciais de conformidade, rejeição de contas para iniciadores, preservação de UInt128, configuração de webhooks e dependências entre camadas.
A suíte de integração usa PostgreSQL real para verificar migrações, persistência dos subtipos, idempotência única, rejeição de vínculos inválidos por SQL e privilégios do papel de execução. Nesta revisão editorial, o código dos testes foi conferido; a suíte .NET não foi executada.
Limitações
Projeto em andamento, sem transferências, autenticação ativa, integração DICT, KYC/AML real ou execução de webhooks. CPF/CNPJ têm normalização e validação de formato, sem verificação cadastral ou de dígitos verificadores.
TigerBeetle está previsto como fonte do estado financeiro e aparece no ambiente local, mas a aplicação ainda não o consulta. O readiness verifica o PostgreSQL, não pagamentos ou disponibilidade do ledger. A réplica local em modo development não representa um cluster de produção.
Explorar o projeto
Comece pelos ADRs e pelo modelo de participantes; compare SettlementRoute com os testes de restrições no banco. Os links abaixo fixam a revisão analisada.
Para explorar localmente, clone o repositório e use a revisão indicada. São necessários Docker com Compose v2+ e, para os testes no host, .NET SDK 10.0.300 ou posterior da linha 10.0. Copie .env.example para .env e configure senhas locais antes dos comandos. O guia do repositório detalha os testes de integração. Não há demo pública verificada.
./scripts/dev-up.sh
curl --fail http://localhost:8080/health/ready
dotnet tool restore
dotnet restore
dotnet build --no-restore
dotnet test tests/OpenLedg.Tests --no-build
./scripts/test-integration.sh
docker compose down- Código revisado
- Arquitetura e fronteiras
- Registro das decisões
- Testes de domínio e integração
- Guia de execução local
Fontes conferidas em 2026-09-25 · Conteúdo v1 · Revisão aca1e82.