feat: mejoras SAT, auth, web y migración
SAT: - Cron diario 6-10 AM con grupos de tenants (~20% por hora). - Retries fijos de daily sync a 9 AM y 4 PM CDMX. - Filtrado de contribuyentes con FIEL vigente en cron. - Timeout de 5 min en cliente HTTP del SAT. - Manejo defensivo de 404, EmptyResult (5004) y solicitudes agotadas. - Fechas formateadas en zona horaria America/Mexico_City. - Patch a @nodecfdi/sat-ws-descarga-masiva para evitar getResponse crash. - Sweep de jobs stale con thresholds ajustados. Auth/Web: - Primer pago de suscripción define periodo activo en webhook. - Rate limit de login: 25 intentos / 15 min. - Recuperación de contraseña: 24h de validez. - Soporte viewingTenantId en contribuyentes. - Timeout y estado de carga al crear organización en Facturapi. - Filtros por cliente y cartera en Mis Asignados. - Orden alfabético en selector de contribuyente. DB: - Migración 057: unique index de declaraciones incluye impuestos.
This commit is contained in:
@@ -48,6 +48,11 @@ export function ContribuyenteSelector() {
|
||||
|
||||
const selected = contribuyentes.find((c) => c.id === selectedContribuyenteId);
|
||||
|
||||
// Orden alfabético por nombre (locale español, sin distinguir acentos/mayúsculas)
|
||||
const contribuyentesOrdenados = [...contribuyentes].sort((a, b) =>
|
||||
a.nombre.localeCompare(b.nombre, 'es', { sensitivity: 'base', numeric: true })
|
||||
);
|
||||
|
||||
return (
|
||||
<div className="contribuyente-selector relative">
|
||||
<button
|
||||
@@ -91,7 +96,7 @@ export function ContribuyenteSelector() {
|
||||
)}
|
||||
|
||||
{/* Lista de contribuyentes */}
|
||||
{contribuyentes.map((c) => (
|
||||
{contribuyentesOrdenados.map((c) => (
|
||||
<button
|
||||
key={c.id}
|
||||
onClick={() => { setSelectedContribuyente(c.id, c.rfc, c.nombre); setOpen(false); }}
|
||||
|
||||
Reference in New Issue
Block a user