# Comercial

# Listas de precios

<div class="qMYqUG_convSearchResultHighlightRoot" id="bkmrk-el-m%C3%B3dulo-listas-de-"><section class="text-token-text-primary w-full focus:outline-none has-data-writing-block:pointer-events-none [&:has([data-writing-block])>*]:pointer-events-auto R6Vx5W_threadScrollVars scroll-mb-[calc(var(--scroll-root-safe-area-inset-bottom,0px)+var(--thread-response-height))] scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]" dir="auto">El módulo **Listas de precios** constituye el núcleo del Price Engine de Horfal-EOS y permite construir estrategias comerciales reutilizables, escalables y completamente desacopladas del catálogo de productos.

A diferencia de los esquemas tradicionales donde el precio se captura directamente sobre cada producto, Horfal-EOS utiliza un modelo basado en atributos, listas y lógica de resolución que permite generar políticas comerciales altamente especializadas sin duplicar información ni incrementar el mantenimiento operativo.

El motor se encuentra dividido en cuatro componentes principales:

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] @w-lg/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn"><div class="flex max-w-full flex-col gap-4 grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&]:mt-1" dir="auto" tabindex="0"><div class="flex w-full flex-col gap-1 empty:hidden"><div class="markdown prose dark:prose-invert wrap-break-word w-full dark markdown-new-styling">- Atributos.
- Listas.
- Lógica.
- Diagnóstico.

</div></div></div></div></div></div>[![image.png](https://ayuda.horfal.com/uploads/images/gallery/2026-07/scaled-1680-/k8Dimage.png)](https://ayuda.horfal.com/uploads/images/gallery/2026-07/k8Dimage.png)

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] @w-lg/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn"><div class="flex max-w-full flex-col gap-4 grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&]:mt-1" dir="auto" tabindex="0"><div class="flex w-full flex-col gap-1 empty:hidden"><div class="markdown prose dark:prose-invert wrap-break-word w-full dark markdown-new-styling">---

</div></div></div></div></div></div># Atributos

Los atributos representan las piezas elementales utilizadas para construir una estrategia de precios.

Cada atributo encapsula una regla económica individual que posteriormente puede ser reutilizada por múltiples listas de precios sin necesidad de duplicar configuraciones.

[![image.png](https://ayuda.horfal.com/uploads/images/gallery/2026-07/scaled-1680-/Wh4image.png)](https://ayuda.horfal.com/uploads/images/gallery/2026-07/Wh4image.png)

## Clave

Identificador único utilizado internamente por el sistema.

Se recomienda utilizar claves estables, descriptivas y orientadas al propósito comercial del atributo.

Ejemplos:

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] @w-lg/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn"><div class="flex max-w-full flex-col gap-4 grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&]:mt-1" dir="auto" tabindex="0"><div class="flex w-full flex-col gap-1 empty:hidden"><div class="markdown prose dark:prose-invert wrap-break-word w-full dark markdown-new-styling">- UTILIDAD40
- DESCUENTO\_DISTRIBUIDOR
- COSTO\_IMPORTACION
- MARGEN\_PREMIUM

</div></div></div></div></div></div>## Nombre

Descripción operativa utilizada por los usuarios para identificar rápidamente el propósito del atributo.

Ejemplos:

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] @w-lg/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn"><div class="flex max-w-full flex-col gap-4 grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&]:mt-1" dir="auto" tabindex="0"><div class="flex w-full flex-col gap-1 empty:hidden"><div class="markdown prose dark:prose-invert wrap-break-word w-full dark markdown-new-styling">- Utilidad del bien 40%.
- Descuento distribuidor nacional.
- Incremento por logística internacional.

</div></div></div></div></div></div>## Descripción

Permite documentar el contexto comercial y el objetivo del atributo.

Una buena documentación reduce errores de interpretación y facilita la administración a largo plazo.

## Clase

La clase funciona como una clasificación semántica del atributo.

Ejemplos posibles:

