Ir al contenido

Mi Negocio

Ruta: /owner/settings/business Configura y actualiza todos los datos de tu negocio: información fiscal, contacto y dirección.


La pantalla de Mi Negocio muestra la información actual de tu empresa en tres secciones organizadas:

Secciones de información:

SecciónIconoContenido
GeneralBuilding2Nombre comercial, razón social y NIF/CIF
ContactoMailEmail, teléfono y sitio web
DirecciónMapPinDirección completa, ciudad, provincia y código postal

Badges informativos:

BadgeDescripciónColores
Tipo de negocioAutónomo / Nuevo Autónomo / EmpresaVerde (nuevo), Azul (autónomo), Morado (empresa)
Régimen fiscalCanarias (IGIC) / Ceuta y Melilla (IPSI)Gris outline
Autónomo ProfesionalActividades profesionalesAzul

Acciones disponibles: Editar, Eliminar (solo si tienes más de un negocio)


Factux distingue entre dos tipos principales de negocio:

Características:

  • Usa NIF personal (formato: 12345678Z)
  • Dos opciones de retención IRPF: 7% (nuevo autónomo) o 15% (general)
  • Puede marcarse como “Autónomo Profesional” para actividades profesionales

Retenciones IRPF:

TipoPorcentajeCuándo aplicar
Nuevo Autónomo7%Primeros 3 años de actividad
Autónomo General15%Después del periodo inicial

Características:

  • Usa CIF empresarial (formato: B12345678)
  • No aplica retención IRPF
  • Requiere razón social completa

El régimen fiscal se detecta automáticamente según el código postal:

┌──────────────────┐
│ Código Postal │
└────────┬─────────┘
│ Auto-detecta
┌────────▼─────────┐
│ Régimen Fiscal │
└──────────────────┘
TerritorioCódigo PostalImpuestoTipos
Península y Baleares01000-52999IVA4%, 10%, 21%
Canarias35000-38999IGIC0%, 3%, 7%, 9.5%, 15%
Ceuta y Melilla51001-51005, 52001-52080IPSIExento IVA

Importante: El régimen fiscal se actualiza automáticamente al cambiar el código postal.


El sistema valida que todos los campos obligatorios estén completos:

Campos obligatorios:

CampoValidaciónEjemplo
Nombre comercialMínimo 2 caracteresMi Empresa
Razón socialMínimo 2 caracteresMi Empresa S.L.
NIF/CIFFormato válido según tipoB12345678 / 12345678Z
EmailFormato email válidocontacto@miempresa.com
DirecciónNo vacíoCalle Mayor, 1
CiudadNo vacíoMadrid
ProvinciaNo vacíoMadrid
Código Postal5 dígitos (00000-52999)28001
PaísCódigo ISO 2 letrasES

FunciónDescripciónDocumentación
Editar NegocioActualiza información del negocio en tres pestañasVer
Eliminar NegocioBorra un negocio (solo si tienes más de uno)Ver
Crear Nuevo NegocioAbre wizard para configurar otro negocioVer

Detalles técnicos
Ver esquema de tablas
TablaColumnas principalesFK
businessesid, name, legal_name, tax_id, email, phone, website, address, city, province, postal_code, country, tax_regime, currency, logo_url, bank_accounts
profilesuser_id, business_typeauth.users
user_businessesuser_id, business_id, roleauth.users, businesses

Campos de configuración fiscal:

CampoTipoDescripción
tax_regimetext’general’ | ‘canarias’ | ‘ceuta_melilla’
fiscal_regimetextRégimen fiscal específico
fiscal_territory_codetextCódigo de territorio fiscal
default_irpf_percentagenumeric7 o 15 (solo autónomos)
is_professional_freelancerbooleanSi es autónomo profesional
Ver políticas de seguridad
PolíticaRegla
businesses_business_isolationSolo acceso a negocios del usuario autenticado
profiles_own_profileSolo lectura/escritura del propio perfil
user_businesses_own_businessesSolo acceso a relaciones del usuario
Ver definiciones de tipos

Business Row:

