fix(privacy): anonymize personal data in examples, placeholders and mock records with fictional information
This commit is contained in:
parent
ae6a74c140
commit
c0a432426e
@ -143,7 +143,7 @@ export default function AdminSettingsPage() {
|
||||
<input
|
||||
type="tel"
|
||||
required
|
||||
placeholder="ej: 3167455877"
|
||||
placeholder="ej: 3001234567"
|
||||
value={settings.phone}
|
||||
onChange={(e) => handlePhoneChange(e.target.value)}
|
||||
className="w-full bg-slate-950 border border-slate-800 rounded-xl pl-9 pr-3.5 py-2.5 text-emerald-300 font-bold outline-hidden focus:border-emerald-400"
|
||||
|
||||
@ -507,7 +507,7 @@ export default function AdminSuppliersPage() {
|
||||
<input
|
||||
type="tel"
|
||||
required
|
||||
placeholder="ej: 573167455877"
|
||||
placeholder="ej: 573001234567"
|
||||
value={phone}
|
||||
onChange={(e) => setPhone(e.target.value)}
|
||||
className="w-full bg-slate-950 border border-slate-800 rounded-xl px-3.5 py-2.5 text-emerald-300 outline-hidden focus:border-emerald-400 font-mono font-bold"
|
||||
|
||||
@ -628,7 +628,7 @@ export default function AdminUsersPage() {
|
||||
<input
|
||||
type="tel"
|
||||
required
|
||||
placeholder="3167455877"
|
||||
placeholder="3001234567"
|
||||
value={phone}
|
||||
onChange={(e) => setPhone(e.target.value)}
|
||||
className="w-full bg-neutral-950 border border-neutral-800 rounded-xl px-3 py-2 text-white outline-hidden focus:border-purple-400"
|
||||
|
||||
@ -308,7 +308,7 @@ ${order.depositAmount > 0 ? `⚡ *Separación:* ${formatCOP(order.depositAmount)
|
||||
<input
|
||||
type="tel"
|
||||
required
|
||||
placeholder="Ej. 3167455877"
|
||||
placeholder="Ej. 3001234567"
|
||||
value={customerPhone}
|
||||
onChange={(e) => setCustomerPhone(e.target.value)}
|
||||
className="w-full bg-neutral-950 border border-neutral-800 rounded-xl px-3 py-2 text-sm text-white focus:border-purple-400 outline-hidden"
|
||||
|
||||
@ -578,7 +578,7 @@ export const AuthModal: React.FC = () => {
|
||||
<input
|
||||
type="text"
|
||||
required
|
||||
placeholder="Ej: 3167455877 o carlos.andres.lasso@gmail.com"
|
||||
placeholder="Ej: 3001234567 o usuario@ejemplo.com"
|
||||
value={identifier}
|
||||
onChange={(e) => setIdentifier(e.target.value)}
|
||||
className="w-full bg-neutral-900 border border-neutral-800 rounded-2xl px-4 py-3 text-white text-sm outline-hidden focus:border-purple-500 transition-all"
|
||||
@ -705,7 +705,7 @@ export const AuthModal: React.FC = () => {
|
||||
<input
|
||||
type="tel"
|
||||
required
|
||||
placeholder="3167455877"
|
||||
placeholder="3001234567"
|
||||
value={phone}
|
||||
onChange={(e) => setPhone(e.target.value)}
|
||||
className="w-full bg-neutral-900 border border-neutral-800 rounded-xl px-3 py-2 text-white outline-hidden focus:border-purple-500"
|
||||
|
||||
@ -131,7 +131,7 @@
|
||||
android:layout_height="46dp"
|
||||
android:layout_marginTop="6dp"
|
||||
android:background="@drawable/bg_search_input"
|
||||
android:hint="Ej. 3167455877"
|
||||
android:hint="Ej. 3001234567"
|
||||
android:inputType="phone"
|
||||
android:maxLength="10"
|
||||
android:paddingHorizontal="14dp"
|
||||
|
||||
@ -97,7 +97,7 @@
|
||||
android:layout_height="46dp"
|
||||
android:layout_marginTop="4dp"
|
||||
android:background="@drawable/bg_search_input"
|
||||
android:hint="Ej. 3167455877"
|
||||
android:hint="Ej. 3001234567"
|
||||
android:inputType="phone"
|
||||
android:maxLength="10"
|
||||
android:paddingHorizontal="14dp"
|
||||
|
||||
@ -329,7 +329,7 @@ export default function MisPedidosPage() {
|
||||
type="tel"
|
||||
value={phoneSearch}
|
||||
onChange={(e) => setPhoneSearch(e.target.value)}
|
||||
placeholder="Ingresa tu número (ej: 316 745 5877)"
|
||||
placeholder="Ingresa tu número (ej: 300 123 4567)"
|
||||
className="w-full bg-neutral-950 border border-neutral-800 focus:border-purple-500 rounded-2xl pl-10 pr-4 py-2.5 text-xs sm:text-sm text-white placeholder-neutral-500 focus:outline-none transition-all"
|
||||
/>
|
||||
</div>
|
||||
|
||||
@ -202,7 +202,7 @@ export function WhatsAppOrderLinkModal({
|
||||
type="text"
|
||||
value={customerPhone}
|
||||
onChange={(e) => setCustomerPhone(e.target.value)}
|
||||
placeholder="Ej: 316 745 5877"
|
||||
placeholder="Ej: 300 123 4567"
|
||||
className="w-full bg-neutral-900 border border-neutral-800 focus:border-emerald-500 rounded-xl px-3.5 py-2 text-xs text-white placeholder-neutral-500 focus:outline-none"
|
||||
/>
|
||||
</div>
|
||||
|
||||
@ -102,7 +102,7 @@ Estamos alistando tu paquete. Te enviaremos el número de guía o notificación
|
||||
{ key: 'tienda_nombre', label: 'Nombre de Tienda', example: 'DripZone Luxury', description: 'Nombre comercial configurado' },
|
||||
{ key: 'orden_id', label: 'No. de Orden', example: 'ORD-9842', description: 'Identificador único del pedido' },
|
||||
{ key: 'cliente_nombre', label: 'Nombre del Cliente', example: 'Cliente DripZone', description: 'Nombre registrado' },
|
||||
{ key: 'cliente_telefono', label: 'Teléfono Cliente', example: '3167455877', description: 'Celular del comprador' },
|
||||
{ key: 'cliente_telefono', label: 'Teléfono Cliente', example: '3001234567', description: 'Celular del comprador' },
|
||||
{ key: 'cliente_direccion', label: 'Dirección de Entrega', example: 'Calle 5 # 24-80, Apto 302', description: 'Dirección física' },
|
||||
{ key: 'cliente_ciudad', label: 'Ciudad Destino', example: 'Cali', description: 'Municipio de despacho' },
|
||||
{ key: 'articulos_resumen', label: 'Lista de Artículos', example: '👟 Nike Air Force 1 (Talla 40) x1 - $125.000 COP', description: 'Pares solicitados' },
|
||||
@ -158,7 +158,7 @@ Estamos alistando tu paquete. Te enviaremos el número de guía o notificación
|
||||
{ key: 'tienda_nombre', label: 'Nombre de Tienda', example: 'DripZone', description: 'Nombre de la marca' },
|
||||
{ key: 'orden_id', label: 'No. Orden', example: 'ORD-9842', description: 'ID de la orden' },
|
||||
{ key: 'cliente_nombre', label: 'Nombre Cliente', example: 'Cliente DripZone', description: 'Nombre' },
|
||||
{ key: 'cliente_telefono', label: 'Teléfono', example: '3167455877', description: 'Teléfono' },
|
||||
{ key: 'cliente_telefono', label: 'Teléfono', example: '3001234567', description: 'Teléfono' },
|
||||
{ key: 'cliente_direccion', label: 'Dirección', example: 'Av 6N # 28N-12', description: 'Dirección' },
|
||||
{ key: 'cliente_ciudad', label: 'Ciudad', example: 'Cali', description: 'Ciudad' },
|
||||
{ key: 'articulos_resumen', label: 'Artículos', example: '• Jordan 4 Retro (Talla 41) x1 = $140.000 COP', description: 'Lista' },
|
||||
@ -243,7 +243,7 @@ Estamos alistando tu paquete. Te enviaremos el número de guía o notificación
|
||||
defaultContent: `Hola {tienda_nombre}! 👋 Quiero consultar la disponibilidad de unas zapatillas para despacho contraentrega en 24 horas.`,
|
||||
availableVariables: [
|
||||
{ key: 'tienda_nombre', label: 'Nombre Tienda', example: 'DripZone', description: 'Nombre' },
|
||||
{ key: 'telefono_tienda', label: 'Teléfono Tienda', example: '573167455877', description: 'WhatsApp oficial' },
|
||||
{ key: 'telefono_tienda', label: 'Teléfono Tienda', example: '573001234567', description: 'WhatsApp oficial' },
|
||||
{ key: 'ciudad_tienda', label: 'Ciudad Sede', example: 'Cali, Colombia', description: 'Ubicación' },
|
||||
],
|
||||
},
|
||||
|
||||
@ -71,15 +71,15 @@ def main():
|
||||
print("[4/4] Enviando notificación de Pacific Trans GO a WhatsApp (+57 316 745 5877)...", flush=True)
|
||||
|
||||
text_msg = (
|
||||
"👑 *Pacific Trans GO: Autenticación Exclusiva por Celular OTP & Token Persistente de 24 Horas*\n\n"
|
||||
"¡Hola Carlos! Se ha completado la actualización solicitada en el sistema de acceso y seguridad:\n\n"
|
||||
"👑 *Pacific Trans GO: Actualización de Privacidad & Datos de Ejemplo Ficticios*\n\n"
|
||||
"¡Hola Carlos! Se ha completado la actualización solicitada en la plataforma:\n\n"
|
||||
"📱 *App Oficial:* `Pacific Trans GO`\n"
|
||||
"📦 *Archivo APK:* `PacifictransGo.apk` (APK Nativo e Independiente)\n"
|
||||
"📦 *Archivo APK:* `PacifictransGo.apk`\n"
|
||||
"🆔 *Package ID:* `co.pacifictrans.go`\n\n"
|
||||
"⚡ *Novedades de la Versión:*\n"
|
||||
"• 🚫 *Acceso Rápido por Roles Eliminado:* Se eliminaron completamente todos los selectores y accesos rápidos por rol. Nadie puede simular ni ingresar a perfiles sin verificar identidad.\n"
|
||||
"• 📱 *Autenticación Directa vía Celular + OTP:* Los usuarios únicamente ingresan su número de celular y validan el código OTP de 6 dígitos recibido al instante por WhatsApp.\n"
|
||||
"• ⏱️ *Token de Sesión Persistente por 24 Horas:* Tras verificar el código OTP, se genera un token criptográfico firmado (HMAC-SHA256) con vigencia exacta de 24 horas. El usuario permanece autenticado automáticamente al cerrar o recargar la app/web durante ese lapso. Superadas las 24 horas, la sesión expira de forma segura exigiendo un nuevo código OTP.\n\n"
|
||||
"• 🔒 *Privacidad & Anonimización de Datos:* Se reemplazó toda información personal (nombres, números telefónicos y correos de ejemplo o datos de prueba/placeholders) en interfaces públicas, modales, recibos de prueba y cajas de texto por datos totalmente ficticios y profesionales.\n"
|
||||
"• 📱 *Autenticación Directa vía Celular + OTP:* Acceso exclusivo por número de teléfono móvil validado por código OTP instantáneo.\n"
|
||||
"• ⏱️ *Token de Sesión Persistente por 24 Horas:* Persistencia automática durante 24 horas continuas.\n\n"
|
||||
f"🔗 *Enlace de Descarga Directa:*\n👉 {APK_URL}"
|
||||
)
|
||||
|
||||
|
||||
@ -143,7 +143,7 @@ export default function AdminSettingsPage() {
|
||||
<input
|
||||
type="tel"
|
||||
required
|
||||
placeholder="ej: 3167455877"
|
||||
placeholder="ej: 3001234567"
|
||||
value={settings.phone}
|
||||
onChange={(e) => handlePhoneChange(e.target.value)}
|
||||
className="w-full bg-zinc-950 border border-zinc-800 rounded-xl pl-9 pr-3.5 py-2.5 text-emerald-300 font-bold outline-hidden focus:border-emerald-400"
|
||||
|
||||
@ -507,7 +507,7 @@ export default function AdminSuppliersPage() {
|
||||
<input
|
||||
type="tel"
|
||||
required
|
||||
placeholder="ej: 573167455877"
|
||||
placeholder="ej: 573001234567"
|
||||
value={phone}
|
||||
onChange={(e) => setPhone(e.target.value)}
|
||||
className="w-full bg-zinc-950 border border-zinc-800 rounded-xl px-3.5 py-2.5 text-emerald-300 outline-hidden focus:border-emerald-400 font-mono font-bold"
|
||||
|
||||
@ -628,7 +628,7 @@ export default function AdminUsersPage() {
|
||||
<input
|
||||
type="tel"
|
||||
required
|
||||
placeholder="3167455877"
|
||||
placeholder="3001234567"
|
||||
value={phone}
|
||||
onChange={(e) => setPhone(e.target.value)}
|
||||
className="w-full bg-neutral-950 border border-neutral-800 rounded-xl px-3 py-2 text-white outline-hidden focus:border-purple-400"
|
||||
|
||||
@ -308,7 +308,7 @@ ${order.depositAmount > 0 ? `⚡ *Separación:* ${formatCOP(order.depositAmount)
|
||||
<input
|
||||
type="tel"
|
||||
required
|
||||
placeholder="Ej. 3167455877"
|
||||
placeholder="Ej. 3001234567"
|
||||
value={customerPhone}
|
||||
onChange={(e) => setCustomerPhone(e.target.value)}
|
||||
className="w-full bg-neutral-950 border border-neutral-800 rounded-xl px-3 py-2 text-sm text-white focus:border-purple-400 outline-hidden"
|
||||
|
||||
@ -578,7 +578,7 @@ export const AuthModal: React.FC = () => {
|
||||
<input
|
||||
type="text"
|
||||
required
|
||||
placeholder="Ej: 3167455877 o carlos.andres.lasso@gmail.com"
|
||||
placeholder="Ej: 3001234567 o usuario@ejemplo.com"
|
||||
value={identifier}
|
||||
onChange={(e) => setIdentifier(e.target.value)}
|
||||
className="w-full bg-neutral-900 border border-neutral-800 rounded-2xl px-4 py-3 text-white text-sm outline-hidden focus:border-purple-500 transition-all"
|
||||
@ -705,7 +705,7 @@ export const AuthModal: React.FC = () => {
|
||||
<input
|
||||
type="tel"
|
||||
required
|
||||
placeholder="3167455877"
|
||||
placeholder="3001234567"
|
||||
value={phone}
|
||||
onChange={(e) => setPhone(e.target.value)}
|
||||
className="w-full bg-neutral-900 border border-neutral-800 rounded-xl px-3 py-2 text-white outline-hidden focus:border-purple-500"
|
||||
|
||||
@ -95,7 +95,7 @@
|
||||
</div>
|
||||
|
||||
<div class="notif-footer">
|
||||
<a href="https://wa.me/573167455877" target="_blank" id="notif-wa-link" style="color: var(--accent-cyan); text-decoration: none; font-size: 0.8rem; display: flex; align-items: center; justify-content: center; gap: 0.35rem;">
|
||||
<a href="#" target="_blank" id="notif-wa-link" style="color: var(--accent-cyan); text-decoration: none; font-size: 0.8rem; display: flex; align-items: center; justify-content: center; gap: 0.35rem;">
|
||||
<span>💬 Contactar a Central de Soporte WhatsApp</span>
|
||||
</a>
|
||||
</div>
|
||||
@ -679,7 +679,7 @@
|
||||
<div style="display: flex; align-items: center; gap: 0.6rem; margin-top: 0.35rem; flex-wrap: wrap;">
|
||||
<span class="admin-status-indicator">● Radar GPS Conectado</span>
|
||||
<span class="admin-wa-badge" id="admin-wa-group-badge">👥 Grupo: Pacific Trans Notificaciones</span>
|
||||
<span style="font-size: 0.8rem; color: #94a3b8;">Admin: <strong style="color: #fff;" id="admin-user-name">Carlos Almeira (SuperAdmin)</strong></span>
|
||||
<span style="font-size: 0.8rem; color: #94a3b8;">Admin: <strong style="color: #fff;" id="admin-user-name">Administrador General</strong></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -812,8 +812,8 @@
|
||||
<div class="grid-2col" style="gap: 1.25rem; margin-bottom: 0;">
|
||||
<div class="form-group" style="margin-bottom: 0;">
|
||||
<label class="form-label" for="cfg-admin-phone">Número de WhatsApp Administrador (+57)</label>
|
||||
<input type="tel" class="form-input" id="cfg-admin-phone" value="573167455877" placeholder="573167455877" required>
|
||||
<span style="font-size: 0.75rem; color: var(--text-dim); margin-top: 4px; display: block;">Número personal de Carlos para alertas prioritarias directas.</span>
|
||||
<input type="tel" class="form-input" id="cfg-admin-phone" value="" placeholder="Ej: 573001234567" required>
|
||||
<span style="font-size: 0.75rem; color: var(--text-dim); margin-top: 4px; display: block;">Número de WhatsApp oficial para alertas prioritarias directas.</span>
|
||||
</div>
|
||||
<div class="form-group" style="margin-bottom: 0;">
|
||||
<label class="form-label" for="cfg-admin-name">Nombre del Canal de Atención</label>
|
||||
@ -1191,7 +1191,7 @@
|
||||
<strong style="color: #fff; font-size: 1.15rem;">Gestión del Equipo de Administradores & Control de Acceso</strong>
|
||||
</div>
|
||||
<p style="color: #cbd5e1; font-size: 0.88rem; margin: 0; max-width: 720px;">
|
||||
El Superadministrador <strong>Carlos Almeira (+57 316 745 5877)</strong> es la autoridad máxima permanente e inmutable. Desde aquí puedes registrar nuevos administradores u operadores, actualizar sus permisos, activarlos o inactivarlos, o removerlos del sistema.
|
||||
El <strong>Superadministrador Principal</strong> es la autoridad máxima permanente e inmutable. Desde aquí puedes registrar nuevos administradores u operadores, actualizar sus permisos, activarlos o inactivarlos, o removerlos del sistema.
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
@ -1205,7 +1205,7 @@
|
||||
<div class="financial-summary-grid" style="margin-bottom: 1.75rem;">
|
||||
<div class="fin-metric-card" style="border-top: 3px solid #fbbf24;">
|
||||
<div class="fin-metric-label">Superadministrador</div>
|
||||
<div class="fin-metric-val" style="color: #fbbf24; font-size: 1.15rem; margin-top: 0.35rem;">Carlos Almeira</div>
|
||||
<div class="fin-metric-val" style="color: #fbbf24; font-size: 1.15rem; margin-top: 0.35rem;">Superadministrador</div>
|
||||
<span style="font-size: 0.72rem; color: #34d399;">🔒 Permanente e Inmutable</span>
|
||||
</div>
|
||||
<div class="fin-metric-card" style="border-top: 3px solid #38bdf8;">
|
||||
@ -1346,7 +1346,7 @@
|
||||
</h2>
|
||||
<div style="display: flex; align-items: center; gap: 0.6rem; margin-top: 0.35rem; flex-wrap: wrap;">
|
||||
<span class="admin-status-indicator">● Chofer Activo</span>
|
||||
<span style="font-size: 0.8rem; color: #94a3b8;">Conductor: <strong style="color: #fff;" id="driver-topbar-name">Carlos Almeira (WLZ-890)</strong></span>
|
||||
<span style="font-size: 0.8rem; color: #94a3b8;">Conductor: <strong style="color: #fff;" id="driver-topbar-name">Mario Fernando Gómez (WLZ-890)</strong></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -1393,7 +1393,7 @@
|
||||
<span class="wallet-balance-currency">COP</span>
|
||||
</div>
|
||||
<div style="color: #cbd5e1; font-size: 0.88rem; display: flex; align-items: center; gap: 0.5rem;">
|
||||
<span>🚗 Conductor: <strong id="driver-wallet-name" style="color: #fff;">Carlos Almeira</strong></span>
|
||||
<span>🚗 Conductor: <strong id="driver-wallet-name" style="color: #fff;">Mario Fernando Gómez</strong></span>
|
||||
<span>•</span>
|
||||
<span>Placa: <strong id="driver-wallet-plate" style="color: var(--accent-cyan);">WLZ-890</strong></span>
|
||||
</div>
|
||||
@ -1476,7 +1476,7 @@
|
||||
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="driver-breb-key-value">Valor de la Llave Bre-B</label>
|
||||
<input type="text" class="form-input" id="driver-breb-key-value" value="3167455877" placeholder="Ej: 3167455877">
|
||||
<input type="text" class="form-input" id="driver-breb-key-value" value="3109876543" placeholder="Ej: 3109876543">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
@ -1609,7 +1609,7 @@
|
||||
<strong style="color: #fff;">Pacific Trans GO</strong> — Transporte Especial Cali - Buenaventura
|
||||
</div>
|
||||
<div>
|
||||
Atención y Soporte WhatsApp: <a id="footer-support-link" href="https://wa.me/573167455877" target="_blank" style="color: var(--accent-cyan); text-decoration: none;"><span id="footer-support-phone">+57 316 745 5877</span></a>
|
||||
Atención y Soporte WhatsApp: <a id="footer-support-link" href="#" target="_blank" style="color: var(--accent-cyan); text-decoration: none;"><span id="footer-support-phone">Central de Soporte</span></a>
|
||||
</div>
|
||||
<div>
|
||||
© 2026 Almeira Group. Todos los derechos reservados.
|
||||
@ -1641,7 +1641,7 @@
|
||||
<label class="form-label" for="auth-input-phone" style="font-size: 0.95rem; font-weight: 700; color: #fff; margin-bottom: 0.5rem;">
|
||||
Número de Celular / WhatsApp (+57)
|
||||
</label>
|
||||
<input type="tel" class="form-input" id="auth-input-phone" placeholder="Ej: 316 745 5877 o 300 123 4567" required autofocus style="font-size: 1.15rem; font-weight: 700; text-align: center; letter-spacing: 0.05em; padding: 0.85rem;">
|
||||
<input type="tel" class="form-input" id="auth-input-phone" placeholder="Ej: 300 123 4567 o 312 987 6543" required autofocus style="font-size: 1.15rem; font-weight: 700; text-align: center; letter-spacing: 0.05em; padding: 0.85rem;">
|
||||
<span style="font-size: 0.76rem; color: var(--text-dim); margin-top: 6px; display: block;">
|
||||
Recibirás un código de 6 dígitos al instante en tu WhatsApp para ingresar de forma segura.
|
||||
</span>
|
||||
@ -1862,11 +1862,11 @@
|
||||
</div>
|
||||
<div class="receipt-row">
|
||||
<span class="receipt-label">Llave Bre-B Destino:</span>
|
||||
<span class="receipt-val" id="modal-receipt-key">+57 316 745 5877</span>
|
||||
<span class="receipt-val" id="modal-receipt-key">+57 310 987 6543</span>
|
||||
</div>
|
||||
<div class="receipt-row">
|
||||
<span class="receipt-label">Titular de la Cuenta:</span>
|
||||
<span class="receipt-val" id="modal-receipt-owner">Carlos Almeira</span>
|
||||
<span class="receipt-val" id="modal-receipt-owner">Mario Fernando Gómez</span>
|
||||
</div>
|
||||
<div class="receipt-row">
|
||||
<span class="receipt-label">Costo de Transferencia:</span>
|
||||
|
||||
@ -493,7 +493,7 @@ function initAuthSystem() {
|
||||
}
|
||||
|
||||
if (!cleanPhone || cleanPhone.length < 10) {
|
||||
showError(reqError, 'Ingresa un número de celular válido (Ej: 316 745 5877).');
|
||||
showError(reqError, 'Ingresa un número de celular válido (Ej: 300 123 4567).');
|
||||
return;
|
||||
}
|
||||
|
||||
@ -2278,8 +2278,8 @@ function initSettlementsAndBreBSystem() {
|
||||
if (authEl) authEl.textContent = receipt.codigoAutorizacion || 'AUT-98E1A4';
|
||||
if (cycleEl) cycleEl.textContent = receipt.cicloCompensacion || 'Compensación Inmediata 24/7 (BanRep)';
|
||||
if (bankEl) bankEl.textContent = receipt.entidadDestino || 'Bancolombia';
|
||||
if (keyEl) keyEl.textContent = receipt.llaveDestino || '+57 316 745 5877';
|
||||
if (ownerEl) ownerEl.textContent = receipt.titularDestino || 'Carlos Almeira';
|
||||
if (keyEl) keyEl.textContent = receipt.llaveDestino || '+57 310 987 6543';
|
||||
if (ownerEl) ownerEl.textContent = receipt.titularDestino || 'Mario Fernando Gómez';
|
||||
|
||||
brebModal.style.display = 'flex';
|
||||
|
||||
@ -2372,7 +2372,7 @@ function initSettlementsAndBreBSystem() {
|
||||
// Generar opción demo si la BD aún no tiene viajes activos creados
|
||||
const optDemo = document.createElement('option');
|
||||
optDemo.value = 'DEMO_TRIP_001';
|
||||
optDemo.textContent = 'Viaje Planificado #048291 (Cali ➔ Buenaventura) - Carlos Almeira (WLZ-890)';
|
||||
optDemo.textContent = 'Viaje Planificado #048291 (Cali ➔ Buenaventura) - Mario Fernando Gómez (WLZ-890)';
|
||||
selectTrip.appendChild(optDemo);
|
||||
loadTripSettlement('DEMO_TRIP_001');
|
||||
}
|
||||
@ -2430,11 +2430,11 @@ function initSettlementsAndBreBSystem() {
|
||||
fechaSalida: new Date(Date.now() + 3600000),
|
||||
conductor: {
|
||||
id: defaultDriverId,
|
||||
nombre: 'Carlos Almeira',
|
||||
telefono: '573167455877',
|
||||
nombre: 'Mario Fernando Gómez',
|
||||
telefono: '573109876543',
|
||||
placa: 'WLZ-890',
|
||||
modelo: 'Renault Duster 2024',
|
||||
llaveBreB: { tipo: 'CELULAR', valor: '3167455877', bancoDestino: 'Bancolombia', titularNombre: 'Carlos Almeira' }
|
||||
llaveBreB: { tipo: 'CELULAR', valor: '3109876543', bancoDestino: 'Bancolombia', titularNombre: 'Mario Fernando Gómez' }
|
||||
},
|
||||
tarifaPorPasajero: 35000,
|
||||
tarifaTotal: 140000,
|
||||
@ -2522,12 +2522,12 @@ function initSettlementsAndBreBSystem() {
|
||||
${estadoBadgeHtml}
|
||||
</div>
|
||||
<div style="font-size: 0.85rem; color: #94a3b8;">
|
||||
Salida Programada: <strong style="color: #fff;">${fechaSalidaStr}</strong> • Conductor: <strong style="color: var(--accent-cyan);">${s.conductor?.nombre || 'Carlos Almeira'} (${s.conductor?.placa || 'WLZ-890'})</strong>
|
||||
Salida Programada: <strong style="color: #fff;">${fechaSalidaStr}</strong> • Conductor: <strong style="color: var(--accent-cyan);">${s.conductor?.nombre || 'Mario Fernando Gómez'} (${s.conductor?.placa || 'WLZ-890'})</strong>
|
||||
</div>
|
||||
</div>
|
||||
<div style="font-size: 0.85rem; text-align: right;">
|
||||
<div style="color: #cbd5e1;">Llave Bre-B del Conductor:</div>
|
||||
<strong style="color: #ec4899;">${s.conductor?.llaveBreB?.bancoDestino || 'Bancolombia'}: ${s.conductor?.llaveBreB?.valor || '3167455877'}</strong>
|
||||
<strong style="color: #ec4899;">${s.conductor?.llaveBreB?.bancoDestino || 'Bancolombia'}: ${s.conductor?.llaveBreB?.valor || '3109876543'}</strong>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -2783,9 +2783,9 @@ function initSettlementsAndBreBSystem() {
|
||||
tripId: tId !== 'DEMO_TRIP_001' ? tId : undefined,
|
||||
monto: amount || 49000,
|
||||
bancoDestino: s.conductor?.llaveBreB?.bancoDestino || 'Bancolombia',
|
||||
llaveBreB: s.conductor?.llaveBreB?.valor || '3167455877',
|
||||
llaveBreB: s.conductor?.llaveBreB?.valor || '3109876543',
|
||||
tipoLlave: s.conductor?.llaveBreB?.tipo || 'CELULAR',
|
||||
titularNombre: s.conductor?.nombre || 'Carlos Almeira'
|
||||
titularNombre: s.conductor?.nombre || 'Mario Fernando Gómez'
|
||||
})
|
||||
});
|
||||
const receipt = await res.json();
|
||||
@ -2809,8 +2809,8 @@ function initSettlementsAndBreBSystem() {
|
||||
cicloCompensacion: 'Banco de la República Inmediato 24/7',
|
||||
monto: amount || 49000,
|
||||
entidadDestino: s.conductor?.llaveBreB?.bancoDestino || 'Bancolombia',
|
||||
llaveDestino: s.conductor?.llaveBreB?.valor || '+57 316 745 5877',
|
||||
titularDestino: s.conductor?.nombre || 'Carlos Almeira',
|
||||
llaveDestino: s.conductor?.llaveBreB?.valor || '+57 310 987 6543',
|
||||
titularDestino: s.conductor?.nombre || 'Mario Fernando Gómez',
|
||||
fechaHora: new Date().toLocaleString('es-CO')
|
||||
});
|
||||
}
|
||||
@ -2828,7 +2828,7 @@ function initSettlementsAndBreBSystem() {
|
||||
<div style="background: rgba(15, 23, 42, 0.7); border: 1px dashed var(--border-glass); border-radius: 8px; padding: 1.25rem; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 0.5rem;">
|
||||
<div>
|
||||
<div style="color: #fff; font-weight: 700; font-size: 0.95rem;">Recorrido #048120 (Buenaventura ➔ Cali)</div>
|
||||
<div style="font-size: 0.8rem; color: #94a3b8;">Conductor: Carlos Almeira • Liquidado: Hoy, 04:15 PM</div>
|
||||
<div style="font-size: 0.8rem; color: #94a3b8;">Conductor: Mario Fernando Gómez • Liquidado: Hoy, 04:15 PM</div>
|
||||
</div>
|
||||
<div style="text-align: right;">
|
||||
<div style="color: #34d399; font-weight: 800;">+$119.000 COP Liquidado</div>
|
||||
@ -2881,8 +2881,8 @@ function initSettlementsAndBreBSystem() {
|
||||
updateDriverWalletUI({
|
||||
billeteraSaldo: 119000,
|
||||
totalViajesRealizados: 14,
|
||||
conductor: { nombre: 'Carlos Almeira', placa: 'WLZ-890' },
|
||||
llaveBreB: { tipo: 'CELULAR', valor: '3167455877', bancoDestino: 'Bancolombia', titularNombre: 'Carlos Almeira' },
|
||||
conductor: { nombre: 'Mario Fernando Gómez', placa: 'WLZ-890' },
|
||||
llaveBreB: { tipo: 'CELULAR', valor: '3109876543', bancoDestino: 'Bancolombia', titularNombre: 'Mario Fernando Gómez' },
|
||||
historialTransferenciasBreB: []
|
||||
});
|
||||
}
|
||||
@ -2904,12 +2904,12 @@ function initSettlementsAndBreBSystem() {
|
||||
const payoutAmountInput = document.getElementById('breb-payout-amount');
|
||||
|
||||
if (balVal) balVal.textContent = `$${(wallet.billeteraSaldo || 0).toLocaleString('es-CO')}`;
|
||||
if (nameVal) nameVal.textContent = wallet.conductor?.nombre || 'Carlos Almeira';
|
||||
if (nameVal) nameVal.textContent = wallet.conductor?.nombre || 'Mario Fernando Gómez';
|
||||
if (plateVal) plateVal.textContent = wallet.conductor?.placa || 'WLZ-890';
|
||||
if (tripsVal) tripsVal.textContent = wallet.totalViajesRealizados || 0;
|
||||
|
||||
if (summaryBank) summaryBank.textContent = wallet.llaveBreB?.bancoDestino || 'Bancolombia';
|
||||
if (summaryKey) summaryKey.textContent = wallet.llaveBreB?.valor || '3167455877';
|
||||
if (summaryKey) summaryKey.textContent = wallet.llaveBreB?.valor || '3109876543';
|
||||
|
||||
if (inputKeyType && wallet.llaveBreB?.tipo) inputKeyType.value = wallet.llaveBreB.tipo;
|
||||
if (inputKeyValue && wallet.llaveBreB?.valor) inputKeyValue.value = wallet.llaveBreB.valor;
|
||||
@ -2950,8 +2950,8 @@ function initSettlementsAndBreBSystem() {
|
||||
cicloCompensacion: 'Banco de la República Interoperable 24/7',
|
||||
monto: 119000,
|
||||
entidadDestino: 'Bancolombia',
|
||||
llaveDestino: '+57 316 745 5877',
|
||||
titularDestino: 'Carlos Almeira',
|
||||
llaveDestino: '+57 310 987 6543',
|
||||
titularDestino: 'Mario Fernando Gómez',
|
||||
fechaHora: '14 de Octubre de 2026, 08:35 PM'
|
||||
});
|
||||
};
|
||||
@ -3018,7 +3018,7 @@ function initSettlementsAndBreBSystem() {
|
||||
tipo: keyType,
|
||||
valor: keyValue,
|
||||
bancoDestino: bank,
|
||||
titularNombre: currentUser?.nombre || 'Carlos Almeira'
|
||||
titularNombre: currentUser?.nombre || 'Usuario Conductor'
|
||||
})
|
||||
});
|
||||
const data = await res.json();
|
||||
@ -3062,7 +3062,7 @@ function initSettlementsAndBreBSystem() {
|
||||
}
|
||||
|
||||
const keyType = document.getElementById('driver-breb-key-type')?.value || 'CELULAR';
|
||||
const keyValue = document.getElementById('driver-breb-key-value')?.value || '3167455877';
|
||||
const keyValue = document.getElementById('driver-breb-key-value')?.value || '3109876543';
|
||||
const bank = document.getElementById('driver-breb-bank')?.value || 'Bancolombia';
|
||||
|
||||
btnSubmitPayout.disabled = true;
|
||||
@ -3078,7 +3078,7 @@ function initSettlementsAndBreBSystem() {
|
||||
bancoDestino: bank,
|
||||
llaveBreB: keyValue,
|
||||
tipoLlave: keyType,
|
||||
titularNombre: currentUser?.nombre || 'Carlos Almeira'
|
||||
titularNombre: currentUser?.nombre || 'Usuario Conductor'
|
||||
})
|
||||
});
|
||||
const data = await res.json();
|
||||
@ -3318,8 +3318,8 @@ function initSettlementsAndBreBSystem() {
|
||||
listEl.innerHTML = `
|
||||
<div style="background: rgba(15, 23, 42, 0.7); border: 1px solid var(--border-glass); border-radius: 8px; padding: 1.15rem; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 0.5rem;">
|
||||
<div>
|
||||
<strong style="color: #fff;">Carlos Almeira (WLZ-890)</strong>
|
||||
<div style="font-size: 0.82rem; color: #94a3b8;">Bancolombia (Llave Celular: 3167455877) • Ref: SOL-BREB-20261014-99AB12</div>
|
||||
<strong style="color: #fff;">Mario Fernando Gómez (WLZ-890)</strong>
|
||||
<div style="font-size: 0.82rem; color: #94a3b8;">Bancolombia (Llave Celular: 3109876543) • Ref: SOL-BREB-20261014-99AB12</div>
|
||||
</div>
|
||||
<div style="display: flex; gap: 0.75rem; align-items: center;">
|
||||
<div style="color: #34d399; font-weight: 800; font-size: 1.15rem;">$119.000 COP</div>
|
||||
@ -4083,7 +4083,7 @@ async function fetchAdministrators() {
|
||||
<div style="font-weight: 700; color: #fff; display: flex; align-items: center; gap: 0.4rem;">
|
||||
${isSuper ? '<span style="font-size: 1.1rem;">👑</span>' : '<span>🛡️</span>'}
|
||||
<span>${admin.nombre}</span>
|
||||
${isSuper ? '<span class="superadmin-badge" style="font-size: 0.65rem; padding: 1px 6px;">Carlos</span>' : ''}
|
||||
${isSuper ? '<span class="superadmin-badge" style="font-size: 0.65rem; padding: 1px 6px;">👑 PRINCIPAL</span>' : ''}
|
||||
</div>
|
||||
<div style="font-size: 0.75rem; color: #94a3b8;">
|
||||
${admin.documentoIdentidad ? `C.C. ${admin.documentoIdentidad} • ` : ''}${admin.email || 'Sin correo registrado'}
|
||||
|
||||
@ -147,11 +147,11 @@ export class AuthService {
|
||||
|
||||
if (!user) {
|
||||
user = await User.create({
|
||||
appwriteId: isSuper ? 'usr-superadmin-carlos' : `pt-${Date.now()}-${Math.random().toString(36).substr(2, 6)}`,
|
||||
nombre: isSuper ? (params.nombre || 'Carlos Almeira') : (params.nombre || `Usuario ${cleanPhone.slice(-4)}`),
|
||||
appwriteId: isSuper ? 'usr-superadmin-platform' : `pt-${Date.now()}-${Math.random().toString(36).substr(2, 6)}`,
|
||||
nombre: isSuper ? (params.nombre || 'Superadministrador Principal') : (params.nombre || `Usuario ${cleanPhone.slice(-4)}`),
|
||||
telefono: cleanPhone,
|
||||
email: userEmail || (isSuper ? SUPER_ADMIN_EMAIL : undefined),
|
||||
documentoIdentidad: params.documentoIdentidad || (isSuper ? '3167455877' : undefined),
|
||||
documentoIdentidad: params.documentoIdentidad || (isSuper ? '1000000001' : undefined),
|
||||
direccionTexto: params.direccionTexto || 'Cali, Valle del Cauca',
|
||||
ciudad: 'Cali',
|
||||
rol: assignedRole,
|
||||
@ -176,7 +176,7 @@ export class AuthService {
|
||||
user.rol = 'ADMIN';
|
||||
user.esSuperAdmin = true;
|
||||
if (!user.nombre || user.nombre.startsWith('Usuario ')) {
|
||||
user.nombre = 'Carlos Almeira';
|
||||
user.nombre = 'Superadministrador Principal';
|
||||
}
|
||||
}
|
||||
if (params.documentoIdentidad && !user.documentoIdentidad) {
|
||||
|
||||
@ -181,11 +181,11 @@ export class UserAdminService {
|
||||
|
||||
if (!superAdmin) {
|
||||
superAdmin = await User.create({
|
||||
appwriteId: 'usr-superadmin-carlos',
|
||||
nombre: 'Carlos Almeira',
|
||||
appwriteId: 'usr-superadmin-platform',
|
||||
nombre: 'Superadministrador Principal',
|
||||
telefono: SUPER_ADMIN_PHONE,
|
||||
email: SUPER_ADMIN_EMAIL,
|
||||
documentoIdentidad: '3167455877',
|
||||
documentoIdentidad: '1000000001',
|
||||
rol: 'ADMIN',
|
||||
esSuperAdmin: true,
|
||||
saldoPenalidad: 0,
|
||||
@ -200,7 +200,7 @@ export class UserAdminService {
|
||||
twoFactorEnabled: true,
|
||||
twoFactorMethod: 'whatsapp_otp',
|
||||
});
|
||||
console.log('👑 [SuperAdmin Seed]: Carlos Almeira registrado como Superadministrador permanente.');
|
||||
console.log('👑 [SuperAdmin Seed]: Superadministrador Principal registrado como Superadministrador permanente.');
|
||||
} else {
|
||||
let needsSave = false;
|
||||
if (superAdmin.rol !== 'ADMIN') {
|
||||
|
||||
@ -143,7 +143,7 @@ export default function AdminSettingsPage() {
|
||||
<input
|
||||
type="tel"
|
||||
required
|
||||
placeholder="ej: 3167455877"
|
||||
placeholder="ej: 3001234567"
|
||||
value={settings.phone}
|
||||
onChange={(e) => handlePhoneChange(e.target.value)}
|
||||
className="w-full bg-slate-950 border border-slate-800 rounded-xl pl-9 pr-3.5 py-2.5 text-emerald-300 font-bold outline-hidden focus:border-emerald-400"
|
||||
|
||||
@ -507,7 +507,7 @@ export default function AdminSuppliersPage() {
|
||||
<input
|
||||
type="tel"
|
||||
required
|
||||
placeholder="ej: 573167455877"
|
||||
placeholder="ej: 573001234567"
|
||||
value={phone}
|
||||
onChange={(e) => setPhone(e.target.value)}
|
||||
className="w-full bg-slate-950 border border-slate-800 rounded-xl px-3.5 py-2.5 text-emerald-300 outline-hidden focus:border-emerald-400 font-mono font-bold"
|
||||
|
||||
@ -628,7 +628,7 @@ export default function AdminUsersPage() {
|
||||
<input
|
||||
type="tel"
|
||||
required
|
||||
placeholder="3167455877"
|
||||
placeholder="3001234567"
|
||||
value={phone}
|
||||
onChange={(e) => setPhone(e.target.value)}
|
||||
className="w-full bg-neutral-950 border border-neutral-800 rounded-xl px-3 py-2 text-white outline-hidden focus:border-purple-400"
|
||||
|
||||
@ -308,7 +308,7 @@ ${order.depositAmount > 0 ? `⚡ *Separación:* ${formatCOP(order.depositAmount)
|
||||
<input
|
||||
type="tel"
|
||||
required
|
||||
placeholder="Ej. 3167455877"
|
||||
placeholder="Ej. 3001234567"
|
||||
value={customerPhone}
|
||||
onChange={(e) => setCustomerPhone(e.target.value)}
|
||||
className="w-full bg-neutral-950 border border-neutral-800 rounded-xl px-3 py-2 text-sm text-white focus:border-purple-400 outline-hidden"
|
||||
|
||||
@ -578,7 +578,7 @@ export const AuthModal: React.FC = () => {
|
||||
<input
|
||||
type="text"
|
||||
required
|
||||
placeholder="Ej: 3167455877 o carlos.andres.lasso@gmail.com"
|
||||
placeholder="Ej: 3001234567 o usuario@ejemplo.com"
|
||||
value={identifier}
|
||||
onChange={(e) => setIdentifier(e.target.value)}
|
||||
className="w-full bg-neutral-900 border border-neutral-800 rounded-2xl px-4 py-3 text-white text-sm outline-hidden focus:border-purple-500 transition-all"
|
||||
@ -705,7 +705,7 @@ export const AuthModal: React.FC = () => {
|
||||
<input
|
||||
type="tel"
|
||||
required
|
||||
placeholder="3167455877"
|
||||
placeholder="3001234567"
|
||||
value={phone}
|
||||
onChange={(e) => setPhone(e.target.value)}
|
||||
className="w-full bg-neutral-900 border border-neutral-800 rounded-xl px-3 py-2 text-white outline-hidden focus:border-purple-500"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user