import { lazy, Suspense } from "react";
import { Navigate, Route, Routes } from "react-router-dom";
// Importar directamente para no arrastrar el barrel (index.js re-exporta estáticamente
// muchos módulos pesados, lo que impide que Vite mueva otros a lazy chunks)
import { Layout } from "../hooks/Layout";
import { ProtectedRoute } from "../hooks/ProtectedRoute";

// Si un import() dinámico falla (chunk con hash viejo tras un deploy, o deps re-optimizadas
// por Vite en dev), recargamos UNA vez para traer el index nuevo con los hashes correctos.
// El listener de main.jsx no cubre este caso: React.lazy captura la rejection y la re-lanza
// como error de render, así que nunca dispara `unhandledrejection`. Acá lo atajamos en el import.
// Reutiliza la misma clave/ventana que main.jsx para no recargar dos veces; si vuelve a fallar
// dentro de la ventana, propaga el error (evita loop de recargas ante una falla real).
const retryImport = (importFn) =>
  importFn().catch((err) => {
    const key = "chunk_reload_at";
    const last = Number(sessionStorage.getItem(key) ?? 0);
    if (Date.now() - last > 10_000) {
      sessionStorage.setItem(key, String(Date.now()));
      window.location.reload();
      // La página se está recargando: devolvemos una promesa que nunca resuelve para que
      // React no muestre el error boundary en el instante previo al reload.
      return new Promise(() => {});
    }
    throw err;
  });

// Helper: lazy para named exports  →  lazy(() => import("./Foo").then(m => ({ default: m.Foo })))
const lazyNamed = (importFn, name) => lazy(() => retryImport(importFn).then((m) => ({ default: m[name] })));
// Helper: lazy para default exports, con el mismo retry+reload.
const lazyDefault = (importFn) => lazy(() => retryImport(importFn));