[![image.png](https://ayuda.horfal.com/uploads/images/gallery/2026-08/scaled-1680-/wyRimage.png)](https://ayuda.horfal.com/uploads/images/gallery/2026-08/wyRimage.png)

## Tipo de cálculo

Determina la naturaleza matemática del atributo.

Actualmente el motor soporta principalmente:

### TASA

Aplica un porcentaje sobre una base determinada.

Ejemplo:

Costo base: 100.00 MXN  
Utilidad: 40%

Resultado:

140.00 MXN

### IMPORTE

Aplica un monto fijo sobre la base seleccionada.

Ejemplo:

Costo base: 100.00 MXN  
Cargo logístico: 25.00 MXN

Resultado:

125.00 MXN

## Valor

Representa el porcentaje o importe asociado al atributo.

La precisión es administrada utilizando el canon financiero del sistema basado en `BigDecimal`.

## Vigencia

Permite limitar temporalmente la utilización del atributo.

Resulta especialmente útil para:

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] @w-lg/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn"><div class="flex max-w-full flex-col gap-4 grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&]:mt-1" dir="auto" tabindex="0"><div class="flex w-full flex-col gap-1 empty:hidden"><div class="markdown prose dark:prose-invert wrap-break-word w-full dark markdown-new-styling">- Promociones temporales.
- Ajustes inflacionarios.
- Campañas comerciales.
- Programas de incentivos.

</div></div></div></div></div></div>## Estado

Indica si el atributo se encuentra disponible para nuevas resoluciones de precios.

La desactivación preserva el historial y evita afectar operaciones históricas.

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] @w-lg/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn"><div class="flex max-w-full flex-col gap-4 grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&]:mt-1" dir="auto" tabindex="0"><div class="flex w-full flex-col gap-1 empty:hidden"><div class="markdown prose dark:prose-invert wrap-break-word w-full dark markdown-new-styling">---

</div></div></div></div></div></div># Listas

Las listas representan contratos comerciales completos construidos a partir de uno o varios atributos.

Una misma organización puede administrar simultáneamente decenas o cientos de listas orientadas a distintos segmentos de mercado.

[![image.png](https://ayuda.horfal.com/uploads/images/gallery/2026-07/scaled-1680-/m61image.png)](https://ayuda.horfal.com/uploads/images/gallery/2026-07/m61image.png)

## Clave

Identificador técnico único de la lista.

Ejemplos:

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] @w-lg/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn"><div class="flex max-w-full flex-col gap-4 grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&]:mt-1" dir="auto" tabindex="0"><div class="flex w-full flex-col gap-1 empty:hidden"><div class="markdown prose dark:prose-invert wrap-break-word w-full dark markdown-new-styling">- CONTADO\_MXN
- MAYOREO\_MXN
- DISTRIBUIDOR\_USD
- EXPORTACION\_USD

</div></div></div></div></div></div>## Nombre

Nombre comercial utilizado por usuarios y procesos de negocio.

Ejemplos:

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] @w-lg/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn"><div class="flex max-w-full flex-col gap-4 grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&]:mt-1" dir="auto" tabindex="0"><div class="flex w-full flex-col gap-1 empty:hidden"><div class="markdown prose dark:prose-invert wrap-break-word w-full dark markdown-new-styling">- Contado.
- Mayorista nacional.
- Distribuidor autorizado.
- Exportación Norteamérica.

</div></div></div></div></div></div>## Descripción

Permite documentar el objetivo comercial y el alcance de la lista.

## Moneda operativa

Determina la moneda en la cual opera la lista y dentro de la cual serán ejecutados todos los cálculos asociados.

Cada lista pertenece exclusivamente a una moneda operativa.

## Ámbito

Define dónde puede utilizarse la lista dentro del ecosistema comercial.

Valores habituales:

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] @w-lg/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn"><div class="flex max-w-full flex-col gap-4 grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&]:mt-1" dir="auto" tabindex="0"><div class="flex w-full flex-col gap-1 empty:hidden"><div class="markdown prose dark:prose-invert wrap-break-word w-full dark markdown-new-styling">- Compras.
- Ventas.
- Ambos.

