Sistema de compra programada de ações inspirado na funcionalidade da Itaú Corretora. O projeto implementa um motor de execução automática, distribuição proporcional entre carteiras filhotes, rebalanceamento e cálculo de impostos.
# 1. Clone o repositório
git clone https://github.com/Paulo-Ricard0/Compra-Programada-Acoes.git
# 2. Entre no projeto
cd Compra-Programada-Acoes
# 3. Suba a infraestrutura do projeto
docker-compose up -d --build
# 4. Acesse o endpoint da API
http://localhost:8080/
Nota: As migrations do Entity Framework são aplicadas automaticamente no startup da aplicação para facilitar a execução local.
| Serviço | URL |
|---|---|
| Swagger UI | http://localhost:8080/swagger |
| Health Check | http://localhost:8080/health-ui#/healthchecks |
| Seq (Logs) | http://localhost:5341 |
| Kafka UI | http://localhost:8081 |
O projeto foi desenhado sob os princípios de Clean Architecture e Domain-Driven Design (DDD), isolando regras de negócio da infraestrutura de entrega e persistência.
graph TD
A["API Layer<br/>(Controllers, Middlewares, Extensions)"] --> B["Application Layer<br/>(Use Cases, DTOs)"]
B --> C["Domain Layer<br/>(Entities, Enums, Services, Repositories)"]
A --> D["Infrastructure Layer<br/>(EF Core, Kafka, Parser B3)"]
D --> C
D --> E[("MySQL 8.0")]
D --> F[("Apache Kafka")]
style A fill:#1a73e8,stroke:#1557b0,color:#fff
style B fill:#34a853,stroke:#2d8e47,color:#fff
style C fill:#ea8600,stroke:#c47200,color:#fff
style D fill:#9334e6,stroke:#7b2bc4,color:#fff
style E fill:#f5f5f5,stroke:#ccc,color:#333
style F fill:#f5f5f5,stroke:#ccc,color:#333
src/
├── CompraProgramada.API/ # Entrypoint, Middlewares de resiliência e Endpoints
├── CompraProgramada.Application/ # Casos de uso e orquestração do negócio
├── CompraProgramada.Domain/ # Entidades, Regras e Contratos
└── CompraProgramada.Infrastructure/ # Persistência (EF Core) e Integração
tests/
├── CompraProgramada.Domain.Tests/
├── CompraProgramada.Application.Tests/
└── CompraProgramada.Infrastructure.Tests/
docs/ # Documentação técnica e manuais de arquitetura
cotacoes/ # Repositório de arquivos históricos da B3 (COTAHIST)
| Camada | Tecnologia | Versão |
|---|---|---|
| Runtime | .NET | 10.0 |
| ORM | Entity Framework Core + Pomelo MySQL | 9.0.2 / 9.0.0 |
| Banco de Dados | MySQL | 8.0 |
| Mensageria | Apache Kafka (Confluent) | 7.5.0 |
| Logging | Serilog + Seq | 10.0.0 |
| API Docs | Swagger / OpenAPI (Swashbuckle) | 10.1.4 |
| Health Checks | AspNetCore.HealthChecks (MySQL + Kafka) | 9.0.0 |
A orquestração local de dependências é feita via Docker Compose:
graph LR
API["API .NET 10<br/>:8080"] --> MySQL["MySQL 8.0<br/>:3306"]
API --> Kafka["Apache Kafka<br/>:29092"]
API --> Seq["Seq (Logs)<br/>:5341"]
Kafka --> Zookeeper["Zookeeper<br/>:2181"]
KafkaUI["Kafka UI<br/>:8081"] -. Monitora .-> Kafka
style API fill:#1a73e8,stroke:#1557b0,color:#fff
style MySQL fill:#00758f,stroke:#005f73,color:#fff
style Kafka fill:#231f20,stroke:#000,color:#fff
style Seq fill:#5c2d91,stroke:#4a2375,color:#fff
style Zookeeper fill:#555,stroke:#333,color:#fff
style KafkaUI fill:#e53935,stroke:#b71c1c,color:#fff
sequenceDiagram
participant C as Clientes
participant CES as Cesta de Recomendação
participant P as Processador Cotahist
participant M as Motor de Compra (Background)
participant K as Kafka / Eventos
C->>C: Adesão e Definição de Aporte Mensal
CES->>CES: Ativação e Definição de Composição (Ativos)
P->>P: Recepção de Arquivo Diário (B3)
P->>M: Atualização de Preços na Base
M->>C: Verifica Contas Filhotes Ativas
M->>CES: Verifica Composição Atual
M->>M: Consolidação de Ordens de Compra (Lote/Fracionário)
M->>M: Rateio e Distribuição para Filhotes
M->>M: Recálculo de Preço Médio e Custódia
M->>M: Apuração de Eventos de IR / Custos
M->>K: Publicação de Eventos Analíticos e Tributários
Diagrama de Entidade-Relacionamento representando a persistência dos dados do domínio:
# Execução da suíte de testes
dotnet test
Os documentos de aprofundamento técnico estão disponíveis no diretório docs/:
Acessar a documentação do sistema e seus requisitos
Projeto desenvolvido por Paulo Ricardo