// ─── Páginas (lazy) ──────────────────────────────────────────────────────────
const Login = lazyNamed(() => import("../pages/Login"), "Login");
const Register = lazyNamed(() => import("../pages/Register"), "Register");
const EmpresaBloqueada = lazyNamed(() => import("../pages/EmpresaBloqueada"), "EmpresaBloqueada");
const MiSuscripcionStandalone = lazyNamed(() => import("../pages/MiSuscripcionStandalone"), "MiSuscripcionStandalone");
const Home = lazyNamed(() => import("../pages/Home"), "Home");
const PageNot = lazyNamed(() => import("../components/templates/404"), "PageNot");
const Dashboard = lazyNamed(() => import("../pages/Dashboard"), "Dashboard");
const AIDashboardPage = lazyNamed(() => import("../pages/AIDashboard"), "AIDashboardPage");
const SoporteIaPage = lazyNamed(() => import("../components/soporte-ia/SoporteIaPage"), "SoporteIaPage");
const ReporteSoporteIaPage = lazyNamed(
  () => import("../components/soporte-ia/ReporteSoporteIaPage"),
  "ReporteSoporteIaPage",
);
const POSAdmin = lazyNamed(() => import("../pages/POSAdmin"), "POSAdmin");
const Ventas = lazyNamed(() => import("../pages/Ventas"), "Ventas");
const ViajesPage = lazyNamed(() => import("../pages/ViajesPage"), "ViajesPage");
const ViajeDetallePage = lazyNamed(() => import("../pages/ViajeDetallePage"), "ViajeDetallePage");
const Presupuestos = lazyNamed(() => import("../pages/Presupuestos"), "Presupuestos");
const Cobros = lazyNamed(() => import("../pages/Cobros"), "Cobros");
const Compras = lazyNamed(() => import("../pages/Compras"), "Compras");
const NuevaNotaCreditoCompraTemplate = lazyNamed(() => import("../components/organismos/ComprasDesign/NuevaNotaCreditoCompraTemplate"), "NuevaNotaCreditoCompraTemplate");
const Gastos = lazyNamed(() => import("../pages/Gastos"), "Gastos");
const Importaciones = lazyNamed(() => import("../pages/Importaciones"), "Importaciones");
const CrmConfig = lazyNamed(() => import("../pages/crm/CrmConfig"), "CrmConfig");
const CrmTablero = lazyNamed(() => import("../pages/crm/CrmTablero"), "CrmTablero");
const CrmLeads = lazyNamed(() => import("../pages/crm/CrmLeads"), "CrmLeads");
const CrmOportunidadDetalle = lazyNamed(() => import("../pages/crm/CrmOportunidadDetalle"), "CrmOportunidadDetalle");
const ClienteCrm360 = lazyNamed(() => import("../pages/crm/ClienteCrm360"), "ClienteCrm360");
const CrmClientes = lazyNamed(() => import("../pages/crm/CrmClientes"), "CrmClientes");
const CrmReportes = lazyNamed(() => import("../pages/crm/CrmReportes"), "CrmReportes");
const CrmFechas = lazyNamed(() => import("../pages/crm/CrmFechas"), "CrmFechas");
const CrmCatalogos = lazyNamed(() => import("../pages/crm/CrmCatalogos"), "CrmCatalogos");
const InmProyectos = lazyNamed(() => import("../pages/inmobiliario/InmProyectos"), "InmProyectos");
const InmProyectoDetalle = lazyNamed(() => import("../pages/inmobiliario/InmProyectoDetalle"), "InmProyectoDetalle");
const InmConfiguracion = lazyNamed(() => import("../pages/inmobiliario/InmConfiguracion"), "InmConfiguracion");
const InmCotizaciones = lazyNamed(() => import("../pages/inmobiliario/InmCotizaciones"), "InmCotizaciones");
const InmCotizacionDetalle = lazyNamed(() => import("../pages/inmobiliario/InmCotizacionDetalle"), "InmCotizacionDetalle");
const InmCotizacionNueva = lazyNamed(() => import("../pages/inmobiliario/InmCotizacionNueva"), "InmCotizacionNueva");
const InmOperaciones = lazyNamed(() => import("../pages/inmobiliario/InmOperaciones"), "InmOperaciones");
const InmOperacionDetalle = lazyNamed(() => import("../pages/inmobiliario/InmOperacionDetalle"), "InmOperacionDetalle");
const InmCartera = lazyNamed(() => import("../pages/inmobiliario/InmCartera"), "InmCartera");
const InmComisiones = lazyNamed(() => import("../pages/inmobiliario/InmComisiones"), "InmComisiones");
const InmObra = lazyNamed(() => import("../pages/inmobiliario/InmObra"), "InmObra");
const InmCumplimiento = lazyNamed(() => import("../pages/inmobiliario/InmCumplimiento"), "InmCumplimiento");
const InmLegajoCliente = lazyNamed(() => import("../pages/inmobiliario/InmLegajoCliente"), "InmLegajoCliente");
const InmInversores = lazyNamed(() => import("../pages/inmobiliario/InmInversores"), "InmInversores");
const ImportacionesDetalle = lazyNamed(() => import("../pages/ImportacionesDetalle"), "ImportacionesDetalle");
const Contactos = lazyNamed(() => import("../pages/Contactos"), "Contactos");
const Clientes = lazyNamed(() => import("../pages/Clientes"), "Clientes");
const Inventario = lazyNamed(() => import("../pages/Inventario"), "Inventario");
const Tesoreria = lazyNamed(() => import("../pages/Tesoreria"), "Tesoreria");
const ConciliacionBancariaIa = lazyNamed(() => import("../pages/ConciliacionBancariaIa"), "ConciliacionBancariaIa");
const RendicionViaticosPage = lazyNamed(() => import("../pages/RendicionViaticosPage"), "RendicionViaticosPage");
const RendicionViaticoDetallePage = lazyNamed(() => import("../pages/RendicionViaticoDetallePage"), "RendicionViaticoDetallePage");
const RendicionSaldosPorEmpleadoPage = lazyNamed(() => import("../pages/RendicionSaldosPorEmpleadoPage"), "RendicionSaldosPorEmpleadoPage");
const CxpEmpleadosPage = lazyNamed(() => import("../pages/CxpEmpleadosPage"), "CxpEmpleadosPage");
const Reportes = lazyNamed(() => import("../pages/Reportes"), "Reportes");
const Suscripciones = lazyNamed(() => import("../pages/Suscripciones"), "Suscripciones");
const MiPerfil = lazyNamed(() => import("../pages/MiPerfil"), "MiPerfil");
const Novedades = lazyNamed(() => import("../pages/Novedades"), "Novedades");
const ConfiguracionNew = lazyNamed(() => import("../pages/ConfiguracionNew"), "ConfiguracionNew");
const ConfiguracionTicket = lazyNamed(() => import("../pages/ConfiguracionTicket"), "ConfiguracionTicket");
const ConsultaDocumento = lazyNamed(() => import("../pages/ConsultaDocumento"), "ConsultaDocumento");
const CuentasCobrar = lazyDefault(() => import("../pages/CuentasCobrar"));
const CuentasPagar = lazyDefault(() => import("../pages/CuentasPagar"));
const SolicitudesCredito = lazyNamed(() => import("../pages/SolicitudesCredito"), "SolicitudesCredito");
const NuevaSolicitudCredito = lazyNamed(() => import("../pages/NuevaSolicitudCredito"), "NuevaSolicitudCredito");
const PedidosMayoristas = lazyNamed(() => import("../pages/PedidosMayoristas"), "PedidosMayoristas");
const OrdenVentaNueva = lazyNamed(() => import("../pages/OrdenVentaNueva"), "OrdenVentaNueva");
const OrdenVentaDetalle = lazyNamed(() => import("../pages/OrdenVentaDetalle"), "OrdenVentaDetalle");
const PanelCobrador = lazyNamed(() => import("../pages/PanelCobrador"), "PanelCobrador");
// PanelSupervisor: el botón directo en el header de Finanzas se removió 2026-06-22
// (acceso natural ahora es vía "Cobranzas → Autorizaciones" en el sidebar, que sigue
// redirigiendo acá). La ruta y la pantalla se preservan porque concentra UI real de
// descuentos sobre capital + exoneración de mora (~1300 líneas, refactor pendiente).
const PanelSupervisor = lazyNamed(() => import("../pages/PanelSupervisor"), "PanelSupervisor");
const ReporteCobrador = lazyNamed(() => import("../pages/ReporteCobrador"), "ReporteCobrador");
const CierreCobros = lazyDefault(() => import("../pages/CierreCobros"));
const ReporteInteresesCobrados = lazyNamed(() => import("../pages/ReporteInteresesCobrados"), "ReporteInteresesCobrados");
const ReporteRendiciones = lazyNamed(() => import("../pages/ReporteRendiciones"), "ReporteRendiciones");
const DashboardMorosidad = lazyNamed(() => import("../pages/DashboardMorosidad"), "DashboardMorosidad");
const ConfigMora = lazyNamed(() => import("../pages/ConfigMora"), "ConfigMora");
const ConfigIntereses = lazyNamed(() => import("../pages/ConfigIntereses"), "ConfigIntereses");
// Hubs Cobranzas (A.3.7 Paso 4 — sidebar reorg)
const CobranzasGestionMoraHub = lazyNamed(() => import("../pages/cobranzas/GestionMoraHub"), "GestionMoraHub");
const CobranzasRefinanciaciones = lazyNamed(() => import("../views/cobranzas/RefinanciacionesPage"), "RefinanciacionesPage");
const CobranzasPromesasReporte = lazyNamed(() => import("../views/cobranzas/PromesasReportePage"), "default");
const CobranzasProductividadCobradores = lazyNamed(() => import("../views/cobranzas/ProductividadCobradoresPage"), "default");
const CobranzasMesaGestion = lazyNamed(() => import("../views/cobranzas/MesaGestionPage"), "default");
const CobranzasPromesasList = lazyNamed(() => import("../views/cobranzas/PromesasListPage"), "default");
const CobranzasRecibos = lazyNamed(() => import("../pages/cobranzas/RecibosPage"), "RecibosPage");
const CobranzasCuentasCobrarHub = lazyNamed(() => import("../pages/cobranzas/CuentasCobrarHub"), "CuentasCobrarHub");
const CobranzasCobradoresHub = lazyNamed(() => import("../pages/cobranzas/CobradoresHub"), "CobradoresHub");
const CobranzasAutorizaciones = lazyNamed(() => import("../pages/cobranzas/AutorizacionesPage"), "AutorizacionesPage");
const LibroRetencionesPage = lazyNamed(() => import("../pages/cobranzas/LibroRetencionesPage"), "LibroRetencionesPage");
const CarteraInteligenteHub = lazyNamed(() => import("../pages/cartera-inteligente/CarteraInteligenteHub"), "default");
const CarteraWorklistPage = lazyNamed(() => import("../pages/cartera-inteligente/WorklistPage"), "default");
const CarteraImportarPage = lazyNamed(() => import("../pages/cartera-inteligente/ImportarCarteraPage"), "default");
const ImportarGastosPage = lazyNamed(() => import("../pages/gastos/ImportarGastosPage"), "default");
const CarteraWebhooksPage = lazyNamed(() => import("../pages/cartera-inteligente/WebhooksPage"), "default");
const CarteraMiDiaPage = lazyNamed(() => import("../pages/cartera-inteligente/MiDiaPage"), "default");
const CarteraPromesasPage = lazyNamed(() => import("../pages/cartera-inteligente/PromesasCarteraPage"), "default");
const CarteraCampanasPage = lazyNamed(() => import("../pages/cartera-inteligente/CampanasPage"), "default");
const CarteraDashboardPage = lazyNamed(() => import("../pages/cartera-inteligente/DashboardSupervisorPage"), "default");
const CarteraApiKeysPage = lazyNamed(() => import("../pages/cartera-inteligente/ApiKeysPage"), "default");
const ReporteAuditoria = lazyNamed(() => import("../pages/ReporteAuditoria"), "ReporteAuditoria");
const ReporteLibroIVA = lazyNamed(() => import("../pages/ReporteLibroIVA"), "ReporteLibroIVA");
const ReporteLibroIVACompras = lazyNamed(() => import("../pages/ReporteLibroIVACompras"), "ReporteLibroIVACompras");
const ReporteLiquidacionIVA = lazyNamed(() => import("../pages/ReporteLiquidacionIVA"), "ReporteLiquidacionIVA");
const ReporteMovimientosCaja = lazyNamed(() => import("../pages/ReporteMovimientosCaja"), "ReporteMovimientosCaja");
const ReporteMovimientosStock = lazyNamed(() => import("../pages/ReporteMovimientosStock"), "ReporteMovimientosStock");
const ReporteRemisiones = lazyNamed(() => import("../pages/ReporteRemisiones"), "ReporteRemisiones");
const ReporteRemisionesPendientes = lazyNamed(() => import("../pages/ReporteRemisionesPendientes"), "ReporteRemisionesPendientes");
const ReporteLotesProductos = lazyNamed(() => import("../pages/ReporteLotesProductos"), "ReporteLotesProductos");
const ReporteVencidosProveedorPage = lazyNamed(() => import("../pages/ReporteVencidosProveedorPage"), "ReporteVencidosProveedorPage");
const ReporteClasificacionTerceros = lazyNamed(() => import("../pages/ReporteClasificacionTerceros"), "ReporteClasificacionTerceros");
const ReporteNivelesStock = lazyNamed(() => import("../pages/ReporteNivelesStock"), "ReporteNivelesStock");
const ReporteCompras = lazyNamed(() => import("../pages/ReporteCompras"), "ReporteCompras");
const ReporteProductos = lazyNamed(() => import("../pages/ReporteProductos"), "ReporteProductos");
const ReporteVentasClientes = lazyNamed(() => import("../pages/ReporteVentasClientes"), "ReporteVentasClientes");
const ReporteRentabilidad = lazyNamed(() => import("../pages/ReporteRentabilidad"), "ReporteRentabilidad");
const ReporteVentas = lazyNamed(() => import("../pages/ReporteVentas"), "ReporteVentas");
const SerializacionComprobantes = lazyNamed(() => import("../pages/SerializacionComprobantes"), "SerializacionComprobantes");
const SucursalesCaja = lazyNamed(() => import("../pages/SucursalesCaja"), "SucursalesCaja");
const Impresoras = lazyNamed(() => import("../pages/Impresoras"), "Impresoras");
const Usuarios = lazyNamed(() => import("../pages/Usuarios"), "Usuarios");
const Almacenes = lazyNamed(() => import("../pages/Almacenes"), "Almacenes");
const MetodosPago = lazyNamed(() => import("../pages/MetodosPago"), "MetodosPago");
const Contabilidad = lazyNamed(() => import("../pages/Contabilidad"), "Contabilidad");
const RRHH = lazyNamed(() => import("../pages/RRHH"), "RRHH");
const TesoreriaYBancos = lazyNamed(() => import("../pages/TesoreriaYBancos"), "TesoreriaYBancos");
const ReporteFlujoCaja = lazyNamed(() => import("../pages/ReporteFlujoCaja"), "ReporteFlujoCaja");
const ReportePosicionCaja = lazyNamed(() => import("../pages/ReportePosicionCaja"), "ReportePosicionCaja");
const PagoPublico = lazyNamed(() => import("../pages/PagoPublico"), "PagoPublico");
const PagoPublicoCA = lazyNamed(() => import("../pages/PagoPublicoCA"), "PagoPublicoCA");
const PresupuestoPublico = lazyNamed(() => import("../pages/PresupuestoPublico"), "PresupuestoPublico");
const NovasisPay = lazyNamed(() => import("../pages/NovasisPay"), "NovasisPay");
const Ecommerce = lazyNamed(() => import("../pages/Ecommerce"), "Ecommerce");
const PagoExitosoNovasis = lazyNamed(
  () => import("../pages/PagoResultadoNovasis"),
  "PagoExitosoNovasis",
);
const PagoCanceladoNovasis = lazyNamed(
  () => import("../pages/PagoResultadoNovasis"),
  "PagoCanceladoNovasis",
);

