platform-marketing-content/docs/02-definicion-modulos/PMC-006-ASSETS.md
rckrdmrd 74b5ed7f38 feat: Complete documentation update and orchestration configuration
- 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>
2026-01-07 05:38:31 -06:00

12 KiB

id title type epic status project version created_date updated_date
PMC-006-ASSETS PMC-006: Módulo de Assets (DAM) Module Definition PMC-006 Draft platform_marketing_content 1.0.0 2026-01-04 2026-01-04

PMC-006: Módulo de Assets (DAM)

Versión: 1.0.0 Fecha: 2025-12-08 Estado: Definición Prioridad: Alta


Descripción General

El módulo de Assets implementa un Digital Asset Management (DAM) simplificado para almacenar, organizar y gestionar todos los recursos digitales generados o subidos a la plataforma: imágenes, copys, videos, modelos IA, y documentos.


Objetivos

  1. Centralizar todos los activos digitales del tenant
  2. Organizar assets por cliente, campaña, tipo
  3. Gestionar versiones y estados de aprobación
  4. Facilitar búsqueda y descubrimiento de assets
  5. Controlar acceso y permisos por rol

Entidades del Dominio

Asset

Entidad: Asset
Descripción: Recurso digital almacenado en la plataforma
Atributos:
  - id: UUID (PK)
  - tenant_id: UUID (FK)
  - name: string
  - description: text
  - type: enum [image, copy, video, document, model, template]
  - mime_type: string
  - file_path: string (ruta en storage)
  - file_size: bigint (bytes)
  - dimensions: JSONB (width, height para imágenes/videos)
  - duration: integer (segundos, para video/audio)
  - status: enum [draft, pending_review, approved, rejected, archived]
  - visibility: enum [private, team, client]
  - source: enum [generated, uploaded, imported]
  - generation_job_id: UUID (FK, si fue generado)
  - metadata: JSONB
    - prompt: string (si fue generado)
    - model_used: string
    - seed: number
    - parameters: object
  - tags: array[string]
  - created_by: UUID (FK a User)
  - created_at: timestamp
  - updated_at: timestamp
  - deleted_at: timestamp (soft delete)

Relaciones:
  - N:1 con Tenant
  - N:1 con User (creator)
  - N:1 con GenerationJob
  - N:N con Campaign
  - N:N con Collection
  - 1:N con AssetVersion

AssetVersion

Entidad: AssetVersion
Descripción: Versión histórica de un asset
Atributos:
  - id: UUID (PK)
  - asset_id: UUID (FK)
  - version_number: integer
  - file_path: string
  - file_size: bigint
  - changes_description: text
  - created_by: UUID (FK)
  - created_at: timestamp

Relaciones:
  - N:1 con Asset
  - N:1 con User

Collection

Entidad: Collection
Descripción: Agrupación lógica de assets
Atributos:
  - id: UUID (PK)
  - tenant_id: UUID (FK)
  - name: string
  - description: text
  - type: enum [manual, smart, campaign, brand]
  - smart_filters: JSONB (criterios para smart collections)
  - cover_asset_id: UUID (FK, opcional)
  - is_public: boolean
  - created_by: UUID (FK)
  - created_at: timestamp
  - updated_at: timestamp

Relaciones:
  - N:1 con Tenant
  - N:N con Asset
  - N:1 con User

AssetComment

Entidad: AssetComment
Descripción: Comentario o feedback sobre un asset
Atributos:
  - id: UUID (PK)
  - asset_id: UUID (FK)
  - user_id: UUID (FK)
  - content: text
  - position: JSONB (x, y para comentarios en imagen)
  - is_resolved: boolean
  - parent_id: UUID (FK, para respuestas)
  - created_at: timestamp
  - updated_at: timestamp

Relaciones:
  - N:1 con Asset
  - N:1 con User
  - Self-referencial (parent/children)

Download

Entidad: Download
Descripción: Registro de descargas de assets
Atributos:
  - id: UUID (PK)
  - tenant_id: UUID (FK)
  - asset_id: UUID (FK, opcional - puede ser colección)
  - collection_id: UUID (FK, opcional)
  - user_id: UUID (FK)
  - download_type: enum [single, batch, collection]
  - format: string (original, converted)
  - ip_address: string
  - user_agent: string
  - created_at: timestamp