{
id: string;
name: string; // Nombre comercial
legal_name: string; // Razón social
tax_id: string; // NIF/CIF
email: string;
phone: string | null;
website: string | null;
address: string;
city: string;
province: string;
postal_code: string;
country: string; // Default: 'ES'
currency: string; // Default: 'EUR'
tax_regime: string | null; // 'general' | 'canarias' | 'ceuta_melilla'
fiscal_regime: string | null;
fiscal_territory_code: string | null;
default_irpf_percentage: number | null; // 7 o 15
is_professional_freelancer: boolean | null;
logo_url: string | null;
bank_accounts: Json | null;
invoice_series: string | null;
invoice_start_number: number | null;
invoice_style: string | null;
created_at: string | null;
updated_at: string | null;
deleted_at: string | null;
}

BusinessUpdateData:

interface BusinessUpdateData {
name: string;
legal_name: string;
tax_id: string;
email: string;
phone?: string;
website?: string;
address: string;
city: string;
province: string;
postal_code: string;
country: string;
currency: string;
tax_regime?: string;
fiscal_regime?: string;
is_professional_freelancer?: boolean;
default_irpf_percentage?: number;
logo_url?: string;
bank_accounts?: any[];
}
Ver funciones de validación

Validadores en src/utils/validators.ts:

FunciónValidaciónRetorno
validatePersonalNif(value)NIF personal con letra válida{ valid: boolean, message: string }
validateBusinessCif(value)CIF empresarial con dígito de control{ valid: boolean, message: string }
validateEmail(value)Formato email RFC 5322{ valid: boolean, message: string }
validatePhone(value)Teléfono español 9 dígitos{ valid: boolean, message: string }

Validación de código postal:

// Regex: ^[0-5][0-9]{4}$
// Rango: 00000-52999
Ver hooks de React

useBusinessUpdate:

src/features/_shared/hooks/useBusinessUpdate.ts
const { updateBusiness, isUpdating } = useBusinessUpdate();
// Actualiza el negocio y refresca el contexto de autenticación
await updateBusiness(data: BusinessUpdateData);

useBusinessTerritory:

src/features/_shared/hooks/useBusinessTerritory.ts
const { territory, territoryName, taxRatesDescription } =
useBusinessTerritory(postalCode: string, country: string);
// Detecta automáticamente el territorio fiscal desde código postal

useTaxIdValidation:

src/features/onboarding/hooks/useTaxIdValidation.ts
const { checkTaxIdExists, isChecking } = useTaxIdValidation();
// Verifica unicidad del NIF/CIF
const { exists } = await checkTaxIdExists(taxId: string, excludeBusinessId?: string);
Ver componentes React
ComponenteUbicaciónDescripción
BusinessManagersrc/features/_shared/components/business/BusinessManager.tsxComponente principal que muestra la información del negocio
BusinessEditSheetsrc/features/_shared/components/business/BusinessEditSheet.tsxSheet modal con formulario de edición en 3 pestañas
NewBusinessFormSheetsrc/features/_shared/components/business/NewBusinessFormSheet.tsxWizard de creación de nuevo negocio
DeleteBusinessDialogsrc/features/_shared/components/business/DeleteBusinessDialog.tsxDiálogo de confirmación para eliminar negocio
Ver queries SQL útiles

Negocio completo con tipo de usuario:

SELECT
b.*,
p.business_type,
ub.role
FROM businesses b
JOIN user_businesses ub ON b.id = ub.business_id
JOIN profiles p ON ub.user_id = p.user_id
WHERE b.id = '<business_id>'
AND ub.role = 'owner';

Verificar unicidad de NIF/CIF:

SELECT id, name, tax_id, deleted_at
FROM businesses
WHERE tax_id = '<tax_id>'
AND deleted_at IS NULL;

Negocios de un usuario con roles:

SELECT
b.id,
b.name,
b.legal_name,
b.tax_id,
ub.role
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
ORDER BY b.created_at DESC;

Detectar territorio fiscal desde código postal:

SELECT
code,
name,
default_vat_rate,
reduced_vat_rate,
super_reduced_vat_rate
FROM fiscal_territories
WHERE '<postal_code>' BETWEEN postal_code_start AND postal_code_end;

ErrorCausaSolución
”El NIF/CIF ya está registrado”Tax ID duplicado en otro negocioUsa otro NIF/CIF o contacta soporte
”Código postal inválido”No cumple formato 00000-52999Introduce 5 dígitos válidos
”Email inválido”Formato incorrectoUsa formato nombre@dominio.com
”Teléfono debe ser 9 dígitos”Longitud incorrectaIntroduce exactamente 9 dígitos
”Acceso restringido”Usuario no es ownerSolo propietarios pueden editar