// ─── Páginas de configuración (sub-rutas) ────────────────────────────────────
const Empresa = lazyNamed(() => import("../pages/Empresa"), "Empresa");
const Categorias = lazyNamed(() => import("../pages/Categorias"), "Categorias");
const Productos = lazyNamed(() => import("../pages/Productos"), "Productos");
const BasicosConfig = lazyNamed(() => import("../components/organismos/EmpresaConfigDesign/BasicosConfig"), "BasicosConfig");
const MonedaConfig = lazyNamed(() => import("../components/organismos/EmpresaConfigDesign/MonedaConfig"), "MonedaConfig");
const EmpresasListConfig = lazyNamed(() => import("../components/organismos/EmpresaConfigDesign/EmpresasListConfig"), "EmpresasListConfig");

// ─── Componentes de ventas (pesados) ─────────────────────────────────────────
const NotasCreditoTab = lazyNamed(() => import("../components/ventas/NotasCreditoTab"), "NotasCreditoTab");
const NuevaNotaCreditoTemplate = lazyNamed(() => import("../components/ventas/NuevaNotaCreditoTemplate"), "NuevaNotaCreditoTemplate");
const NuevaRemisionTemplate = lazyNamed(() => import("../components/ventas/NuevaRemisionTemplate"), "NuevaRemisionTemplate");
const NuevaCompraAsistidaPage = lazyNamed(() => import("../pages/NuevaCompraAsistidaPage"), "NuevaCompraAsistidaPage");