</div></div></div></div></div></div>## Orden de aplicación

Determina la prioridad relativa cuando múltiples listas resultan candidatas durante una resolución.

Valores menores representan mayor prioridad.

## Vigencia

Permite definir periodos temporales de disponibilidad para campañas o acuerdos comerciales específicos.

## Aplica a

Permite especializar listas utilizando filtros comerciales y de catálogo.

Entre los criterios soportados se encuentran:

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] @w-lg/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn"><div class="flex max-w-full flex-col gap-4 grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&]:mt-1" dir="auto" tabindex="0"><div class="flex w-full flex-col gap-1 empty:hidden"><div class="markdown prose dark:prose-invert wrap-break-word w-full dark markdown-new-styling">- Marca.
- Departamento.
- Línea.
- Familia.
- Categoría.
- Tipo de bienes.
- Suscripción.
- Tipo de bienes.

</div></div></div></div></div></div>Este mecanismo permite construir estrategias extremadamente específicas sin necesidad de duplicar productos.

[![image.png](https://ayuda.horfal.com/uploads/images/gallery/2026-07/scaled-1680-/ldOimage.png)](https://ayuda.horfal.com/uploads/images/gallery/2026-07/ldOimage.png)

## Marca

Permite restringir la lista de precios a productos pertenecientes a una marca específica.

Ejemplos:

- HP
- Dell
- Acer
- Hikvision
- LinkedPro

Una lista configurada para la marca HP únicamente participará en la resolución cuando el producto evaluado pertenezca a dicha marca.

---

## Departamento

Representa el nivel más alto de agrupación comercial dentro del catálogo de productos.

Ejemplos:

- Ferretería
- Electrónica
- Refacciones
- Material eléctrico

Es común utilizar este criterio para definir estrategias comerciales amplias aplicables a una división completa del negocio.

---

## Línea

Permite segmentar productos dentro de un departamento específico.

Ejemplos:

- Línea profesional
- Línea industrial
- Línea doméstica
- Línea premium

Este nivel suele utilizarse cuando diferentes grupos de productos requieren márgenes o estrategias distintas dentro del mismo departamento.

---

## Familia

Agrupa productos con características comerciales similares dentro de una línea determinada.

Ejemplos:

- Herramientas manuales
- Herramientas eléctricas
- Equipo de protección personal
- Accesorios de instalación

La familia representa un nivel de especialización superior al departamento y a la línea.

---

## Categoría

Corresponde al nivel más específico de clasificación comercial disponible dentro del catálogo.

Ejemplos:

- Taladros inalámbricos
- Brocas SDS Plus
- Conectores RJ45 categoría 6
- Cerraduras electrónicas

Las categorías permiten construir listas extremadamente especializadas cuando el modelo comercial así lo requiere.

---

## Suscripción

Indica si la lista aplica a productos comercializados bajo un esquema recurrente o periódico.

Valores disponibles:

- Sí
- No

Ejemplos de productos con suscripción:

- Licencias SaaS.
- Mantenimiento anual.
- Servicios administrados.
- Arrendamientos periódicos.

---

## Tipo de bienes

Permite restringir la lista según la naturaleza operativa del producto dentro del ERP.

Valores observados actualmente:

- Activo fijo
- Consumo interno

Este criterio resulta especialmente útil cuando una organización desea separar estrategias comerciales entre mercancías, activos y consumibles internos.

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] @w-lg/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn"><div class="flex max-w-full flex-col gap-4 grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&]:mt-1" dir="auto" tabindex="0"><div class="flex w-full flex-col gap-1 empty:hidden"><div class="markdown prose dark:prose-invert wrap-break-word w-full dark markdown-new-styling">---

</div></div></div></div></div></div># Lógica

La sección de lógica define el algoritmo interno utilizado para construir el precio final de una lista determinada.

Mientras la pestaña anterior define qué lista existe, esta sección determina cómo se calcula matemáticamente.

Cada fila representa un paso dentro de la cadena de construcción del precio.

