Skip to content

Kardex

Los endpoints de kardex permiten consultar el historial de movimientos de inventario de un item específico y exportar esta información en diferentes formatos.

Endpoint: GET /api/v1/items/{code}/kardex

Descripción: Obtiene el historial completo de movimientos de inventario (kardex) de un item específico.

Accept: application/json
Authorization: Bearer {token}
ParámetroTipoRequeridoDescripción
codestringCódigo del item
ParámetroTipoDescripción
date_fromstringFecha de inicio (YYYY-MM-DD)
date_tostringFecha de fin (YYYY-MM-DD)
movement_typestringTipo de movimiento (INCOME, OUTCOME)
pageintegerNúmero de página (por defecto: 1)
per_pageintegerElementos por página (por defecto: 50, máximo: 100)
Terminal window
# Consultar kardex completo
curl -X GET "https://dev-facturacion.e-dinky.test/api/v1/items/PROD-001/kardex" \
-H "Accept: application/json" \
-H "Authorization: Bearer your_token_here"
# Consultar kardex con filtros
curl -X GET "https://dev-facturacion.e-dinky.test/api/v1/items/PROD-001/kardex?date_from=2024-01-01&date_to=2024-01-31&movement_type=INCOME" \
-H "Accept: application/json" \
-H "Authorization: Bearer your_token_here"
# Consultar con paginación
curl -X GET "https://dev-facturacion.e-dinky.test/api/v1/items/PROD-001/kardex?page=2&per_page=25" \
-H "Accept: application/json" \
-H "Authorization: Bearer your_token_here"
{
"message": "Kardex obtenido exitosamente",
"status": "OK",
"payload": {
"item": {
"code": "PROD-001",
"description": "Producto de ejemplo",
"unit": "UND",
"type": "PRODUCT"
},
"current_stock": 125,
"total_movements": 15,
"movements": [
{
"id": "MOV-2024-015",
"date": "2024-01-15T14:30:00Z",
"type": "INCOME",
"quantity": 50,
"unit_cost": 20.00,
"total_cost": 1000.00,
"balance_before": 75,
"balance_after": 125,
"description": "Compra a proveedor ABC",
"reference": "COMP-2024-001",
"document_type": "PURCHASE",
"document_number": "FACT-001-001-000001"
},
{
"id": "MOV-2024-014",
"date": "2024-01-14T10:15:00Z",
"type": "OUTCOME",
"quantity": 10,
"unit_cost": 18.50,
"total_cost": 185.00,
"balance_before": 85,
"balance_after": 75,
"description": "Venta a cliente XYZ",
"reference": "FACT-001-001-000123",
"document_type": "INVOICE",
"document_number": "FACT-001-001-000123"
}
],
"summary": {
"total_income": 500,
"total_outcome": 375,
"net_movement": 125,
"average_cost": 19.25,
"total_value": 2406.25
},
"pagination": {
"current_page": 1,
"per_page": 50,
"total_pages": 1,
"total_items": 15,
"has_next_page": false,
"has_previous_page": false
}
}
}

Endpoint: GET /api/v1/items/{code}/kardex-export

Descripción: Exporta el kardex de un item en formato Excel (.xlsx) o PDF.