// ─── Fallback mientras carga el chunk ────────────────────────────────────────
function PageLoader() {
  return <div style={{ display: "flex", alignItems: "center", justifyContent: "center", height: "100vh", fontSize: "0.9rem", opacity: 0.5 }}>Cargando...</div>;
}

export function MyRoutes() {
  return (
    <Suspense fallback={<PageLoader />}>
      <Routes>
        {/* Pública — consulta de documento por CDC */}
        <Route path="/consulta/documento/:cdc" element={<ConsultaDocumento />} />
        {/* Pública — resultado de pago Bancard */}
        <Route path="/pay/result" element={<PagoPublico />} />
        <Route path="/pay/cancel" element={<PagoPublico />} />
        <Route path="/pay/ca/:token" element={<PagoPublicoCA />} />
        <Route path="/pub/presupuesto/:token" element={<PresupuestoPublico />} />
        {/* Pública — retorno desde checkout de Novasis Pay */}
        <Route path="/pago-exitoso" element={<PagoExitosoNovasis />} />
        <Route path="/pago-cancelado" element={<PagoCanceladoNovasis />} />

        <Route
          path="/login"
          element={
            <ProtectedRoute accessBy="non-authenticated">
              <Login />
            </ProtectedRoute>
          }
        />
        <Route
          path="/register"
          element={
            <ProtectedRoute accessBy="non-authenticated">
              <Register />
            </ProtectedRoute>
          }
        />
        <Route
          path="/empresa-bloqueada"
          element={
            <ProtectedRoute accessBy="authenticated">
              <EmpresaBloqueada />
            </ProtectedRoute>
          }
        />
        <Route
          path="/mi-suscripcion"
          element={
            <ProtectedRoute accessBy="authenticated">
              <MiSuscripcionStandalone />
            </ProtectedRoute>
          }
        />

        <Route
          path="/configuracion"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated">
                <ConfiguracionNew />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/miperfil"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated">
                <MiPerfil />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/conciliacion-bancaria-ia"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="CONCILIACION_IA" permission="CONC_IA_VER">
                <ConciliacionBancariaIa />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/novedades"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated">
                <Novedades />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/tesoreria/panel-supervisor"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated">
                <PanelSupervisor />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/reportes"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated">
                <Reportes />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/reportes/auditoria"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated">
                <ReporteAuditoria />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/reportes/movimientos-caja"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated">
                <ReporteMovimientosCaja />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/reportes/ventas"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated">
                <ReporteVentas />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/reportes/compras"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated">
                <ReporteCompras />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/reportes/inventario/movimientos"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated">
                <ReporteMovimientosStock />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/reportes/traslados/remisiones"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated">
                <ReporteRemisiones />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/reportes/traslados/pendientes"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated">
                <ReporteRemisionesPendientes />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/reportes/inventario/stock"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated">
                <ReporteNivelesStock />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/reportes/inventario/lotes"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated">
                <ReporteLotesProductos />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/reportes/inventario/vencidos-proveedor"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated">
                <ReporteVencidosProveedorPage />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/reportes/compras/clasificacion-terceros"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated">
                <ReporteClasificacionTerceros />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/reportes/ventas/productos"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated">
                <ReporteProductos />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/reportes/ventas/clientes"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated">
                <ReporteVentasClientes />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/reportes/rentabilidad"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated">
                <ReporteRentabilidad />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/reportes/fiscal/libro-iva-ventas"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated">
                <ReporteLibroIVA />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/reportes/fiscal/libro-iva-compras"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated">
                <ReporteLibroIVACompras />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/reportes/fiscal/liquidacion-iva"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated">
                <ReporteLiquidacionIVA />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/reportes/financiero/flujo-caja"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="TESORERIA">
                <ReporteFlujoCaja />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/reportes/financiero/posicion-caja"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="TESORERIA">
                <ReportePosicionCaja />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/inventario"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="INVENTARIO" modulosAlternativos={["ECOMMERCE"]}>
                <Inventario />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/contactos"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="VENTAS" submodulo="VENTAS_CLIENTES" modulosAlternativos={["ECOMMERCE"]}>
                <Contactos />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/compras"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COMPRAS">
                <Compras />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/compras/notas-credito/nueva"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COMPRAS" submodulo="COMP_NOTAS_CREDITO">
                <NuevaNotaCreditoCompraTemplate />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/importaciones"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="IMPORTACIONES" permission="IMP_EMB_EMBARQUE_VER">
                <Importaciones />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/crm/tablero"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="CRM" permission="CRM_OPO_OPORTUNIDAD_VER">
                <CrmTablero />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/crm/oportunidades/:id"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="CRM" permission="CRM_OPO_OPORTUNIDAD_VER">
                <CrmOportunidadDetalle />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/crm/leads"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="CRM" permission="CRM_LEA_LEAD_VER">
                <CrmLeads />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/crm/clientes"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="CRM" permission="CRM_CLI_TIMELINE_VER">
                <CrmClientes />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/crm/clientes/:id"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="CRM" permission="CRM_CLI_TIMELINE_VER">
                <ClienteCrm360 />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/crm/reportes"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="CRM" permission="CRM_REP_REPORTE_VER">
                <CrmReportes />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/crm/fechas"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="CRM" permission="CRM_FEC_FECHA_VER">
                <CrmFechas />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/crm/catalogos"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="CRM" permission="CRM_CFG_CATALOGO_VER">
                <CrmCatalogos />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/crm/configuracion"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="CRM" permission="CRM_CFG_PIPELINE_VER">
                <CrmConfig />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/inmobiliario/proyectos"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="INMOBILIARIO" permission="INM_PRO_PROYECTO_VER">
                <InmProyectos />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/inmobiliario/proyectos/:id"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="INMOBILIARIO" permission="INM_PRO_PROYECTO_VER">
                <InmProyectoDetalle />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/inmobiliario/cotizaciones"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="INMOBILIARIO" permission="INM_COT_COTIZACION_VER">
                <InmCotizaciones />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/inmobiliario/cotizaciones/nueva"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="INMOBILIARIO" permission="INM_COT_COTIZACION_CREAR">
                <InmCotizacionNueva />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/inmobiliario/cotizaciones/:id"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="INMOBILIARIO" permission="INM_COT_COTIZACION_VER">
                <InmCotizacionDetalle />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/inmobiliario/operaciones"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="INMOBILIARIO" permission="INM_OPE_OPERACION_VER">
                <InmOperaciones />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/inmobiliario/operaciones/:id"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="INMOBILIARIO" permission="INM_OPE_OPERACION_VER">
                <InmOperacionDetalle />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/inmobiliario/cartera"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="INMOBILIARIO" permission="INM_COB_CARTERA_VER">
                <InmCartera />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/inmobiliario/comisiones"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="INMOBILIARIO" permission="INM_COM_COMISION_VER">
                <InmComisiones />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/inmobiliario/obra"
          element={
            <Layout>
              {/* Sin `permission`: la pantalla tiene pestañas con permisos distintos y se gatea por dentro. */}
              <ProtectedRoute accessBy="authenticated" modulo="INMOBILIARIO">
                <InmObra />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/inmobiliario/cumplimiento"
          element={
            <Layout>
              {/* Sin `permission`: legajos e inusuales tienen permisos de lectura distintos y se gatea por dentro. */}
              <ProtectedRoute accessBy="authenticated" modulo="INMOBILIARIO">
                <InmCumplimiento />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/inmobiliario/cumplimiento/legajos/:clienteId"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="INMOBILIARIO" permission="INM_CUM_LEGAJO_VER">
                <InmLegajoCliente />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/inmobiliario/inversores"
          element={
            <Layout>
              {/* Sin `permission`: inversores y fideicomiso tienen permisos de lectura distintos. */}
              <ProtectedRoute accessBy="authenticated" modulo="INMOBILIARIO">
                <InmInversores />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/inmobiliario/configuracion"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="INMOBILIARIO" permission="INM_CFG_PARAMETROS_VER">
                <InmConfiguracion />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/importaciones/:id"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="IMPORTACIONES" permission="IMP_EMB_EMBARQUE_VER">
                <ImportacionesDetalle />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/gastos"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COMPRAS" submodulo="TES_GASTOS">
                <Gastos />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/gastos/importar"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COMPRAS" permission="TES_GAS_GASTO_IMPORTAR">
                <ImportarGastosPage />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/configuracion/categorias"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="INVENTARIO" permission="INV_CAT_CATEGORIA_VER">
                <Categorias />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/configuracion/serializacion"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="ADMINISTRACION" submodulo="ADM_NUMERACIONES">
                <SerializacionComprobantes />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/configuracion/ticket"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="ADMINISTRACION" submodulo="ADM_CONFIG_POS">
                <ConfiguracionTicket />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/configuracion/productos"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="INVENTARIO" permission="INV_PRD_PRODUCTO_VER">
                <Productos />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/configuracion/empresa"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="ADMINISTRACION" permission="ADM_EMP_EMPRESA_VER">
                <Empresa />
              </ProtectedRoute>
            </Layout>
          }
        >
          <Route index element={<Navigate to="empresabasicos" />} />
          <Route path="empresabasicos" element={<BasicosConfig />} />
          <Route path="monedaconfig" element={<MonedaConfig />} />
          <Route path="empresaslist" element={<EmpresasListConfig />} />
        </Route>
        <Route
          path="/pos"
          element={
            <ProtectedRoute accessBy="authenticated" modulo="VENTAS" permission="VEN_POS_VENTA_VER">
              <POSAdmin />
            </ProtectedRoute>
          }
        />
        <Route
          path="/pos-admin"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="VENTAS" permission="VEN_POS_VENTA_VER">
                <POSAdmin />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/soporte-ia/reporte"
          element={
            <Layout>
              {/* El menú lo muestra solo al holding; el servicio exige además superadmin. */}
              <ProtectedRoute accessBy="authenticated">
                <ReporteSoporteIaPage />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/soporte-ia"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated">
                <SoporteIaPage />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/ai-dashboard"
          element={
            <Layout>
              {/* Mismo gate que usa el sidebar para "IA Dashboard" (dataEstatica.jsx).
                  Sin esto la ruta quedaba abierta a cualquier autenticado y un
                  perfil Cajero terminaba viendo facturación, margen y posición
                  de caja de toda la empresa. Cae a "/" (pantalla de bienvenida)
                  cuando el usuario no tiene el submódulo. */}
              <ProtectedRoute
                accessBy="authenticated"
                modulo="REPORTES"
                submodulo="REP_DASHBOARD_IA"
                fallback="/"
              >
                <AIDashboardPage />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/novasis-pay"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="NOVASIS_PAY" permission="NOV_CFG_CUENTA_VER">
                <NovasisPay />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/ecommerce"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="ECOMMERCE">
                <Ecommerce />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route path="*" element={<PageNot />} />
        <Route
          path="/clientes"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="VENTAS" submodulo="VENTAS_CLIENTES">
                <Clientes />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/configuracion/metodospago"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="ADMINISTRACION" submodulo="ADM_MEDIOS_PAGO">
                <MetodosPago />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated">
                <Home />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/dashboard"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="REPORTES" submodulo="REP_DASHBOARD" fallback="/">
                <Dashboard />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/configuracion/sucursalcaja"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="ADMINISTRACION" submodulo="ADM_SUCURSALES">
                <SucursalesCaja />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/configuracion/impresoras"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="ADMINISTRACION" submodulo="ADM_CONFIG_POS">
                <Impresoras />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/configuracion/usuarios"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="ADMINISTRACION" permission="ADM_USR_USUARIO_VER">
                <Usuarios />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/configuracion/almacenes"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="INVENTARIO" submodulo="INV_DEPOSITOS">
                <Almacenes />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/tesoreria"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="TESORERIA">
                <Tesoreria />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/suscripciones"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="ADMINISTRACION" submodulo="SUS_PLAN" permission="SUS_PLA_PLAN_VER">
                <Suscripciones />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/finanzas"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulos={["TESORERIA", "COBRANZAS", "COMPRAS"]}>
                <Tesoreria />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/rendicion-viaticos"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated">
                <RendicionViaticosPage />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/rendicion-viaticos/reportes/saldos-empleado"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated">
                <RendicionSaldosPorEmpleadoPage />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/rendicion-viaticos/cxp-empleados"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated">
                <CxpEmpleadosPage />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/rendicion-viaticos/:id"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated">
                <RendicionViaticoDetallePage />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/contabilidad"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="CONTABILIDAD">
                <Contabilidad />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/rrhh"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="RRHH">
                <RRHH />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/tesoreria-bancos"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="TESORERIA">
                <TesoreriaYBancos />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/ventas"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="VENTAS" permission="VEN_FAC_FACTURA_VER" modulosAlternativos={["ECOMMERCE"]}>
                <Ventas />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/viajes"
          element={
            <Layout>
              <ProtectedRoute
                accessBy="authenticated"
                modulo="VENTAS"
                submodulo="VENTAS_VIAJES"
                permission="VEN_VJ_VIAJE_VER"
              >
                <ViajesPage />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/viajes/:id"
          element={
            <Layout>
              <ProtectedRoute
                accessBy="authenticated"
                modulo="VENTAS"
                submodulo="VENTAS_VIAJES"
                permission="VEN_VJ_VIAJE_VER"
              >
                <ViajeDetallePage />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/presupuestos"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="VENTAS" permission="VEN_PRE_PRESUPUESTO_VER">
                <Presupuestos />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/cobros"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COBRANZAS" permission="COB_REC_RECIBO_VER">
                <Cobros />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/cuentas-cobrar"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COBRANZAS" permission="COB_CC_CUENTA_COBRAR_VER">
                <CuentasCobrar />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/cuentas-pagar"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated">
                <CuentasPagar />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/ventas/notas-credito"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="VENTAS" submodulo="VENTAS_NOTAS_CREDITO">
                <NotasCreditoTab />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/ventas/notas-credito/nueva"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="VENTAS" submodulo="VENTAS_NOTAS_CREDITO">
                <NuevaNotaCreditoTemplate />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/ventas/remisiones/nueva"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="VENTAS" permission="VEN_NR_NOTA_REMISION_CREAR">
                <NuevaRemisionTemplate />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/ventas/compras-asistidas/nueva"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="VENTAS" permission="VEN_FAC_FACTURA_VER">
                <NuevaCompraAsistidaPage />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/ventas/compras-asistidas/:id/editar"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="VENTAS" permission="VEN_FAC_FACTURA_VER">
                <NuevaCompraAsistidaPage />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/ordenes-venta/nueva"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="VENTAS" permission="VEN_OV_ORDEN_VENTA_CREAR">
                <OrdenVentaNueva />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/ordenes-venta/:id"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="VENTAS" permission="VEN_OV_ORDEN_VENTA_VER">
                <OrdenVentaDetalle />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/ordenes-venta/:id/editar"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="VENTAS" permission="VEN_OV_ORDEN_VENTA_EDITAR">
                <OrdenVentaNueva />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/pedidos-mayoristas"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="VENTAS" permission="VEN_PED_PEDIDO_VER">
                <PedidosMayoristas />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/solicitudes-credito"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="VENTAS" permission="VEN_SOL_SOLICITUD_VER">
                <SolicitudesCredito />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/solicitudes-credito/nueva"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="VENTAS" permission="VEN_SOL_SOLICITUD_CREAR">
                <NuevaSolicitudCredito />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/cartera-inteligente"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COBRANZAS" permission="COB_CART_VER">
                <CarteraInteligenteHub />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/cartera-inteligente/worklist"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COBRANZAS" permission="COB_CART_VER">
                <CarteraWorklistPage />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/cartera-inteligente/importar"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COBRANZAS" permission="COB_CART_CONFIGURAR">
                <CarteraImportarPage />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/cartera-inteligente/webhooks"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COBRANZAS" permission="COB_CART_VER">
                <CarteraWebhooksPage />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/cartera-inteligente/mi-dia"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COBRANZAS" permission="COB_CART_VER">
                <CarteraMiDiaPage />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/cartera-inteligente/promesas"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COBRANZAS" permission="COB_CART_VER">
                <CarteraPromesasPage />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/cartera-inteligente/campanas"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COBRANZAS" permission="COB_CART_VER">
                <CarteraCampanasPage />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/cartera-inteligente/dashboard"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COBRANZAS" permission="COB_CART_VER">
                <CarteraDashboardPage />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/cartera-inteligente/api-keys"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COBRANZAS" permission="COB_CART_VER">
                <CarteraApiKeysPage />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/cobranzas/config-mora"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COBRANZAS" permission="COB_CFM_CONFIG_VER">
                <ConfigMora />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/cobranzas/config-intereses"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COBRANZAS" permission="COB_INT_CONFIG_VER">
                <ConfigIntereses />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/reportes/cobranzas/cobrador"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COBRANZAS" permission="COB_REP_REPORTE_VER">
                <ReporteCobrador />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/reportes/cobranzas/cierre-cobros"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COBRANZAS" permission="COB_CC_CUENTA_COBRAR_VER">
                <CierreCobros />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/reportes/cobranzas/intereses"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COBRANZAS" permission="COB_INT_VER">
                <ReporteInteresesCobrados />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/reportes/cobranzas/morosidad"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COBRANZAS" submodulo="ADM_INTERES_MORA">
                <DashboardMorosidad />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/reportes/cobranzas/rendiciones"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COBRANZAS" permission="COB_RND_RENDICION_VER">
                <ReporteRendiciones />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/cobranzas/gestion-mora"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COBRANZAS">
                <CobranzasGestionMoraHub />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/cobranzas/refinanciaciones"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COBRANZAS" permission="COB_REF_REFINANCIACION_VER">
                <CobranzasRefinanciaciones />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/cobranzas/promesas"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COBRANZAS" permission="COB_PRM_PROMESA_VER">
                <CobranzasPromesasList />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/reportes/cobranzas/promesas"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COBRANZAS" permission="COB_PRM_REPORTE_CUMPLIMIENTO">
                <CobranzasPromesasReporte />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/reportes/cobranzas/productividad"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COBRANZAS" permission="COB_WFL_REPORTE_PRODUCTIVIDAD">
                <CobranzasProductividadCobradores />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/cobranzas/mesa-gestion"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COBRANZAS" permission="COB_MG_WORKLIST_VER">
                <CobranzasMesaGestion />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/cobranzas/panel-cobrador"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COBRANZAS" permission="COB_CBR_PANEL_COBRADOR_VER">
                <PanelCobrador />
              </ProtectedRoute>
            </Layout>
          }
        />
        {/* A.3.7 Paso 4 — entradas nuevas del módulo Cobranzas (stubs por ahora) */}
        <Route
          path="/cobranzas/recibos"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COBRANZAS" permission="COB_REC_RECIBO_VER">
                <CobranzasRecibos />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/cobranzas/cuentas-cobrar"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COBRANZAS" permission="COB_CC_CUENTA_COBRAR_VER">
                <CobranzasCuentasCobrarHub />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/cobranzas/cobradores"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COBRANZAS" permission="COB_CBR_COBRADOR_VER">
                <CobranzasCobradoresHub />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/cobranzas/autorizaciones"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COBRANZAS" permission="COB_AUT_AUTORIZACION_VER">
                <CobranzasAutorizaciones />
              </ProtectedRoute>
            </Layout>
          }
        />
        <Route
          path="/reportes/cobranzas/libro-retenciones"
          element={
            <Layout>
              <ProtectedRoute accessBy="authenticated" modulo="COBRANZAS" permission="COB_RET_RETENCION_VER">
                <LibroRetencionesPage />
              </ProtectedRoute>
            </Layout>
          }
        />
      </Routes>
    </Suspense>
  );
}
