Casos reales

Como pensar limites, opciones y configuracion por modulo

Un modulo no solo tiene tablas y servicios. Tambien puede tener limites comerciales, opciones activables y configuracion funcional por empresa o por plan.

PRODUCTOS

Limites

  • maximo de productos
  • maximo de categorias
  • maximo de atributos
  • maximo de imagenes por producto

Opciones

  • usar variantes
  • usar tallas y colores
  • usar atributos personalizados
  • usar productos compuestos

Configuracion

  • categoria por defecto
  • politica de stock minimo
  • mostrar codigos internos
  • formato de referencia

FACTURACION

Limites

  • maximo de documentos al mes
  • maximo de series
  • maximo de plantillas

Opciones

  • usar multiples series
  • usar plantillas avanzadas
  • usar aprobacion previa
  • usar notas de credito

Configuracion

  • serie por defecto
  • forma de pago por defecto
  • dias de vencimiento por defecto
  • texto legal de pie

PROVEEDORES

Limites

  • maximo de proveedores activos
  • maximo de cuentas bancarias por proveedor
  • maximo de contactos por proveedor

Opciones

  • usar evaluacion de proveedor
  • usar riesgo de proveedor
  • usar tarifas por proveedor
  • usar bloqueo por estado

Configuracion

  • forma de pago por defecto
  • dias de pago por defecto
  • prefijo de codigo proveedor
  • estado inicial al crear proveedor

COMPRAS

Limites

  • maximo de pedidos abiertos
  • maximo de recepciones mensuales
  • maximo de aprobadores

Opciones

  • usar aprobacion de pedidos
  • usar recepciones parciales
  • usar tarifas por proveedor
  • usar incidencias de compra

Configuracion

  • almacen por defecto
  • estado inicial del pedido
  • serie por defecto
  • modo de recepcion

Como se validan los limites

Los limites no deben validarse solo en la vista. Se validan en backend, normalmente en el servicio del modulo.

public async Task CrearProveedorAsync(...)
{
    var limite = await _moduloLimiteService.GetLimiteAsync("PROVEEDORES", empresaId, "max_proveedores");
    var totalActivos = await _context.Proveedores.CountAsync(x => x.EmpresaId == empresaId && x.Activo);

    if (limite.HasValue && totalActivos >= limite.Value)
        throw new InvalidOperationException("Se ha alcanzado el limite de proveedores.");

    ...
}

Como se usan opciones y configuracion

Las opciones activan capacidades. La configuracion aporta valores concretos.

Opcion

usar_recepciones_parciales = true

Activa o desactiva una capacidad del modulo.

Configuracion

almacen_defecto = 3

Define un valor concreto para trabajar.

Regla practica: limite restringe cantidad, opcion activa una capacidad, configuracion define un valor de trabajo.