Software de Kardex e Inventarios

Kardex Tauro

El Software de Inventarios Kardex Tauro® está diseñado para administrar eficazmente su Bodega o Almacén y se aprende a manejar en muy corto tiempo.

Kardex Tauro es gratuito para uso no comercial.
No requiere conexión a internet, funciona en Windows

Código Python: kardex PEPS (FIFO) por lotes (descarga gratis)

Código Python: kardex PEPS (FIFO) por lotes (descarga gratis)

Compraste el mismo producto tres veces en el mes y cada vez te costó distinto; vendiste varias veces y al cerrar el mes aparece la pregunta incómoda: ¿cuánto me costó de verdad lo que vendí? El método PEPS (primero en entrar, primero en salir) responde con una regla sencilla: sale primero lo más antiguo, valorado al costo de la compra más vieja que todavía duerme en bodega. Este programa de Python aplica esa regla lote por lote, movimiento por movimiento, y al final escribe la prueba: de qué lote y a qué costo salió cada unidad vendida. Sirve para el dueño de una pyme que quiere entender sus números sin depender de nadie, para el contador que revisa el costo de ventas antes de firmar un estado financiero y para el almacenista que tiene que explicar por qué el inventario final no vale lo mismo según el método que se use. No hace falta saber programar: el archivo se ejecuta tal como viene.

El paquete pesa poco, no usa internet y no instala nada. Trae movimientos de ejemplo, así que puedes ver los resultados en pantalla en menos de un minuto y después cambiar ese archivo por tus propios datos, con las mismas columnas.

⬇ Descargar el código (ZIP)
Qué trae el ZIPArchivoPara qué sirve
El programakardex_peps.pyLa lógica PEPS completa, comentada línea por línea en español
Datos de ejemplodatos/movimientos.csvDiez movimientos de dos productos con compras, ventas, cantidades y costos
Salida esperadasalida_ejemplo.txtLo que el programa imprime, para comparar con lo que ves en tu pantalla
InstruccionesLEEME.mdCómo descomprimir, cómo ejecutar y qué hacer si aparece un error

Qué hace el programa

  1. Lee el archivo datos/movimientos.csv, donde cada fila es un movimiento: producto, fecha, tipo (compra o venta), detalle, cantidad y, cuando es compra, costo unitario.
  2. Abre un lote nuevo por cada compra, con su fecha, su cantidad y su costo. Un lote es simplemente «tantas unidades compradas a este precio».
  3. Cuando llega una venta, va sacando unidades del lote más antiguo. Si ese lote no alcanza, sigue con el siguiente más antiguo, y así hasta cubrir la cantidad vendida.
  4. Suma el costo de cada pedazo consumido, con redondeo a centavos, y con eso obtiene el costo PEPS de esa venta.
  5. Valora el saldo que queda en bodega con los lotes que sobraron: bajo PEPS los que quedan son los más recientes, y por eso el inventario final tiende a parecerse a los precios de hoy.
  6. Imprime el kardex en columnas, imprime el detalle de los lotes consumidos venta por venta y cierra con un resumen por producto.
  7. Comprueba que el saldo cuadre (entradas menos salidas) y guarda dos archivos CSV listos para Excel.

Cómo ejecutarlo

Necesitas Python 3.11 o superior, y nada más: el programa solo usa la biblioteca estándar. Descomprime el ZIP en una carpeta, abre la terminal en esa carpeta y ejecuta el programa:

python kardex_peps.py

En Windows también funciona con doble clic si tienes Python instalado, aunque la ventana se cierra sola al terminar; por eso conviene usar la terminal y ver todo el resultado. No hay que instalar librerías, no hay que registrarse y no se envía ningún dato a internet: todo pasa dentro de tu computador. Si el sistema dice que no encuentra «python», prueba con «py» en Windows o con «python3» en Linux y en Mac.

El código, explicado

