Saltar al contenido principal

API de Gestión de Tiendas

La API de Gestión de Tiendas permite administrar la información de las tiendas en la plataforma Nilo. Estos endpoints ayudan a crear, actualizar y recuperar datos de las tiendas, incluyendo detalles de la tienda, usuarios, información de crédito y configuraciones.

Entendiendo las Tiendas

Las tiendas en Nilo representan los puntos de venta que pueden realizar pedidos:

  • Estructura de la Tienda

    • Código interno único (coincide con ERP)
    • Información del propietario y legal
    • Datos de dirección y ubicación
    • Asociaciones de usuarios (vía teléfono o email)
    • Estado de crédito y pagos
    • Configuraciones y ajustes
    • Asociaciones de grupo (listas de precios, stock, promociones)
  • Jerarquía de la Tienda

    • Entidades independientes con identificadores únicos
    • Pueden tener múltiples usuarios asociados
    • Mantienen su propio estado de crédito
    • Pueden pertenecer a diferentes agrupadores
    • Soportan operaciones por lotes para actualizaciones

Consideraciones Importantes

  1. Códigos Únicos: Cada tienda requiere un código interno único que coincida con su sistema ERP
  2. Gestión de Usuarios: Los usuarios se asocian vía número de teléfono (con código de país) o email
  3. Sistema de Crédito: Las tiendas tienen límites de crédito y seguimiento del estado de pagos
  4. Datos de Ubicación: Las tiendas requieren información precisa de dirección y geolocalización
  5. Múltiples Agrupadores: Las tiendas pueden pertenecer a múltiples agrupadores de promoción si está configurado
  6. Operaciones por Lotes: Soporte para actualizar eficientemente múltiples tiendas

Operaciones Individuales de Tienda

Crear Tienda

POST/store

Crear una nueva tienda en la plataforma Nilo. Este endpoint se utiliza para registrar todos los detalles de la tienda incluyendo:

  • Información de la tienda (nombre del propietario, detalles legales)
  • Datos de dirección y ubicación
  • Información de contacto
  • Asociaciones de grupo

Parámetros del Cuerpo de la Solicitud

ParámetroTipoRequeridoDescripción
namestringNombre de la tienda
internalCodestringCódigo interno que coincide con el ERP
addressesarrayLista de direcciones de la tienda
legalNamestringNombre legal del negocio
legalIdstringIdentificador legal del negocio (CUIT/RUT)
promotionGrouperCodestringNoCódigo del grupo de promociones
stockGrouperCodestringNoCódigo del grupo de stock
pricelistCodestringNoCódigo de la lista de precios
enabledbooleanNoEstado de habilitación de la tienda
creditLimitnumberNoLímite de crédito de la tienda

Parámetros de Dirección

ParámetroTipoRequeridoDescripción
addressstringDirección completa
zipCodestringCódigo postal
latitudenumberNoLatitud de la ubicación
longitudenumberNoLongitud de la ubicación

Ejemplo del Cuerpo de la Solicitud

{
"ownerName": "Owner name",
"ownerIdentifier": "Owner identifier",
"internalCode": "1234",
"addresses": [
{
"internalCode": "1234",
"addressLine": "25 de mayo 1200, Buenos aires, Argentina",
"apartmentNumber": "2",
"zipCode": "2400"
}
],
"latitude": "-34.545278°",
"longitude": "-58.449722",
"addressFormat": "Av. Pres. Figueroa Alcorta 7597, C1428 Cdad. Autónoma de Buenos Aires",
"legalName": "legal name",
"legalId": "legal id",
"supportContactEmail": "string",
"supportContactPhone": "string",
"promotionGrouperCode": "1234",
"stockGrouperCode": "6789",
"pricelistCode": "1222",
"routeCode": "1234",
"settings": {
"dropSize": {
"amount": 1000,
"currency": "USD"
}
}
}

Ejemplo de Uso

const headers = {
Authorization: "TU_TOKEN_DE_AUTH",
"x-api-key": "TU_API_KEY",
"Content-Type": "application/json",
};

