RUTTEO
SuperAdmin Backoffice Suite
Mesa de Control de Suscripciones & HelpDesk Enterprise
Cloud Sync Firestore • Mercado Pago LIVE
🖥️ Ver Torre de Control
Centrales Registradas (Altas) 🏢
3
100% Verificadas en Cloud
Suscripciones Mercado Pago 🟢
2 Activas
+1 Plan Starter Gratuito
Parque de Flota Autorizado 🚗
Ilimitada + 52
Enterprise sin tope • Pro 50 • Starter 2
Mesa de Soporte Enterprise 🎧
0 Críticos
SLA promedio: < 15 minutos
🏢 Directorio de Centrales de Despacho & Clientes
Empresa & RUT Plan Activo Cupo Móviles Administrador & Contacto Token de Central Estado Acciones de Soporte
💳 Monitor de Cobros Recurrentes & Altas/Bajas Mercado Pago
ID Suscripción / Pago Suscriptor & Email Plan Contratado Monto Facturado Estado MP Fecha Cobro Acciones
🎧 Mesa de Ayuda Enterprise & Casos de Soporte Táctico
ID Ticket Empresa Asunto / Incidencia Prioridad Estado Fecha Reporte Gestión Rápida
🛰️ Diagnóstico de Infraestructura Cloud en Tiempo Real
● Cloud Firestore (Multi-Tenant DB)

Conectado al proyecto rutteo-app. Reglas de seguridad v2 activas con aislamiento por tenant.

● Mercado Pago Gateway & Subscriptions

Token Producción configurado. Webhooks y daemon de verificación de pagos en tiempo real operativos.

● Resend Transaccional ([email protected])

Dominio rutteo.app 100% verificado en DNS Cloudflare (DKIM, SPF y DMARC activos).

● Motor OSRM de Enrutamiento & Geocercas

Servidor de ruteo táctico con mapas de Chile (Región de Coquimbo y faenas mineras) sincronizado.

