# Requerimientos Funcionales - PMC-006 Assets

**Módulo:** Assets (DAM)
**Versión:** 1.0.0
**Fecha:** 2025-12-08

---

## Gestión de Assets

### RF-PMC-006-001: Subir Asset

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-006-001 |
| **Nombre** | Subir Asset |
| **Prioridad** | P1 |
| **Actor** | Creative |

**Datos de entrada:**
- file(s): array[file] (requerido)
- name: string (opcional, usa filename si vacío)
- description: text (opcional)
- tags: array[string] (opcional)
- campaign_id: UUID (opcional)

**Criterios de aceptación:**
- [ ] Upload múltiple funciona
- [ ] Drag & drop soportado
- [ ] Thumbnails generados automáticamente
- [ ] Progreso visible durante upload

---

### RF-PMC-006-002: Ver Asset

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-006-002 |
| **Nombre** | Ver Asset |
| **Prioridad** | P1 |
| **Actor** | Todos los roles |

**Datos de salida:**
- Preview/visualización del asset
- Metadata completa
- Historial de versiones
- Comentarios
- Estado de aprobación

**Criterios de aceptación:**
- [ ] Lightbox para imágenes
- [ ] Player para videos
- [ ] Viewer para documentos
- [ ] Zoom disponible

---

### RF-PMC-006-003: Editar Metadata de Asset

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-006-003 |
| **Nombre** | Editar Metadata de Asset |
| **Prioridad** | P1 |
| **Actor** | Creative |

**Datos editables:**
- name
- description
- tags
- visibility

**Criterios de aceptación:**
- [ ] Cambios guardados correctamente
- [ ] Historial de cambios registrado

---

### RF-PMC-006-004: Eliminar Asset

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-006-004 |
| **Nombre** | Eliminar Asset |
| **Prioridad** | P1 |
| **Actor** | Creative, Tenant Admin |

**Restricciones:**
- Assets aprobados no pueden eliminarse (solo admin)
- Soft delete con retención 30 días

**Criterios de aceptación:**
- [ ] Soft delete funciona
- [ ] Asset va a papelera
- [ ] Confirmación requerida

---

### RF-PMC-006-005: Restaurar Asset

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-006-005 |
| **Nombre** | Restaurar Asset |
| **Prioridad** | P2 |
| **Actor** | Creative, Tenant Admin |

**Descripción:**
Recuperar asset de la papelera.

**Criterios de aceptación:**
- [ ] Asset restaurado a su estado anterior
- [ ] deleted_at se limpia
- [ ] Disponible dentro de 30 días

---

### RF-PMC-006-006: Listar Assets

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-006-006 |
| **Nombre** | Listar Assets |
| **Prioridad** | P1 |
| **Actor** | Todos los roles |

**Vistas:**
- Grid (thumbnails)
- Lista (tabla con metadata)

**Filtros:**
- type (image, video, document, copy, model)
- status (draft, pending_review, approved, rejected)
- campaign_id
- collection_id
- tags
- date_range
- source (generated, uploaded)

**Criterios de aceptación:**
- [ ] Ambas vistas funcionan
- [ ] Filtros combinables
- [ ] Paginación con scroll infinito o páginas
- [ ] Ordenamiento múltiple

---

### RF-PMC-006-007: Búsqueda de Assets

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-006-007 |
| **Nombre** | Búsqueda de Assets |
| **Prioridad** | P1 |
| **Actor** | Todos los roles |

**Campos buscables:**
- name
- description
- tags
- prompt (para generados)

**Criterios de aceptación:**
- [ ] Búsqueda de texto funciona
- [ ] Resultados relevantes primero
- [ ] Highlighting de matches

---

## Colecciones

### RF-PMC-006-008: Crear Colección

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-006-008 |
| **Nombre** | Crear Colección |
| **Prioridad** | P1 |
| **Actor** | Creative |

**Datos de entrada:**
- name: string (requerido)
- description: text (opcional)
- type: enum (manual, smart)
- smart_filters: object (si type=smart)

**Criterios de aceptación:**
- [ ] Colección creada correctamente
- [ ] Smart collection ejecuta filtros

---

### RF-PMC-006-009: Editar Colección

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-006-009 |
| **Nombre** | Editar Colección |
| **Prioridad** | P2 |
| **Actor** | Creative |

**Criterios de aceptación:**
- [ ] Nombre y descripción editables
- [ ] Filtros de smart collection editables
- [ ] Cover image seleccionable

---

### RF-PMC-006-010: Agregar Assets a Colección

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-006-010 |
| **Nombre** | Agregar Assets a Colección |
| **Prioridad** | P1 |
| **Actor** | Creative |

**Métodos:**
- Desde asset detail → "Add to collection"
- Desde colección → "Add assets"
- Bulk selection → "Add to collection"

**Criterios de aceptación:**
- [ ] Múltiples métodos funcionan
- [ ] Asset puede estar en múltiples colecciones
- [ ] No duplicados en misma colección

---

### RF-PMC-006-011: Quitar Assets de Colección

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-006-011 |
| **Nombre** | Quitar Assets de Colección |
| **Prioridad** | P2 |
| **Actor** | Creative |

**Criterios de aceptación:**
- [ ] Asset se desvincula de colección
- [ ] Asset NO se elimina
- [ ] Bulk removal soportado

---

### RF-PMC-006-012: Eliminar Colección

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-006-012 |
| **Nombre** | Eliminar Colección |
| **Prioridad** | P2 |
| **Actor** | Creative |

**Criterios de aceptación:**
- [ ] Colección eliminada
- [ ] Assets NO se eliminan
- [ ] Confirmación requerida

