Eliminar Negocio
Exportar contenido
Borra un negocio del sistema mediante soft-delete (establece deleted_at en lugar de eliminar físicamente).
Requisito: Solo disponible si tienes más de un negocio activo.
- Clic en “Eliminar” (botón rojo destructive) — se abre diálogo de confirmación.
- Lee la advertencia sobre la eliminación permanente.
- Escribe el nombre del negocio para confirmar.
- Clic en “Eliminar Negocio” — el negocio se marca como eliminado.
Qué se elimina
Sección titulada «Qué se elimina»El negocio se marca con deleted_at, pero NO se eliminan físicamente los datos:
- ❌ No se elimina: Facturas, clientes, productos, empleados (quedan inaccesibles)
- ✅ Se conserva: Historial completo por compliance fiscal
- ⚠️ Cambio de contexto: Cambias automáticamente a otro negocio activo
ALERTA: Esta acción no se puede deshacer. Contacta soporte si necesitas recuperar un negocio eliminado.
Restricciones
Sección titulada «Restricciones»| Condición | Acción |
|---|---|
| Solo tienes 1 negocio | Botón “Eliminar” no aparece |
| Tienes 2+ negocios | Botón “Eliminar” disponible |
| No eres owner | No tienes acceso a esta función |
Cómo sé que lo hice bien
Sección titulada «Cómo sé que lo hice bien»- Toast de confirmación: “Negocio eliminado. El negocio y todos sus datos han sido eliminados permanentemente”.
- Cambias automáticamente a otro negocio activo.
- El negocio eliminado ya no aparece en el selector de negocios.
Errores comunes
Sección titulada «Errores comunes»| Mensaje | Causa | Solución |
|---|---|---|
| ”No se pudo eliminar el negocio” | Error de servidor | Intenta de nuevo o contacta soporte |
| Botón “Eliminar” no aparece | Solo tienes 1 negocio | No puedes eliminar tu único negocio |
| ”Acceso restringido” | No eres owner | Solo propietarios pueden eliminar |
Detalles técnicos — Eliminar Negocio
Sección titulada «Detalles técnicos — Eliminar Negocio»Ver lógica de soft-delete
Componente: BusinessManager.tsx
Función: handleDeleteBusiness()
Flujo:
1. Validar que canDeleteBusiness === true (más de 1 negocio)2. Soft delete: SET deleted_at = NOW()3. Obtener lista de negocios restantes (WHERE deleted_at IS NULL)4. Cambiar a primer negocio restante: switchToBusiness(remainingBusinesses[0].id)5. Refrescar datos de autenticación: refreshBusinessData()6. Invalidar cache de React Query7. Mostrar toast de confirmaciónQuery de soft-delete:
UPDATE businessesSET deleted_at = NOW()WHERE id = '<business_id>';Ver políticas de recuperación
RLS Policies:
Las políticas RLS filtran automáticamente negocios con deleted_at IS NOT NULL:
-- Política de aislamiento de negociosCREATE POLICY businesses_business_isolation ON businessesFOR ALLUSING ( deleted_at IS NULL AND EXISTS ( SELECT 1 FROM user_businesses WHERE business_id = businesses.id AND user_id = auth.uid() ));Recuperación manual (solo admin):
-- Solo ejecutable por administradores de SupabaseUPDATE businessesSET deleted_at = NULLWHERE id = '<business_id>';Ver queries de auditoría
Negocios eliminados de un usuario:
SELECT b.id, b.name, b.legal_name, b.tax_id, b.deleted_at, ub.roleFROM businesses bJOIN user_businesses ub ON b.id = ub.business_idWHERE ub.user_id = '<user_id>' AND b.deleted_at IS NOT NULLORDER BY b.deleted_at DESC;Contar registros asociados a negocio eliminado:
SELECT (SELECT COUNT(*) FROM invoices WHERE business_id = '<business_id>') as facturas, (SELECT COUNT(*) FROM customers WHERE business_id = '<business_id>') as clientes, (SELECT COUNT(*) FROM products WHERE business_id = '<business_id>') as productos, (SELECT COUNT(*) FROM employees WHERE business_id = '<business_id>') as empleados;