- Update vision, architecture and technical documentation - Update module definitions (PMC-001 to PMC-008) - Update requirements documentation - Add CONTEXT-MAP.yml and ENVIRONMENT-INVENTORY.yml - Add orchestration guidelines and references 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
526 lines
11 KiB
Markdown
526 lines
11 KiB
Markdown
---
|
|
id: "RF-PMC-006"
|
|
title: "Assets Module (DAM)"
|
|
type: "Requirement"
|
|
status: "Done"
|
|
priority: "Alta"
|
|
module: "assets"
|
|
project: "platform_marketing_content"
|
|
version: "1.0"
|
|
rf_count: 12
|
|
created_date: "2025-12-08"
|
|
updated_date: "2026-01-04"
|
|
---
|
|
|
|
# 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
|