Saltar al contenido principal

Empresas y sucursales

Archivo: api/src/routes/admin.js (router companies) · Prefijo: /api/companies

Una empresa es el cliente B2B (identificado por NIT). Una sucursal es un punto de entrega de esa empresa y define la ruta y el asesor.

Objeto Company​

{
"id": "…",
"name": "Ferretería Norte",
"nit": "900123456-7",
"email": "contacto@ferreteria-norte.com",
"phone": "601-234-5678",
"address": "Cra 7 # 15-30, Bogotá",
"active": true,
"branches": [
{
"id": "…",
"name": "Sede Principal",
"address": "Cra 7 # 15-30",
"city": "Bogotá",
"routeId": "…",
"advisorId": "…",
"active": true,
"latitude": 4.6097,
"longitude": -74.0817
}
]
}

GET /api/companies​

Lista todas las empresas con sus sucursales.

Acceso: Autenticado · Respuesta 200: { "items": [ Company ] }


POST /api/companies​

Crea una empresa. Es público para permitir el auto-registro desde la pantalla de login.

Acceso: Público

Body

CampoTipoRequeridoPor defecto
namestringSí
nitstringSí (único)
emailemailNo
phonestringNo
addressstringNo
activebooleanNotrue

Respuesta 201: { "id": "<uuid>" }

Efecto secundario: envía al administrador un correo "Nuevo registro: Empresa" (si ADMIN_NOTIFICATION_EMAIL está configurado).

Errores: 409 DUPLICATE_NIT si ya existe una empresa con ese NIT.


PUT /api/companies/:id​

Acceso: admin. Mismos campos, opcionales (COALESCE: null no borra).

Respuesta 200: { "id": "<uuid>" } · Errores: 404 NOT_FOUND.

DELETE /api/companies/:id​

Borra la empresa y, en cascada, sus sucursales. Usuarios y cotizaciones quedan con company_id = NULL.

Acceso: admin · Respuesta 204


POST /api/companies/:id/branches​

Crea una sucursal.

Acceso: Público (auth opcional)

Body

CampoTipoRequeridoNotas
namestringSí
addressstringNo
citystringNo
latitude, longitudenúmero | nullNoCoordenadas (Google Maps)
routeIduuid | nullNoSolo se aplica si quien llama es admin
advisorIduuid | nullNoSolo se aplica si quien llama es admin
activebooleanNoPor defecto true

Respuesta 201: { "id": "<uuid>" }

Efecto secundario: si un admin crea la sucursal con asesor, se envían dos correos: "Nueva empresa asignada" al asesor y "Tu asesor comercial" al email de la empresa.


PUT /api/companies/:id/branches/:branchId​

Actualiza la sucursal. Mismos campos, opcionales.

Acceso: admin

No se puede desasignar con null

La actualización usa COALESCE, así que enviar routeId: null o advisorId: null no quita la ruta ni el asesor.

Efecto secundario: si advisorId cambia a un asesor distinto, se envían los mismos dos correos de asignación.

Respuesta 200: { "id": "<uuid>" } · Errores: 404 NOT_FOUND si la sucursal no pertenece a la empresa.

DELETE /api/companies/:id/branches/:branchId​

Acceso: admin · Respuesta 204


Sincronización con SIIGO​

Las empresas se pueden importar desde SIIGO o exportar hacia SIIGO. Ver SIIGO → Clientes.