Skip to content

Flag Actualiza Costo en Carga de Compras

Módulo: Compra Tipo: Process Estado: Implementado Fecha: 2026-06-11


Descripción

Cada ítem del subdiario de compras expone un checkbox Actualizar costo (actualiza_costo). Este flag es la única autoridad para decidir si la carga de una compra actualiza el costo almacenado del producto. Aplica a todos los artículos, incluyendo los que tienen stock habilitado.

Antes de esta corrección, tres bugs ignoraban el flag:

  • Bug A: MovimientoStockService::insert() actualizaba el costo de TODO movimiento de tipo INGRESO sin considerar el flag — solo los artículos sin stock respetaban la exclusión.
  • Bug B: Variable de ítems sobreescrita entre iteraciones del formulario (typo chequed en lugar de checked), haciendo que el último ítem del form pisara el valor del anterior al editar.
  • Bug C: Al cargar un comprobante existente para editar, el checkbox mostraba undefined en lugar del valor persistido.

Reglas de Negocio

RN-001: Flag como única autoridad de actualización de costo

El flag actualiza_costo del ítem es la única decisión que determina si esa compra actualiza el costo del producto. Ninguna otra capa del flujo de compras puede actualizar el costo de forma incondicional.

FlagStock habilitado¿Actualiza costo?
✅ marcado (default)✅ sí
✅ marcadono✅ sí
☐ desmarcado❌ no
☐ desmarcadono❌ no

Movimientos no originados en compras (ej. ajustes manuales de stock) actualizan el costo normalmente, sin ser afectados por este flag.

RN-002: Checkbox refleja el valor persistido al editar

Al cargar un comprobante existente para editar, el checkbox de cada ítem DEBE mostrar el valor almacenado en el registro, no un valor indefinido o por defecto. Esto garantiza que el usuario vea el estado real antes de modificar.

RN-003: Valor independiente por ítem en el formulario

Cada ítem del formulario mantiene su propio valor de actualiza_costo. La modificación del flag de un ítem no afecta los demás ítems del mismo comprobante.


Frontend

Interacciones

  • Cada fila del formulario de ítems de compra muestra un checkbox Actualizar costo habilitado por defecto.
  • El usuario puede desmarcar el checkbox para indicar que esa compra no debe modificar el costo del artículo.
  • Al editar un comprobante existente, el checkbox restaura el valor guardado.

Estados del checkbox

EstadoSignificado
Marcado (default)La carga actualiza el costo del producto
DesmarcadoLa carga NO actualiza el costo del producto

Backend

Flujo de actualización de costo

POST /compras/comprobante

Para cada ítem del comprobante:
  1. Leer flag actualiza_costo del payload
  2. Si artículo tiene stock → llamar MovimientoStockService::insert(actualizarCosto: flag)
  3. MovimientoStockService::insert() solo ejecuta el bloque de actualización de costo
     cuando actualizarCosto === true
  4. Si artículo NO tiene stock → llamar la actualización directa solo si flag === true

Archivos afectados

  • bautista-backend/service/Compra/MovimientoStockService.php — parámetro $actualizarCosto añadido a insert()
  • bautista-app/ — corrección del typo chequedchecked y restauración del valor al editar

Consideraciones Técnicas

  • El parámetro $actualizarCosto se agregó como posicional con default true en MovimientoStockService::insert() para no romper callers que no son de compras (ajustes manuales, etc.).
  • Los movimientos de stock generados por fuera del flujo de compras (ej. MovimientoStockManualService) no pasan el parámetro y conservan el comportamiento original de actualizar siempre el costo.

Referencias