Accept: application/json
Authorization: Bearer {token}
ParámetroTipoRequeridoDescripción
codestringCódigo del item
ParámetroTipoRequeridoDescripción
formatstringFormato de exportación (excel, pdf)
date_fromstringNoFecha de inicio (YYYY-MM-DD)
date_tostringNoFecha de fin (YYYY-MM-DD)
movement_typestringNoTipo de movimiento (INCOME, OUTCOME)
include_summarybooleanNoIncluir resumen (por defecto: true)
Terminal window
# Exportar kardex completo en Excel
curl -X GET "https://dev-facturacion.e-dinky.test/api/v1/items/PROD-001/kardex-export?format=excel" \
-H "Accept: application/json" \
-H "Authorization: Bearer your_token_here" \
-o "kardex_PROD-001.xlsx"
# Exportar kardex en PDF con filtros
curl -X GET "https://dev-facturacion.e-dinky.test/api/v1/items/PROD-001/kardex-export?format=pdf&date_from=2024-01-01&date_to=2024-01-31" \
-H "Accept: application/json" \
-H "Authorization: Bearer your_token_here" \
-o "kardex_PROD-001_enero.pdf"
# Exportar solo ingresos en Excel
curl -X GET "https://dev-facturacion.e-dinky.test/api/v1/items/PROD-001/kardex-export?format=excel&movement_type=INCOME" \
-H "Accept: application/json" \
-H "Authorization: Bearer your_token_here" \
-o "ingresos_PROD-001.xlsx"
{
"message": "Kardex exportado exitosamente",
"status": "OK",
"payload": {
"export_id": "EXP-2024-001",
"item_code": "PROD-001",
"format": "excel",
"download_url": "https://dev-facturacion.e-dinky.test/downloads/kardex/EXP-2024-001.xlsx",
"expires_at": "2024-01-16T14:30:00Z",
"file_size": 45678,
"total_movements": 15,
"date_range": {
"from": "2024-01-01",
"to": "2024-01-31"
},
"filters_applied": {
"movement_type": null,
"include_summary": true
}
}
}
{
"message": "Item no encontrado",
"status": "NOT_FOUND",
"error": "El item con código 'PROD-999' no existe"
}
{
"message": "Error de validación",
"status": "UNPROCESSABLE_ENTITY",
"errors": {
"format": [
"El formato debe ser 'excel' o 'pdf'"
],
"date_from": [
"La fecha de inicio debe ser anterior a la fecha de fin"
]
}
}
CódigoDescripción
200Consulta/exportación exitosa
400Error en los parámetros enviados
401Token de autorización inválido
404Item no encontrado
422Error de validación
500Error interno del servidor
Terminal window
curl "https://dev-facturacion.e-dinky.test/api/v1/items/PROD-001/kardex?date_from=2024-01-01&date_to=2024-01-31"
Terminal window
# Solo ingresos
curl "https://dev-facturacion.e-dinky.test/api/v1/items/PROD-001/kardex?movement_type=INCOME"
# Solo salidas
curl "https://dev-facturacion.e-dinky.test/api/v1/items/PROD-001/kardex?movement_type=OUTCOME"
Terminal window
curl "https://dev-facturacion.e-dinky.test/api/v1/items/PROD-001/kardex?date_from=2024-01-01&movement_type=INCOME&per_page=25"
// PHP - Calcular rotación de inventario
function calculateInventoryTurnover($itemCode, $token) {
$kardexService = new KardexService($token);
// Obtener movimientos del último año
$yearAgo = date('Y-m-d', strtotime('-1 year'));
$today = date('Y-m-d');
$kardex = $kardexService->getKardexByDateRange($itemCode, $yearAgo, $today);
$totalOutcome = 0;
$averageStock = 0;
$stockReadings = [];
foreach ($kardex['payload']['movements'] as $movement) {
if ($movement['type'] === 'OUTCOME') {
$totalOutcome += $movement['quantity'];
}
$stockReadings[] = $movement['balance_after'];
}
$averageStock = array_sum($stockReadings) / count($stockReadings);
$turnoverRatio = $averageStock > 0 ? $totalOutcome / $averageStock : 0;
return [
'item_code' => $itemCode,
'period' => '12 months',
'total_outcome' => $totalOutcome,
'average_stock' => round($averageStock, 2),
'turnover_ratio' => round($turnoverRatio, 2),
'days_of_supply' => $turnoverRatio > 0 ? round(365 / $turnoverRatio, 0) : 0
];
}
// JavaScript - Análisis de tendencias de stock
const analyzeTrends = async (itemCode, token) => {
const kardexService = new KardexService(token);
// Obtener kardex de los últimos 6 meses
const sixMonthsAgo = new Date();
sixMonthsAgo.setMonth(sixMonthsAgo.getMonth() - 6);
const kardex = await kardexService.getKardexByDateRange(
itemCode,
sixMonthsAgo.toISOString().split('T')[0],
new Date().toISOString().split('T')[0]
);
const movements = kardex.payload.movements;
const monthlyData = {};
movements.forEach(movement => {
const month = movement.date.substring(0, 7); // YYYY-MM
if (!monthlyData[month]) {
monthlyData[month] = {
income: 0,
outcome: 0,
net: 0,
endStock: 0
};
}
if (movement.type === 'INCOME') {
monthlyData[month].income += movement.quantity;
} else {
monthlyData[month].outcome += movement.quantity;
}
monthlyData[month].net = monthlyData[month].income - monthlyData[month].outcome;
monthlyData[month].endStock = movement.balance_after;
});
// Calcular tendencias
const months = Object.keys(monthlyData).sort();
const stockTrend = months.map(month => monthlyData[month].endStock);
const isIncreasing = stockTrend[stockTrend.length - 1] > stockTrend[0];
const averageMonthlyChange = months.length > 1 ?
(stockTrend[stockTrend.length - 1] - stockTrend[0]) / (months.length - 1) : 0;
return {
itemCode,
period: '6 months',
monthlyData,
trend: {
direction: isIncreasing ? 'increasing' : 'decreasing',
averageMonthlyChange: Math.round(averageMonthlyChange * 100) / 100,
currentStock: stockTrend[stockTrend.length - 1],
initialStock: stockTrend[0]
}
};
};
  • Ventajas: Fácil manipulación, cálculos automáticos, filtros
  • Uso recomendado: Análisis detallado, reportes internos
  • Contenido: Todas las columnas de datos, gráficos opcionales
  • Ventajas: Formato fijo, fácil compartir, profesional
  • Uso recomendado: Reportes oficiales, auditorías
  • Contenido: Resumen ejecutivo, datos tabulares, gráficos
  • Usa rangos de fechas específicos para consultas grandes
  • Filtra por tipo de movimiento cuando sea relevante
  • Implementa paginación para datasets grandes
  • Limita las exportaciones a rangos de fechas razonables
  • Usa formatos apropiados según el uso final
  • Implementa cache para exportaciones frecuentes
  • Calcula métricas clave: rotación, días de suministro
  • Identifica patrones estacionales
  • Monitorea tendencias de stock
  • Los archivos exportados expiran en 24 horas
  • Descarga inmediatamente después de la exportación
  • Implementa manejo de errores para descargas
