import { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { toast } from 'react-toastify'; import { formatarPercentual, parsePercentual } from '../../utils/formatters'; interface ProcessoOption { id: string; numero: string; titulo: string; } interface ClienteOption { id: string; nome: string; } export function NovoPensaoAlimenticia() { const navigate = useNavigate(); const [loading, setLoading] = useState(false); const [formData, setFormData] = useState({ titulo: '', descricao: '', dataInicial: new Date().toISOString().split('T')[0], dataFinal: '', percentualSalarioMinimo: '', multaPactuada: '', tipoAtualizacao: 'INPC', processoId: '', clienteId: '', observacoes: '', }); const [processos, setProcessos] = useState([]); const [clientes, setClientes] = useState([]); // Carregar processos e clientes ao montar o componente useEffect(() => { const carregarDados = async () => { try { // Carregar processos const processosResponse = await fetch('/api/processos'); if (processosResponse.ok) { const processosData = await processosResponse.json(); setProcessos(processosData); } // Carregar clientes const clientesResponse = await fetch('/api/clientes'); if (clientesResponse.ok) { const clientesData = await clientesResponse.json(); setClientes(clientesData); } } catch (error) { console.error('Erro ao carregar dados:', error); toast.error('Falha ao carregar dados auxiliares'); } }; carregarDados(); }, []); const handleChange = (e: React.ChangeEvent) => { const { name, value } = e.target; setFormData(prev => ({ ...prev, [name]: value })); }; // Handler para campos percentuais const handlePercentChange = (e: React.ChangeEvent) => { const { name, value } = e.target; // Remover caracteres não numéricos, exceto vírgula e ponto const numericValue = value.replace(/[^\d.,]/g, ''); // Formatar como percentual const formattedValue = formatarPercentual(numericValue); setFormData(prev => ({ ...prev, [name]: formattedValue })); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setLoading(true); try { // Validar dados if (!formData.titulo || !formData.dataInicial || !formData.percentualSalarioMinimo) { toast.error('Preencha todos os campos obrigatórios'); setLoading(false); return; } // Converter percentual para decimal (formato 0.XX) const percentual = parsePercentual(formData.percentualSalarioMinimo); // Verificar se percentual é válido if (isNaN(percentual) || percentual <= 0 || percentual > 1) { toast.error('Percentual do salário mínimo deve ser maior que 0 e menor ou igual a 100%'); setLoading(false); return; } // Preparar dados para envio const dadosParaEnviar = { ...formData, percentualSalarioMinimo: percentual, multaPactuada: formData.multaPactuada ? parsePercentual(formData.multaPactuada) : undefined, }; // Enviar solicitação para criar cálculo const response = await fetch('/api/pensao-alimenticia', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(dadosParaEnviar), }); if (!response.ok) { const errorData = await response.json(); throw new Error(errorData.error || 'Erro ao criar cálculo de pensão alimentícia'); } const resultado = await response.json(); toast.success('Cálculo de pensão alimentícia criado com sucesso!'); // Redirecionar para a página do cálculo criado navigate(`/pensao-alimenticia/${resultado.id}`); } catch (error) { console.error('Erro ao criar cálculo de pensão:', error); toast.error(`Falha ao criar cálculo: ${error.message}`); } finally { setLoading(false); } }; return (

Novo Cálculo de Pensão Alimentícia

Preencha os dados para criar um novo cálculo de pensão alimentícia

{/* Título */}
{/* Índice de Atualização */}
{/* Percentual do Salário Mínimo */}
%

Ex: 30% = 30,00%

{/* Data Inicial */}

Data de início da pensão

{/* Data Final */}

Deixe em branco se a pensão não tem data final

{/* Multa Pactuada */}
%

Ex: 10% = 10,00%. Deixe em branco se não houver.

{/* Processo */}
{/* Cliente */}
{/* Observações */}