Ir al contenido

Crear Nuevo Negocio

Abre el wizard de configuración para crear y configurar un nuevo negocio desde cero.

  1. Clic en “Crear Nuevo Negocio” (botón outline con icono Plus) — se abre el wizard.
  2. Sigue los pasos del wizard de configuración (igual que onboarding).
  3. Completa la información del nuevo negocio.
  4. Finaliza el wizard — el nuevo negocio se crea y se activa automáticamente.

Nota: El wizard es el mismo que el onboarding inicial. Ver documentación de Onboarding.

PasoContenido
1. Datos del NegocioNombre, razón social, NIF/CIF, tipo de negocio
2. Información FiscalRégimen fiscal, IRPF (si aplica)
3. DirecciónDirección completa con autocompletado
4. ContactoEmail, teléfono, sitio web
5. Plan y PagoSelección de plan de suscripción
PlanNegocios permitidos
Free1
Starter1
Professional3
EnterpriseIlimitados

Importante: Si alcanzas el límite de tu plan, necesitas actualizar la suscripción para crear más negocios.

  • El wizard se cierra automáticamente.
  • Toast de confirmación: “Negocio creado. El nuevo negocio se ha configurado correctamente”.
  • Cambias automáticamente al nuevo negocio creado.
  • El nuevo negocio aparece en el selector de negocios.
MensajeCausaSolución
”Has alcanzado el límite de negocios”Plan no permite más negociosActualiza tu plan de suscripción
”El NIF/CIF ya está registrado”Tax ID duplicadoUsa otro NIF/CIF
”Error al crear negocio”Error de servidorIntenta de nuevo o contacta soporte
Ver componente del wizard

Componente: NewBusinessFormSheet.tsx

Archivo: src/features/_shared/components/business/NewBusinessFormSheet.tsx

Props:

interface NewBusinessFormSheetProps {
open: boolean;
onOpenChange: (open: boolean) => void;
onSuccess: (businessId: string) => void;
existingDraft?: PendingBusiness;
initialStep?: 'business-data' | 'fiscal-data' | 'address' | 'contact' | 'plan';
}

Estados del wizard:

type WizardStep =
| 'business-data' // Datos generales
| 'fiscal-data' // Información fiscal
| 'address' // Dirección
| 'contact' // Contacto
| 'plan'; // Plan y pago
Ver flujo de creación

Función: handleWizardSuccess()

Flujo completo:

1. Guardar datos en tabla businesses
2. Crear relación en user_businesses con role='owner'
3. Guardar business_type en profiles del usuario
4. Procesar pago si plan de pago
5. Cambiar contexto a nuevo negocio: switchToBusiness(businessId)
6. Refrescar datos de autenticación: refreshBusinessData()
7. Invalidar cache de React Query
8. Cerrar wizard
9. Mostrar toast de confirmación

Inserción en base de datos:

-- 1. Crear negocio
INSERT INTO businesses (
name, legal_name, tax_id, email, phone, website,
address, city, province, postal_code, country,
currency, tax_regime, default_irpf_percentage,
is_professional_freelancer
) VALUES (...);
-- 2. Crear relación usuario-negocio
INSERT INTO user_businesses (user_id, business_id, role)
VALUES ('<user_id>', '<business_id>', 'owner');
-- 3. Actualizar tipo de negocio en perfil
UPDATE profiles
SET business_type = '<tipo>'
WHERE user_id = '<user_id>';
Ver validación de límites

Hook: usePendingBusinesses()

Función: canCreateNew

Lógica:

// Verifica límite según plan de suscripción
const canCreateNew = useMemo(() => {
const planLimits = {
'free': 1,
'starter': 1,
'professional': 3,
'enterprise': 999,
};
const currentCount = availableBusinesses.length;
const limit = planLimits[subscriptionPlan] || 1;
return currentCount < limit;
}, [availableBusinesses, subscriptionPlan]);

Query para contar negocios activos:

SELECT COUNT(*)
FROM businesses b
JOIN user_businesses ub ON b.id = ub.business_id
WHERE ub.user_id = '<user_id>'
AND b.deleted_at IS NULL;