510 lines
14 KiB
Markdown
510 lines
14 KiB
Markdown
# AN-003: Historias de Usuario
|
|
|
|
**Proyecto:** Sistema de Registro de Estudiantes - Inter Rapidísimo
|
|
**Rol:** Product Owner
|
|
**Fecha:** 2026-01-07
|
|
|
|
---
|
|
|
|
## 1. Épica Principal
|
|
|
|
**EP-001: Sistema de Inscripción de Estudiantes**
|
|
|
|
Como institución educativa, necesito un sistema web que permita a los estudiantes registrarse e inscribirse en materias siguiendo las reglas del programa de créditos, para gestionar eficientemente el proceso de matrícula.
|
|
|
|
---
|
|
|
|
## 2. Historias de Usuario
|
|
|
|
### US-001: Registro de Estudiante
|
|
|
|
| Campo | Valor |
|
|
|-------|-------|
|
|
| **ID** | US-001 |
|
|
| **Épica** | EP-001 |
|
|
| **Prioridad** | Alta |
|
|
| **Story Points** | 5 |
|
|
| **Sprint** | 1 |
|
|
|
|
**Historia:**
|
|
> Como **estudiante nuevo**,
|
|
> quiero **registrarme en el sistema con mi nombre y correo electrónico**,
|
|
> para **poder acceder al programa de inscripción de materias**.
|
|
|
|
**Criterios de Aceptación:**
|
|
|
|
```gherkin
|
|
Scenario: Registro exitoso de estudiante
|
|
Given estoy en la página de registro
|
|
When ingreso un nombre válido "Juan Pérez"
|
|
And ingreso un email válido "juan@email.com"
|
|
And presiono el botón "Registrar"
|
|
Then el sistema crea mi cuenta
|
|
And veo un mensaje de confirmación
|
|
And soy redirigido a la página de inscripción
|
|
|
|
Scenario: Registro con email duplicado
|
|
Given existe un estudiante con email "juan@email.com"
|
|
When intento registrarme con el mismo email
|
|
Then veo el mensaje "Ya existe un estudiante con este email"
|
|
And el formulario no se envía
|
|
|
|
Scenario: Registro con email inválido
|
|
Given estoy en la página de registro
|
|
When ingreso un email inválido "juanemail.com"
|
|
Then veo el mensaje "Formato de email no válido"
|
|
And el botón de registro está deshabilitado
|
|
```
|
|
|
|
**Notas Técnicas:**
|
|
- Validación de email en frontend y backend
|
|
- Email almacenado en minúsculas (normalización)
|
|
|
|
---
|
|
|
|
### US-002: Consulta de Materias Disponibles
|
|
|
|
| Campo | Valor |
|
|
|-------|-------|
|
|
| **ID** | US-002 |
|
|
| **Épica** | EP-001 |
|
|
| **Prioridad** | Alta |
|
|
| **Story Points** | 3 |
|
|
| **Sprint** | 1 |
|
|
|
|
**Historia:**
|
|
> Como **estudiante registrado**,
|
|
> quiero **ver el catálogo de las 10 materias disponibles**,
|
|
> para **conocer mis opciones de inscripción**.
|
|
|
|
**Criterios de Aceptación:**
|
|
|
|
```gherkin
|
|
Scenario: Ver catálogo completo
|
|
Given estoy autenticado como estudiante
|
|
When accedo a la sección de materias
|
|
Then veo una lista de 10 materias
|
|
And cada materia muestra nombre, créditos (3) y profesor
|
|
|
|
Scenario: Ver detalle de materia
|
|
Given estoy viendo el catálogo de materias
|
|
When selecciono "Matemáticas I"
|
|
Then veo el nombre del profesor asignado
|
|
And veo que equivale a 3 créditos
|
|
```
|
|
|
|
---
|
|
|
|
### US-003: Inscripción en Materia
|
|
|
|
| Campo | Valor |
|
|
|-------|-------|
|
|
| **ID** | US-003 |
|
|
| **Épica** | EP-001 |
|
|
| **Prioridad** | Alta |
|
|
| **Story Points** | 8 |
|
|
| **Sprint** | 1 |
|
|
|
|
**Historia:**
|
|
> Como **estudiante registrado**,
|
|
> quiero **inscribirme en una materia disponible**,
|
|
> para **acumular créditos en mi programa académico**.
|
|
|
|
**Criterios de Aceptación:**
|
|
|
|
```gherkin
|
|
Scenario: Inscripción exitosa
|
|
Given tengo menos de 3 materias inscritas
|
|
And la materia "Física I" está disponible para mí
|
|
When presiono "Inscribir" en "Física I"
|
|
Then la materia se agrega a mis inscripciones
|
|
And mis créditos aumentan en 3
|
|
And veo mensaje de confirmación
|
|
|
|
Scenario: Intento inscripción con máximo alcanzado
|
|
Given ya tengo 3 materias inscritas
|
|
When intento inscribir otra materia
|
|
Then veo el mensaje "Ya tienes el máximo de 3 materias"
|
|
And el botón de inscripción está deshabilitado
|
|
|
|
Scenario: Intento inscripción con mismo profesor
|
|
Given estoy inscrito en "Matemáticas I" (Profesor A)
|
|
When intento inscribir "Matemáticas II" (Profesor A)
|
|
Then veo el mensaje "Ya tienes una materia con este profesor"
|
|
And la inscripción no se procesa
|
|
```
|
|
|
|
**Notas Técnicas:**
|
|
- Validaciones RN-003 y RN-005 en capa de dominio
|
|
- Transacción atómica para inscripción
|
|
|
|
---
|
|
|
|
### US-004: Cancelación de Inscripción
|
|
|
|
| Campo | Valor |
|
|
|-------|-------|
|
|
| **ID** | US-004 |
|
|
| **Épica** | EP-001 |
|
|
| **Prioridad** | Media |
|
|
| **Story Points** | 3 |
|
|
| **Sprint** | 1 |
|
|
|
|
**Historia:**
|
|
> Como **estudiante inscrito**,
|
|
> quiero **cancelar la inscripción de una materia**,
|
|
> para **liberar espacio y poder inscribir otra**.
|
|
|
|
**Criterios de Aceptación:**
|
|
|
|
```gherkin
|
|
Scenario: Cancelación exitosa
|
|
Given estoy inscrito en "Física I"
|
|
When presiono "Cancelar inscripción" en esa materia
|
|
And confirmo la acción
|
|
Then la materia se elimina de mis inscripciones
|
|
And mis créditos disminuyen en 3
|
|
And la materia vuelve a estar disponible
|
|
|
|
Scenario: Cancelar con confirmación
|
|
Given estoy inscrito en "Física I"
|
|
When presiono "Cancelar inscripción"
|
|
Then veo un diálogo de confirmación
|
|
And puedo cancelar o confirmar la acción
|
|
```
|
|
|
|
---
|
|
|
|
### US-005: Visualización de Materias No Disponibles
|
|
|
|
| Campo | Valor |
|
|
|-------|-------|
|
|
| **ID** | US-005 |
|
|
| **Épica** | EP-001 |
|
|
| **Prioridad** | Media |
|
|
| **Story Points** | 3 |
|
|
| **Sprint** | 2 |
|
|
|
|
**Historia:**
|
|
> Como **estudiante registrado**,
|
|
> quiero **ver claramente qué materias no puedo inscribir y por qué**,
|
|
> para **tomar decisiones informadas sobre mi inscripción**.
|
|
|
|
**Criterios de Aceptación:**
|
|
|
|
```gherkin
|
|
Scenario: Ver materias bloqueadas por profesor
|
|
Given estoy inscrito en "Matemáticas I" (Profesor A)
|
|
When veo el catálogo de materias
|
|
Then "Matemáticas II" aparece deshabilitada
|
|
And veo el tooltip "Ya tienes materia con Profesor A"
|
|
|
|
Scenario: Ver contador de materias restantes
|
|
Given tengo 2 materias inscritas
|
|
When veo mi panel de inscripción
|
|
Then veo "2/3 materias inscritas"
|
|
And veo "Puedes inscribir 1 materia más"
|
|
```
|
|
|
|
---
|
|
|
|
### US-006: Consulta de Otros Estudiantes
|
|
|
|
| Campo | Valor |
|
|
|-------|-------|
|
|
| **ID** | US-006 |
|
|
| **Épica** | EP-001 |
|
|
| **Prioridad** | Baja |
|
|
| **Story Points** | 2 |
|
|
| **Sprint** | 2 |
|
|
|
|
**Historia:**
|
|
> Como **estudiante registrado**,
|
|
> quiero **ver la lista de otros estudiantes en el sistema**,
|
|
> para **conocer quiénes están en el programa**.
|
|
|
|
**Criterios de Aceptación:**
|
|
|
|
```gherkin
|
|
Scenario: Ver lista de estudiantes
|
|
Given estoy autenticado como estudiante
|
|
When accedo a la sección de estudiantes
|
|
Then veo una lista de todos los estudiantes registrados
|
|
And cada estudiante muestra solo su nombre
|
|
```
|
|
|
|
**Notas:**
|
|
- Por privacidad, no se muestra email ni materias de otros estudiantes
|
|
|
|
---
|
|
|
|
### US-007: Ver Compañeros de Clase
|
|
|
|
| Campo | Valor |
|
|
|-------|-------|
|
|
| **ID** | US-007 |
|
|
| **Épica** | EP-001 |
|
|
| **Prioridad** | Media |
|
|
| **Story Points** | 5 |
|
|
| **Sprint** | 2 |
|
|
|
|
**Historia:**
|
|
> Como **estudiante inscrito en materias**,
|
|
> quiero **ver los nombres de mis compañeros en cada clase**,
|
|
> para **conocer con quiénes compartiré el curso**.
|
|
|
|
**Criterios de Aceptación:**
|
|
|
|
```gherkin
|
|
Scenario: Ver compañeros por materia
|
|
Given estoy inscrito en "Física I"
|
|
And otros estudiantes también están inscritos en "Física I"
|
|
When accedo a "Mis compañeros de clase"
|
|
Then veo "Física I" como sección
|
|
And bajo ella veo la lista de nombres de compañeros
|
|
|
|
Scenario: Sin compañeros en materia
|
|
Given estoy inscrito en "Redes I"
|
|
And ningún otro estudiante está inscrito en "Redes I"
|
|
When accedo a "Mis compañeros de clase"
|
|
Then veo "Redes I" con mensaje "Sin compañeros aún"
|
|
|
|
Scenario: Privacidad de datos
|
|
Given estoy viendo mis compañeros de clase
|
|
Then solo veo los nombres
|
|
And NO veo emails ni otras materias de mis compañeros
|
|
```
|
|
|
|
---
|
|
|
|
### US-008: Actualización de Datos Personales
|
|
|
|
| Campo | Valor |
|
|
|-------|-------|
|
|
| **ID** | US-008 |
|
|
| **Épica** | EP-001 |
|
|
| **Prioridad** | Baja |
|
|
| **Story Points** | 2 |
|
|
| **Sprint** | 2 |
|
|
|
|
**Historia:**
|
|
> Como **estudiante registrado**,
|
|
> quiero **actualizar mi nombre o correo electrónico**,
|
|
> para **mantener mis datos actualizados**.
|
|
|
|
**Criterios de Aceptación:**
|
|
|
|
```gherkin
|
|
Scenario: Actualización exitosa de nombre
|
|
Given estoy en mi perfil
|
|
When cambio mi nombre a "Juan Carlos Pérez"
|
|
And presiono "Guardar"
|
|
Then mis datos se actualizan
|
|
And veo mensaje de confirmación
|
|
|
|
Scenario: Cambio de email a uno existente
|
|
Given existe otro estudiante con email "otro@email.com"
|
|
When intento cambiar mi email a "otro@email.com"
|
|
Then veo el mensaje "Este email ya está registrado"
|
|
And el cambio no se procesa
|
|
```
|
|
|
|
---
|
|
|
|
### US-009: Eliminación de Cuenta
|
|
|
|
| Campo | Valor |
|
|
|-------|-------|
|
|
| **ID** | US-009 |
|
|
| **Épica** | EP-001 |
|
|
| **Prioridad** | Baja |
|
|
| **Story Points** | 2 |
|
|
| **Sprint** | 2 |
|
|
|
|
**Historia:**
|
|
> Como **estudiante registrado**,
|
|
> quiero **eliminar mi cuenta del sistema**,
|
|
> para **remover mis datos si ya no deseo participar**.
|
|
|
|
**Criterios de Aceptación:**
|
|
|
|
```gherkin
|
|
Scenario: Eliminación con confirmación
|
|
Given estoy en mi perfil
|
|
When presiono "Eliminar cuenta"
|
|
Then veo un diálogo de confirmación
|
|
When confirmo la eliminación
|
|
Then mi cuenta y todas mis inscripciones se eliminan
|
|
And soy redirigido a la página de inicio
|
|
```
|
|
|
|
---
|
|
|
|
### US-010: Activación de Cuenta de Estudiante
|
|
|
|
| Campo | Valor |
|
|
|-------|-------|
|
|
| **ID** | US-010 |
|
|
| **Épica** | EP-001 |
|
|
| **Prioridad** | Alta |
|
|
| **Story Points** | 8 |
|
|
| **Sprint** | 1 |
|
|
|
|
**Historia:**
|
|
> Como **estudiante nuevo**,
|
|
> quiero **activar mi cuenta usando el código proporcionado por el administrador**,
|
|
> para **crear mis credenciales y acceder al sistema**.
|
|
|
|
**Criterios de Aceptación:**
|
|
|
|
```gherkin
|
|
Scenario: Validación de código de activación
|
|
Given tengo un código de activación válido
|
|
When accedo a la URL de activación con el código
|
|
Then el sistema valida el código
|
|
And veo un mensaje de bienvenida con mi nombre
|
|
|
|
Scenario: Creación de credenciales
|
|
Given mi código de activación fue validado
|
|
When ingreso un nombre de usuario único
|
|
And ingreso una contraseña válida (mín. 6 caracteres)
|
|
And confirmo la contraseña
|
|
And presiono "Activar Cuenta"
|
|
Then mi cuenta se activa exitosamente
|
|
And veo mi código de recuperación (una sola vez)
|
|
And soy redirigido al login
|
|
|
|
Scenario: Código de activación expirado
|
|
Given mi código de activación expiró (>48 horas)
|
|
When accedo a la URL de activación
|
|
Then veo el mensaje "Código de activación expirado"
|
|
And veo instrucciones para contactar al administrador
|
|
```
|
|
|
|
---
|
|
|
|
### US-011: Creación de Estudiante por Administrador
|
|
|
|
| Campo | Valor |
|
|
|-------|-------|
|
|
| **ID** | US-011 |
|
|
| **Épica** | EP-001 |
|
|
| **Prioridad** | Alta |
|
|
| **Story Points** | 5 |
|
|
| **Sprint** | 1 |
|
|
|
|
**Historia:**
|
|
> Como **administrador del sistema**,
|
|
> quiero **crear estudiantes y obtener su código de activación**,
|
|
> para **permitirles activar sus cuentas de forma segura**.
|
|
|
|
**Criterios de Aceptación:**
|
|
|
|
```gherkin
|
|
Scenario: Crear estudiante con código de activación
|
|
Given estoy autenticado como administrador
|
|
When navego al panel de gestión de estudiantes
|
|
And presiono "Nuevo Estudiante"
|
|
And ingreso nombre y email válidos
|
|
And presiono "Crear"
|
|
Then el estudiante se crea sin credenciales
|
|
And veo un modal con el código de activación
|
|
And veo la URL de activación completa
|
|
And veo la fecha de expiración del código
|
|
|
|
Scenario: Copiar código de activación
|
|
Given se muestra el modal de activación
|
|
When presiono el botón de copiar código
|
|
Then el código se copia al portapapeles
|
|
And veo confirmación visual
|
|
```
|
|
|
|
---
|
|
|
|
### US-012: Control de Acceso por Roles
|
|
|
|
| Campo | Valor |
|
|
|-------|-------|
|
|
| **ID** | US-012 |
|
|
| **Épica** | EP-001 |
|
|
| **Prioridad** | Alta |
|
|
| **Story Points** | 5 |
|
|
| **Sprint** | 1 |
|
|
|
|
**Historia:**
|
|
> Como **sistema**,
|
|
> quiero **restringir el acceso según el rol del usuario**,
|
|
> para **garantizar que cada usuario solo acceda a funcionalidades autorizadas**.
|
|
|
|
**Criterios de Aceptación:**
|
|
|
|
```gherkin
|
|
Scenario: Estudiante accede a su dashboard
|
|
Given estoy autenticado como estudiante
|
|
When accedo a /dashboard
|
|
Then veo mi información personal
|
|
And veo opciones: "Mi Portal", "Mis Materias", "Compañeros"
|
|
And NO veo: "Panel Admin", "Gestión Estudiantes"
|
|
|
|
Scenario: Estudiante intenta acceder a rutas de admin
|
|
Given estoy autenticado como estudiante
|
|
When intento navegar a /admin o /students
|
|
Then soy redirigido automáticamente a /dashboard
|
|
|
|
Scenario: Administrador accede al panel completo
|
|
Given estoy autenticado como administrador
|
|
When accedo a /admin
|
|
Then veo el panel de administración completo
|
|
And puedo gestionar todos los estudiantes
|
|
```
|
|
|
|
---
|
|
|
|
## 3. Backlog Priorizado
|
|
|
|
| Prioridad | Historia | Story Points | Sprint |
|
|
|-----------|----------|--------------|--------|
|
|
| 1 | US-001: Registro de Estudiante | 5 | 1 |
|
|
| 2 | US-011: Creación por Admin | 5 | 1 |
|
|
| 3 | US-010: Activación de Cuenta | 8 | 1 |
|
|
| 4 | US-012: Control de Acceso | 5 | 1 |
|
|
| 5 | US-002: Consulta de Materias | 3 | 1 |
|
|
| 6 | US-003: Inscripción en Materia | 8 | 1 |
|
|
| 7 | US-004: Cancelación de Inscripción | 3 | 1 |
|
|
| 8 | US-005: Materias No Disponibles | 3 | 2 |
|
|
| 9 | US-007: Ver Compañeros | 5 | 2 |
|
|
| 10 | US-006: Consulta de Estudiantes | 2 | 2 |
|
|
| 11 | US-008: Actualizar Datos | 2 | 2 |
|
|
| 12 | US-009: Eliminar Cuenta | 2 | 2 |
|
|
|
|
**Total Story Points:** 51
|
|
|
|
---
|
|
|
|
## 4. Definición de Listo (DoR)
|
|
|
|
- [ ] Historia tiene criterios de aceptación claros
|
|
- [ ] Dependencias identificadas
|
|
- [ ] Estimación en story points
|
|
- [ ] Diseño de UI aprobado (si aplica)
|
|
- [ ] APIs definidas
|
|
|
|
## 5. Definición de Terminado (DoD)
|
|
|
|
- [ ] Código implementado y revisado
|
|
- [ ] Tests unitarios (>80% coverage)
|
|
- [ ] Tests de integración pasando
|
|
- [ ] Documentación actualizada
|
|
- [ ] Validaciones de negocio probadas
|
|
- [ ] Sin deuda técnica crítica
|
|
|
|
---
|
|
|
|
## 6. Aprobación
|
|
|
|
| Rol | Nombre | Fecha | Firma |
|
|
|-----|--------|-------|-------|
|
|
| Product Owner | Sistema | 2026-01-07 | ✓ |
|
|
| Scrum Master | Pendiente | - | - |
|
|
| Tech Lead | Pendiente | - | - |
|