# TEMPLATE: TAREA TÉCNICA

**Versión:** 1.1.0
**Fecha:** 2025-12-08
**Uso:** Definición de tareas técnicas atómicas

---

## 🆕 VERIFICACIÓN DE CATÁLOGO (ANTES DE CREAR TAREA)

> **OBLIGATORIO verificar si la funcionalidad ya existe en el catálogo global:**

```bash
grep -i "{funcionalidad}" core/catalog/CATALOG-INDEX.yml
```

**Si existe:** Usar `@REUTILIZAR` en lugar de crear desde cero.
**Funcionalidades catalogadas:** auth, session, rate-limiting, notifications, multi-tenancy, feature-flags, websocket, payments

---

## {GRUPO}-{NNN}: {Título de la Tarea}

### Metadata

| Campo | Valor |
|-------|-------|
| **ID** | {DB/BE/FE/TEST}-{NNN} |
| **Tipo** | {Database / Backend / Frontend / Testing / DevOps} |
| **Historia** | US-{MOD}-{NNN} |
| **Épica** | {EPIC-ID} |
| **Prioridad** | {P0 / P1 / P2 / P3} |
| **Estimación** | {horas} |
| **Estado** | {Backlog / In Progress / Review / Done / Blocked} |
| **Asignado a** | {NEXUS-DATABASE / NEXUS-BACKEND / NEXUS-FRONTEND} |

---

### Descripción

{Descripción clara y concisa de lo que debe hacer esta tarea}

### Objetivo

{Qué se logra al completar esta tarea}

---

### Especificación Técnica

#### Para Database (DB-XXX):

**Schema:** `{schema_name}`

**Objeto a crear/modificar:**
```sql
-- Tipo: {TABLE / FUNCTION / TRIGGER / INDEX / VIEW}
-- Archivo: apps/{proyecto}/database/ddl/schemas/{schema}/{tipo}/{archivo}.sql

{Especificación SQL o pseudocódigo}
```

**Columnas (si es tabla):**
| Columna | Tipo | Nullable | Default | Descripción |
|---------|------|----------|---------|-------------|
| id | UUID | NO | gen_random_uuid() | PK |
| {col} | {tipo} | {YES/NO} | {default} | {descripción} |

**Índices requeridos:**
- `idx_{tabla}_{columna}`: {propósito}

**RLS Policy:**
```sql
CREATE POLICY {policy_name} ON {schema}.{tabla}
    USING ({condición});
```

---

#### Para Backend (BE-XXX):

**Módulo:** `apps/{proyecto}/backend/src/modules/{modulo}/`

**Archivo a crear/modificar:**
- `{archivo}.ts`

**Tipo de artefacto:** {Entity / DTO / Service / Controller / Middleware}

**Especificación:**
```typescript
// Estructura esperada
{código o pseudocódigo}
```

**Endpoints (si es Controller):**
| Método | Ruta | Descripción |
|--------|------|-------------|
| GET | /api/{resource} | {descripción} |

**Validaciones requeridas:**
- {validación 1}
- {validación 2}

---

#### Para Frontend (FE-XXX):

**Ubicación:** `apps/{proyecto}/frontend/src/{tipo}/{archivo}.tsx`

**Tipo de artefacto:** {Page / Component / Store / Hook / Service}

**Props/Interface:**
```typescript
interface {Name}Props {
    {prop}: {tipo};
}
```

**Comportamiento esperado:**
- {comportamiento 1}
- {comportamiento 2}

**Estados:**
- Loading: {descripción}
- Error: {descripción}
- Success: {descripción}

---

### Criterios de Aceptación Técnicos

- [ ] {Criterio 1}
- [ ] {Criterio 2}
- [ ] {Criterio 3}

### Validación

**Comandos de validación:**
```bash
# Database
psql -d {db} -c "SELECT * FROM {schema}.{tabla} LIMIT 1;"

# Backend
npm run build
npm run test -- --grep "{pattern}"

# Frontend
npm run build
npm run test -- --grep "{pattern}"
```

**Resultado esperado:**
- {resultado esperado}

---

### Dependencias

**Requiere completadas:**
- [ ] {GRUPO}-{NNN}: {descripción}

**Bloquea:**
- [ ] {GRUPO}-{NNN}: {descripción}

---

### Archivos a Crear/Modificar

**Crear:**
- `{ruta/archivo}` - {descripción}

**Modificar:**
- `{ruta/archivo}` - {cambios}

---

### Definition of Done

- [ ] 🆕 Verificó @CATALOG antes de implementar
- [ ] 🆕 Si usó catálogo: siguió SIMCO-REUTILIZAR.md
- [ ] Código implementado
- [ ] Compilación sin errores
- [ ] Tests pasando
- [ ] Comentarios/documentación agregados
- [ ] Code review (si aplica)
- [ ] Inventario actualizado
- [ ] Traza registrada

---

### Notas

{Consideraciones especiales, decisiones técnicas, referencias}

---

### Log de Ejecución

| Fecha/Hora | Acción | Resultado |
|------------|--------|-----------|
| {timestamp} | Inicio | - |
| {timestamp} | {acción} | {resultado} |
| {timestamp} | Fin | {PASS/FAIL} |

---

**Asignada por:** {nombre-agente}
**Fecha asignación:** {YYYY-MM-DD}
**Fecha completada:** {YYYY-MM-DD}
**Duración real:** {horas}
