/** * Utilidades de formato y etiquetas legibles para el CRM. */ export function formatMoney(value: number | null | undefined, currency = 'MXN'): string { if (value === null || value === undefined) return '—'; return new Intl.NumberFormat('es-MX', { style: 'currency', currency }).format(Number(value)); } export function formatDate(value: string | null | undefined): string { if (!value) return '—'; const d = new Date(value); if (Number.isNaN(d.getTime())) return '—'; return d.toLocaleDateString('es-MX', { year: 'numeric', month: 'short', day: 'numeric' }); } export const ACCOUNT_TYPES: { value: string; label: string }[] = [ { value: 'importador', label: 'Importador' }, { value: 'exportador', label: 'Exportador' }, { value: 'immex', label: 'IMMEX / Maquila' }, { value: 'agencia_aduanal', label: 'Agencia aduanal' }, { value: 'transportista', label: 'Transportista' }, { value: 'otro', label: 'Otro' } ]; export const ACCOUNT_STATUS: { value: string; label: string }[] = [ { value: 'active', label: 'Activa' }, { value: 'prospect', label: 'Prospecto' }, { value: 'inactive', label: 'Inactiva' } ]; export const LEAD_SOURCES: { value: string; label: string }[] = [ { value: 'web', label: 'Web' }, { value: 'referido', label: 'Referido' }, { value: 'evento', label: 'Evento' }, { value: 'llamada', label: 'Llamada' }, { value: 'email', label: 'Email' }, { value: 'otro', label: 'Otro' } ]; export const LEAD_STATUS: { value: string; label: string }[] = [ { value: 'new', label: 'Nuevo' }, { value: 'contacted', label: 'Contactado' }, { value: 'qualified', label: 'Calificado' }, { value: 'unqualified', label: 'No calificado' }, { value: 'converted', label: 'Convertido' } ]; export const ACTIVITY_TYPES: { value: string; label: string }[] = [ { value: 'call', label: 'Llamada' }, { value: 'meeting', label: 'Reunión' }, { value: 'task', label: 'Tarea' }, { value: 'email', label: 'Correo' }, { value: 'note', label: 'Nota' } ]; export const ACTIVITY_STATUS: { value: string; label: string }[] = [ { value: 'pending', label: 'Pendiente' }, { value: 'completed', label: 'Completada' }, { value: 'canceled', label: 'Cancelada' } ]; export function labelOf(list: { value: string; label: string }[], value: string | null): string { if (!value) return '—'; return list.find((x) => x.value === value)?.label ?? value; }