Skip to content

000 — Custos mensais da casa (registrar, listar, buscar, reajustar)

A gente registra, lista, busca e reajusta os custos recorrentes mensais da casa (internet, aluguel, energia, streaming…).

  • Given um orçamento da casa em BRL
  • When a gente cadastra três custos recorrentes:
    • Internet Vivo — R$ 120, categoria internet, vence dia 10, ativa desde jun/2026, no cartão
    • Aluguel — R$ 2.500, categoria moradia, vence dia 5, ativo desde jan/2026, no pix
    • Energia CPFL — R$ 200, categoria energia, vence dia 15, ativa desde jan/2026, no débito
  • Then o orçamento lista as três contas
  • And o total mensal é R$ 2.820

Scenario: Buscar e filtrar os custos da casa

Section titled “Scenario: Buscar e filtrar os custos da casa”
  • Given o orçamento da casa com as três contas registradas
  • When a gente busca textualmente por “Internet Vivo”, “vivo” ou “VIVO”
  • Then acha a Internet Vivo em qualquer caso (busca exata, parcial e case-insensitive)
  • And filtrar por categoria energia retorna a Energia CPFL
  • And filtrar por categoria moradia retorna o Aluguel
  • And filtrar por vencimento dia 10 retorna a Internet Vivo
  • And filtrar por vencimento dia 5 retorna o Aluguel

Scenario: Reajustar uma conta sem perder a identidade

Section titled “Scenario: Reajustar uma conta sem perder a identidade”
  • Given o orçamento da casa com a Internet Vivo em R$ 120
  • When a gente reajusta o valor para R$ 150
  • Then continua sendo a mesma conta (mesmo id)
  • And o valor passa a ser R$ 150
  • And o total mensal sobe para R$ 2.850
  • Aggregate RootBudget (nome, currency, coleção de RecurringExpense; toda operação entra por ele).
  • EntityRecurringExpense (id próprio; compõe os VOs abaixo).
  • Value ObjectsMoney, ExpenseName, CategoryName, BillingDay, Recurrence, ActivePeriod, PaymentMethodName, Notes.

Repositório/persistência, eventos, API, encerramento de recorrência, semantic search, casos de erro (happy path only).

Implementar Aggregate + Entity + VOs até os três scenarios do spec passarem.