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: libro diario con partida doble validada (descarga gratis)

Código Python: libro diario con partida doble validada (descarga gratis)

Un asiento que no cuadra es el error más caro y más silencioso de la contabilidad de una pyme: se imputa, nadie lo nota y tres meses después las cuentas no cierran. Este programa de consola lee tu libro diario desde un archivo de texto, revisa cada asiento con las reglas de la partida doble y aparta los que no cuadran antes de que entren al sistema. Está pensado para el dueño de un negocio pequeño que quiere entender sus propios números, para el auxiliar contable que digita asientos todo el día y para el contador que recibe soportes de terceros y necesita una primera revisión automática antes de revisar a mano. Es un solo archivo, no instala nada y funciona igual en Windows, Linux y Mac.

⬇ Descargar el código (ZIP)

Qué trae el ZIP

ArchivoPara qué sirve
libro_diario.pyEl programa completo, comentado línea por línea.
datos/asientos.csvSeis asientos de ejemplo: uno viene descuadrado a propósito para que veas el rechazo en vivo.
salida_ejemplo.txtLa salida que debes obtener al ejecutarlo, para comparar con la tuya.
LEEME.mdLa guía del paquete: los pasos de ejecución y el aviso de uso responsable.

La entrada va en un formato que cualquiera puede preparar en una hoja de cálculo: una línea por renglón de asiento, con el número del asiento, la fecha, el código de la cuenta, el nombre de la cuenta y los dos lados del movimiento. Al ejecutarlo se crean además dos archivos de salida con números planos, listos para abrir en Excel: salida/diario.csv, con los asientos aceptados, y salida/rechazados.csv, con el número de cada asiento rechazado y su motivo escrito en palabras.

Qué hace el programa

  1. Lee datos/asientos.csv. Cada línea trae el número de asiento, la fecha, la cuenta, el nombre de la cuenta, el débito y el crédito: una línea es un renglón del asiento, no el asiento completo.
  2. Agrupa las líneas por número de asiento, porque un asiento puede llevar varias líneas de débito y de crédito. Ese es el asiento compuesto, el pan de cada día de cualquier negocio.
  3. Suma los débitos y los créditos del asiento y comprueba cuatro cosas: que las dos sumas sean exactamente iguales, que cada línea traiga un solo importe y mayor que cero, que la cuenta sea solo dígitos con un mínimo de cuatro, y que la fecha exista de verdad en el calendario.
  4. Si encuentra un solo error, rechaza el asiento entero y escribe el motivo en texto claro. No imputa media verdad: o entra completo o no entra.
  5. Imprime los asientos aceptados uno por uno con su línea de cuadre, la lista de rechazados y el resumen por cuenta con saldo deudor o acreedor.
  6. Cierra con la comprobación global de débitos contra créditos y guarda los dos archivos de salida para que los revises con calma.

Cómo ejecutarlo

Necesitas Python 3.11 o superior y nada más. El programa usa solo la biblioteca estándar, así que no hay que instalar librerías, ni crear entornos virtuales, ni pelear con dependencias que se rompen al año siguiente.

  1. Descarga el ZIP y descomprímelo en una carpeta, por ejemplo en el escritorio.
  2. Si aún no tienes Python, instálalo desde la página oficial. En Windows, marca la casilla que agrega Python al PATH durante la instalación.
  3. Abre la terminal: en Windows el símbolo del sistema o PowerShell, en Mac y Linux la terminal de siempre.
  4. Entra a la carpeta donde descomprimiste el paquete usando el comando cd.
  5. Ejecuta python libro_diario.py. Verás el diario en pantalla y los dos archivos nuevos en la carpeta salida.

El código, explicado

Cuatro fragmentos bastan: la cabecera, la caja de herramientas, el corazón de la validación y la decisión de qué entra al diario. Todo lo demás es presentación de resultados y escritura de archivos.

La cabecera. El programa se presenta, dice con qué versión de Python se probó y aclara que no hay nada por instalar. Es la frase que más consultas ahorra: quien descarga el paquete sabe desde la primera línea que solo necesita Python.

