8 KiB
Guía de Desarrollo - EMERGES TES
Reglas, principios y buenas prácticas para desarrolladores y asistentes de código.
🎯 Objetivo de este Documento
Este documento establece las reglas de desarrollo, principios a respetar y qué puede y qué no puede modificar un asistente de código o desarrollador humano.
Regla de oro: Si una funcionalidad no está implementada ni documentada explícitamente, debe considerarse inexistente.
🚫 Normas Fundamentales
1. NO Asumir Funcionalidades Inexistentes
CRÍTICO: Un asistente de código NO debe:
- ❌ Asumir que existe una funcionalidad que no está documentada
- ❌ Inventar sistemas de negocio no implementados
- ❌ Crear entidades que no existen en el dominio
- ❌ Añadir features "porque sería útil" sin documentación previa
Ejemplo incorrecto:
// ❌ INCORRECTO: Asumir que existe un sistema de tickets de soporte
interface SupportTicket {
id: string;
// ... esto NO existe en el dominio
}
Ejemplo correcto:
// ✅ CORRECTO: Usar entidades que existen en el dominio
import type { ContentItem } from '../domain/entities/ContentItem.js';
2. NO Confundir Tickets con 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 (ver
docs/QUE_FALTA.md)
Entidades reales del dominio:
ContentItem- Protocolos, guías, manualesDrug- FármacosGlossaryTerm- Términos del glosarioMediaResource- Medios audiovisualesMedicalReview- Revisiones médicas
3. NO Modificar Arquitectura sin Documentar
Antes de cambiar la arquitectura:
- ✅ Documentar el cambio en
SPEC.md - ✅ Actualizar
.cursorrulessi afecta reglas de código - ✅ Justificar el cambio con razones técnicas claras
✅ Qué SÍ Puede Hacer un Asistente
1. Implementar Funcionalidades Documentadas
Un asistente SÍ puede implementar funcionalidades que estén:
- ✅ Documentadas en
SPEC.md - ✅ Listadas en
docs/QUE_FALTA.mdcomo tarea pendiente - ✅ Definidas en
README_TODO.mdcon especificaciones claras
2. Mejorar Código Existente
Un asistente SÍ puede:
- ✅ Refactorizar código siguiendo
.cursorrules - ✅ Añadir tests para aumentar cobertura
- ✅ Corregir bugs documentados
- ✅ Optimizar rendimiento sin cambiar arquitectura
3. Añadir Tests
Un asistente SÍ puede:
- ✅ Crear tests unitarios para servicios
- ✅ Crear tests de integración para API
- ✅ Aumentar cobertura de tests frontend
- ✅ Añadir tests para casos edge
4. Documentar Código
Un asistente SÍ puede:
- ✅ Añadir comentarios JSDoc
- ✅ Documentar funciones complejas
- ✅ Actualizar READMEs con información precisa
- ✅ Crear documentación técnica
❌ Qué NO Puede Hacer un Asistente
1. Inventar Funcionalidades
NO debe:
- ❌ Crear sistemas de tickets de soporte sin documentación previa
- ❌ Añadir features no documentadas en SPEC.md
- ❌ Asumir funcionalidades "porque sería lógico"
- ❌ Crear entidades que no existen en el dominio
2. Cambiar Arquitectura sin Justificación
NO debe:
- ❌ Cambiar de Clean Architecture a otra arquitectura sin documentar
- ❌ Modificar reglas de dependencias entre capas sin justificar
- ❌ Introducir frameworks nuevos sin evaluar impacto
3. Ignorar Reglas de Código
NO debe:
- ❌ Usar
anyen TypeScript (prohibido en.cursorrules) - ❌ Mutar objetos directamente (inmutabilidad requerida)
- ❌ Saltarse validación Zod en puntos de entrada
- ❌ Crear funciones de más de 30 líneas sin dividir
4. Modificar Entidades sin Entender el Dominio
NO debe:
- ❌ Cambiar nombres de entidades sin justificar
- ❌ Añadir campos a entidades sin documentar en SPEC.md
- ❌ Eliminar campos de entidades sin verificar dependencias
📋 Principios de Desarrollo
1. Type Safety Estricto
- ✅ PROHIBIDO el uso de
any - ✅ Todos los tipos deben ser explícitos
- ✅ Usar tipos del dominio (
ContentItem,Drug, etc.)
2. Inmutabilidad
- ✅ Todas las propiedades de entidades son
readonly - ✅ No mutar objetos directamente
- ✅ Crear nuevos objetos en lugar de modificar existentes
3. Validación Estricta
- ✅ Validar todos los inputs con Zod
- ✅ Validaciones básicas en entidades (
create()) - ✅ Validaciones complejas en servicios
4. Clean Architecture (Backend)
- ✅ Domain Layer: NO depende de nadie
- ✅ Application Layer: Solo depende de Domain
- ✅ Infrastructure Layer: Depende de Domain y Application
- ✅ Presentation Layer: Depende de Application y Domain
5. Early Returns
- ✅ Usar guard clauses para errores
- ✅ Evitar anidación profunda
- ✅ Retornar temprano en casos de error
6. Funciones Pequeñas
- ✅ Máximo 20-30 líneas por función
- ✅ Una sola responsabilidad
- ✅ Nombres descriptivos
🔍 Instrucciones para Trabajar con Asistentes de IA
Para el Desarrollador Humano
-
Proporcionar contexto claro:
- Especificar qué funcionalidad implementar
- Referenciar documentación relevante (SPEC.md, tickets)
- Indicar restricciones arquitectónicas
-
Validar propuestas:
- Revisar que no invente funcionalidades
- Verificar que respete
.cursorrules - Comprobar que no cambie arquitectura sin justificar
-
Revisar código generado:
- Verificar tipos TypeScript (sin
any) - Comprobar validación Zod en inputs
- Revisar que siga Clean Architecture
- Verificar tipos TypeScript (sin
Para el Asistente de IA
-
Antes de proponer cambios:
- Leer
SPEC.mdpara entender el dominio - Revisar
.cursorrulespara reglas de código - Consultar
README_ARCHITECTURE.mdpara arquitectura - Verificar
docs/QUE_FALTA.mdpara tareas pendientes
- Leer
-
Al proponer funcionalidades nuevas:
- Documentar en SPEC.md primero
- Justificar la necesidad
- Explicar impacto arquitectónico
-
Al implementar código:
- Seguir
.cursorrulesestrictamente - Usar tipos del dominio existentes
- Añadir validación Zod donde corresponda
- Crear tests para código nuevo
- Seguir
⚠️ Advertencias Importantes
1. No Introducir Sistemas de Negocio No Documentados
Ejemplo de lo que NO hacer:
// ❌ INCORRECTO: Inventar sistema de tickets de soporte
interface SupportTicket {
id: string;
userId: string;
// ... esto NO existe en el dominio
}
Si se necesita esta funcionalidad:
- Documentar en
SPEC.mdprimero - Definir entidades en
domain/entities/ - Crear repositorios y servicios
- Implementar API endpoints
- Añadir tests
2. No Asumir Funcionalidades por Nombre
Ejemplo:
- Ver "TICKET-013" en código → NO significa que existe entidad "Ticket"
- Ver "validation" → Verificar qué significa en el contexto (puede ser validación médica de contenido, no tickets)
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.md si son significativos
📚 Referencias
SPEC.md- Especificación maestra (fuente de verdad).cursorrules- Reglas de código y arquitecturaREADME_ARCHITECTURE.md- Arquitectura detalladadocs/QUE_FALTA.md- Tareas pendientesdocs/CONTENIDO_FALTANTE.md- Contenido faltante
✅ Checklist Antes de Aceptar Cambios
Antes de aceptar cambios propuestos por un asistente:
- ¿Respeta
.cursorrules? - ¿No inventa funcionalidades no documentadas?
- ¿No usa
anyen TypeScript? - ¿Valida inputs con Zod?
- ¿Sigue Clean Architecture (backend)?
- ¿Añade tests para código nuevo?
- ¿Documenta cambios significativos en SPEC.md?
Última actualización: 2025-02-02