Gestión de Productos
Sincroniza tu catálogo de productos, precios y configuración fiscal para asegurar que la emisión de DTE sea fluida y sin errores de cálculo.
POST
/external/products Validación de Negocio
name / product_type (service/phisical)
price_before_taxes / cost / margin
availability / limit_availability
composition_type (simple/portions/recipe)
tax_method (is_taxed/exent/not_subject)
Parámetros Completos
| Campo | Tipo | Descripción |
|---|---|---|
| name | String | Nombre comercial del producto. |
| sku | String | Identificador único (Código de barra o interno). |
| product_type | String | Naturaleza: `phisical, service`. |
| composition_type | String | Estructura: `simple, portions, recipe`. |
| price_before_taxes | Number | Precio base SIN impuestos. |
| cost | Number | Costo de adquisición. |
| margin | Number | Porcentaje de ganancia deseado. |
| availability | Number | Stock inicial disponible. |
| tax_method | String | Fiscalidad: `is_taxed, exent, not_subject`. |
| product_category_id | UUID | ID de la categoría del producto. |
| product_measurement_id | UUID | ID de la unidad de medida (MH). |
| branch_id | UUID | Sucursal a la que se asigna. |
| base_unit_quantity | Number | Cantidad total de unidades base (Para porciones). |
| portions | Array | Lista de porciones con `name, unit_quantity, price`. |
Cálculo de Margen
El sistema utiliza la fórmula: Precio = Costo / (1 - Margen).
GET
/external/products/branch/{id}
Soporta paginación mediante query params ?page=1&per_page=20.
HTTP 200
{
"name": "Producto Premium",
"sku": "SKU-001",
"product_type": "phisical",
"composition_type": "simple",
"price_before_taxes": 100.00,
"cost": 60.00,
"margin": 40.0,
"availability": 100,
"tax_method": "is_taxed",
"product_category_id": "uuid-cat",
"product_measurement_id": "uuid-med",
"branch_id": "uuid-suc",
"prices": [
{ "price_list_id": "uuid-list-1", "price": 95.00 }
]
} Respuesta Paginada
{
"success": true,
"data": {
"data": [...],
"pagination": {
"current_page": 1,
"total": 100
}
}
} HTTP 401
{ "error": "Unathorized" }
HTTP 500
{ "error": "Server error" }