O PersonalBudget é uma aplicação desenvolvida para facilitar a gestão financeira pessoal, permitindo que os usuários acompanhem receitas, despesas e organizem suas finanças de forma eficiente e prática.
O projeto inclui funcionalidades para gerenciar diferentes tipos de movimentações financeiras, contas recorrentes e cálculos automatizados de saldos diários. Também oferece suporte à visualização de dados financeiros por meio de uma API bem estruturada.
- Java - OpenJDK (
21
) - Linguagem de programação principal. - Spring Boot (
3.2.4
) - Framework para criação de aplicações baseadas em Java. - MySQL (
8.0
) - Banco de dados relacional. - Docker (
24.0
) e Docker Compose (2.18
) - Para orquestração de containers. - Gradle (
8.6
) - Ferramenta de automação de build. - Flyway (
10.10.0
) - Controle de versionamento e migração do banco de dados. - MapStruct (
1.5.5.Final
) - Mapeamento de entidades e objetos. - OpenAPI (
3.0
) - Documentação interativa da API, facilitando o uso e teste dos endpoints. - Lombok (
1.18.32
) - Redução de boilerplate no código. - TestContainers (
1.19.7
) - Biblioteca para testes de integração utilizando containers. - Log4j (
2.23.1
) - Framework de logging para gerenciamento e monitoramento de logs. - Hibernate (
6.2.6
) - ORM para comunicação entre a aplicação e o banco de dados. - JUnit 5 - Framework de testes para garantir a qualidade do código.
- Feign Client - Cliente HTTP para comunicação entre microservices.
- Cadastro de receitas e despesas.
- Visualização, edição e exclusão de movimentações financeiras.
- Suporte a tipos de operações: CREDIT (crédito) e DEBIT (débito).
- Estados de movimentação: PENDING (pendente), PAID_OUT (pago) e LATE (atrasado).
O PersonalBudget permite o gerenciamento de contas recorrentes, que são movimentações financeiras programadas para ocorrer periodicamente. Existem dois tipos principais de contas recorrentes:
-
Contas Fixas:
- Movimentações financeiras que ocorrem regularmente (ex.: aluguel, assinaturas, contas de consumo).
- Pode ter recorrência semanal, mensal ou anual.
-
Contas Parceladas:
- Movimentações financeiras associadas a uma compra ou compromisso dividido em parcelas (ex.: financiamento, compras parceladas no cartão de crédito).
- A cada parcela paga, a próxima parcela é automaticamente programada.
O sistema realiza a automatização do lançamento de contas recorrentes através de um job agendado que roda diariamente. Este processo:
- Lança automaticamente movimentações financeiras baseadas em contas fixas e parceladas com vencimento no dia.
- Atualiza as próximas datas de vencimento para contas recorrentes.
O PersonalBudget fornece a funcionalidade de Balanço Diário, permitindo que os usuários acompanhem:
- Saldo de abertura: saldo acumulado até o início do dia.
- Receitas e despesas do dia.
- Saldo de fechamento: saldo acumulado após todas as receitas e despesas do dia.
- Balanço projetado: inclui movimentações pendentes para dias futuros.
A funcionalidade é altamente flexível, permitindo o acompanhamento de saldos entre um intervalo de datas especificado. Essa visão consolidada ajuda o usuário a entender seu fluxo financeiro diário e tomar decisões mais informadas.
-
Pré-requisitos:
- Docker e Docker Compose instalados.
- Java 21 instalado.
- Gradle configurado no ambiente (opcional).
-
Configuração Inicial:
- Clone o repositório do projeto.
- Configure variáveis de ambiente (ex.:
DB_USERNAME
,DB_PASSWORD
) no arquivo.env
ou exporte-as diretamente no terminal.
-
Executar com o Script
run-local.sh
:- Rode o script:
./run-local.sh
- Esse script cuida de iniciar os containers e inserir dados iniciais no banco.
- Rode o script:
A aplicação utiliza OpenAPI para fornecer documentação interativa. Após iniciar o sistema, você pode acessar a documentação em:
http://localhost:8080/swagger-ui/index.html
- Tabela:
financial_movement
- Descrição: Armazena as movimentações financeiras registradas pelos usuários.
- Campos principais:
id
: Identificador único (chave primária).code
: Código UUID da movimentação.operation_type
: Tipo de operação (CREDIT ou DEBIT).description
: Descrição da movimentação.amount
: Valor total da movimentação.amount_paid
: Valor pago.movement_date
: Data da movimentação.due_date
: Data de vencimento.pay_date
: Data de pagamento.status
: Status da movimentação (PENDING, PAID_OUT, LATE).- Campos de auditoria:
created_date
: Data de criação do registro.last_modified_date
: Data da última atualização do registro.
- Tabela:
installment_bill
- Descrição: Representa compras parceladas ou financiamentos.
- Campos principais:
id
: Identificador único (chave primária).code
: Código UUID da conta parcelada.description
: Descrição da conta parcelada.amount
: Valor total da conta.installment_total
: Total de parcelas.installment_count
: Número de parcelas já pagas.last_installment_date
: Data da última parcela paga.next_installment_date
: Data da próxima parcela.- Campos de auditoria:
created_date
: Data de criação do registro.last_modified_date
: Data da última atualização do registro.
- Tabela:
fixed_bill
- Descrição: Registra as contas fixas e recorrentes (ex.: assinaturas, contas de consumo).
- Campos principais:
id
: Identificador único (chave primária).code
: Código UUID da conta fixa.description
: Descrição da conta fixa.amount
: Valor da conta fixa.operation_type
: Tipo da operação (CREDIT ou DEBIT).status
: Status da conta (ACTIVE ou INACTIVE).start_date
: Data de início.end_date
: Data de término.recurrence_type
: Tipo de recorrência (WEEKLY, MONTHLY ou YEARLY).next_due_date
: Próxima data de vencimento.- Campos de auditoria:
created_date
: Data de criação do registro.last_modified_date
: Data da última atualização do registro.
- Tabela:
calendar_fixed_bill
- Descrição: Armazena os dias de recorrência das contas fixas.
- Campos principais:
id
: Identificador único (chave primária).day_launch
: Dia do lançamento.flg_leap_year
: Indica se a conta considera anos bissextos.id_fixed_bill
: Referência à tabelafixed_bill
.- Campos de auditoria:
created_date
: Data de criação do registro.last_modified_date
: Data da última atualização do registro.
O sistema possui um job automatizado para processar contas recorrentes. Ele é executado diariamente, utilizando a seguinte configuração de agendamento:
- Cron expression:
0 0 0 * * *
(executa à meia-noite todos os dias).
Funções do job:
- Lançar contas fixas e parcelas programadas com vencimento para o dia atual.
- Atualizar as datas das próximas parcelas e vencimentos.
Essa funcionalidade garante que o fluxo financeiro do usuário esteja sempre atualizado.
Se desejar contribuir para o projeto, siga os passos abaixo:
- Faça um fork do repositório.
- Crie uma branch para sua feature ou correção:
git checkout -b feature/BTS-XXX/sua-feature