[![image.png](https://ayuda.horfal.com/uploads/images/gallery/2026-07/scaled-1680-/070image.png)](https://ayuda.horfal.com/uploads/images/gallery/2026-07/070image.png)

## Orden

Define la secuencia exacta de ejecución de cada atributo.

El orden es fundamental porque un mismo atributo puede operar sobre bases distintas dependiendo del momento en que sea ejecutado.

## Atributo

Referencia al atributo reutilizable que participará en el cálculo.

## Base operativa

Determina el origen económico utilizado para iniciar el cálculo.

Algunos ejemplos incluyen:

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] @w-lg/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn"><div class="flex max-w-full flex-col gap-4 grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&]:mt-1" dir="auto" tabindex="0"><div class="flex w-full flex-col gap-1 empty:hidden"><div class="markdown prose dark:prose-invert wrap-break-word w-full dark markdown-new-styling">- Precio lista del producto.
- Último costo.
- Costo promedio.
- Costo estándar.
- Precio sugerido.

</div></div></div></div></div></div>## Base de cálculo

Define sobre qué importe se aplicará el atributo.

Ejemplos:

### BASE\_ORIGINAL

Siempre utiliza el valor inicial de referencia.

### BASE\_ACUMULADA

Utiliza el resultado parcial construido hasta ese momento.

### BASE\_ANTERIOR

Utiliza únicamente el resultado del paso inmediatamente anterior.

## Afecta base siguiente

Indica si el resultado generado por el atributo debe formar parte de la base utilizada por los siguientes pasos.

Esta opción permite construir márgenes acumulativos, descuentos encadenados o cálculos escalonados.

## Obligatorio

Define si el atributo debe existir obligatoriamente para que la lista sea considerada válida durante una resolución.

Si un atributo obligatorio no puede resolverse, la lista completa es descartada automáticamente.

## Simulación

La sección superior permite visualizar el comportamiento del algoritmo utilizando una base de referencia.

Su objetivo es validar rápidamente la coherencia matemática antes de liberar cambios a producción.

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] @w-lg/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn"><div class="flex max-w-full flex-col gap-4 grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&]:mt-1" dir="auto" tabindex="0"><div class="flex w-full flex-col gap-1 empty:hidden"><div class="markdown prose dark:prose-invert wrap-break-word w-full dark markdown-new-styling">---

</div></div></div></div></div></div># Diagnóstico

La pestaña Diagnóstico constituye una herramienta de análisis y trazabilidad del proceso de resolución del Price Engine.

Su objetivo no consiste en calcular precios finales sino en explicar el razonamiento seguido por el motor.

Es equivalente a un trazador o plan de ejecución dentro de una base de datos.

## Contexto de resolución

Representa el conjunto de variables utilizadas para simular una operación comercial específica.

Entre ellas:

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] @w-lg/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn"><div class="flex max-w-full flex-col gap-4 grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&]:mt-1" dir="auto" tabindex="0"><div class="flex w-full flex-col gap-1 empty:hidden"><div class="markdown prose dark:prose-invert wrap-break-word w-full dark markdown-new-styling">- Ámbito de operación.
- Rol del socio.
- Moneda operativa.
- Fecha de operación.
- Marca.
- Departamento.
- Línea.
- Familia.
- Categoría.
- Tipo de bienes.
- Producto.
- Variante.
- Proveedor específico.

</div></div></div></div></div></div>[![image.png](https://ayuda.horfal.com/uploads/images/gallery/2026-07/scaled-1680-/i67image.png)](https://ayuda.horfal.com/uploads/images/gallery/2026-07/i67image.png)

  
## Resolver lista

Ejecuta el algoritmo de selección y presenta el resultado del análisis.

## Resultado esperado

El diagnóstico explica:

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] @w-lg/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn"><div class="flex max-w-full flex-col gap-4 grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&]:mt-1" dir="auto" tabindex="0"><div class="flex w-full flex-col gap-1 empty:hidden"><div class="markdown prose dark:prose-invert wrap-break-word w-full dark markdown-new-styling">- Qué listas fueron consideradas candidatas.
- Qué listas fueron descartadas.
- Qué condición provocó el descarte.
- Qué lista resultó ganadora.
- Qué criterio de prioridad fue utilizado.
- Qué filtros participaron en la decisión.

