Template-Especificación-Técnica
Especificación Técnica: [Nombre del Feature]
Nota: Este es un template. Copiá esta página y reemplazá los placeholders con la información real, eliminar aquellas secciones que no corresponden.
📊 Información General
Proyecto: [Nombre del proyecto]
Epic/Feature: [Breve descripción]
Responsable del desarrollo: @username
Autor de la especificación: @username
🎯 Objetivo
[¿Qué problema resuelve este desarrollo? ¿Qué funcionalidad nueva aporta?]
🏗️ Componentes Principales
1. API Resources (Controllers)
Endpoints a crear/modificar:
POST /api/v1/recursos
Descripción: Crea un nuevo recurso (ejemplo)
Request body:
{
"nombre": "string",
"descripcion": "string",
"tipo": "string"
}
Response (201 Created):
{
"id": "uuid",
"nombre": "string",
"created_at": "2025-10-16T10:30:00Z"
}
Validaciones:
nombrees requerido, máximo 255 caracterestipodebe ser uno de: ['tipo1', 'tipo2', 'tipo3']etc
GET /api/v1/recursos/{id}
Descripción: Obtiene un recurso por ID
Response (200 OK):
{
"id": "uuid",
"nombre": "string",
"descripcion": "string"
}
Errores posibles:
- 404: Recurso no encontrado
- 403: Sin permisos para acceder
2. Services (ejemplo)
RecursoService
Responsabilidades:
- Validación de reglas de negocio
- Orquestación de operaciones complejas
- Coordinación entre múltiples repositorios
Métodos principales:
crear_recurso(usuario_id: str, data: dict) -> Recurso:procesar_recurso(recurso_id: str) -> dict:- [Describir la lógica de negocio]
3. Repositories (ejemplo)
RecursoRepository
Métodos principales:
find_by_id(recurso_id: str) -> Recurso | None: Busca un recurso por IDfind_by_usuario(usuario_id: str) -> List[Recurso]: Obtiene todos los recursos de un usuariocreate(recurso_data: dict) -> Recurso: Crea un nuevo recursoupdate(recurso_id: str, data: dict) -> Recurso: Actualiza un recurso existentedelete(recurso_id: str) -> bool: Elimina un recurso (soft delete)
Consideraciones:
- [Indicar si usa soft delete, caché, paginación, etc.]
4. Models/Entities
Recurso (ejemplo)
class Recurso:
id: UUID
nombre: str
descripcion: str
estado: str
usuario_id: UUID
created_at: datetime
updated_at: datetime
# Relaciones
usuario: Usuario
Comportamientos del modelo:
- [Indicar métodos, properties calculadas, validaciones a nivel modelo]
5. Schemas
Schema de entrada: RecursoCreateSchema
{
"nombre": str (requerido, max 255),
"descripcion": str (opcional, max 1000),
"tipo": str (requerido, enum: ['tipo1', 'tipo2'])
}
Schema de salida: RecursoResponseSchema
{
"id": str (UUID),
"nombre": str,
"descripcion": str,
"estado": str,
"created_at": str (ISO 8601),
"usuario": {
"id": str,
"nombre": str
}
}
Validaciones en los schemas:
- [Listar validaciones custom, transformaciones, campos calculados]
🗄️ Modelo de Datos
Importante: Incluir una imagen del diagrama del modelo de datos
Tabla: nombre_tabla_1
Propósito: [Explicar qué representa esta tabla y para qué se usa]
Campos:
id(UUID): Identificador único del registronombre(VARCHAR 255): Descripción del campoestado(VARCHAR 50): Estados posibles: 'activo', 'inactivo', 'pendiente'created_at(TIMESTAMP): Fecha de creación del registroupdated_at(TIMESTAMP): Fecha de última modificación
Índices:
- PRIMARY KEY en
id - INDEX en
estado(para consultas frecuentes por estado)
Relaciones:
- FK
usuario_id→usuarios.id
Nota sobre modificaciones: Si estás modificando una tabla existente, especificá claramente:
- ➕ Campos que se agregan
- ✏️ Campos que se modifican
- ❌ Campos que se eliminan (si aplica)
Ejemplo
🔗 Referencias
ClickUp:
- Epic: [Link al Epic de ClickUp]
- Issues relacionados:
- [Link al issue 1]
- [Link al issue 2]
Figma:
- Diseños: [Link a Figma con los diseños de UI]
Documentación adicional:
- [Cualquier otro documento relevante]