El modeloDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/interezante456-pixel/proyecto-dise-o/llms.txt
Use this file to discover all available pages before exploring further.
Proveedor pertenece al espacio de nombres TiendaMiCholo.Models y representa a las empresas o personas naturales que abastecen de mercancía a la tienda. Su rol principal en el sistema es servir de punto de referencia para el catálogo de productos: todo Producto registrado debe estar asociado a un proveedor existente. El modelo incorpora validaciones orientadas al contexto tributario y de telecomunicaciones peruano, incluyendo el formato del RUC de SUNAT y el esquema de numeración de celulares de operadoras locales.
Propiedades
Clave primaria de la entidad. Generada automáticamente por la base de datos mediante
DatabaseGeneratedOption.Identity. No debe asignarse manualmente.Nombre comercial o razón social del proveedor tal como aparece registrado en SUNAT. Longitud máxima de 100 caracteres. No puede contener dígitos numéricos, según la expresión regular:
Registro Único de Contribuyente asignado por SUNAT. Longitud máxima de 11 caracteres. Debe contener exactamente 11 dígitos numéricos, sin letras, espacios ni guiones:Además de la validación de formato, el sistema impone unicidad a nivel de base de datos: no pueden existir dos proveedores con el mismo RUC. Esta restricción se verifica en el controlador antes de insertar o actualizar el registro.
Los RUC peruanos de personas jurídicas comienzan con
20 y los de personas naturales con negocios comienzan con 10. El sistema no verifica el prefijo, solo la longitud y que sean dígitos.Número de celular de contacto del proveedor. Campo opcional — no tiene anotación Esta expresión garantiza que:
[Required]. Longitud máxima de 50 caracteres según [StringLength(50)]. Cuando se proporciona, debe cumplir el formato de celular peruano según la expresión regular:- El número tenga exactamente 9 dígitos.
- El primer dígito sea 9 (prefijo obligatorio de celulares peruanos).
- No se trate de un número trivialmente inválido con 8 dígitos consecutivos idénticos (por ejemplo,
999999999o911111111son rechazados).
Validaciones de negocio
Además de las anotaciones[Required], [StringLength] y [RegularExpression] aplicadas directamente en el modelo, el sistema impone las siguientes reglas adicionales gestionadas en la capa de controlador (ProveedorController):
Unicidad del RUC
Unicidad del RUC
Antes de insertar un nuevo proveedor o actualizar uno existente, el controlador consulta la base de datos para verificar que ningún otro registro tenga el mismo valor en el campo
Ruc. Si se detecta un duplicado, se añade un error al ModelState y se retorna la vista con el mensaje de validación correspondiente, sin persistir el cambio.Formato de celular peruano
Formato de celular peruano
La expresión regular
^9(?!(\d)\1{7})\d{8}$ implementa dos reglas del formato peruano de telefonía móvil:- Prefijo 9: Todos los números de celular en Perú inician con el dígito
9, independientemente de la operadora (Claro, Movistar, Entel, Bitel). - Sin repetición total: El grupo de captura
(?!(\d)\1{7})es un lookahead negativo que rechaza números donde los 8 dígitos siguientes al9inicial sean todos idénticos. Esto filtra números de prueba o claramente incorrectos como999999999o988888888.
987654321, 912345678, 960123456.Bloqueo de eliminación con productos asociados
Bloqueo de eliminación con productos asociados
La política
OnDelete: Restrict configurada en AppDbContext impide eliminar un proveedor si tiene uno o más productos asociados en la tabla Productos. Cualquier intento de eliminación bajo esa condición resultará en una excepción de integridad referencial. La interfaz de usuario muestra un mensaje de error amigable en ese caso.Para desactivar un proveedor sin eliminar su historial, se recomienda marcar como inactivos (Activo = false) todos sus productos antes de intentar la eliminación.Relaciones
El modeloProveedor participa en la siguiente relación definida en AppDbContext.OnModelCreating:
Productos (uno a muchos)
Productos (tipo ICollection<Producto>) expone todos los artículos del catálogo que son suministrados por este proveedor. La relación es uno a muchos: un proveedor puede abastecer múltiples productos, pero cada producto referencia un único proveedor a través de Proveedor_ID.
La colección
Productos se inicializa como new List<Producto>() en el constructor implícito del modelo, por lo que nunca es null al acceder a ella desde código C#, incluso si el proveedor no tiene productos registrados.