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.