Relaciones:
  - N:1 con Asset
  - N:1 con Collection
  - N:1 con User

Funcionalidades

F-006.1: Gestión de Assets

ID Funcionalidad Descripción Prioridad
F-006.1.1 Upload Subir archivos manualmente Alta
F-006.1.2 Ver asset Detalle con preview y metadata Alta
F-006.1.3 Editar metadata Nombre, descripción, tags Alta
F-006.1.4 Eliminar Soft delete con papelera Alta
F-006.1.5 Restaurar Recuperar de papelera Media

F-006.2: Organización

ID Funcionalidad Descripción Prioridad
F-006.2.1 Colecciones Agrupar assets manualmente Alta
F-006.2.2 Smart collections Colecciones automáticas por criterios Media
F-006.2.3 Tags Etiquetar assets Alta
F-006.2.4 Filtros Filtrar por tipo, estado, fecha, etc. Alta

F-006.3: Búsqueda

ID Funcionalidad Descripción Prioridad
F-006.3.1 Búsqueda texto Por nombre, descripción, tags Alta
F-006.3.2 Filtros avanzados Combinar múltiples criterios Alta
F-006.3.3 Búsqueda por similar Encontrar imágenes similares Baja

F-006.4: Versiones y Aprobación

ID Funcionalidad Descripción Prioridad
F-006.4.1 Versionar Subir nueva versión de asset Media
F-006.4.2 Comparar versiones Ver diferencias Baja
F-006.4.3 Aprobar/Rechazar Cambiar estado de revisión Alta
F-006.4.4 Comentarios Feedback sobre assets Alta

F-006.5: Descargas y Exportación

ID Funcionalidad Descripción Prioridad
F-006.5.1 Descargar individual Bajar un asset Alta
F-006.5.2 Descargar batch Bajar múltiples como ZIP Alta
F-006.5.3 Convertir formato Descargar en formato diferente Media
F-006.5.4 Enlace temporal URL con expiración Media

Tipos de Assets Soportados

Imágenes:
  Formatos: PNG, JPG, JPEG, WebP, GIF, SVG
  Max size: 50MB
  Procesamiento:
    - Generación de thumbnails
    - Extracción de dimensiones
    - Optimización automática

Copys/Textos:
  Tipos: Copy publicitario, título, descripción, hashtags
  Almacenamiento: En BD + archivo .txt opcional
  Metadata: Tone, language, character count

Videos:
  Formatos: MP4, MOV, WebM
  Max size: 500MB
  Procesamiento:
    - Generación de thumbnail
    - Extracción de duración
    - Preview de baja resolución

Documentos:
  Formatos: PDF, DOC, DOCX
  Max size: 100MB
  Uso: Brand guidelines, briefs, contratos

Modelos IA:
  Tipos: LoRA (.safetensors), Checkpoint, Embedding
  Max size: 10GB
  Metadata: Base model, trigger word, training params

Templates:
  Tipos: Workflow ComfyUI, plantillas de brief
  Formato: JSON

Storage Structure

S3/MinIO Bucket Structure:
  {bucket}/
    ├── {tenant_slug}/
    │   ├── assets/
    │   │   ├── images/
    │   │   │   ├── {year}/
    │   │   │   │   ├── {month}/
    │   │   │   │   │   ├── {asset_id}/
    │   │   │   │   │   │   ├── original.{ext}
    │   │   │   │   │   │   ├── thumb_200.jpg
    │   │   │   │   │   │   ├── thumb_800.jpg
    │   │   │   │   │   │   └── versions/
    │   │   │   │   │   │       ├── v1.{ext}
    │   │   │   │   │   │       └── v2.{ext}
    │   │   ├── videos/
    │   │   ├── documents/
    │   │   └── copies/
    │   ├── models/
    │   │   ├── loras/
    │   │   ├── checkpoints/
    │   │   └── embeddings/
    │   └── temp/
    │       └── (archivos temporales, limpiados periódicamente)

API Endpoints

Base: /api/v1/assets

# Assets CRUD
POST   /assets/upload           # Subir archivo(s)
GET    /assets                  # Listar con filtros y paginación
GET    /assets/:id              # Detalle de asset
PUT    /assets/:id              # Actualizar metadata
DELETE /assets/:id              # Soft delete