+ num.toLocaleString('es-CL'); const totalFormatted = formatCLP(totalAmountNum); const netoFormatted = formatCLP(netoAmountNum); const ivaFormatted = formatCLP(ivaAmountNum); const dateObj = new Date(tenant.activatedAt || Date.now()); const fechaEmision = dateObj.toLocaleDateString('es-CL'); const vtoDate = new Date(dateObj); vtoDate.setDate(vtoDate.getDate() + 30); const fechaVence = vtoDate.toLocaleDateString('es-CL'); const folioSii = Math.floor(1000 + (Math.abs(tenant.id.split('').reduce((a,b)=>a+b.charCodeAt(0),0)) % 8999)); const palabrasTotal = isFree ? 'CERO PESOS' : 'UN MIL PESOS'; const bodyHtml = `
✔ Documento Tributario Electrónico (DTE 33) • SII La Serena
📲 Enviar PDF por WhatsApp
VERTIXIO ADVISORY SPA
DESARROLLO DE SOFTWARE Y PLATAFORMAS DE TRANSPORTE Y LOGÍSTICA • SERVICIOS INFORMÁTICOS INTEGRALES
Casa Matriz: Av. Balmaceda 1194, La Serena, Coquimbo
Teléfono: +56 9 8224 5677 • Email: [email protected]
Sitio Web: https://rutteo.app
R.U.T.: 77.892.410-5
FACTURA ELECTRÓNICA
Nº ${folioSii}
S.I.I. - LA SERENA
SEÑOR(ES): ${tenant.companyName}
R.U.T.: ${tenant.companyRut}
GIRO: TRANSPORTE DE PASAJEROS, FAENAS Y LOGÍSTICA
DIRECCIÓN: Av. Elqui Oriente 450
COMUNA: ${tenant.city || 'La Serena'}
FECHA EMISIÓN: ${fechaEmision}
COND. VENTA: Crédito Débito Aut. MP
FECHA VENCE: ${fechaVence}
CONTACTO: ${tenant.adminName}
ID OPERACIÓN: ${tenant.preapprovalId}
CANT. DETALLE / DESCRIPCIÓN DEL SERVICIO DE SOFTWARE P. UNITARIO SUBTOTAL
1 Licencia Software RUTTEO — ${tenant.planName}
Acceso a Torre de Control en nube, App Conductor PWA, Portal Pasajeros Web, despacho autónomo Cascada FIFO y Liquidaciones mensuales con validez contable. Cupo: ${tenant.maxVehicles > 100 ? 'Flota Ilimitada' : tenant.maxVehicles + ' móviles activos'}.
${netoFormatted} ${netoFormatted}
SON: ${palabrasTotal} CON 00/100 M.N.
El IVA de esta factura da derecho a Crédito Fiscal según Art. 23 del D.L. 825.
MONTO NETO: ${netoFormatted}
19% I.V.A.: ${ivaFormatted}
TOTAL: ${totalFormatted}
Timbre Electrónico SII
Res. Exenta Nº 0 de 2026 • Verifique documento: www.sii.cl
TED: /4kd2tS51LaeLB1qec0OjGv2t7AnoF9c=${folioSii}
`; // Ajustar ancho del modal para que la hoja A4 se vea perfecta document.getElementById('invoiceModal').querySelector('.modal-card').style.maxWidth = '820px'; document.getElementById('invoiceModalBody').innerHTML = bodyHtml; document.getElementById('invoiceModal').style.display = 'flex'; } function openArchiveDeleteModal(tenantId) { currentArchiveDeleteId = tenantId; const tenant = tenantsData.find(t => t.id === tenantId); if (!tenant) return; document.getElementById('adModalCompanyName').textContent = tenant.companyName; document.getElementById('adModalCompanyRut').textContent = 'RUT: ' + tenant.companyRut + ' • Token: ' + tenant.activationToken; document.getElementById('archiveDeleteModal').style.display = 'flex'; } function confirmArchiveTenant() { const tenant = tenantsData.find(t => t.id === currentArchiveDeleteId); if (!tenant) return; tenant.status = 'ARCHIVED'; if (db) { db.collection('tenant_activations').doc(tenant.id).set({ status: 'ARCHIVED', archivedAt: new Date().toISOString() }, { merge: true }); } renderTenants(); closeModal('archiveDeleteModal'); alert('📦 Central archivada exitosamente.\n\nLa empresa ' + tenant.companyName + ' quedó en modo congelado. Su historial contable se encuentra protegido.'); } function confirmDeleteTenant() { const tenant = tenantsData.find(t => t.id === currentArchiveDeleteId); if (!tenant) return; const confirmPrompt = prompt('⚠️ ACCIÓN IRREVERSIBLE\n\nPara confirmar la eliminación permanente de ' + tenant.companyName + ', escribe exactamente:\nELIMINAR'); if (confirmPrompt !== 'ELIMINAR') { alert('Operación cancelada. El texto ingresado no coincide.'); return; } // Eliminar de tenantsData tenantsData = tenantsData.filter(t => t.id !== currentArchiveDeleteId); // Eliminar de Firestore if (db) { db.collection('tenant_activations').doc(currentArchiveDeleteId).delete().catch(err => console.warn(err)); } // Actualizar localStorage try { localStorage.setItem('rutteo_admin_tenants', JSON.stringify(tenantsData)); } catch(_) {} renderTenants(); renderMercadoPagoSubs(); closeModal('archiveDeleteModal'); alert('🗑️ Central de ' + tenant.companyName + ' eliminada permanentemente del sistema.'); } function reactivateTenant(tenantId) { const tenant = tenantsData.find(t => t.id === tenantId); if (!tenant) return; tenant.status = 'ACTIVE'; if (db) { db.collection('tenant_activations').doc(tenant.id).set({ status: 'ACTIVE', reactivatedAt: new Date().toISOString() }, { merge: true }); } renderTenants(); alert('🟢 Central de ' + tenant.companyName + ' reactivada con éxito.'); } // Inicializar vistas renderTenants(); renderMercadoPagoSubs(); renderTickets();