Skip to content

Lista de Precios - Costo por Margen de Ganancia

DOCUMENTACION RETROSPECTIVA - Generada a partir de codigo implementado el 2026-02-09

Modulo: Ventas Tipo: Process Estado: Implementado Fecha: 2026-02-09


Descripcion General

Este proceso permite generar automaticamente precios de venta para una lista de precios determinada, calculando el precio a partir del costo del articulo mas un margen de ganancia (porcentaje). El usuario puede elegir entre aplicar el porcentaje de ganancia registrado individualmente en cada articulo, o aplicar un porcentaje fijo uniforme a todos los articulos dentro de un rango de agrupaciones (rubros).

Adicionalmente, el proceso ofrece la opcion de calcular el precio final incluyendo impuestos (IVA e impuestos internos), o mantener el precio como neto (sin impuestos).

Este proceso forma parte del submodulo "Lista de precios" dentro de las Bases del modulo de Ventas, y es complementario al proceso "Automatico por rango" que genera listas basadas en listas de precios existentes.


Frontend (Perspectiva de Usuario)

Vistas

  • Formulario de generacion: Pantalla unica con formulario para configurar los parametros de generacion de la lista de precios por margen de ganancia.
  • Ubicacion en menu: Ventas > Bases > Lista de precios > Costo por margen de ganancia

Interacciones del usuario

  1. Seleccionar modo de porcentaje:

    • Opcion A (por defecto): "Aplicar % Ganancia registrado en el articulo" - usa el porcentaje individual de cada producto
    • Opcion B: "Aplicar % Fijo" - habilita un campo de texto para ingresar un porcentaje uniforme
  2. Indicar numero de lista destino: Ingresar el numero de la lista de precios donde se generaran los precios

  3. Opcion de precio final: Marcar/desmarcar checkbox "Obtener Precio Final (Costo + Impuestos)" para incluir IVA e impuestos internos en el precio calculado

  4. Seleccionar rango de agrupaciones (rubros):

    • Campo "Desde agrupacion" con autocompletado de rubros
    • Campo "Hasta agrupacion" con autocompletado de rubros
    • Se inicializan automaticamente con el primer y ultimo rubro existentes
  5. Ejecutar generacion: Boton "Aceptar" que inicia el proceso

  6. Cancelar: Boton "Cancelar" que retorna al menu de ventas

Permisos

  • VENTAS_BASES - Acceso al submenu de Bases de ventas
  • VENTAS_BASES_LISTA-PRECIO - Acceso al submenu de Lista de precios
  • VENTAS_BASES_LISTA-PRECIO_COSTO - Acceso especifico a "Costo por margen de ganancia"

Estados de UI

  • Carga inicial: Se muestra indicador de carga mientras se obtienen los rubros por defecto
  • Procesando: Se muestra indicador "Generando lista de precios" durante la ejecucion
  • Exito: Se muestra mensaje "Lista de precio generada"
  • Error: Se muestra mensaje de error si no se pudieron procesar productos (ej: ningun producto tiene costo o porcentaje de ganancia)

Backend (Perspectiva de Datos de Negocio)

Entidades de negocio

  1. Lista de Precios: Registro que asocia un producto con un precio en una lista determinada

    • Numero de lista
    • Precio
    • Tipo de precio (Neto o Final)
    • Referencia al articulo
  2. Articulo (Producto): Entidad existente que contiene los datos base necesarios

    • Costo del articulo
    • Porcentaje de ganancia individual
    • Categoria de IVA (con porcentaje)
    • Impuesto interno (valor y tipo: porcentaje o fijo)
    • Rubro (agrupacion)

Datos necesarios para el proceso

Parametros de entrada:

  • Numero de lista destino (requerido)
  • Rango de agrupaciones: desde y hasta (requerido)
  • Modo de porcentaje: por articulo o fijo (requerido)
  • Porcentaje fijo (requerido solo si el modo es fijo)
  • Obtener precio final: si/no (requerido)

Datos consultados del articulo:

  • Costo
  • Porcentaje de ganancia (si el modo es por articulo)
  • Categoria de IVA y su porcentaje (si se calcula precio final)
  • Impuesto interno y su tipo (si se calcula precio final)