const data = {
name: "Nombre del Propietario",
internalCode: "1234",
addresses: [
{
address: "25 de mayo 1200, Buenos Aires, Argentina",
zipCode: "2400",
latitude: -34.545278,
longitude: -58.449722,
},
],
legalName: "Nombre Legal",
legalId: "ID Legal",
promotionGrouperCode: "1234",
stockGrouperCode: "6789",
pricelistCode: "1222",
enabled: true,
creditLimit: 50000,
};

fetch("https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/store", {
method: "POST",
headers: headers,
body: JSON.stringify(data),
})
.then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));

Obtener Todas las Tiendas

GET/store

Recuperar una lista paginada de todas las tiendas. Este endpoint es útil para:

  • Navegar por el catálogo de tiendas
  • Implementar paginación
  • Filtrar tiendas por estado habilitado

Parámetros de Consulta

ParámetroTipoRequeridoDescripción
takenumberNoNúmero de elementos por página (default: 50, max: 50)
pagestringNoNúmero de página (default: 1)
enabledbooleanNoFiltrar por estado habilitado

Ejemplo de Uso

const headers = {
Authorization: "TU_TOKEN_DE_AUTH",
"x-api-key": "TU_API_KEY",
};

fetch(
"https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/store?take=10&page=1&enabled=true",
{
method: "GET",
headers: headers,
}
)
.then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));

Obtener Detalles de Tienda

GET/store/{code}

Recuperar información detallada sobre una tienda específica. Este endpoint devuelve:

  • Metadatos de la tienda
  • Información de dirección
  • Asociaciones de usuarios
  • Estado de crédito
  • Asociaciones de grupo

Parámetros de Ruta

ParámetroTipoRequeridoDescripción
codestringCódigo interno de la tienda (coincide con ERP)

Ejemplo de Uso

const headers = {
Authorization: "TU_TOKEN_DE_AUTH",
"x-api-key": "TU_API_KEY",
};

fetch("https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/store/1234", {
method: "GET",
headers: headers,
})
.then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));

Actualizar Tienda

PUT/store/{code}

Actualizar la información de una tienda existente. Este endpoint permite:

  • Modificar detalles de la tienda
  • Actualizar información de dirección
  • Cambiar asociaciones de grupo
  • Ajustar configuraciones

Parámetros de Ruta

ParámetroTipoRequeridoDescripción
codestringCódigo interno de la tienda (coincide con ERP)

Ejemplo del Cuerpo de la Solicitud para Actualización

{
"ownerName": "Owner name",
"ownerIdentifier": "Owner identifier",
"addresses": [
{
"internalCode": "1234",
"addressLine": "25 de mayo 1200, Buenos aires, Argentina",
"apartmentNumber": "2",
"zipCode": "2400"
}
],
"latitude": "-34.545278°",
"longitude": "-58.449722",
"addressFormat": "Av. Pres. Figueroa Alcorta 7597, C1428 Cdad. Autónoma de Buenos Aires",
"legalName": "legal name",
"legalId": "legal id",
"enabled": true,
"supportContactEmail": "string",
"supportContactPhone": "string",
"promotionGrouperCode": "1234",
"stockGrouperCode": "6789",
"pricelistCode": "1222",
"routeCode": "1234",
"latePayer": true,
"settings": {
"dropSize": {
"amount": 1000,
"currency": "USD"
}
}
}

Ejemplo de Uso

const headers = {
Authorization: "TU_TOKEN_DE_AUTH",
"x-api-key": "TU_API_KEY",
"Content-Type": "application/json",
};

const data = {
name: "Nombre del Propietario Actualizado",
addresses: [
{
address: "Nueva Dirección",
zipCode: "2401",
},
],
legalName: "Nuevo Nombre Legal",
promotionGrouperCode: "5678",
};

fetch("https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/store/1234", {
method: "PUT",
headers: headers,
body: JSON.stringify(data),
})
.then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));

Cambiar Estado de Tienda

PUT/store/{code}/status

Habilitar o deshabilitar una tienda. Este endpoint permite:

  • Controlar la visibilidad de la tienda
  • Gestionar el acceso a la tienda
  • Actualizar el estado operativo

Parámetros de Ruta

ParámetroTipoRequeridoDescripción
codestringCódigo interno de la tienda (coincide con ERP)

Parámetros del Cuerpo de la Solicitud

ParámetroTipoRequeridoDescripción
enabledbooleanSi la tienda debe estar habilitada

Ejemplo del Cuerpo de la Solicitud