Estos son los pedazos que hacen el trabajo. El primero muestra cómo se abre un lote cuando entra mercancía: cada compra agrega un lote nuevo a la lista, con su cantidad y su costo, y deja la fila del kardex con el valor de la entrada ya calculado.

        if movimiento["tipo"] == TIPO_ENTRADA:
            # Entrada: cada compra abre un LOTE nuevo con su cantidad y su costo.
            costo = Decimal(movimiento["costo_unitario"])
            estado["lotes"].append({"fecha": fila["fecha"], "cantidad": cantidad, "costo": costo})
            fila.update(e_cant=cantidad, e_vu=costo, e_val=redondear(cantidad * costo))

El corazón del método está en la venta. El programa mira siempre el primer lote de la lista, que es el más antiguo, y decide: si el lote entero cabe dentro de lo que falta por cubrir, lo consume completo y lo elimina de la lista; si no, toma solo la parte que necesita y deja el resto del lote para la próxima venta. Ese es todo el secreto del PEPS, y explica por qué una misma venta puede quedar valorada con dos costos distintos.

            while pendiente > 0 and estado["lotes"]:
                lote = estado["lotes"][0]
                if lote["cantidad"] <= pendiente:
                    toma = lote["cantidad"]
                    estado["lotes"].pop(0)
                else:
                    toma = pendiente
                    lote["cantidad"] -= toma
                pendiente -= toma
                valor = redondear(toma * lote["costo"])

Con el saldo pasa algo que sorprende a mucha gente: no se valora con un promedio, sino con los lotes que todavía existen. Como PEPS se lleva primero lo viejo, lo que queda es lo nuevo, y por eso el saldo aparece al costo más reciente. Ese detalle es el que hace que el inventario final cambie de valor de un método a otro aunque las unidades sean exactamente las mismas.

        fila["saldo_cant"] = sum((lote["cantidad"] for lote in estado["lotes"]), Decimal("0"))
        # # El saldo se valora con los lotes que QUEDAN: PEPS deja el inventario al costo más reciente
        fila["saldo_val"] = redondear(sum((lote["cantidad"] * lote["costo"] for lote in estado["lotes"]), Decimal("0")))

Y por último, la parte que a mí me parece la más útil para conversar con un contador: el programa imprime, venta por venta, cuántas unidades tomó de cada lote y a qué costo. Cuando una venta se surte de dos lotes, aparecen las dos líneas con sus dos costos, y eso es la prueba documental de cómo se armó el costo de ventas.

        for venta in estado["ventas"]:
            print(f"Salida {venta['fecha']}: {miles(venta['cantidad'])} unidades")
            for consumo in venta["consumos"]:
                print(f"  lote {consumo['fecha_lote']}   {miles(consumo['cantidad']):>10} x {miles(consumo['costo']):>12} = {miles(consumo['valor']):>16}")

Qué vas a ver en pantalla

La impresión empieza con un encabezado, sigue con un cuadro por producto, después el bloque de lotes consumidos y termina con el resumen. Un trozo del encabezado real es este:

================================================================================
  KARDEX PEPS (FIFO) POR LOTES
  Código Python didáctico · Kardex Tauro · kardex-tauro.muisca.co
================================================================================
Movimientos leídos: 10

Producto: Cemento gris 50 kg

El bloque más didáctico es el de lotes consumidos: dice, venta por venta, de qué lote salió cada unidad. Abajo está con los importes planos, tal como los guarda el archivo CSV, para que los puedas copiar a la hoja de cálculo; en la consola los verás con el separador de miles que usa tu idioma. Las seis líneas corresponden a las cuatro ventas del cemento y a las dos del cable:

VentaLote usadoUnidadesCosto unitarioValor
2026-03-052026-03-0290180001620000.00
2026-03-122026-03-021018000180000.00
2026-03-122026-03-091020000200000.00
2026-03-252026-03-0950200001000000.00
2026-03-072026-03-031201200144000.00
2026-03-192026-03-0380120096000.00

