ADR-0002 · Stock real de combos: min(floor(stock/cantidad)), no exclusivo entre combos¶
- Estado: aceptado
- Decisores: desarrollador de PC Manager (equipo TI Compulandia)
- Fecha de la decisión: 2026-07-17
Contexto y problema¶
Hasta 2026-07 el stock que se enviaba al Integrador por un combo era binario (1 disponible / 0 no disponible). Eso produjo un bug real: un combo "2x1" que requería 2 unidades de un componente con stock 1 figuraba disponible. Además la tienda no podía mostrar cuántas unidades del combo se podían vender.
Opciones consideradas¶
- Stock real:
min(floor(stock_componente / cantidad_requerida))sobre los componentes asignados, sin reservar unidades entre combos - Mantener el binario 1/0
- Stock exclusivo con reserva de unidades entre combos que comparten componentes (no se implementó por su complejidad)
Decisión¶
Product.calculate_component_stock() calcula cuántos combos completos se
pueden armar: el mínimo de floor(stock/cantidad) entre los componentes
asignados. Los componentes de categoría SERVICIO no participan (no limitan
stock físico); los regalos sí. Si el resultado es 0, el combo pasa además a
is_available = False. Se acepta deliberadamente que los stocks no son
exclusivos: dos combos que comparten un componente cuentan las mismas
unidades físicas.
Consecuencias¶
Positivas¶
- La tienda recibe una cantidad vendible real, no un binario.
- Corrigió el bug del combo 2x1 con stock insuficiente (verificado end-to-end con PCM-12163).
Negativas / deuda asumida¶
- Sobreventa posible entre combos que comparten componentes: vender uno no
descuenta el stock reportado del otro hasta que el ciclo push→recepción→
push propague el nuevo stock del componente. La API de recepción
(contrato en
docs/integraciones/integrador/) reduce esa ventana al round-trip de dos requests, pero no la elimina. - Los combos creados antes del cambio conservan el stock guardado hasta que algo los reevalúe (pendiente: reevaluación masiva inicial).