{
"enabled": true
}

Ejemplo de Uso

const headers = {
Authorization: "TU_TOKEN_DE_AUTH",
"x-api-key": "TU_API_KEY",
"Content-Type": "application/json",
};

const data = {
enabled: true,
};

fetch(
"https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/store/1234/status",
{
method: "PUT",
headers: headers,
body: JSON.stringify(data),
}
)
.then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));

Gestión de Usuarios de Tienda

Agregar Usuarios

PUT/store/{code}/add/user

Agregar usuarios a una tienda. Este endpoint permite:

  • Asociar nuevos usuarios con la tienda
  • Configurar acceso de usuarios
  • Gestionar personal de la tienda

Parámetros de Ruta

ParámetroTipoRequeridoDescripción
codestringCódigo interno de la tienda (coincide con ERP)

Parámetros del Cuerpo de la Solicitud

ParámetroTipoRequeridoDescripción
usersarrayArray de IDs de usuario a agregar

Ejemplo del Cuerpo de la Solicitud

{
"users": ["usuario123", "usuario456"]
}

Ejemplo de Uso

const headers = {
Authorization: "TU_TOKEN_DE_AUTH",
"x-api-key": "TU_API_KEY",
"Content-Type": "application/json",
};

const data = {
users: ["usuario123", "usuario456"],
};

fetch(
"https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/store/1234/add/user",
{
method: "PUT",
headers: headers,
body: JSON.stringify(data),
}
)
.then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));

Eliminar Usuarios

PUT/store/{code}/remove/user

Eliminar usuarios de una tienda. Este endpoint permite:

  • Eliminar asociaciones de usuarios
  • Gestionar control de acceso
  • Actualizar personal de la tienda

Parámetros de Ruta

ParámetroTipoRequeridoDescripción
codestringCódigo interno de la tienda (coincide con ERP)

Parámetros del Cuerpo de la Solicitud

ParámetroTipoRequeridoDescripción
usersarrayArray de IDs de usuario a eliminar

Ejemplo del Cuerpo de la Solicitud

{
"users": ["usuario123", "usuario456"]
}

Ejemplo de Uso

const headers = {
Authorization: "TU_TOKEN_DE_AUTH",
"x-api-key": "TU_API_KEY",
"Content-Type": "application/json",
};

const data = {
users: ["usuario123", "usuario456"],
};

fetch(
"https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/store/1234/remove/user",
{
method: "PUT",
headers: headers,
body: JSON.stringify(data),
}
)
.then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));

Gestión de Crédito de Tienda

POST/store/{code}/credit

Actualizar información de crédito de la tienda. Este endpoint permite:

  • Establecer límites de crédito
  • Gestionar disponibilidad de crédito
  • Actualizar términos de pago

Parámetros de Ruta

ParámetroTipoRequeridoDescripción
codestringCódigo interno de la tienda (coincide con ERP)

Parámetros del Cuerpo de la Solicitud

ParámetroTipoRequeridoDescripción
amountnumberMonto de crédito para la tienda

Ejemplo del Cuerpo de la Solicitud

{
"amount": 5000
}

Ejemplo de Uso

const headers = {
Authorization: "TU_TOKEN_DE_AUTH",
"x-api-key": "TU_API_KEY",
"Content-Type": "application/json",
};

const data = {
amount: 5000,
};

fetch(
"https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/store/1234/credit",
{
method: "POST",
headers: headers,
body: JSON.stringify(data),
}
)
.then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));

Gestión de Estado de Pago

Marcar como Moroso

POST/store/{code}/debtor

Marcar una tienda como morosa. Cuando una tienda se marca como morosa:

  • Se bloquean nuevos pedidos
  • Se restringe el acceso al crédito
  • Se actualiza el estado de pago

Parámetros de Ruta

ParámetroTipoRequeridoDescripción
codestringCódigo interno de la tienda (coincide con ERP)

Ejemplo de Uso

const headers = {
Authorization: "TU_TOKEN_DE_AUTH",
"x-api-key": "TU_API_KEY",
};

fetch(
"https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/store/1234/debtor",
{
method: "POST",
headers: headers,
}
)
.then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));

Marcar como Pagador Tardío

POST/store/{code}/latepayer

