import { PrismaClient, Decimal } from '@prisma/client'; import { ApiError } from '../utils/ApiError'; import { v4 as uuidv4 } from 'uuid'; const prisma = new PrismaClient(); export class PensaoAlimenticiaService { async criarCalculo(dados: { titulo: string; descricao?: string; dataInicial: Date; dataFinal?: Date; percentualSalarioMinimo: number; multaPactuada?: number; tipoAtualizacao: string; processoId?: string; clienteId?: string; observacoes?: string; usuarioId: string; }) { try { const calculo = await prisma.calculoPensaoAlimenticia.create({ data: { id: uuidv4(), ...dados, status: 'ATIVO', valorCalculado: new Decimal(0), // Será atualizado após o cálculo valorMulta: new Decimal(0), valorTotal: new Decimal(0) } }); return calculo; } catch (error) { console.error('Erro ao criar cálculo de pensão:', error); throw new ApiError('Falha ao criar cálculo de pensão alimentícia', 500); } } async buscarCalculo(id: string) { const calculo = await prisma.calculoPensaoAlimenticia.findUnique({ where: { id }, include: { processo: true, cliente: true, usuario: { select: { id: true, nome: true, email: true } } } }); if (!calculo) { throw new Error('Cálculo não encontrado'); } return calculo; } async listarCalculos(filtros: { status?: string; clienteId?: string; processoId?: string; usuarioId?: string; }) { try { const calculos = await prisma.calculoPensaoAlimenticia.findMany({ where: filtros, include: { processo: true, cliente: true, usuario: { select: { id: true, nome: true, email: true } } }, orderBy: { criadoEm: 'desc' } }); return calculos; } catch (error) { console.error('Erro ao listar cálculos:', error); throw new ApiError('Falha ao listar cálculos de pensão alimentícia', 500); } } }