import { useState } from 'react' import type { AltaCliente, DatosFirma } from '../types' import { firmaSchema } from '../lib/schemas' import { formatoMoneda, formatoFechaCorta } from '../lib/formatters' import { calcularTotalIngresos } from '../lib/calculations' import { estadoExpediente } from '../lib/expediente' import SectionCard from '../components/SectionCard' import SignaturePad from '../components/SignaturePad' import ChecklistExpediente from '../components/ChecklistExpediente' import * as perfilCliente from '../lib/pdf/perfilCliente' import * as identificacionCliente from '../lib/pdf/identificacionCliente' import * as avisoPrivacidad from '../lib/pdf/avisoPrivacidad' import * as cartaAntilavado from '../lib/pdf/cartaAntilavado' import * as checklistExpediente from '../lib/pdf/checklistExpediente' interface Props { alta: AltaCliente onCambiarFirma: (firma: DatosFirma) => void onAnterior: () => void /** Registra el alta en el servidor (después de firmar y revisar el expediente) */ onRegistrar: () => void /** true mientras el alta se está registrando */ registrando?: boolean } const GENERADORES: { tipo: string; descargar: (alta: AltaCliente) => void }[] = [ { tipo: 'Perfil del cliente', descargar: perfilCliente.descargar }, { tipo: 'Identificación de cliente (PLD)', descargar: identificacionCliente.descargar }, { tipo: 'Aviso de privacidad', descargar: avisoPrivacidad.descargar }, { tipo: 'Carta anti-lavado', descargar: cartaAntilavado.descargar }, { tipo: 'Checklist de expediente', descargar: checklistExpediente.descargar }, ] /** Paso 8: firma del cliente, nombre del asesor, resumen y generación de PDFs */ export default function FirmasForm({ alta, onCambiarFirma, onAnterior, onRegistrar, registrando = false }: Props) { const [error, setError] = useState('') const [avisoExpediente, setAvisoExpediente] = useState('') const { datosGenerales: g, viviendaCredito: v, economicos, firma } = alta const proyecto = v.proyecto === 'OTRO' ? v.proyectoOtro : v.proyecto const expediente = estadoExpediente(alta.documentos, firma.firmaDataUrl) const validar = (): boolean => { const r = firmaSchema.safeParse(firma) setError(r.success ? '' : (r.error.issues[0]?.message ?? 'Revisa la firma')) return r.success } // Advierte (sin bloquear) si el expediente está incompleto al generar PDFs const avisarExpediente = () => { setAvisoExpediente( expediente.completoTodo ? '' : `Expediente incompleto (${expediente.completos}/${expediente.total}): puedes generar los PDFs, pero faltan documentos o la firma.`, ) } const generar = (descargar: (a: AltaCliente) => void) => { avisarExpediente() if (validar()) descargar(alta) } const generarTodos = () => { avisarExpediente() if (!validar()) return for (const g2 of GENERADORES) g2.descargar(alta) } return (
Cliente
{g.nombreCompleto}
CURP
{g.curp}
RFC
{g.rfc}
Proyecto
{proyecto || '—'}
Ubicación / Modelo
{v.ubicacion || '—'} {v.modelo}
Valor venta
{formatoMoneda(Number(v.valorVenta) || 0)}
Total ingresos
{formatoMoneda(calcularTotalIngresos(economicos))}
Fecha
{formatoFechaCorta(g.fecha)}
Documentos
{alta.documentos.length} de 5
onCambiarFirma({ ...firma, firmaDataUrl: dataUrl })} />
{error &&

{error}

} {avisoExpediente && (

{avisoExpediente}

)}
{GENERADORES.map((g3) => ( ))}

El expediente se registra y los PDFs se generan después de firmar.

) }