Marcar una tienda como pagador tardío. Este estado significa:

  • La tienda puede realizar nuevos pedidos
  • El acceso al crédito está restringido
  • Se monitorea el estado de pago

Parámetros de Ruta

ParámetroTipoRequeridoDescripción
codestringCódigo interno de la tienda (coincide con ERP)

Ejemplo de Uso

const headers = {
Authorization: "TU_TOKEN_DE_AUTH",
"x-api-key": "TU_API_KEY",
};

fetch(
"https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/store/1234/latepayer",
{
method: "POST",
headers: headers,
}
)
.then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));

Operaciones por Lotes

Actualizar Configuraciones de Tienda

POST/batch/store/setting

Actualizar configuraciones para múltiples tiendas simultáneamente. Este endpoint es útil para:

  • Actualizaciones de configuración masivas
  • Estandarizar configuraciones de tienda
  • Gestión eficiente de tiendas

Parámetros del Cuerpo de la Solicitud

ParámetroTipoRequeridoDescripción
storesarrayArray de configuraciones de tienda a actualizar

Ejemplo del Cuerpo de la Solicitud para Batch Store Settings

{
"stores": [
{
"storeCode": "1234",
"settings": {
"credit": 5000,
"debtor": false,
"latePayer": false,
"allowPartialDelivery": true,
"minimumOrderAmount": 1000
}
},
{
"storeCode": "5678",
"settings": {
"credit": 10000,
"debtor": true,
"latePayer": true,
"allowPartialDelivery": false,
"minimumOrderAmount": 2000
}
}
]
}

Ejemplo de Uso

const headers = {
Authorization: "TU_TOKEN_DE_AUTH",
"x-api-key": "TU_API_KEY",
"Content-Type": "application/json",
};

const data = {
stores: [
{
storeCode: "1234",
settings: {
credit: 5000,
debtor: false,
latePayer: false,
allowPartialDelivery: true,
minimumOrderAmount: 1000,
},
},
{
storeCode: "5678",
settings: {
credit: 10000,
debtor: true,
latePayer: true,
allowPartialDelivery: false,
minimumOrderAmount: 2000,
},
},
],
};

fetch(
"https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/batch/store/setting",
{
method: "POST",
headers: headers,
body: JSON.stringify(data),
}
)
.then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));

Actualizaciones por Lotes de Tienda

POST/batch/store

Realizar actualizaciones en múltiples tiendas simultáneamente. Este endpoint permite:

  • Crear múltiples tiendas
  • Actualizar tiendas existentes
  • Insertar/actualizar datos de tienda

Parámetros del Cuerpo de la Solicitud

ParámetroTipoRequeridoDescripción
upsertarrayNoArray de tiendas para crear o actualizar
removearrayNoArray de códigos de tienda para eliminar

Ejemplo del Cuerpo de la Solicitud para Batch Store

{
"create": [
{
"ownerName": "Owner name",
"ownerIdentifier": "Owner identifier",
"internalCode": "1234",
"addresses": [
{
"internalCode": "1234",
"addressLine": "25 de mayo 1200, Buenos aires, Argentina",
"apartmentNumber": "2",
"zipCode": "2400"
}
],
"latitude": "-34.545278°",
"longitude": "-58.449722",
"addressFormat": "Av. Pres. Figueroa Alcorta 7597, C1428 Cdad. Autónoma de Buenos Aires",
"legalName": "legal name",
"legalId": "legal id",
"supportContactEmail": "string",
"supportContactPhone": "string",
"promotionGrouperCode": "1234",
"stockGrouperCode": "6789",
"pricelistCode": "1222",
"routeCode": "1234",
"settings": {
"dropSize": {
"amount": 1000,
"currency": "USD"
}
}
}
],
"update": [
{
"ownerName": "Owner name updated",
"ownerIdentifier": "Owner identifier updated",
"internalCode": "5678",
"addresses": [
{
"internalCode": "5678",
"addressLine": "Nueva dirección",
"apartmentNumber": "3",
"zipCode": "2401"
}
],
"latitude": "-34.545278°",
"longitude": "-58.449722",
"addressFormat": "Nueva dirección completa",
"legalName": "nuevo nombre legal",
"legalId": "nuevo id legal",
"enabled": true,
"supportContactEmail": "nuevo@email.com",
"supportContactPhone": "1234567890",
"promotionGrouperCode": "PROMO2",
"stockGrouperCode": "STOCK2",
"pricelistCode": "PRICE2",
"routeCode": "ROUTE2",
"latePayer": true,
"settings": {
"dropSize": {
"amount": 2000,
"currency": "USD"
}
}
}
],
"upsert": [
{
"internalCode": "9012",
"ownerName": "Owner name upsert",
"ownerIdentifier": "Owner identifier upsert",
"addresses": [
{
"internalCode": "9012",
"addressLine": "Dirección upsert",
"apartmentNumber": "4",
"zipCode": "2402"
}
],
"latitude": "-34.545278°",
"longitude": "-58.449722",
"addressFormat": "Dirección completa upsert",
"legalName": "nombre legal upsert",
"legalId": "id legal upsert",
"enabled": true,
"supportContactEmail": "upsert@email.com",
"supportContactPhone": "0987654321",
"promotionGrouperCode": "PROMO3",
"stockGrouperCode": "STOCK3",
"pricelistCode": "PRICE3",
"routeCode": "ROUTE3",
"latePayer": false,
"settings": {
"dropSize": {
"amount": 3000,
"currency": "USD"
}
}
}
]
}

