7.2 KiB
Instrucciones para Asistentes de Código - EMERGES TES
Instrucciones persistentes para asistentes de código (IA) que trabajan en este proyecto.
Última actualización: 2025-02-02
🎯 Objetivo
Este documento proporciona reglas conceptuales, buenas prácticas y advertencias para que asistentes de código trabajen eficazmente en este proyecto sin inventar funcionalidades o malinterpretar el dominio.
🚨 REGLA DE ORO
Si una funcionalidad no está implementada ni documentada explícitamente, debe considerarse INEXISTENTE.
📋 Reglas Conceptuales
1. Entender el Dominio Antes de Proponer Cambios
Antes de proponer cualquier cambio:
- ✅ Leer
SPEC.mdpara entender el dominio - ✅ Revisar
README_ARCHITECTURE.mdpara arquitectura - ✅ Consultar
docs/QUE_FALTA.mdpara tareas pendientes - ✅ Verificar
.cursorrulespara reglas de código
NO proponer cambios sin entender el contexto.
2. No Inventar Funcionalidades
CRÍTICO: Un asistente NO debe:
- ❌ Asumir que existe una funcionalidad no documentada
- ❌ Crear entidades que no existen en el dominio
- ❌ Añadir features "porque sería útil" sin documentación previa
- ❌ Confundir tickets técnicos con entidades de negocio
Ejemplo incorrecto:
// ❌ INCORRECTO: Inventar sistema de tickets de soporte
interface SupportTicket {
id: string;
// Esto NO existe en el dominio
}
Ejemplo correcto:
// ✅ CORRECTO: Usar entidades que existen
import type { ContentItem } from '../domain/entities/ContentItem.js';
3. Separar Tickets de Entidades
IMPORTANTE: Los "tickets" (TICKET-001, TICKET-002, etc.) son tareas técnicas de desarrollo, NO entidades del dominio.
- ❌ NO crear entidades llamadas "Ticket"
- ❌ NO añadir lógica de negocio para "tickets"
- ✅ SÍ usar tickets como referencia a tareas técnicas
Entidades reales del dominio:
ContentItem- Protocolos, guías, manualesDrug- FármacosGlossaryTerm- Términos del glosarioMediaResource- Medios audiovisualesMedicalReview- Revisiones médicas
4. Respetar Clean Architecture
Backend sigue Clean Architecture:
Domain Layer (NO depende de nadie)
↑
Application Layer (solo depende de Domain)
↑
Infrastructure Layer (depende de Domain + Application)
↑
Presentation Layer (depende de Application + Domain)
Reglas:
- ✅ Domain: NO depende de nadie
- ✅ Application: Solo depende de Domain
- ✅ Infrastructure: Depende de Domain y Application
- ✅ Presentation: Depende de Application y Domain
NO invertir estas dependencias.
✅ Buenas Prácticas para Proponer Cambios
1. Antes de Proponer
Checklist:
- ¿Está documentado en
SPEC.mdoREADME_TODO.md? - ¿Respeto
.cursorrules? - ¿Uso entidades existentes del dominio?
- ¿No invento funcionalidades nuevas?
- ¿Sigo Clean Architecture (backend)?
2. Al Proponer Funcionalidades Nuevas
Proceso:
- ✅ Documentar primero en
SPEC.md - ✅ Justificar la necesidad
- ✅ Explicar impacto arquitectónico
- ✅ Definir entidades en
domain/entities/si aplica - ✅ Proponer implementación siguiendo Clean Architecture
3. Al Implementar Código
Reglas:
- ✅ TypeScript estricto: NO usar
any - ✅ Validación Zod: Validar todos los inputs
- ✅ Inmutabilidad: Propiedades
readonlyen entidades - ✅ Early returns: Guard clauses para errores
- ✅ Funciones pequeñas: Máximo 20-30 líneas
- ✅ Tests: Añadir tests para código nuevo
⚠️ Advertencias Importantes
1. No Asumir Sistemas de Negocio No Documentados
Ejemplos de lo que NO existe:
- ❌ Sistema de tickets de soporte/incidencias
- ❌ Sistema de mensajería entre usuarios
- ❌ Sistema de roles avanzados (más allá de admin/reviewer/validator)
- ❌ Sistema de permisos granulares por recurso
Si se necesita: Documentar en SPEC.md primero, luego implementar.
2. No Confundir Nombres con Funcionalidades
Ejemplos:
- Ver "TICKET-013" → NO significa que existe entidad "Ticket"
- Ver "validation" → Verificar contexto (validación médica de contenido, no tickets)
- Ver "review" → Verificar si es
MedicalReview(entidad) o revisión de código
3. Verificar Antes de Modificar
Antes de modificar entidades:
- ✅ Buscar todas las referencias en el código
- ✅ Verificar dependencias en otros módulos
- ✅ Comprobar tests que puedan romperse
- ✅ Documentar cambios en
SPEC.mdsi son significativos
🔍 Cómo Trabajar con Este Proyecto
Paso 1: Entender el Contexto
Leer en este orden:
README.md- Descripción generalSPEC.md- Especificación maestraREADME_ARCHITECTURE.md- Arquitectura.cursorrules- Reglas de código
Paso 2: Identificar la Tarea
Verificar:
- ¿Está en
README_TODO.md? - ¿Está en
docs/QUE_FALTA.md? - ¿Está documentada en
SPEC.md?
Si NO está documentada: NO asumir, preguntar o documentar primero.
Paso 3: Implementar
Seguir:
.cursorrulespara reglas de códigoREADME_ARCHITECTURE.mdpara arquitecturaREADME_DEV.mdpara buenas prácticas
Paso 4: Validar
Checklist:
- ¿No uso
any? - ¿Valido inputs con Zod?
- ¿Sigo Clean Architecture?
- ¿Añado tests?
- ¿Documento cambios significativos?
📚 Referencias Rápidas
Documentos Principales
SPEC.md- Especificación maestra (fuente de verdad).cursorrules- Reglas de código y arquitecturaREADME_ARCHITECTURE.md- Arquitectura detalladaREADME_DEV.md- Guía de desarrolloREADME_TODO.md- Tareas pendientes
Entidades del Dominio
ContentItem-backend/src/domain/entities/ContentItem.tsDrug-backend/src/domain/entities/Drug.tsGlossaryTerm-backend/src/domain/entities/GlossaryTerm.tsMediaResource-backend/src/domain/entities/MediaResource.tsMedicalReview-backend/src/domain/entities/MedicalReview.ts
Tickets Técnicos
- NO son entidades del dominio
- SÍ son tareas técnicas de desarrollo
- Documentados en:
docs/QUE_FALTA.md
✅ Checklist Antes de Proponer Cambios
Antes de proponer cualquier cambio, verificar:
- ¿Entiendo el dominio leyendo
SPEC.md? - ¿Respeto
.cursorrules? - ¿No invento funcionalidades no documentadas?
- ¿Uso entidades existentes del dominio?
- ¿No confundo tickets con entidades?
- ¿Sigo Clean Architecture (backend)?
- ¿Valido inputs con Zod?
- ¿Añado tests para código nuevo?
- ¿Documento cambios significativos?
🎯 Resumen Ejecutivo
Para asistentes de código:
- ✅ Leer primero:
SPEC.md,README_ARCHITECTURE.md,.cursorrules - ✅ No inventar: Si no está documentado, no existe
- ✅ Respetar arquitectura: Clean Architecture en backend
- ✅ Validar código: TypeScript estricto, Zod, tests
- ✅ Documentar cambios: Especialmente cambios arquitectónicos
Regla de oro: Si una funcionalidad no está implementada ni documentada explícitamente, debe considerarse inexistente.
Última actualización: 2025-02-02