import express from 'express'; import { prisma } from '../prismaClient'; const router = express.Router(); // GET /api/financeiro-painel?mes=6&ano=2024 router.get('/', async (req, res) => { try { const mes = parseInt(req.query.mes as string) || (new Date().getMonth() + 1); const ano = parseInt(req.query.ano as string) || (new Date().getFullYear()); if (isNaN(mes) || isNaN(ano)) { return res.status(400).json({ error: 'Parâmetros de mês e ano inválidos.' }); } // Datas para filtro const dataInicio = new Date(ano, mes - 1, 1); const dataFim = new Date(ano, mes, 1); // Honorários a receber: parcelas pendentes ou vencidas const honorariosAReceber = await prisma.parcelaHonorario.aggregate({ _sum: { valor: true }, where: { OR: [{ status: 'PENDENTE' }, { status: 'VENCIDO' }], }, }); // Honorários recebidos no mês const honorariosRecebidosMes = await prisma.parcelaHonorario.aggregate({ _sum: { valorPago: true }, where: { status: 'PAGO', dataPagamento: { gte: dataInicio, lt: dataFim, }, }, }); // Detalhes das parcelas recebidas no mês const detalhesHonorarios = await prisma.parcelaHonorario.findMany({ where: { status: 'PAGO', dataPagamento: { gte: dataInicio, lt: dataFim, }, }, include: { honorario: true }, orderBy: { dataPagamento: 'desc' }, take: 10, }); // Custas a pagar const custasAPagar = await prisma.custaProcessual.aggregate({ _sum: { valor: true }, where: { OR: [{ status: 'PENDENTE' }, { status: 'VENCIDO' }], }, }); // Custas pagas no mês const custasPagasMes = await prisma.custaProcessual.aggregate({ _sum: { valor: true }, where: { status: 'PAGO', dataPagamento: { gte: dataInicio, lt: dataFim, }, }, }); // Detalhes das custas pagas no mês const detalhesCustas = await prisma.custaProcessual.findMany({ where: { status: 'PAGO', dataPagamento: { gte: dataInicio, lt: dataFim, }, }, orderBy: { dataPagamento: 'desc' }, take: 10, }); res.json({ honorariosAReceber: honorariosAReceber._sum.valor || 0, honorariosRecebidosMes: honorariosRecebidosMes._sum.valorPago || 0, custasAPagar: custasAPagar._sum.valor || 0, custasPagasMes: custasPagasMes._sum.valor || 0, detalhesHonorarios, detalhesCustas, }); } catch (error) { console.error('Erro no financeiroPainel:', error); res.status(500).json({ error: 'Erro ao buscar dados financeiros.' }); } }); export default router;