Controle financeiro
Progresso | Pronto para desenvolvimento |
---|---|
Prioridade | Alto |
Função
Gerenciamento das transações feitas na conta corrente do usuário.
Tipos de transações:
- Saque
- Transferência
- PIX
- TED (com cobrança de uma taxa)
As transações com o destinatário como uma corretora de valores (NuInvest) devem ser consideradas do tipo “Investimento”
- Depósito
- Investimento
Funcionalidades
- Visualização do saldo
- Visualização do total investido (soma dos valores das transações com tipo “investimento”)
- Registro de transações
- Salvar transação
- Editar transação
- Deletar transação
- Listagem de transações
- Filtros:
- Por um determinado destinatário
- Por data da operação
- Por data específica
- Por intervalo de datas
- Por tipo (saque, transferência, etc)
- Agrupamentos:
- Por número de transferências para um determinado destinatário (ordem decrescente)
- Por destinatários
- Filtros:
Entidades
classDiagram
Transacao <-- TipoDaTransacao
Transacao "1" <--* "1" Destinatario
Transacao "1" <--* "1" Remetente
Transacao --|> AutoValidacao : implements
class Transacao {
- id: long
- nomeUsuario: string
- remetente: Remetente
- tipoDaTransacao: TipoDaTransacao
- destinatario: Destinatario
- valor: double
- dataDaOperacao: LocalDate
- dataDeEdicao: LocalDate
- dataDeDelecao: LocalDate
- verificarTransferenciaParaPropriaConta() boolean
- verificarTransferenciaParaOutraConta() boolean
- atribuirNaturezaDaOperacao() double
}
class TipoDaTransacao {
<<Enumeration>>
SAQUE
TRANSFERENCIA_PIX
TRANSFERENCIA_TED
DEPOSITO
INVESTIMENTO
}
class Destinatario {
- nome: string
}
class Remetente {
- nome: string
}
class AutoValidacao {
<<interface>>
validar()
}
-
transferenciaParaPropriaConta()
Verificação: Transferência com destinatário como o próprio usuário
- Verificar se
nomeUsuario
é igual adestinatario.nome
- Se
nomeUsuario == remetente.nome == destinatario.nome
:Atribuir (no construtor) o tipo da transação como “investimento”
- Verificar se
-
atribuirNaturezaDaOperacao()
Verificação: atribuição do sinal algébrico na propriedade
valor
:+
= depósito / transferência com destinatário como o próprio usuário (ENTRADA)
-
= saque / transferência para outra pessoa / investimento (SAÍDA)
-
verificarTransferenciaParaOutraConta()
Verificação: Transferência para outra pessoa
- Verificar se
nomeUsuario
é igual aremetente.nome
- Verificar se
Casos de uso
Calcular saldo final
Somatória dos valores de todas as transações com um determinado
nomeUsuario
Calcular total investido
Somatória dos valores de todas as transações de um determinado
nomeUsuario
e com o tipo da transação como “investimento”
Registrar nova transação
Salvar uma nova transação do usuário no banco de dados
Editar uma transação
- Verificação: se a transação existe
- Existe: atualização dos novos dados da transação
- Não existe: lançar erro
- Verificação: se a transação existe
Deletar um transação
A transação não será deletada do banco de dados, apenas editada para definir a data de deleção dela.
Dessa forma, as transações com
dataDeDelecao ≠ null
não deverão ser exibidas para o usuário.
Filtrar transações pelo destinatário
Listar todas as transações de um usuário com um determinado destinatário
Filtrar transações por data
Listar todas as transações de um usuário com uma determinada data de operação
- Verificações
- Se a data de operação é uma data passada ou hoje
- Verificações
Filtrar transações por intervalo de datas
Listar todas as transações de um usuário com um a data de operação presente em um determinado intervalo de tempo
- Verificações
- Se o intervalo de datas não é uma data específica
- Se a data de operação é uma data passada ou hoje
- Verificações
Filtrar transações por tipo
Listar todas as transações de um usuário com um determinado tipo (saque, depósito)
Agrupar transações de transferência por destinatário
Listar por ordem decrescente o número de transações do tipo transferência enviadas pelo usuário por destinatário.
[ { "nome_usuario": "Gabriel", "destinatario": "João da Silva", "tranferencias_recebidas": 2, "historico": [ { "data_de_operacao": "20/12/2022", "valor": 100.0 }, { "data_de_operacao": "10/12/2022", "valor": 200.0 }, ] }, // ... ]