</div></div></div></div></div></div>## Casos de uso habituales

La herramienta resulta particularmente útil para:

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] @w-lg/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn"><div class="flex max-w-full flex-col gap-4 grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&]:mt-1" dir="auto" tabindex="0"><div class="flex w-full flex-col gap-1 empty:hidden"><div class="markdown prose dark:prose-invert wrap-break-word w-full dark markdown-new-styling">- Validación funcional durante implementación.
- Auditorías comerciales.
- Análisis de incidencias.
- Capacitación de usuarios.
- Verificación de configuraciones complejas.
- Soporte técnico avanzado.

---

</div></div></div></div></div></div># Recomendaciones de implementación

Se recomienda iniciar con un conjunto reducido de atributos reutilizables y expandir progresivamente el catálogo conforme madure la estrategia comercial de la organización.

La reutilización de atributos produce una reducción significativa en el mantenimiento y mejora la consistencia de las políticas de precios.

Las listas deben representar estrategias comerciales y no clientes individuales.

Cuando un cliente requiera una negociación específica, resulta preferible utilizar condiciones comerciales o asignaciones antes que multiplicar innecesariamente el número de listas.

La herramienta de diagnóstico debe formar parte del proceso habitual de validación antes de liberar nuevas estrategias de precios hacia ambientes productivos.

Una arquitectura correctamente diseñada permite administrar políticas comerciales complejas manteniendo trazabilidad, auditabilidad y simplicidad operativa incluso en organizaciones con miles de productos y múltiples monedas.

</section></div>

# Condiciones

Las Condiciones comerciales permiten definir las políticas de pago, cobranza o descuentos que la empresa utilizará durante sus operaciones comerciales con clientes y proveedores.

Una condición comercial representa un conjunto de reglas reutilizables que puede asignarse a uno o varios socios comerciales. De esta forma, no es necesario configurar manualmente los plazos o descuentos en cada operación, ya que el sistema puede sugerir automáticamente la condición correspondiente.

Cada condición está formada por tres elementos principales:

- La definición general de la condición.
- Las reglas que determinan el comportamiento de los plazos o descuentos.
- Las asignaciones que relacionan la condición con clientes o proveedores.

---

# Condiciones

Esta sección permite crear, consultar y administrar todas las condiciones comerciales disponibles para la empresa.

Cada condición funciona como una plantilla que posteriormente podrá utilizarse en diferentes procesos comerciales, evitando capturar la misma información de forma repetitiva.

Para registrar una nueva condición seleccione **Nueva condición**.

