Saltar a contenido

ADR-0003 · Selección automática de componentes: uno por categoría, con prioridad → supplier preferido → stock

  • Estado: aceptado
  • Decisores: desarrollador de PC Manager (equipo TI Compulandia)
  • Fecha de la decisión: la regla base no tiene fecha registrada (commits de 2025-05); always_include se agregó el 2025-11-13 y el criterio de supplier preferido el 2026-07-31

Contexto y problema

Un combo define varias relaciones componente-candidato por categoría (ej.: tres discos SSD alternativos), pero la receta publicada lleva uno solo por categoría. Si el elegido se queda sin stock, el combo debe sustituirlo solo, sin intervención del operador — y a la vez el operador necesita poder forzar elecciones (un componente específico, más de uno de la misma categoría, un regalo).

Opciones consideradas

  1. Selección automática por categoría con criterios ordenados y excepciones marcadas por el operador (implementada)
  2. Asignación 100 % manual del operador (estado previo implícito: sin sustitución automática, combos caídos hasta intervención humana)

Decisión

Product.select_components() elige, entre los candidatos activos y con stock, un componente por categoría comparando en orden: 1) prioridad explícita del operador (menor número gana), 2) supplier preferido (PCM_PREFERRED_SUPPLIER_ID, default 1 = Compulandia), 3) mayor stock. Excepciones: los componentes de categoría SERVICIO se asignan todos siempre, y los marcados always_include se asignan además del ganador de su categoría (permite N componentes de una misma categoría, ej. combos 2x1 o con regalo). La reevaluación corre en cada guardado del combo, en el pull diario (sync_components) y al recibir cambios por la API de recepción; si la receta asignada cambió, se empuja al Integrador.

Consecuencias

Positivas

  • Sustitución automática: un componente sin stock no tira el combo si hay alternativa en la categoría.
  • El operador conserva control fino (prioridad, always_include, regalos) sin renunciar a la automatización.

Negativas / deuda asumida

  • Las sustituciones cambian la receta publicada sin intervención humana: un cambio de criterio (como el de supplier preferido de 2026-07-31) puede disparar sustituciones y pushes masivos en la siguiente reevaluación.
  • Un always_include sin stock deja el combo no disponible aunque el resto de la categoría tenga alternativas (falla frecuente n.º 1 del runbook).
  • La regla vive en un método largo y sin tests automatizados.