Terminal window
# Exportar kardex completo para auditoría
curl -X GET "https://dev-facturacion.e-dinky.test/api/v1/items/PROD-001/kardex-export?format=pdf&include_summary=true" \
-H "Authorization: Bearer $TOKEN" \
-o "auditoria_PROD-001.pdf"
Terminal window
# Obtener solo ingresos para análisis de costos
curl -X GET "https://dev-facturacion.e-dinky.test/api/v1/items/PROD-001/kardex?movement_type=INCOME&date_from=2024-01-01" \
-H "Authorization: Bearer $TOKEN"
Terminal window
# Exportar kardex del mes actual
curl -X GET "https://dev-facturacion.e-dinky.test/api/v1/items/PROD-001/kardex-export?format=excel&date_from=2024-01-01&date_to=2024-01-31" \
-H "Authorization: Bearer $TOKEN" \
-o "kardex_enero_2024.xlsx"
Terminal window
# Consultar últimos movimientos
curl -X GET "https://dev-facturacion.e-dinky.test/api/v1/items/PROD-001/kardex?per_page=10" \
-H "Authorization: Bearer $TOKEN"
  • 📊 Datos en tiempo real: El kardex refleja el estado actual del inventario
  • 📅 Historial completo: Se mantiene registro de todos los movimientos
  • 🔒 Datos inmutables: Los movimientos no pueden modificarse una vez registrados
  • 📈 Cálculos automáticos: Los balances se calculan automáticamente
  • Archivos temporales: Las exportaciones expiran en 24 horas
  • 📋 Formatos múltiples: Soporte para Excel y PDF
  • 🔍 Filtros flexibles: Múltiples opciones de filtrado disponibles
  • 📊 Resúmenes incluidos: Estadísticas automáticas en exportaciones