Files
advx/src/server/services/PensaoAlimenticiaService.ts
T
2025-04-10 23:07:21 -03:00

95 lines
2.2 KiB
TypeScript

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);
}
}
}