# ==========================================================================
#  LIBRO DIARIO CON PARTIDA DOBLE VALIDADA
#  Código Python didáctico para contabilidad · Kardex Tauro · kardex-tauro.muisca.co
#  Qué hace: lee los asientos de datos/asientos.csv, valida cada uno con las reglas
#  de la partida doble, imprime el diario y guarda salida/diario.csv y salida/rechazados.csv
#  Probado con Python 3.11. Solo biblioteca estándar: no hay que instalar nada.
# ==========================================================================

La caja de herramientas. Tres importaciones y ninguna sorpresa. Decimal es la clave del ejercicio: el dinero no se suma con decimales binarios, porque el redondeo del computador produce centavos fantasma que después nadie sabe explicar. pathlib arma rutas que funcionan igual en Windows, Linux y Mac. Y el comentario que sigue deja claro el concepto de fondo: el débito y el crédito no son bueno y malo, son los dos lados de la misma balanza.

from decimal import Decimal, ROUND_HALF_UP          # Decimal: el dinero no se calcula con decimales binarios (float)
from pathlib import Path                            # pathlib: rutas que funcionan en Windows, Linux y Mac

# PARTIDA DOBLE: lo que se carga por el débito se abona por el crédito, por el mismo valor
# Un asiento puede traer varias líneas de débito y de crédito: es el asiento compuesto
# Débito no es bueno ni crédito es malo: son los dos lados de la misma balanza

La validación. Aquí está la parte que vale dinero. La función recorre las líneas del asiento, acumula débitos y créditos y devuelve una lista de motivos: si la lista queda vacía, el asiento está bien. Cada regla se revisa por separado y todas se escriben en lenguaje de persona, porque el mensaje de error es lo único que el usuario ve cuando algo falla. La última es la madre del cordero: si los débitos y los créditos no son iguales, el asiento no entra.

def validar(lineas: list[dict]) -> list[str]:
    """Revisa un asiento y devuelve la lista de motivos de rechazo (vacía = aceptado)."""
    errores = []
    debitos = CERO
    creditos = CERO
    for numero, linea in enumerate(lineas, start=1):
        debito = linea["debito"]
        credito = linea["credito"]
        # Regla 2: cada línea trae UN solo importe (débito o crédito) y mayor que cero
        if (debito != "") == (credito != ""):
            errores.append(f"Línea {numero}: trae débito y crédito a la vez, o ninguno de los dos")
        else:
            importe = debito or credito
            if not importe.replace(".", "").isdigit() or Decimal(importe) <= CERO:
                errores.append(f"Línea {numero}: el importe tiene que ser un número mayor que cero")
            elif debito != "":
                debitos += Decimal(debito)
            else:
                creditos += Decimal(credito)
        # Regla 3: la cuenta son solo dígitos, mínimo 4 (nada de letras ni símbolos)
        if not (linea["cuenta"].isdigit() and len(linea["cuenta"]) >= 4):
            errores.append(f"Línea {numero}: la cuenta debe ser solo dígitos, mínimo 4")
        # Regla 4: la fecha tiene que existir de verdad en el calendario
        try:
            date.fromisoformat(linea["fecha"])
        except ValueError:
            errores.append(f"Línea {numero}: la fecha debe ser AAAA-MM-DD y existir en el calendario")
    # Regla 1, la madre del cordero: débitos = créditos. Si no cuadra, el asiento no entra
    if debitos != creditos:
        errores.append(f"Los débitos y los créditos no cuadran: DÉBITOS {miles(debitos)} <> CRÉDITOS {miles(creditos)}")
    return errores

La decisión. Este bloque del programa principal marca el carácter del ejercicio: los asientos con errores van a una lista aparte y los demás al diario. No existe el estado intermedio de “enter a medias”. Un asiento descuadrado se rechaza completo, se guarda su motivo y el diario nunca queda partido entre una línea que sí entró y otra que no.

    aceptados = {}
    rechazados = []
    for numero, lineas in asientos.items():
        errores = validar(lineas)
        if errores:
            # Un asiento descuadrado no se imputa a medias: se rechaza completo
            rechazados.append((numero, lineas, errores))
        else:
            aceptados[numero] = lineas
    print(f"Asientos aceptados: {len(aceptados)}")
    print(f"Asientos rechazados: {len(rechazados)}")