Ejemplo de Uso

const headers = {
Authorization: "TU_TOKEN_DE_AUTH",
"x-api-key": "TU_API_KEY",
"Content-Type": "application/json",
};

const data = {
create: [
{
ownerName: "Owner name",
ownerIdentifier: "Owner identifier",
internalCode: "1234",
addresses: [
{
internalCode: "1234",
addressLine: "25 de mayo 1200, Buenos aires, Argentina",
apartmentNumber: "2",
zipCode: "2400",
},
],
latitude: "-34.545278°",
longitude: "-58.449722",
addressFormat:
"Av. Pres. Figueroa Alcorta 7597, C1428 Cdad. Autónoma de Buenos Aires",
legalName: "legal name",
legalId: "legal id",
supportContactEmail: "string",
supportContactPhone: "string",
promotionGrouperCode: "1234",
stockGrouperCode: "6789",
pricelistCode: "1222",
routeCode: "1234",
settings: {
dropSize: {
amount: 1000,
currency: "USD",
},
},
},
],
update: [
{
ownerName: "Owner name updated",
ownerIdentifier: "Owner identifier updated",
internalCode: "5678",
addresses: [
{
internalCode: "5678",
addressLine: "Nueva dirección",
apartmentNumber: "3",
zipCode: "2401",
},
],
latitude: "-34.545278°",
longitude: "-58.449722",
addressFormat: "Nueva dirección completa",
legalName: "nuevo nombre legal",
legalId: "nuevo id legal",
enabled: true,
supportContactEmail: "nuevo@email.com",
supportContactPhone: "1234567890",
promotionGrouperCode: "PROMO2",
stockGrouperCode: "STOCK2",
pricelistCode: "PRICE2",
routeCode: "ROUTE2",
latePayer: true,
settings: {
dropSize: {
amount: 2000,
currency: "USD",
},
},
},
],
upsert: [
{
internalCode: "9012",
ownerName: "Owner name upsert",
ownerIdentifier: "Owner identifier upsert",
addresses: [
{
internalCode: "9012",
addressLine: "Dirección upsert",
apartmentNumber: "4",
zipCode: "2402",
},
],
latitude: "-34.545278°",
longitude: "-58.449722",
addressFormat: "Dirección completa upsert",
legalName: "nombre legal upsert",
legalId: "id legal upsert",
enabled: true,
supportContactEmail: "upsert@email.com",
supportContactPhone: "0987654321",
promotionGrouperCode: "PROMO3",
stockGrouperCode: "STOCK3",
pricelistCode: "PRICE3",
routeCode: "ROUTE3",
latePayer: false,
settings: {
dropSize: {
amount: 3000,
currency: "USD",
},
},
},
],
};

fetch(
"https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/batch/store",
{
method: "POST",
headers: headers,
body: JSON.stringify(data),
}
)
.then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));

Tipos de Respuesta

Respuesta Exitosa