Relaciones de negocio

  • Cada registro de lista de precios esta asociado a un unico articulo
  • Un articulo puede tener precios en multiples listas
  • Los articulos se filtran por rango de agrupaciones (rubros)
  • El calculo de precio final utiliza la categoria de IVA e impuestos internos del articulo

Validaciones de negocio

  • El numero de lista es requerido
  • Las agrupaciones desde/hasta son requeridas
  • Si el modo es porcentaje fijo, el porcentaje debe ser un valor numerico
  • Los articulos sin costo definido (costo <= 0) se omiten del proceso
  • Los articulos sin porcentaje de ganancia definido se omiten (solo en modo "por articulo")

Reglas de negocio

Regla 1: Calculo del precio base

  • Condicion: Para cada articulo dentro del rango de agrupaciones con costo > 0
  • Accion:
    • Si modo "porcentaje por articulo": precio_base = costo + (costo * porc_ganancia / 100)
    • Si modo "porcentaje fijo": precio_base = costo + (costo * porcentaje_fijo / 100)

Regla 2: Calculo del precio final (opcional)

  • Condicion: Si el usuario marca "Obtener Precio Final"
  • Accion: Al precio base se le suman los impuestos:
    • IVA: Se aplica el porcentaje de la categoria de IVA del articulo sobre el precio base
    • Impuesto interno: Se aplica segun su tipo:
      • Si es porcentaje: imp_interno = precio_base * valor / 100
      • Si es fijo: imp_interno = valor
    • El tipo de precio resultante se marca como "Final" (F)

Regla 3: Tipo de precio segun calculo

  • Condicion: Segun la opcion de precio final
  • Accion:
    • Con precio final activado: tipo de precio = "Final" (F)
    • Sin precio final: tipo de precio = "Neto" (N)

Regla 4: Insercion o actualizacion

  • Condicion: Para cada articulo procesado
  • Accion:
    • Si el articulo NO existe en la lista destino: se crea un nuevo registro
    • Si el articulo YA existe en la lista destino: se actualiza el precio y tipo de precio

Regla 5: Exclusion de articulos sin datos

  • Condicion: Articulo sin costo, o sin porcentaje de ganancia (en modo "por articulo")
  • Accion: Se omite silenciosamente sin generar registro ni error

Regla 6: Resultado del proceso

  • Condicion: Si al menos un articulo fue procesado exitosamente
  • Accion: Se considera el proceso exitoso
  • Condicion alternativa: Si ningun articulo fue procesado
  • Accion: Se retorna error indicando que faltan datos

Casos de uso

Caso 1: Generar lista de precios con porcentaje fijo

Actor: Usuario con permiso de ventas

Precondiciones:

  • El usuario tiene los permisos necesarios (VENTAS_BASES_LISTA-PRECIO_COSTO)
  • Existen articulos con costo definido en las agrupaciones seleccionadas
  • El usuario esta autenticado

Flujo principal:

  1. El usuario accede a Ventas > Bases > Lista de precios > Costo por margen de ganancia
  2. El sistema carga automaticamente el primer y ultimo rubro como rango por defecto
  3. El usuario selecciona "Aplicar % Fijo"
  4. El usuario ingresa el porcentaje deseado (ej: 30)
  5. El usuario ingresa el numero de lista destino (ej: 2)
  6. El usuario opcionalmente ajusta el rango de agrupaciones
  7. El usuario presiona "Aceptar"
  8. El sistema calcula los precios para todos los articulos del rango
  9. El sistema muestra mensaje de exito

Postcondiciones:

  • Todos los articulos del rango con costo definido tienen un precio en la lista indicada
  • El precio es: costo + 30% del costo
  • El tipo de precio es Neto (N)

Flujos alternativos:

  • Sin costo: Articulos con costo 0 o negativo son omitidos
  • Lista existente: Si ya existian precios en la lista, se actualizan

Caso 2: Generar lista con porcentaje individual y precio final

Actor: Usuario con permiso de ventas

Precondiciones:

  • El usuario tiene los permisos necesarios
  • Existen articulos con costo Y porcentaje de ganancia definidos
  • Los articulos tienen categoria de IVA asignada

Flujo principal:

  1. El usuario accede a la funcionalidad
  2. Mantiene seleccionado "Aplicar % Ganancia registrado en el articulo" (opcion por defecto)
  3. Marca el checkbox "Obtener Precio Final (Costo + Impuestos)"
  4. Ingresa el numero de lista destino
  5. Ajusta las agrupaciones si es necesario
  6. Presiona "Aceptar"
  7. El sistema calcula: precio_base = costo + (costo * porc_ganancia_articulo / 100)
  8. El sistema agrega IVA e impuestos internos al precio base
  9. El sistema muestra mensaje de exito

