---
id: "US-AUTH-001"
title: "Registro con Email"
type: "User Story"
status: "Done"
priority: "Alta"
epic: "OQI-001"
story_points: 5
created_date: "2025-12-05"
updated_date: "2026-01-04"
---

# US-AUTH-001: Registro con Email

**Version:** 1.0.0
**Fecha:** 2025-12-05
**Estado:** ✅ Implementado
**Story Points:** 5
**Prioridad:** P0 (Crítica)
**Épica:** [OQI-001](../_MAP.md)

---

## Historia de Usuario

**Como** visitante de Trading Platform
**Quiero** poder crear una cuenta usando mi email y contraseña
**Para** acceder a las funcionalidades de la plataforma

---

## Criterios de Aceptación

### AC-001: Formulario de registro

**Dado** que soy un visitante en la página de registro
**Cuando** veo el formulario
**Entonces** debería ver campos para:
- Email
- Contraseña
- Confirmar contraseña
- Nombre
- Apellido
- Checkbox de términos y condiciones

### AC-002: Validación de email

**Dado** que estoy llenando el formulario de registro
**Cuando** ingreso un email inválido
**Entonces** debería ver un mensaje de error "Email inválido"
**Y** el botón de registro debería estar deshabilitado

### AC-003: Validación de contraseña

**Dado** que estoy llenando el formulario de registro
**Cuando** ingreso una contraseña que no cumple los requisitos
**Entonces** debería ver indicadores visuales de:
- ❌/✅ Mínimo 8 caracteres
- ❌/✅ Al menos una mayúscula
- ❌/✅ Al menos una minúscula
- ❌/✅ Al menos un número
- ❌/✅ Al menos un carácter especial

### AC-004: Confirmación de contraseña

**Dado** que estoy llenando el formulario de registro
**Cuando** las contraseñas no coinciden
**Entonces** debería ver un mensaje de error "Las contraseñas no coinciden"

### AC-005: Registro exitoso

**Dado** que completé el formulario correctamente
**Cuando** hago click en "Registrarme"
**Entonces** debería:
1. Ver un mensaje "Cuenta creada. Revisa tu email para verificar"
2. Recibir un email de verificación
3. Ser redirigido a una página de confirmación

### AC-006: Email duplicado

**Dado** que intento registrarme con un email que ya existe
**Cuando** envío el formulario
**Entonces** debería ver un mensaje "Este email ya está registrado"

### AC-007: Email de verificación

**Dado** que me registré exitosamente
**Cuando** reviso mi email
**Entonces** debería recibir un email con:
- Asunto: "Verifica tu cuenta de Trading Platform"
- Un link de verificación válido por 24 horas
- Instrucciones claras

### AC-008: Verificación de email

**Dado** que recibí el email de verificación
**Cuando** hago click en el link de verificación
**Entonces** debería:
1. Ver un mensaje "Email verificado exitosamente"
2. Poder hacer login con mis credenciales

---

## Mockup

```
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│              🌟 Crea tu cuenta en Trading Platform                │
│                                                             │
│  ┌─────────────────────────────────────────────────────┐   │
│  │ Email                                                │   │
│  │ ┌─────────────────────────────────────────────────┐ │   │
│  │ │ usuario@example.com                             │ │   │
│  │ └─────────────────────────────────────────────────┘ │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  ┌─────────────────────────────────────────────────────┐   │
│  │ Contraseña                                           │   │
│  │ ┌─────────────────────────────────────────────────┐ │   │
│  │ │ ••••••••••••                              👁   │ │   │
│  │ └─────────────────────────────────────────────────┘ │   │
│  │                                                     │   │
│  │ ✅ Mínimo 8 caracteres                              │   │
│  │ ✅ Una mayúscula                                    │   │
│  │ ✅ Una minúscula                                    │   │
│  │ ✅ Un número                                        │   │
│  │ ❌ Un carácter especial                             │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  ┌─────────────────────────────────────────────────────┐   │
│  │ Confirmar contraseña                                 │   │
│  │ ┌─────────────────────────────────────────────────┐ │   │
│  │ │ ••••••••••••                              👁   │ │   │
│  │ └─────────────────────────────────────────────────┘ │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  ┌────────────────────────┐ ┌────────────────────────┐     │
│  │ Nombre                 │ │ Apellido               │     │
│  │ ┌──────────────────┐  │ │ ┌──────────────────┐   │     │
│  │ │ Juan             │  │ │ │ Pérez            │   │     │
│  │ └──────────────────┘  │ │ └──────────────────┘   │     │
│  └────────────────────────┘ └────────────────────────┘     │
│                                                             │
│  ☐ Acepto los Términos de Servicio y Política de           │
│    Privacidad                                               │
│                                                             │
│  ┌─────────────────────────────────────────────────────┐   │
│  │               Crear mi cuenta                        │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  ─────────────────── O continúa con ───────────────────    │
│                                                             │
│  [Google] [Facebook] [X] [Apple] [GitHub]                  │
│                                                             │
│  ¿Ya tienes cuenta? Inicia sesión                          │
│                                                             │
└─────────────────────────────────────────────────────────────┘
```

---

## Notas Técnicas

### Frontend

- Componente: `apps/frontend/src/modules/auth/pages/Register.tsx`
- Validación en tiempo real con React Hook Form + Zod
- Debounce de 300ms para validación de email
- Password strength indicator visual

### Backend

- Endpoint: `POST /api/v1/auth/register`
- Validación con Zod
- Hash con bcrypt (cost 12)
- Email con Nodemailer + plantilla HTML

### Database

- Tabla: `users`
- Status inicial: `pending_verification`
- Trigger: Crea `user_profiles` automáticamente

---

## Dependencias

- Ninguna (primer flujo de auth)

---

## Requerimientos Relacionados

- [RF-AUTH-002: Autenticación por Email](../requerimientos/RF-AUTH-002-email.md)

## Especificaciones Relacionadas

- [ET-AUTH-002: JWT Tokens](../especificaciones/ET-AUTH-002-jwt.md)
- [ET-AUTH-003: Database](../especificaciones/ET-AUTH-003-database.md)