Qué vas a ver en pantalla

Con los datos de ejemplo el programa lee seis asientos, acepta cinco y rechaza uno. La cabecera lo resume sin adornos:

Asientos leídos: 6
Asientos aceptados: 5
Asientos rechazados: 1

El asiento que no entra es el número 4, del 12 de marzo: un arrendamiento pagado desde el banco. Tal como viene escrito en datos/asientos.csv, sus dos líneas son estas:

AsientoFechaCuentaNombre de la cuentaDébitoCrédito
42026-03-125145Arrendamientos500000
42026-03-121110Bancos450000

El débito anota 500000 y el crédito anota 450000: faltan 50000 por algún lado y el asiento no cuadra. El programa lo dice sin rodeos y señala el asiento completo, no una línea suelta:

ASIENTO 4   FECHA 2026-03-12
  Motivo: Los débitos y los créditos no cuadran: DÉBITOS 500000 <> CRÉDITOS 450000

Ese es el momento didáctico del ejercicio, y es lo que casi ningún sistema muestra: las dos cifras enfrentadas, en la misma pantalla, con la resta que falta a la vista. Con ese mensaje el error se corrige en dos minutos; sin él, el descuadre aparece tres meses después como un misterio en el balance.

Después de los rechazados viene el resumen por cuenta: cada cuenta muestra lo que sumó al débito, lo que sumó al crédito y de qué lado queda su saldo, deudor o acreedor. Los totales suman 2220800 por cada lado, y la última línea lo confirma: TOTAL DÉBITOS = TOTAL CRÉDITOS: CUADRA.

Errores comunes y consejos

  • El archivo tiene que estar en UTF-8. Si lo reescribes con un editor antiguo y le pones otra codificación, los nombres con tildes salen mal y el programa lo nota.
  • Ejecútalo donde está el paquete. El programa calcula su propia carpeta a partir de la ruta del archivo, así que encuentra sus datos sin importar desde dónde lo llames.
  • Los importes van planos en el archivo de entrada. Escribe el importe como una cifra entera, sin separadores de miles y sin decimales: la validación exige solo dígitos, con un punto decimal opcional.
  • Un importe por línea. Nunca llenes el débito y el crédito en la misma línea, ni dejes los dos vacíos: esa línea se marca como error y arrastra el rechazo del asiento completo.
  • Las cuentas son códigos. Solo dígitos, mínimo cuatro. Si necesitas jerarquía, agrega más dígitos, no letras ni guiones.
  • No repitas el número de un asiento en fechas distintas. Al agrupar por número, el programa juntaría líneas que no pertenecen a la misma partida.
  • Empieza con tus propios datos. Reemplaza el archivo de ejemplo por diez asientos tuyos y compara la salida con tu libro: es la mejor forma de ver cómo se digita en tu equipo.

Cuándo esto no alcanza

Este programa es un filtro de entrada, no un sistema contable: no lleva terceros, ni cartera, ni inventario, ni consecutivos, ni permisos por usuario. Sirve mientras el volumen es pequeño y mientras una sola persona revisa el archivo antes de imputarlo. Cuando el negocio crece y varias manos entran al mismo tiempo, el paso natural es un software que valide la partida doble en el momento de digitar y que deje el rastro de quién hizo cada cosa. Ahí tiene sentido Kardex Tauro, un programa gratis que ordena inventario y movimientos. La regla es sencilla: el script para entender y controlar; el software para cuando ya no alcanza con la hoja de cálculo y un archivo de texto.

⬇ Descargar el código (ZIP)

Guarda el paquete como base de tu propio control interno: cambia las reglas de validación por las de tu negocio, agrega una columna con el centro de costo y tendrás un diario a tu medida en una tarde.

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