---

## Versiones

### RF-PMC-006-013: Subir Nueva Versión de Asset

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-006-013 |
| **Nombre** | Subir Nueva Versión de Asset |
| **Prioridad** | P2 |
| **Actor** | Creative |

**Datos de entrada:**
- asset_id: UUID
- new_file: file
- changes_description: text (opcional)

**Criterios de aceptación:**
- [ ] Nueva versión almacenada
- [ ] Version number incrementado
- [ ] Versión anterior preservada

---

### RF-PMC-006-014: Ver Historial de Versiones

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-006-014 |
| **Nombre** | Ver Historial de Versiones |
| **Prioridad** | P2 |
| **Actor** | Creative |

**Datos de salida:**
- Lista de versiones con:
  - Número de versión
  - Fecha
  - Usuario
  - Descripción de cambios
  - Preview

**Criterios de aceptación:**
- [ ] Historial completo visible
- [ ] Click para ver versión específica
- [ ] Opción de restaurar versión anterior

---

### RF-PMC-006-015: Restaurar Versión Anterior

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-006-015 |
| **Nombre** | Restaurar Versión Anterior |
| **Prioridad** | P3 |
| **Actor** | Creative |

**Descripción:**
Hacer que una versión anterior sea la actual.

**Criterios de aceptación:**
- [ ] Versión seleccionada se convierte en actual
- [ ] Nueva versión creada (copia)
- [ ] Historial preservado

---

## Aprobación

### RF-PMC-006-016: Aprobar Asset

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-006-016 |
| **Nombre** | Aprobar Asset |
| **Prioridad** | P1 |
| **Actor** | Creative, Tenant Admin |

**Criterios de aceptación:**
- [ ] Status cambia a "approved"
- [ ] approved_by y approved_at registrados
- [ ] Asset no editable después (excepto metadata)

---

### RF-PMC-006-017: Rechazar Asset

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-006-017 |
| **Nombre** | Rechazar Asset |
| **Prioridad** | P1 |
| **Actor** | Creative, Tenant Admin |

**Datos de entrada:**
- feedback: text (requerido)

**Criterios de aceptación:**
- [ ] Status cambia a "rejected"
- [ ] Feedback almacenado
- [ ] Asset puede regenerarse/versionarse

---

## Comentarios

### RF-PMC-006-018: Agregar Comentario a Asset

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-006-018 |
| **Nombre** | Agregar Comentario a Asset |
| **Prioridad** | P1 |
| **Actor** | Creative, Tenant Admin |

**Datos de entrada:**
- content: text (requerido)
- position: object (x, y) - opcional, para comentarios en imagen

**Criterios de aceptación:**
- [ ] Comentario se crea
- [ ] Posición en imagen soportada
- [ ] Notificación a equipo

---

### RF-PMC-006-019: Responder Comentario

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-006-019 |
| **Nombre** | Responder Comentario |
| **Prioridad** | P2 |
| **Actor** | Creative, Tenant Admin |

**Criterios de aceptación:**
- [ ] Respuesta vinculada al comentario padre
- [ ] Thread visible
- [ ] Notificación a participantes

---

### RF-PMC-006-020: Resolver Comentario

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-006-020 |
| **Nombre** | Resolver Comentario |
| **Prioridad** | P2 |
| **Actor** | Creative |

**Criterios de aceptación:**
- [ ] is_resolved cambia a true
- [ ] Comentario colapsado visualmente
- [ ] Puede des-resolverse

---

## Descargas

### RF-PMC-006-021: Descargar Asset Individual

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-006-021 |
| **Nombre** | Descargar Asset Individual |
| **Prioridad** | P1 |
| **Actor** | Creative, Tenant Admin |

**Opciones:**
- Original
- Convertido (formato diferente)
- Tamaño reducido

**Criterios de aceptación:**
- [ ] Descarga inicia correctamente
- [ ] Registro de descarga creado
- [ ] Conversión on-the-fly funciona

---

### RF-PMC-006-022: Descargar Múltiples Assets (ZIP)

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-006-022 |
| **Nombre** | Descargar Múltiples Assets (ZIP) |
| **Prioridad** | P1 |
| **Actor** | Creative, Tenant Admin |

**Datos de entrada:**
- asset_ids: array[UUID]
- include_metadata: boolean (opcional)

**Criterios de aceptación:**
- [ ] ZIP generado con estructura organizada
- [ ] Progreso visible para ZIPs grandes
- [ ] Metadata en JSON opcional

---

### RF-PMC-006-023: Generar Enlace Temporal

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-006-023 |
| **Nombre** | Generar Enlace Temporal |
| **Prioridad** | P2 |
| **Actor** | Creative, Tenant Admin |

**Datos de entrada:**
- asset_id: UUID
- expiry_days: number (default: 7, max: 30)

**Criterios de aceptación:**
- [ ] URL única generada
- [ ] Expira después del tiempo configurado
- [ ] No requiere autenticación para descargar

---

### RF-PMC-006-024: Descargar Colección Completa

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-006-024 |
| **Nombre** | Descargar Colección Completa |
| **Prioridad** | P2 |
| **Actor** | Creative, Tenant Admin |

**Criterios de aceptación:**
- [ ] Todos los assets de colección en ZIP
- [ ] Estructura de carpetas preservada
- [ ] Opción de incluir solo aprobados

---

## Resumen

| Prioridad | Cantidad |
|-----------|----------|
| P1 | 13 |
| P2 | 9 |
| P3 | 2 |
| **Total** | **24** |

---

**Documento generado por:** Requirements-Analyst
**Fecha:** 2025-12-08
