Crear Proveedor
Exportar contenido
Crea un nuevo proveedor con información completa organizada en pestañas.
- Clic en “Nuevo Proveedor” — se abre el formulario lateral (sheet).
- Completa la pestaña “General” con nombre, razón social y CIF/NIF.
- (Opcional) Completa “Contacto” con email, teléfono y web.
- (Opcional) Completa “Dirección” con domicilio fiscal — puedes usar búsqueda de Google Places.
- (Opcional) Completa “Configuración” con categoría por defecto, IVA y plazo de pago.
- Clic en “Guardar” — el proveedor se crea y aparece en la lista.
Campos por pestaña
Sección titulada «Campos por pestaña»Pestaña General
Sección titulada «Pestaña General»| Campo | Obligatorio | Descripcion | Ejemplo |
|---|---|---|---|
| Nombre comercial | Sí | Nombre con el que identificas al proveedor | Mercadona |
| Razón social | No | Nombre legal de la empresa | Mercadona, S.A. |
| CIF/NIF | No | Identificación fiscal (validación automática) | A46103834 |
| Estado | Sí | Activo/Inactivo (por defecto: Activo) | Activo |
| Notas | No | Información adicional | Proveedor de alimentación |
Pestaña Contacto
Sección titulada «Pestaña Contacto»| Campo | Descripcion | Validación | Ejemplo |
|---|---|---|---|
| Correo de contacto | Formato email válido | compras@mercadona.es | |
| Teléfono | Número de teléfono | Formato español +34 | +34 900 500 100 |
| Sitio Web | Página web | URL válida | https://www.mercadona.es |
Pestaña Dirección
Sección titulada «Pestaña Dirección»| Campo | Descripcion |
|---|---|
| Búsqueda | Autocompletado con Google Places API |
| Dirección | Calle y número |
| Ciudad | Población |
| Código Postal | CP |
| Provincia | Provincia |
| País | Por defecto: España |
Pestaña Configuración
Sección titulada «Pestaña Configuración»| Campo | Descripcion | Opciones | Por defecto |
|---|---|---|---|
| Categoría por defecto | Auto-rellena en gastos | 13 categorías de gastos | — |
| IVA por defecto | Auto-rellena en gastos | 0%, 4%, 10%, 21% | 21% |
| Plazo de pago | Días para pagar facturas | Contado, 15, 30, 45, 60, 90 días | 30 días |
Validaciones
Sección titulada «Validaciones»| Campo | Regla | Mensaje de error |
|---|---|---|
| Nombre comercial | No vacío | ”El nombre es obligatorio” |
| CIF/NIF | Formato español válido | ”CIF/NIF inválido” |
| Formato email válido | ”Email inválido” | |
| Teléfono | Formato español/internacional | ”Teléfono inválido” |
Cómo sé que lo hice bien
Sección titulada «Cómo sé que lo hice bien»- El proveedor aparece en la lista principal.
- Toast de confirmación: ”✅ Proveedor creado”.
- Badge verde “Activo” si está activado.
- Puedes seleccionarlo al crear gastos.
Errores comunes
Sección titulada «Errores comunes»| Mensaje | Causa | Solución |
|---|---|---|
| ”El nombre es obligatorio” | Campo vacío | Escribe el nombre del proveedor |
| ”CIF/NIF inválido” | Formato incorrecto | Verifica el formato (ej: A12345678) |
| “Email inválido” | Formato incorrecto | Usa formato: usuario@dominio.com |
| ”Ya existe un proveedor con ese CIF” | CIF duplicado | Usa el proveedor existente |
Detalles técnicos — Crear Proveedor
Detalles técnicos
Componente: VendorFormSheet.tsx
Hook de creación: useCreateVendor() en src/features/vendors/hooks/useVendors.ts
Validaciones en cliente:
| Código | Regla |
|---|---|
| VAL-01 | name NOT NULL AND length >= 1 |
| VAL-02 | tax_id matches Spanish CIF/NIF pattern (opcional) |
| VAL-03 | email matches RFC 5322 format (opcional) |
| VAL-04 | phone matches Spanish phone pattern (opcional) |
| VAL-05 | default_tax_rate IN (0, 4, 10, 21) |
| VAL-06 | payment_terms >= 0 |
Schema de validación:
- CIF/NIF:
src/utils/validators.ts→validateSpanishTaxId() - Email:
src/utils/validators.ts→validateEmail() - Phone:
src/utils/validators.ts→validatePhone()
Tabla: vendors
Estructura de insert:
INSERT INTO vendors ( business_id, user_id, name, legal_name, tax_id, email, phone, website, address, city, postal_code, province, country, default_category, default_tax_rate, payment_terms, notes, is_active) VALUES (...);Adapter: src/features/vendors/api/vendor-adapter.ts → create()
Query de diagnóstico:
SELECT * FROM vendorsWHERE business_id = '<business_id>' AND name ILIKE '%<search>%'ORDER BY created_at DESCLIMIT 1;