La segunda venta de cemento es la que hay que mirar con lupa: pidió 20 unidades, el lote viejo solo tenía 10, así que el programa tomó 10 al costo antiguo y 10 al costo nuevo. Esa mezcla es exactamente lo que pasa en la bodega cuando se acaba el lote anterior.

Por último, el resumen por producto, que sirve para la revisión rápida: suma entradas, salidas y saldo, calcula el costo de ventas PEPS de cada producto y avisa si el saldo cuadra con las entradas menos las salidas.

ProductoEntradasValor entradasSalidasSaldoValor saldoCosto PEPS de ventas
Cemento gris 50 kg2003840000.0016040840000.003000000.00
Cable THHN 12 AWG350442500.00200150202500.00240000.00
Total3240000.00

Fíjate en un detalle que vale oro para explicar PEPS: el cemento se consume desde el lote más viejo hacia el más nuevo y el saldo final queda al costo de la compra más reciente, que es el más alto de los tres. Las unidades finales son las mismas que te daría un promedio ponderado; lo que cambia es el valor que les cuelgas, y ese cambio mueve el costo de ventas y la utilidad del mes.

Errores comunes y consejos

  • Fechas en formatos raros: usa año-mes-día y ordena las filas de la más antigua a la más reciente. El programa respeta el orden del archivo, no lo reordena por ti.
  • Vender más de lo que hay: si una venta pide más unidades que los lotes disponibles, el programa avisa con un mensaje claro en vez de inventar un número. Revisa ese caso antes de publicar tus cifras.
  • Cambiar los nombres de las columnas: el programa los espera tal cual vienen en el ejemplo. Si tu sistema exporta otros nombres, renómbralos en una copia del archivo, nunca en el original.
  • Cantidades con separadores de miles: deja los números planos, sin puntos ni comas, para que no se confundan con decimales.
  • Creer que PEPS y promedio ponderado dan lo mismo: PEPS sigue lotes y cambia el costo cada vez que vendes; el promedio se recalcula con cada compra y reparte un solo costo entre todas las unidades. Si comparas los dos informes y no coinciden, no hay error de digitación: son métodos distintos.
  • Guardar el ZIP en una ruta con tildes o espacios: casi siempre funciona, pero si algo falla, mueve la carpeta a una ruta corta y sin acentos.
  • Olvidar el respaldo: antes de reemplazar los datos de ejemplo por los tuyos, guarda una copia del archivo original. Es un CSV de texto y se puede romper con una columna de más.

Cuándo esto no alcanza

Este programa resuelve bien una parte del problema: valorar ventas y saldos por lotes con tus propios movimientos, en un archivo que entiendes y puedes revisar. Se queda corto cuando el negocio crece y ya no quieres abrir un CSV para saber qué pasó: varias bodegas, varios usuarios tocando el mismo inventario, devoluciones, traslados entre sedes, productos con fecha de vencimiento, informes que el contador pida el último día del mes. Ahí el script se vuelve un cuaderno de notas y no un sistema.

Para ese momento existe Kardex Tauro, un software de inventarios pensado para pymes: lleva el mismo kardex por lotes con PEPS sin que nadie escriba una línea de código, controla bodegas y usuarios, y deja los informes listos para entregar. El programa que acabas de descargar es gratis y sirve para ordenar el inventario mientras la operación todavía cabe en un archivo; cuando el archivo se queda chico, es el turno del sistema.

⬇ Descargar el código (ZIP)

Descarga el ZIP, corre el ejemplo y mira el bloque de lotes consumidos con calma: cuando puedas explicar de dónde salió cada unidad del costo de ventas, ya entendiste PEPS. Si te sirve, compártelo con tu contador y después reemplaza los datos de ejemplo por los tuyos.

Compartir
Enlace copiado
Microsoft Store desde Microsoft StoreDescargar gratis
Chatea por WhatsApp