{
"code": 200,
"message": "Operación exitosa",
"data": {
"name": "Nombre de la tienda",
"internalCode": "1234",
"addresses": [
{
"address": "25 de mayo 1200, Buenos Aires, Argentina",
"zipCode": "2400",
"latitude": -34.603722,
"longitude": -58.381592
}
],
"legalName": "Nombre Legal SRL",
"legalId": "30-12345678-9",
"promotionGrouperCode": "PROMO1",
"stockGrouperCode": "STOCK1",
"pricelistCode": "PRICE1",
"enabled": true,
"creditLimit": 50000,
"isDebtor": false,
"isLatePayer": false
}
}

Ejemplos de Respuesta de Error

Tienda No Encontrada

{
"code": 404,
"message": "Tienda no encontrada"
}

Error de Validación

{
"code": 400,
"message": "Datos de tienda inválidos",
"errors": [
{
"field": "internalCode",
"message": "El código interno es requerido"
}
]
}

Mejores Prácticas

  1. Gestión de Tiendas

    • Usar convenciones de nombres consistentes
    • Mantener información precisa de direcciones
    • Implementar gestión adecuada de estados
    • Mantener actualizada la información de la tienda
  2. Gestión de Usuarios

    • Validar información de usuarios
    • Mantener registros de acceso de usuarios
    • Documentar cambios de usuarios
    • Implementar procedimientos de eliminación de usuarios
  3. Gestión de Crédito

    • Monitorear límites de crédito
    • Rastrear historial de pagos
    • Documentar cambios de estado
    • Implementar verificaciones de crédito
  4. Optimización de Rendimiento

    • Usar operaciones por lotes para múltiples actualizaciones
    • Implementar estrategias de caché
    • Monitorear uso de API
    • Optimizar sincronización de datos

Casos de Uso Comunes

  1. Configuración Inicial de Tienda

    • Crear perfil de tienda
    • Configurar acceso de usuarios
    • Establecer límites de crédito
    • Configurar asociaciones de grupos
  2. Mantenimiento de Tienda

    • Actualizar información de tienda
    • Gestionar acceso de usuarios
    • Monitorear estado de crédito
    • Ajustar configuraciones de tienda
  3. Operaciones en Lote

    • Importar múltiples tiendas
    • Actualizar configuraciones de tienda
    • Modificar asociaciones de grupos
    • Sincronizar datos de tienda
  4. Gestión de Crédito

    • Monitorear estado de pagos
    • Actualizar límites de crédito
    • Manejar morosos
    • Procesar cambios de crédito

Guías de Implementación

  1. Creación de Tienda

    • Validar campos requeridos
    • Verificar códigos duplicados
    • Procesar datos de dirección
    • Configurar ajustes iniciales
  2. Gestión de Usuarios

    • Validar credenciales de usuario
    • Manejar permisos de usuario
    • Gestionar asociaciones de usuario
    • Rastrear actividades de usuario
  3. Manejo de Crédito

    • Implementar verificaciones de crédito
    • Procesar estado de pago
    • Manejar actualizaciones de crédito
    • Monitorear uso de crédito
  4. Procesamiento por Lotes

    • Validar datos por lotes
    • Manejar fallos parciales
    • Implementar rollback
    • Reportar resultados de lotes

Seguridad

Todos los endpoints de la API requieren dos tipos de autenticación:

  1. API Key en el encabezado: x-api-key
  2. Token de autorización en el encabezado: Authorization

Permisos Requeridos

Para los endpoints de gestión de tiendas, se requieren los siguientes permisos:

  • Para operaciones de lectura: supplier/store.read
  • Para operaciones de escritura: supplier/store.write
  • Para operaciones por lotes: supplier/store.bulkwrite
  • Para operaciones de crédito: supplier/credit.write

Manejo de Errores

  1. Validación de Entrada

    • Validar códigos de tienda
    • Verificar datos de dirección
    • Comprobar información de usuario
    • Validar datos de crédito
  2. Respuestas de Error

    • Usar códigos HTTP apropiados
    • Proporcionar mensajes claros
    • Incluir errores a nivel de campo
    • Agregar seguimiento de errores
  3. Procedimientos de Recuperación

    • Manejar fallos de red
    • Implementar reintentos
    • Mantener consistencia de datos
    • Registrar detalles de errores
  4. Monitoreo

    • Rastrear tasas de error
    • Monitorear rendimiento de API
    • Alertar sobre errores críticos
    • Analizar patrones de error