Como vocês geram projeções "virtuais" de transações recorrentes no backend?
Olá pessoal,
Stack: Node.js / Nuxt (Nitro) no backend, TypeScript, PostgreSQL. O schema do banco já está definido, então não preciso de feedback sobre isso — preciso de ajuda com a lógica de implementação no backend em si.
Contexto: app de finanças pessoais. Uma tabela `recurrences` guarda as regras (valor, frequência, dia de vencimento, total de parcelas quando aplicável, data de início). As transações reais ficam numa tabela `transactions` separada, com uma FK `recurrence_id` nula. As ocorrências futuras NÃO são pré-geradas no banco — elas devem ser calculadas sob demanda como projeções "virtuais" (ex: "me mostra todas as transações, reais + projetadas, de julho de 2026"), e só viram uma linha real quando a data chega ou o usuário confirma.
O que eu preciso de ajuda, especificamente:
Como vocês estruturariam a função/serviço que recebe uma regra de recorrência + um intervalo de datas e retorna a lista de ocorrências projetadas? Alguma abordagem concreta ou pseudocódigo.
Vocês usariam uma lib (date-fns, rrule.js, luxon) pra gerar as datas das ocorrências, ou fariam a matemática de datas na mão? Se usar lib, qual e por quê.
Como vocês mesclam transações reais e projeções virtuais numa única lista pro frontend sem confundir as duas (flags, formato de resposta separado, IDs)?
Quando uma projeção precisa virar uma linha real (a data chega, ou o usuário confirma), qual a forma mais limpa de fazer isso sem duplicar lógica entre o "calculador de projeção" e o "materializador"?
Não preciso de conselhos sobre banco de dados/schema — só a abordagem de implementação no backend. Pseudocódigo, padrões ou recomendações de lib são bem-vindos. Valeu!