[![image.png](https://ayuda.horfal.com/uploads/images/gallery/2026-07/scaled-1680-/95dimage.png)](https://ayuda.horfal.com/uploads/images/gallery/2026-07/95dimage.png)

## Campos disponibles

### Clave

Corresponde al identificador único de la condición comercial.

La clave permite localizar rápidamente una condición dentro del sistema y facilita su identificación en listados, consultas y procesos internos.

Se recomienda utilizar nombres cortos, claros y consistentes.

Ejemplos:

- CONTADO\_COMPRA
- NETO30
- PP10DESC8DIAS

Una vez que la condición comienza a utilizarse, es recomendable evitar cambios frecuentes en la clave para mantener consistencia histórica.

---

### Nombre

Es el nombre descriptivo que visualizarán los usuarios.

Debe explicar claramente el comportamiento comercial de la condición.

Ejemplos:

- Contado neto.
- Neto a 30 días.
- Pronto pago 10% a 8 días.
- Escalonada 20/10/5.

Mientras la clave está orientada a la identificación técnica, el nombre facilita la comprensión operativa.

---

### Dirección

Indica el tipo de operación donde podrá utilizarse la condición comercial.

Opciones disponibles:

- Compra.
- Venta.

Esta selección es importante porque determina el comportamiento posterior del sistema.

Por ejemplo:

- Una condición de **Compra** únicamente podrá asignarse a proveedores.
- Una condición de **Venta** únicamente podrá asignarse a clientes.

Esto evita configuraciones incompatibles y reduce errores de captura.

---

### Vigencia desde

Define la fecha a partir de la cual la condición podrá comenzar a utilizarse.

Antes de esta fecha la condición permanecerá registrada, pero no deberá considerarse vigente para nuevas operaciones.

Esta funcionalidad resulta útil cuando se desea preparar condiciones que comenzarán a aplicarse en una fecha futura.

---

### Vigencia hasta

Permite establecer una fecha límite para la utilización de la condición.

Cuando la fecha de vigencia concluye, la condición deja de estar disponible para nuevas operaciones sin necesidad de eliminarla.

Si este campo permanece vacío, la condición continuará vigente de manera indefinida hasta que sea modificada o inactivada.

[![image.png](https://ayuda.horfal.com/uploads/images/gallery/2026-07/scaled-1680-/IgHimage.png)](https://ayuda.horfal.com/uploads/images/gallery/2026-07/IgHimage.png)

---

### Observaciones

Campo destinado al registro de comentarios internos relacionados con la condición comercial.

Las observaciones pueden utilizarse para documentar información administrativa, criterios de autorización, acuerdos internos o cualquier anotación relevante para el personal de la empresa.

Este campo no modifica el comportamiento de la condición.

---

## Estados de una condición

Durante su ciclo de vida una condición comercial puede encontrarse en diferentes estados.

### Borrador

Permite continuar configurando la condición antes de ponerla en operación.

Mientras una condición permanezca en borrador pueden realizarse modificaciones en su información y en sus reglas.

---

### Activa

Indica que la condición ya puede utilizarse en la operación diaria.

Las condiciones activas pueden asignarse a clientes o proveedores y ser utilizadas por los distintos procesos comerciales del sistema.

Cuando una condición se encuentra activa, las reglas únicamente pueden consultarse para preservar la consistencia de la información.

---

### Inactiva

La condición deja de estar disponible para nuevas asignaciones o nuevas operaciones.

Sin embargo, permanece registrada para conservar el historial y permitir la consulta de información utilizada anteriormente.

---

# Reglas

Las reglas representan el comportamiento financiero de la condición comercial.

Una condición puede contener una sola regla o múltiples reglas consecutivas que definan diferentes beneficios conforme transcurren los días.

Este mecanismo permite modelar escenarios como:

- Contado.
- Neto 30 días.
- Pronto pago.
- Descuentos escalonados.
- Esquemas combinados de descuento y plazo.

[![image.png](https://ayuda.horfal.com/uploads/images/gallery/2026-07/scaled-1680-/qSaimage.png)](https://ayuda.horfal.com/uploads/images/gallery/2026-07/qSaimage.png)

## Campos disponibles

### Orden

Determina la secuencia lógica de cada tramo.

El sistema utiliza este orden para presentar las reglas de forma organizada.

Generalmente coincide con el crecimiento de los días definidos en cada intervalo.

---

### Día desde

Representa el primer día del periodo donde aplica la regla.

---

### Día hasta

Corresponde al último día donde la regla permanecerá vigente.

Los intervalos deben ser continuos y no deben superponerse.

---

### Descuento %

Define el porcentaje de descuento que se otorgará durante ese intervalo de días.

El porcentaje puede ser cero cuando únicamente se desea representar un plazo sin beneficio económico.

---

### Etiqueta

Es una descripción amigable del tramo.

Su objetivo es facilitar la interpretación de la condición comercial por parte de los usuarios.

Ejemplos:

- Contado neto.
- Pronto pago 10% a 15 días.
- Neto a 45 días.

---

## Ejemplo de condición escalonada

Una condición puede configurarse de la siguiente manera:

<div class="TyagGW_tableContainer" id="bkmrk-d%C3%ADas-descuento-0-20-"><div class="group TyagGW_tableWrapper flex flex-col-reverse w-fit" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="6230" data-start="6121"><thead data-end="6141" data-start="6121"><tr data-end="6141" data-start="6121"><th class="last:pe-10" data-col-size="sm" data-end="6128" data-start="6121">Días</th><th class="last:pe-10" data-col-size="sm" data-end="6141" data-start="6128">Descuento</th></tr></thead><tbody data-end="6230" data-start="6164"><tr data-end="6176" data-start="6164"><td data-col-size="sm" data-end="6168" data-start="6164">0</td><td data-col-size="sm" data-end="6176" data-start="6168">20 %</td></tr><tr data-end="6194" data-start="6177"><td data-col-size="sm" data-end="6186" data-start="6177">1 – 15</td><td data-col-size="sm" data-end="6194" data-start="6186">10 %</td></tr><tr data-end="6212" data-start="6195"><td data-col-size="sm" data-end="6205" data-start="6195">16 – 30</td><td data-col-size="sm" data-end="6212" data-start="6205">5 %</td></tr><tr data-end="6230" data-start="6213"><td data-col-size="sm" data-end="6223" data-start="6213">31 – 45</td><td data-col-size="sm" data-end="6230" data-start="6223">0 %</td></tr></tbody></table>

</div></div>En este ejemplo el beneficio disminuye conforme transcurre el tiempo, incentivando el pago anticipado.

---

## Consideraciones

- Los intervalos deben ser consecutivos.
- No deben existir días repetidos entre reglas.
- Tampoco deben dejarse espacios sin cubrir entre un tramo y otro.
- El último día representa el horizonte comercial definido para la condición.
- Una condición activa únicamente permite consultar sus reglas para mantener la integridad de la configuración.

---

# Asignaciones

Las asignaciones permiten relacionar una condición comercial con uno o varios socios.

Gracias a este mecanismo, el sistema conoce qué condición corresponde utilizar para cada cliente o proveedor durante la operación diaria.

Seleccione **Nueva asignación** para crear una nueva relación.

[![image.png](https://ayuda.horfal.com/uploads/images/gallery/2026-07/scaled-1680-/X08image.png)](https://ayuda.horfal.com/uploads/images/gallery/2026-07/X08image.png)

## Campos disponibles

### Condición comercial

Permite seleccionar la condición que será asignada.

Únicamente se muestran condiciones activas disponibles para la dirección correspondiente.

Durante la selección también se muestra información adicional como:

- Dirección.
- Estado.
- Nombre de la condición.

---

### Socio

Corresponde al cliente o proveedor que utilizará la condición comercial.

El selector realiza búsquedas bajo demanda, evitando cargar grandes cantidades de registros al mismo tiempo y mejorando el rendimiento del sistema.

Además, el listado se filtra automáticamente según la dirección de la condición:

- Compra → Proveedores.
- Venta → Clientes.

---

### Vigencia desde

Indica la fecha en que la asignación comenzará a aplicarse para ese socio.

---

### Vigencia hasta

Permite definir cuándo dejará de utilizarse la asignación.

Si permanece vacía, continuará vigente hasta que sea modificada o eliminada.

[![image.png](https://ayuda.horfal.com/uploads/images/gallery/2026-07/scaled-1680-/H6cimage.png)](https://ayuda.horfal.com/uploads/images/gallery/2026-07/H6cimage.png)

---

### Prioridad

Define el orden de preferencia cuando un mismo socio posee más de una condición comercial vigente.

Una prioridad menor representa una mayor preferencia durante la resolución de la condición aplicable.

Esta característica permite construir escenarios comerciales más flexibles sin perder control sobre cuál condición debe utilizarse primero.

---

## Consideraciones

- Solo es posible asignar condiciones activas.
- El sistema filtra automáticamente los socios compatibles con la dirección de la condición.
- Las asignaciones conservan su historial mientras permanezcan registradas.
- Una misma condición puede asignarse a múltiples socios.
- Las vigencias permiten programar cambios futuros sin afectar las operaciones actuales.
- La prioridad ayuda a resolver escenarios donde existen varias condiciones válidas para un mismo socio.