Imaginen un proceso complejo, arraigado en las operaciones financieras corporativas, que solía consumir tiempo, energía y recursos. Así era la compensación de partidas antes de que implementara una solución que cambió radicalmente la forma en que gestiono las finanzas corporativas.
La implementación de una solución de automatización de compensaciones de partidas no solo ha cambiado la dinámica del proceso, sino que también ha mejorado la eficiencia y la precisión en niveles inimaginables.
Esta herramienta, desarrollada y perfeccionada con dedicación, transformó lo que solía ser una tarea manual propensa a errores en un proceso ágil y preciso. Desde la identificación de partidas compensables hasta su aplicación en el sistema contable, cada etapa ha sido refinada y optimizada para maximizar su impacto.
Lo más emocionante de esta herramienta es su accesibilidad directa. No necesito depender de un equipo de IT externo para su implementación. Con mi experiencia y conocimientos en las complejidades financieras, tengo el control absoluto para implementar y ajustar esta solución a las necesidades específicas de mi área.
Además al integrar la interfaz de SAP, he facilitado enormemente la toma de decisiones financieras rápidas y precisas. La capacidad de llamar a esta solución con un simple clic, procesar lotes de datos en segundo plano o incluso generar informes detallados ha redefinido completamente mi enfoque en la gestión financiera.
La eliminación de la burocracia y la dependencia externa ha sido liberadora. Ahora, como arquitecto de mi propia eficiencia financiera, puedo adaptar, ajustar y mejorar continuamente el proceso de compensación de partidas. No solo se trata de una herramienta innovadora, también es mi aliada estratégica en la optimización financiera.
Esta experiencia ha sido más que transformadora; ha sido empoderadora. La capacidad de compartir mi experiencia y los beneficios tangibles de esta solución en mi blog es solo el comienzo. Invito a aquellos que buscan eficiencia, precisión y autonomía en la gestión financiera a sumarse a esta revolución.
El Proceso de Compensación de Partidas
Las compensaciones se llevan a cabo en diversas áreas de las empresas, como créditos y cobranzas, caja y bancos, contabilidad, planeamiento, administración, entre otros sectores.
Cuando nos referimos a la 'compensación de partidas', hacemos alusión a la tarea de conciliar registros contables positivos con sus contrapartes negativas. Estos registros pueden comprender partidas de deudores por ventas, como facturas y pagos, o partidas bancarias, como créditos recibidos y créditos apropiados. En esencia, cualquier labor que implique la comparación de registros contables de distinto signo y características similares, como una misma cuenta de cliente o de banco.
La compensación de partidas es una tarea muy relevante porque permite una gestión financiera efectiva. Ayuda a garantizar la exactitud de los registros contables y correcta exposición de los saldos, reduce la carga de trabajo, permite la temprana identificación de problemas financieros o discrepancias, mejora la toma de decisiones y cumple con los requisitos normativos y legales.
En la práctica, es común que este proceso se realice manualmente, especialmente en grandes empresas, donde además tiende a descentralizarse debido al considerable volumen de trabajo. Y esta dinámica puede acarrear diversos inconvenientes, como los siguientes:
Errores humanos: La tarea de compensación implica revisar grandes cantidades de información y tomar decisiones precisas en cuanto a qué partidas se pueden compensar y cuáles no. Algunos de los errores frecuentes son seleccionar partidas incorrectas, omitir información importante o introducir información incorrecta. Además, el riesgo de error se incrementa a medida que el volumen de partidas es mayor.
Falta de visibilidad: Si la tarea es descentralizada, puede ser difícil tener una visión completa de todas las partidas que se deben compensar, lo que puede generar duplicidad de esfuerzos.
Demora en la compensación: La tarea de compensación manual puede llevar varias horas o incluso días para procesar todas las partidas, lo que puede retrasar la toma de decisiones y ocasionar pérdidas financieras.
Falta de estandarización: La correcta compensación manual de partidas está vinculada con la habilidad del referente de la cuenta para trabajar con grandes cantidades de datos. Lo cual necesariamente determina diferencias en las maneras de hacer la tarea. Esta falta de estandarización puede generar dificultades para analizar y auditar el proceso, y dificultades para implementar mejoras o cambios en el futuro.
Ineficiencia en términos de costos: Implica dedicar tiempo y recursos a una tarea que podría ser automatizada. La automatización de las compensaciones puede reducir significativamente el tiempo y los costos asociados, permitiendo que los empleados se concentren en tareas más importantes y de mayor valor para la empresa.
Para mitigar estos riesgos, una solución efectiva consiste en automatizar la tarea. Esto requiere el desarrollo de un modelo que permita identificar aquellas partidas compensables, supere la observación manual y sea programable. Posteriormente se debe automatizar la acción propiamente dicha de aplicación de partidas en el sistema contable mediante RPA.
Problema Matemático
El proceso de identificación de partidas compensables parece sencillo cuando se realiza en cuentas con pocos registros, ya que se puede observar fácilmente qué partidas suman cero, incluso si sus valores absolutos son distintos. Sin embargo, esta tarea se vuelve considerablemente más compleja al revisar cientos de miles de partidas. Además, resulta desafiante trasladar este análisis manual a un modelo matemático que pueda automatizarlo de manera efectiva.
Mi primer ejercicio fue precisamente comparar mi enfoque intuitivo de análisis con modelos matemáticos existentes que lograran ajustarse correctamente. Con el conocimiento de mi entrada de datos y una clara comprensión del resultado deseado, me dediqué a explorar diferentes alternativas. Finalmente, observé que la búsqueda de partidas que sumen cero, respetando ciertas características (como número de cliente, fechas, etc.), se asemeja a un problema matemático reconocido como 'el problema de la suma de subconjuntos'.
En términos generales, consiste en encontrar la combinación óptima de elementos de un conjunto de objetos, de tal forma que su suma sea igual a un valor objetivo dado. En particular, el conjunto de objetos son las partidas abiertas de un cliente, y el valor objetivo es cero, es decir, se busca encontrar la combinación óptima de partidas que sumen cero. Esto se hace para identificar qué partidas se pueden compensar entre sí, y de esta forma reducir la cantidad pendiente.
El problema de la suma de subconjuntos es un problema de optimización combinatoria que es conocido por ser NP-completo, lo que significa que no existe un algoritmo de tiempo polinomial que pueda resolverlo para todos los casos. En su lugar, se utilizan técnicas heurísticas y algoritmos de aproximación para encontrar soluciones subóptimas en tiempos razonables. Es importante conocer esta característica porque ayuda a dimensionar los recursos necesarios y las restricciones a aplicar.
El Modelo
El siguiente modelo tomará el caso de las compensaciones en el sector de créditos y cobranzas a efectos ilustrativos. Aunque bien puede ser aplicado a cualquier otro sector como mencione en la introducción.
En el problema de compensación de partidas de deudores múltiples los montos de las partidas acreedoras se denotan con y los montos de las partidas deudoras se denotan con
.
El objetivo del problema es encontrar la mayor cantidad posible de compensaciones, es decir, maximizar la suma producto de las partidas acreedoras y sus variables de decisión. Esta cantidad se puede expresar como:
Sujeto a la restricción de que la suma producto de las partidas acreedoras y sus variables de decisión debe ser igual a la suma producto de las partidas deudoras y sus variables de decisión en una misma cuenta de cliente (definición de compensación), se expresa como:
Además, las variables son
binarias, es decir, solo pueden tomar valores 0 o 1 debido a que indican si el
documento acreedor o deudor, respectivamente, debe compensarse o no.
Así, la solución óptima del problema indicará cuáles documentos acreedores y deudores deben ser compensados para maximizar la cantidad de compensaciones realizadas.
Código Python
El problema matemático se puede resolver, en tiempos razonables para la mayoría de los casos, utilizando Python. Esta aplicación utiliza la técnica de búsqueda exhaustiva (también conocida como fuerza bruta o búsqueda por enumeración). Es un método de resolución de problemas que consiste en evaluar sistemáticamente todas las posibles soluciones para encontrar la óptima. En general, la búsqueda exhaustiva implica probar cada posible combinación de valores de entrada y evaluar el resultado de cada una de ellas. A medida que se prueban más y más combinaciones, la probabilidad de encontrar la solución óptima aumenta. Sin embargo, el costo computacional de esta técnica puede ser muy alto, especialmente cuando el número de variables y/o el rango de valores posibles para cada variable es grande. Por tal motivo, para sacar su mejor provecho, será necesario colocar restricciones de entrada de datos.
El código utiliza las bibliotecas pandas y pulp de Python para cargar los datos desde un archivo CSV, crear variables de decisión y resolver el problema de optimización. Además, se utiliza la biblioteca multiprocessing para resolver el problema para cada cliente en paralelo y la biblioteca os para verificar si el archivo CSV de resultados existe.
El archivo CSV de entrada contiene los importes de las partidas, número de referencia, fecha de vencimiento y la cuenta a la que pertenece. El archivo de salida agrega las variables binarias de decisión utilizadas para obtener la solución óptima.
La función resolver_problema es el núcleo del algoritmo y se encarga de resolver el problema de optimización para un cliente específico. La función selecciona los datos correspondientes al cliente actual y utiliza los importes para definir el problema de optimización. Luego, crea las variables de decisión y define la función objetivo y las restricciones. Finalmente, resuelve el problema utilizando el solver de pulp y guarda la solución óptima en un archivo CSV.
El siguiente es el planteo del problema descripto en el código Python:
# Seleccionar los datos correspondientes al cliente actual
df_c = df.loc[df["c"] == c]
# Obtener los coeficientes para el problema de optimización
p = df_c["p"].to_numpy()
f = df_c["f"].to_numpy()
# Definir el número de variables
n = len(p)
m = len(f)
# Crear las variables de decisión
x = pulp.LpVariable.dicts("x", range(n), 0, 1, pulp.LpBinary)
y = pulp.LpVariable.dicts("y", range(m), 0, 1, pulp.LpBinary)
# Definir el problema
prob = pulp.LpProblem(f"Compensación de partidas - Cliente {c}", pulp.LpMaximize)
# Definir la función objetivo
prob += pulp.lpSum(p[i] * x[i] for i in range(n))
# Definir las restricciones
prob += pulp.lpSum(f[i] * y[i] for i in range(m)) - pulp.lpSum(p[i] * x[i] for i in range(n)) == 0
El proceso concluirá con la generación de una lista que contiene las partidas compensables identificadas. Esta solución se complementa con códigos adicionales diseñados específicamente para extraer la información cruda y llevar a cabo la compensación. Para lograr esto, el código a desarrollar variará en función del sistema contable en uso y se implementará a través de la Automatización de Procesos Robóticos (RPA), una técnica que permite la automatización de tareas mediante la simulación de la interacción humana con interfaces digitales.
Por ejemplo, SAP permite permite la grabación de tareas repetitivas a través de la función SAP Scripting, la cuál utiliza VBA pero se puede traducir a lenguaje Python.
Beneficios
Los beneficios son inmediatos, se perciben por la enorme cantidad de tiempo que se libera. La productividad aumenta significativamente y los resultados se hacen evidentes no solo para el sector directamente impactado por el cambio, sino también para los clientes internos y externos de la organización.
La transición hacia la automatización en la compensación de partidas conlleva una serie de beneficios tangibles y estratégicos que repercuten directamente en la eficiencia operativa y la reducción de costos. Veamos cómo este cambio puede transformar significativamente el proceso:
Reducción Significativa de Costos Operativos: El cambio a la automatización genera una reducción drástica en los costos asociados a las horas-hombre requeridas para la ejecución manual de las tareas. Al comparar el proceso manual con el proceso automático, los ahorros son evidentes. El siguiente cuadro es un comparativo que expresa, en minutos, la demora en la ejecución del proceso completo. En este caso el sistema contable utilizado fue SAP y las partidas deudoras tratadas fueron 200.000:
Reducción de tiempos: 91%
Mayor Precisión y Visibilidad: La automatización no solo acelera el proceso, sino que también mejora la precisión y la visibilidad del mismo. Los registros detallados proporcionados por el sistema permiten un seguimiento más eficaz y una mejor comprensión de las transacciones realizadas.
La compensación automática no solo representa un ahorro sustancial en tiempo y costos, sino que también mitiga riesgos y mejora la calidad y control del proceso, brindando una transformación significativa en la gestión contable.
La implementación de esta solución marcó una experiencia altamente satisfactoria, generando un cambio significativo que va más allá de los beneficios mencionados. Al automatizar tareas, no solo aliviamos al analista de labores repetitivas y tediosas, sino que también abrimos nuevas oportunidades para labores que aportan un valor sustancial. Esta transición libera tiempo valioso, permitiendo su inversión en la formación del equipo, fomentando el desarrollo de habilidades y la afronta de tareas más desafiantes y estratégicas.
Facilitar el desarrollo del potencial del equipo es una fuente de satisfacción y el punto de partida para un ciclo virtuoso. Este enfoque no solo compromete a cada miembro con los objetivos organizacionales, sino que también los involucra desde una perspectiva estratégica. Al potenciar el talento interno, se genera un compromiso más profundo con las metas de la organización, impulsando un crecimiento conjunto y la obtención de resultados excepcionales.-
