Skip to content

Preguntas sobre Lista de Precios - Costo por Margen de Ganancia

INFORMACION REQUERIDA - Preguntas generadas durante analisis retrospectivo el 2026-02-09


Preguntas Criticas (Afectan la documentacion de negocio)

1. Ausencia de transaccion en generarListaMargenGanancia

Observacion: El metodo generarListaMargenGanancia en ListaPrecioService no envuelve las operaciones de INSERT/UPDATE dentro de una transaccion, a diferencia de generarListaPrecioPorRango que si lo hace. Si ocurre un error a mitad del procesamiento, algunos productos quedan actualizados y otros no.

Pregunta: Es intencional que esta operacion no sea atomica? Se ha considerado el impacto de tener una lista de precios parcialmente generada?

Respuesta: No hemos tenido inconvenientes aunque sería conveniente cambiarlo en algún momento

Impacto: Afecta la documentacion de reglas de negocio sobre integridad de datos y el comportamiento esperado ante errores.


2. Comportamiento cuando el porcentaje es null vs definido

Observacion: Si el usuario selecciona "Aplicar % Ganancia registrado en el articulo" (radio button por defecto), el campo porcentaje se envia como null. En el backend, cuando porcentaje es null, se usa el campo porc_ganancia del producto. Si el producto no tiene porc_ganancia definido, se omite silenciosamente.

Pregunta: Deberia el sistema notificar al usuario cuantos productos fueron omitidos por no tener porcentaje de ganancia definido? Existe un requerimiento de negocio para informar sobre productos excluidos del proceso?

Impacto: Afecta la documentacion de casos de uso y flujos alternativos. El usuario podria no saber que ciertos productos no fueron procesados.


3. Productos con costo cero o negativo se omiten silenciosamente

Observacion: En el metodo generarListaMargenGanancia, los productos con costo <= 0 son silenciosamente omitidos (continue). No se genera ningun registro ni notificacion.

Pregunta: Deberia notificarse al usuario cuantos productos fueron excluidos por no tener costo definido? Es correcto omitir productos con costo = 0?

Impacto: Afecta la documentacion de reglas de negocio y los criterios de aceptacion sobre completitud del proceso.


4. Valor de retorno booleano vs informacion detallada

Observacion: El metodo generarListaMargenGanancia retorna $productos_cargados (booleano) que solo indica si al menos un producto fue procesado. No retorna cuantos productos fueron creados, actualizados u omitidos.

Pregunta: Se requiere un reporte mas detallado del resultado de la operacion? (ej: "Se actualizaron 45 productos, se omitieron 12 por falta de costo, se omitieron 3 por falta de porcentaje de ganancia")

Impacto: Afecta la documentacion de la respuesta esperada y la experiencia del usuario al ejecutar el proceso.


5. Relacion entre "Lista" y concepto de negocio

Observacion: El campo lista en la tabla precios es un VARCHAR(3) que acepta valores numericos enteros. No existe una tabla maestra de "listas de precios" - el numero de lista se ingresa libremente.

Pregunta: Existe una tabla maestra o catalogo de listas de precios? El numero de lista tiene significado de negocio (ej: lista 1 = mayorista, lista 2 = minorista)? Cuantas listas de precios pueden existir (maximo 999 por el limite de 3 caracteres)?

Respuesta: Los límites siempre deben corresponder a la base de datos, esto añadelo a un TODO.md en Bautista/

Impacto: Afecta la documentacion de la entidad "Lista de Precios" y sus relaciones con el dominio de negocio.


Preguntas Tecnicas (Afectan la documentacion tecnica)

6. Tabla precios sin clave primaria formal

Observacion: La migracion de la tabla precios se crea con ['id' => false], es decir, sin campo ID autoincremental. La clave logica es la combinacion (lista, numero), pero no se define como PRIMARY KEY ni UNIQUE constraint en la migracion.

Pregunta: Existe un constraint de unicidad en la base de datos que no se refleja en la migracion? Es posible tener registros duplicados (mismo producto en la misma lista)?

Respuesta: No posee FK de momento, sólo FK lógica como muchas de las FK del sistema

Impacto: Afecta la documentacion del esquema de base de datos y las garantias de integridad referencial.


7. Campo prefin sin uso

Observacion: La migracion de la tabla precios incluye un campo prefin (DECIMAL 16,5) marcado en comentarios como "Sin uso". No se referencia en ningun codigo del backend ni frontend.

Pregunta: Cual era el proposito original del campo prefin? Debe documentarse como campo deprecado? Se planea eliminarlo?

Impacto: Menor. Afecta la documentacion del esquema de base de datos.


8. Nivel de tenancy configurable (EMPRESA + SUCURSAL)

Observacion: La tabla precios se configura con niveles [LEVEL_EMPRESA, LEVEL_SUCURSAL] mediante ConfigurableMigration. Ademas, la condicion shouldExecute requiere que el modulo Ventas o CRM este habilitado y que exista la tabla producto.

Pregunta: En la practica, a que nivel se usa predominantemente? Si una empresa configura la tabla solo a nivel EMPRESA, las listas de precios son compartidas entre todas las sucursales?

Impacto: Afecta la documentacion de multi-tenancy y el comportamiento de las listas de precios segun configuracion de la empresa.


9. Comentario invertido en el servicio (insert vs update)

Observacion: En ListaPrecioService::generarListaMargenGanancia, lineas 160-163, los comentarios estan invertidos:

php
if (empty($producto_existe)) {
    $this->model->insert($lista_precio); // Comentario: "Si el producto no existe en la lista, lo insertamos"
} else {
    $this->model->update($lista_precio); // Comentario: "Si no existe, entonces lo creamos"
}

El comentario del else dice "Si no existe, entonces lo creamos" pero en realidad deberia decir "Si ya existe, lo actualizamos".

Pregunta: Se confirma que el comportamiento correcto es INSERT cuando no existe y UPDATE cuando ya existe? (El codigo es correcto, solo el comentario esta mal)

Impacto: Menor. Afecta la claridad de la documentacion tecnica.


Como Usar Este Documento

Este documento contiene preguntas que surgieron durante el analisis del codigo. Cada pregunta incluye espacio para agregar la respuesta:

Formato de respuesta:

Respuesta:

Una vez respondidas, estas respuestas se incorporaran a la documentacion final.


Estado de Validacion

  • [ ] Preguntas criticas respondidas (5)
  • [ ] Preguntas tecnicas respondidas (4)
  • [ ] Respuestas validadas con stakeholders
  • [ ] Documentacion actualizada con respuestas