# Bulk operations
POST   /assets/bulk/move        # Mover a colección
POST   /assets/bulk/tag         # Agregar tags
POST   /assets/bulk/delete      # Eliminar múltiples
POST   /assets/bulk/status      # Cambiar estado

# Versions
GET    /assets/:id/versions     # Listar versiones
POST   /assets/:id/versions     # Subir nueva versión
GET    /assets/:id/versions/:v  # Obtener versión específica

# Status & Approval
PATCH  /assets/:id/status       # Cambiar estado
POST   /assets/:id/approve      # Aprobar
POST   /assets/:id/reject       # Rechazar con feedback

# Comments
GET    /assets/:id/comments     # Listar comentarios
POST   /assets/:id/comments     # Agregar comentario
PUT    /assets/:id/comments/:cid # Editar comentario
DELETE /assets/:id/comments/:cid # Eliminar comentario

# Downloads
GET    /assets/:id/download     # Descargar asset
POST   /assets/download/batch   # Descargar múltiples (ZIP)
POST   /assets/:id/share        # Generar enlace temporal

# Collections
GET    /collections             # Listar colecciones
POST   /collections             # Crear colección
GET    /collections/:id         # Detalle de colección
PUT    /collections/:id         # Actualizar colección
DELETE /collections/:id         # Eliminar colección
POST   /collections/:id/assets  # Agregar assets
DELETE /collections/:id/assets  # Quitar assets

# Search
POST   /assets/search           # Búsqueda avanzada
GET    /assets/tags             # Listar tags usados

Reglas de Negocio

RN-006.1:
  Descripción: Assets generados heredan metadata del job
  Comportamiento: Copiar prompt, modelo, parámetros automáticamente

RN-006.2:
  Descripción: Thumbnails se generan automáticamente
  Tamaños: 200px y 800px de ancho, manteniendo aspect ratio

RN-006.3:
  Descripción: Soft delete retiene archivos 30 días
  Acción: Cron job limpia después del período

RN-006.4:
  Descripción: Versionado mantiene historial completo
  Límite: Máximo 10 versiones por asset

RN-006.5:
  Descripción: Links temporales expiran según configuración
  Default: 7 días, máximo 30 días

RN-006.6:
  Descripción: Storage cuenta contra cuota del tenant
  Validación: Verificar límite antes de upload

UI/UX Consideraciones

Vistas principales:
  - Grid view: Thumbnails en cuadrícula
  - List view: Lista con metadata
  - Detail view: Asset grande con panel de info

Componentes:
  - AssetUploader: Drag & drop, multi-file
  - AssetPreview: Lightbox con navegación
  - AssetFilters: Panel de filtros colapsable
  - CollectionPicker: Modal para agregar a colección
  - CommentPanel: Sidebar con comentarios

Acciones rápidas:
  - Quick preview (spacebar)
  - Quick download (d)
  - Quick approve (a)
  - Add to collection (c)

Dependencias

Dependencias de Módulos:
  - PMC-001 Tenants: Cuotas de storage
  - PMC-003 Projects: Vinculación con campañas
  - PMC-004 Generation: Assets generados

Servicios Externos:
  - S3/MinIO: Almacenamiento de archivos
  - Sharp: Procesamiento de imágenes
  - FFmpeg: Procesamiento de video (opcional)

Dependencias del Catálogo:
  - (ninguna directa)

Consideraciones de Performance

Optimizaciones:
  - Lazy loading de thumbnails
  - Paginación con cursor para grandes volúmenes
  - CDN para servir assets estáticos
  - Compresión de uploads grandes
  - Pre-signed URLs para uploads directos a S3

Índices BD:
  - tenant_id + type + status
  - tenant_id + created_at
  - tenant_id + tags (GIN index)
  - Full-text search en name, description

Criterios de Aceptación

  • Upload funciona con drag & drop y file picker
  • Thumbnails se generan automáticamente
  • Búsqueda y filtros funcionan correctamente
  • Colecciones permiten organizar assets
  • Versionado mantiene historial
  • Flujo de aprobación funciona
  • Descargas individuales y batch funcionan
  • Links temporales se generan y expiran
  • Comentarios se pueden agregar y resolver
  • Storage se cuenta contra cuota

Referencias


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