Postcondiciones:

  • Los articulos tienen precio final (con impuestos incluidos) en la lista
  • El tipo de precio es Final (F)
  • Articulos sin porcentaje de ganancia definido fueron omitidos

Flujos alternativos:

  • Sin porcentaje: Articulos sin porc_ganancia son omitidos
  • Sin IVA: Si el articulo no tiene categoria de IVA, el impuesto IVA no se agrega
  • Sin impuesto interno: Si el articulo no tiene impuesto interno definido, no se agrega

Caso 3: Ningun producto procesable

Actor: Usuario con permiso de ventas

Precondiciones:

  • El rango de agrupaciones seleccionado no contiene articulos con costo definido

Flujo principal:

  1. El usuario configura los parametros y presiona "Aceptar"
  2. El sistema recorre todos los articulos del rango
  3. Todos los articulos se omiten (sin costo o sin porcentaje)
  4. El sistema detecta que ningun producto fue procesado
  5. El sistema muestra error: "Faltan datos para generar la lista de precios automatica"

Postcondiciones:

  • No se modifico ninguna lista de precios
  • El usuario es informado del problema

Consideraciones

Seguridad

  • Solo usuarios con permiso especifico VENTAS_BASES_LISTA-PRECIO_COSTO pueden acceder a esta funcionalidad
  • La operacion es masiva y puede modificar precios de muchos articulos a la vez
  • No existe confirmacion previa antes de la ejecucion (se ejecuta directamente al presionar Aceptar)

Auditoria

  • [REQUIERE VALIDACION] No se detecto registro de auditoria explicito en el metodo generarListaMargenGanancia. Las operaciones individuales de INSERT/UPDATE en la tabla de precios no registran auditoria.

Rendimiento

  • El proceso puede involucrar un gran numero de articulos dependiendo del rango de agrupaciones
  • Cada articulo genera consultas individuales a la base de datos para verificar existencia y luego insertar o actualizar
  • No se observa paginacion ni limite de articulos a procesar

Dependencias

Funcionalidades relacionadas

  • Articulos (Productos): Los articulos deben existir con costo y (opcionalmente) porcentaje de ganancia definidos
  • Agrupaciones (Rubros): Se utilizan como filtro para delimitar que articulos procesar
  • Categorias de IVA: Necesarias para el calculo de precio final
  • Lista de precios por rango: Proceso hermano que genera listas basadas en listas existentes (no en costo)
  • Formulario de Producto: Donde se definen costo, porcentaje de ganancia y listas de precios individuales

Servicios externos

  • No se identificaron dependencias con servicios externos

Criterios de aceptacion

  • [x] AC-001: El sistema calcula correctamente el precio base como costo + (costo * porcentaje / 100)
  • [x] AC-002: El sistema permite elegir entre porcentaje del articulo o porcentaje fijo
  • [x] AC-003: El sistema calcula precio final incluyendo IVA e impuestos internos cuando se activa la opcion
  • [x] AC-004: Los articulos sin costo son excluidos del proceso
  • [x] AC-005: Los articulos sin porcentaje de ganancia son excluidos (en modo por articulo)
  • [x] AC-006: Si el articulo ya existe en la lista, se actualiza; si no existe, se crea
  • [x] AC-007: El tipo de precio se marca como "F" (Final) o "N" (Neto) segun la opcion elegida
  • [x] AC-008: Si ningun producto fue procesado, se muestra un error informativo
  • [x] AC-009: El rango de agrupaciones se inicializa automaticamente con el primer y ultimo rubro
  • [x] AC-010: Solo usuarios con permiso VENTAS_BASES_LISTA-PRECIO_COSTO pueden acceder

Preguntas Pendientes

Informacion Faltante: Hay preguntas sobre esta funcionalidad que requieren validacion. Ver: Preguntas sobre Lista de Precios Costo Ganancia


Referencias Tecnicas


NOTA IMPORTANTE: Esta documentacion fue generada automaticamente analizando el codigo implementado. Se recomienda validar con stakeholders de negocio para confirmar que refleja fielmente los requisitos originales.