# US-MGN003-001: CRUD de Roles ## Identificacion | Campo | Valor | |-------|-------| | **ID** | US-MGN003-001 | | **Modulo** | MGN-003 Roles/RBAC | | **Sprint** | Sprint 2 | | **Prioridad** | P0 - Critica | | **Story Points** | 8 | | **Estado** | Ready | | **Autor** | System | | **Fecha** | 2025-12-05 | --- ## Historia de Usuario **Como** administrador del sistema **Quiero** poder crear, ver, editar y eliminar roles **Para** gestionar los niveles de acceso de los usuarios a las funcionalidades del sistema --- ## Criterios de Aceptacion ### Escenario 1: Crear rol exitosamente ```gherkin Given un admin autenticado con permiso "roles:create" When crea un rol con: | name | Vendedor | | description | Equipo de ventas | | permissions | [sales:*, users:read] | Then el sistema crea el rol And el rol tiene slug "vendedor" And el rol tiene isBuiltIn = false And responde con status 201 ``` ### Escenario 2: Listar roles con paginacion ```gherkin Given 12 roles en el tenant (5 built-in + 7 custom) When el admin solicita GET /api/v1/roles?page=1&limit=10 Then el sistema retorna 10 roles And roles built-in aparecen primero And incluye usersCount y permissionsCount por rol And incluye meta con total=12 ``` ### Escenario 3: No crear rol con nombre duplicado ```gherkin Given un rol existente con nombre "Vendedor" When el admin intenta crear otro rol "Vendedor" Then el sistema responde con status 409 And el mensaje es "Ya existe un rol con este nombre" ``` ### Escenario 4: No eliminar rol del sistema ```gherkin Given el rol built-in "admin" When el admin intenta eliminarlo Then el sistema responde con status 400 And el mensaje es "No se pueden eliminar roles del sistema" ``` ### Escenario 5: Soft delete con reasignacion ```gherkin Given rol "Vendedor" con 5 usuarios asignados When admin elimina el rol con reassignTo="user" Then el rol tiene deleted_at establecido And los 5 usuarios ahora tienen rol "user" And el rol no aparece en listados normales ``` --- ## Mockup / Wireframe ``` +------------------------------------------------------------------+ | [Logo] Roles [+ Nuevo Rol] | +------------------------------------------------------------------+ | Buscar: [___________________] [Tipo: Todos ▼] | +------------------------------------------------------------------+ | | Nombre | Descripcion | Permisos | Usuarios | ⚙ | |---|-----------------|--------------------|-----------|---------|----| | 🔒| Super Admin | Acceso total | 45 | 1 | 👁 | | 🔒| Admin | Gestion tenant | 32 | 3 | 👁 | | 🔒| Manager | Supervision | 18 | 5 | 👁 | | 🔒| User | Acceso basico | 8 | 42 | 👁 | | | Vendedor | Equipo de ventas | 12 | 8 | ✏🗑| | | Contador | Area contable | 15 | 2 | ✏🗑| +------------------------------------------------------------------+ 🔒 = Rol del sistema (built-in), no editable/eliminable ``` --- ## Notas Tecnicas ### API Endpoints ```typescript POST /api/v1/roles GET /api/v1/roles?page=1&limit=10&type=custom&search=vend GET /api/v1/roles/:id PATCH /api/v1/roles/:id DELETE /api/v1/roles/:id?reassignTo=other-role-id ``` ### Validaciones | Campo | Regla | |-------|-------| | name | 3-50 chars, unico en tenant | | description | Max 500 chars | | permissionIds | Array min 1 | --- ## Definicion de Done - [ ] Endpoint POST /api/v1/roles - [ ] Endpoint GET /api/v1/roles con paginacion - [ ] Endpoint GET /api/v1/roles/:id - [ ] Endpoint PATCH /api/v1/roles/:id - [ ] Endpoint DELETE /api/v1/roles/:id - [ ] Validacion de roles built-in - [ ] Frontend: RolesListPage - [ ] Frontend: CreateRoleModal - [ ] Frontend: EditRoleModal - [ ] Tests unitarios - [ ] Code review aprobado --- ## Estimacion | Tarea | Horas | |-------|-------| | Backend: CRUD endpoints | 5h | | Backend: Validaciones | 2h | | Backend: Tests | 2h | | Frontend: RolesListPage | 4h | | Frontend: RoleForm | 4h | | Frontend: Tests | 2h | | **Total** | **19h** | --- ## Historial | Version | Fecha | Autor | Cambios | |---------|-------|-------|---------| | 1.0 | 2025-12-05 | System | Creacion inicial |