Al hacer clic en “Registrar Gasto”, el gasto no se guarda ni aparece en el historial de gastos.
El código tenía la lógica correcta de inserción en base de datos, pero carecía de:
cargarGastos() ✅Antes:
async cargarGastos() {
const resultado = await window.databaseService.select('gastos', {...});
if (resultado.success) {
this.gastos = resultado.data.map(...);
}
}
Después:
async cargarGastos() {
console.log('📥 Cargando gastos desde BD...');
const resultado = await window.databaseService.select('gastos', {...});
if (resultado.success) {
console.log(`✅ ${resultado.data.length} gastos cargados desde BD`);
this.gastos = resultado.data.map(...);
console.log('📊 Gastos mapeados:', this.gastos.length);
} else {
console.warn('⚠️ No se pudieron cargar gastos:', resultado);
this.gastos = [];
}
}
Beneficios:
registrarGasto() ✅Agregado:
📝 Intentando registrar gasto📤 Resultado de inserción✅ Gasto insertado. ID: xxx🔄 Recargando gastos...🎨 Actualizando vista...✅ Vista actualizada. Total gastos: XManejo de errores mejorado:
if (resultado.success) {
console.log('✅ Gasto insertado correctamente');
// ... proceso de actualización
} else {
console.error('❌ Error en resultado:', resultado);
alert('Error al guardar: ' + (resultado.error?.message || 'Error desconocido'));
}
actualizarHistorialGastos() ✅Agregado:
console.log('📋 Actualizando historial con', gastos.length, 'gastos');
Validación:
if (!tbody) {
console.warn('⚠️ No se encontró tabla de gastos (tablaGastosBody)');
return;
}
Ctrl + Shift + R (Windows) / Cmd + Shift + R (Mac)Abre la Consola del Navegador (F12) y busca:
✅ gastos.js v20260119b cargado - Esquema singleton JSONB + Debug logs
🚀 Iniciando GestorGastos con Supabase...
📥 Cargando gastos desde BD...
✅ X gastos cargados desde BD
📊 Gastos mapeados: X
✅ GestorGastos inicializado correctamente
Haz clic en “Registrar Gasto”
📝 Intentando registrar gasto: {...}
💾 Insertando gasto en BD...
📤 Resultado de inserción: {...}
✅ Gasto insertado correctamente. ID: xxx-xxx-xxx
🔄 Recargando gastos...
📥 Cargando gastos desde BD...
✅ X gastos cargados desde BD
🎨 Actualizando vista...
📋 Actualizando historial con X gastos
✅ Vista actualizada. Total gastos: X
Ejecuta en Supabase SQL Editor:
SELECT COUNT(*) FROM gastos;
Ejecuta en Supabase SQL Editor:
-- Ver políticas activas
SELECT * FROM pg_policies WHERE tablename = 'gastos';
-- Si no hay políticas, crearlas:
ALTER TABLE gastos ENABLE ROW LEVEL SECURITY;
-- Permitir lectura a todos los autenticados
CREATE POLICY "Permitir lectura de gastos"
ON gastos FOR SELECT
TO authenticated
USING (true);
-- Permitir inserción a todos los autenticados
CREATE POLICY "Permitir inserción de gastos"
ON gastos FOR INSERT
TO authenticated
WITH CHECK (true);
-- Permitir eliminación al dueño o admin
CREATE POLICY "Permitir eliminación de gastos"
ON gastos FOR DELETE
TO authenticated
USING (usuario_id = auth.uid() OR
EXISTS (SELECT 1 FROM usuarios WHERE id = auth.uid() AND rol = 'administrador'));
Si ves errores en rojo en la consola, cópialos y revisa:
column configuracion.clave does not exist → Limpia cachenew row violates row-level security policy → Ejecuta las políticas RLS de arribarelation "gastos" does not exist → Ejecuta database_schema.sqlEn la consola:
// Verificar que databaseService existe
console.log(window.databaseService);
// Debería mostrar un objeto con métodos: select, insert, update, delete
✅ gastos.js v20260119b cargado - Esquema singleton JSONB + Debug logs
🚀 Iniciando GestorGastos con Supabase...
📥 Cargando gastos desde BD...
✅ 5 gastos cargados desde BD
📊 Gastos mapeados: 5
✅ GestorGastos inicializado correctamente
📋 Actualizando historial con 5 gastos
📝 Intentando registrar gasto: {fecha: "2026-01-19", categoria: "suministros", ...}
💾 Insertando gasto en BD...
📤 Resultado de inserción: {success: true, data: [...]}
✅ Gasto insertado correctamente. ID: 123e4567-e89b-12d3-a456-426614174000
🔄 Recargando gastos...
📥 Cargando gastos desde BD...
✅ 6 gastos cargados desde BD
📊 Gastos mapeados: 6
🎨 Actualizando vista...
📋 Actualizando historial con 6 gastos
✅ Vista actualizada. Total gastos: 6
Con estos cambios:
Si sigues teniendo problemas, comparte los logs de la consola completos y podré ayudarte a identificar el problema exacto.