Projeto desenvolvido para estudo e composição de portfólio em desenvolvimento de software backend e mobile. O objetivo do ExpensAI é auxiliar no controle financeiro pessoal através do upload e leitura de extratos bancários (formatos CSV, PDF e OFX), realizando a categorização das despesas por meio de um microserviço em Python.
A aplicação conecta um backend em .NET 8 (C#), um serviço de processamento em Python (FastAPI) com Pandas, e um aplicativo mobile em Flutter.
- C# com ASP.NET Core Minimal APIs e Controllers
- Entity Framework Core com driver PostgreSQL (Npgsql)
- Autenticação via JWT com suporte a cookies HttpOnly e Secure
- Middlewares customizados para injeção de cabeçalhos de segurança (CSP, CORS, HSTS)
- FastAPI para recepção e validação dos arquivos
- Pandas para parse e categorização dos dados das transações
- Tratamento de exceções e registro de logs isolados sem exposição de dados sensíveis
- Flutter (Dart) com gerenciamento de estado via BLoC
- Cliente HTTP Dio configurado com
CookieManagerpara trafegar a sessão de forma segura
- Docker e Docker Compose para orquestração local dos serviços e do banco PostgreSQL
- Docker e Docker Compose instalados na máquina
- (Opcional) .NET 8 SDK, Python 3.11 e Flutter SDK para execução local sem containers
-
Clone o repositório:
git clone https://github.com/MatheusLeo26/smartflow-finance.git cd smartflow-finance -
Inicie os containers com o Docker Compose:
docker compose up -d
-
Os serviços estarão disponíveis em:
- Backend .NET:
http://localhost:5000(Swagger acessível em desenvolvimento emhttp://localhost:5000/swagger) - Serviço Python:
http://localhost:8000(Documentação emhttp://localhost:8000/docs) - Banco PostgreSQL:
localhost:5432
- Backend .NET:
[ Aplicativo Mobile (Flutter) ]
|
v (HTTP / REST)
[ Backend Principal (.NET 8) ] ---> [ Banco PostgreSQL ]
|
v (POST /process)
[ Serviço de Análise (Python FastAPI) ]
- O aplicativo faz a requisição autenticada de upload de extrato para o backend .NET.
- O .NET valida o arquivo (formato, extensão e MimeType) e o encaminha para o serviço em Python.
- O serviço Python faz a leitura dos dados, aplica o mapeamento de categorias e retorna as transações estruturadas.
- O backend .NET registra as informações no PostgreSQL e devolve o resultado formatado para o aplicativo.
Durante o desenvolvimento do projeto, busquei seguir recomendações essenciais de segurança de software:
- Validação de Entrada: O upload de arquivos aceita apenas extensões especificadas (
.csv,.pdf,.ofx) com verificação de MimeType e limite de tamanho de 10 MB para evitar vulnerabilidades de Path Traversal ou sobrecarga do servidor. - Gerenciamento de Autenticação: Autenticação via JWT com envio através de cookies
HttpOnly,SecureeSameSite=Strict. No aplicativo Flutter, o gerenciamento de rede retém os cookies sem expor credenciais ao armazenamento local simples do aparelho. - Tratamento de Exceções: Middlewares globais de erro no C# e no Python garantem que apenas mensagens genéricas sejam exibidas aos clientes em produção, evitando vazamento de stack traces e detalhes da infraestrutura.
- Cabeçalhos HTTP: Configuração de cabeçalhos de segurança essenciais como
Content-Security-Policy,X-Content-Type-Options: nosniff,X-Frame-Options: DENYeStrict-Transport-Security.
Este projeto permitiu colocar em prática conceitos de arquitetura distribuída, integração entre diferentes linguagens (C# e Python) e boas práticas de desenvolvimento mobile com Flutter.
- Evoluir o serviço em Python para aplicar modelos de aprendizado de máquina (Scikit-Learn) na classificação preditiva.
- Expandir a cobertura de testes unitários e de integração no backend.
- Construir visualizações gráficas de gastos na interface do Flutter.