Appearance
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