- Move 6 non-standard folders to _archive/ - Update _MAP.md with standardized structure Standard: SIMCO-ESTANDAR-ORCHESTRATION v1.0.0 Level: SUB-CONSUMER Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
7.5 KiB
7.5 KiB
PRINCIPIO: ANTI-DUPLICACIÓN
Versión: 1.0.0 Fecha: 2025-12-08 Tipo: Principio Fundamental - HERENCIA OBLIGATORIA Aplica a: TODOS los agentes sin excepción
DECLARACIÓN DEL PRINCIPIO
╔══════════════════════════════════════════════════════════════════════╗
║ ║
║ ANTES DE CREAR, VERIFICAR QUE NO EXISTE ║
║ ║
║ "Un duplicado creado es tiempo perdido y confusión garantizada." ║
║ "2 minutos de verificación ahorran horas de corrección." ║
║ ║
╚══════════════════════════════════════════════════════════════════════╝
REGLA DE ORO
┌─────────────────────────────────────────────────────────────────────┐
│ │
│ NUNCA crear un objeto (tabla, entity, componente, etc.) │
│ sin antes verificar que NO existe algo igual o similar. │
│ │
└─────────────────────────────────────────────────────────────────────┘
PROCESO DE VERIFICACIÓN
Paso 0: Consultar Catálogo de Funcionalidades (NUEVO - OBLIGATORIO)
# 🆕 PRIMERO: Verificar si existe funcionalidad en catálogo global
grep -i "{funcionalidad}" @CATALOG_INDEX
# Funcionalidades comunes ya catalogadas:
# - auth (login, registro, JWT)
# - session-management (sesiones, dispositivos)
# - rate-limiting (throttle, 429)
# - notifications (email, push)
# - multi-tenancy (tenant, RLS)
# - feature-flags (toggles)
# - websocket (realtime)
# - payments (stripe)
Si encuentra en @CATALOG:
✅ USAR CÓDIGO DEL CATÁLOGO
1. Ir a @CATALOG/{funcionalidad}/
2. Leer README.md (descripción y trade-offs)
3. Seguir IMPLEMENTATION.md (pasos)
4. Copiar _reference/ (código base)
5. Adaptar configuración al proyecto
Ver: @REUTILIZAR (SIMCO-REUTILIZAR.md)
Paso 1: Consultar Inventario del Proyecto
# Buscar en inventario maestro
grep -i "{nombre}" @INVENTORY
# Buscar en inventario específico
grep -i "{nombre}" @INV_DB # Para database
grep -i "{nombre}" @INV_BE # Para backend
grep -i "{nombre}" @INV_FE # Para frontend
Paso 2: Buscar en Código
# Buscar archivos con nombre similar
find apps/ -name "*{nombre}*" -type f
# Buscar definiciones en código
grep -rn "CREATE TABLE.*{nombre}" apps/
grep -rn "class {Nombre}" apps/
grep -rn "export.*{Nombre}" apps/
Paso 3: Evaluar Resultado
| Resultado | Acción |
|---|---|
| Existe en @CATALOG | ✅ REUTILIZAR del catálogo (ver @REUTILIZAR) |
| No encontrado | ✅ Proceder a crear |
| Encontrado idéntico | 🛑 DETENER - No crear, usar existente |
| Encontrado similar | ⚠️ PREGUNTAR - ¿Modificar existente o crear diferente? |
QUÉ VERIFICAR POR TIPO
Database (DDL)
# Verificar tabla
grep -rn "CREATE TABLE.*{nombre}" @DDL_ROOT
grep -i "{nombre}" @INV_DB
# Verificar schema
grep -rn "CREATE SCHEMA.*{nombre}" @DDL_ROOT
# Verificar función
grep -rn "CREATE.*FUNCTION.*{nombre}" @DDL_ROOT
Backend (NestJS)
# Verificar entity
find @BACKEND -name "*{nombre}*.entity.ts"
grep -rn "class {Nombre}Entity" @BACKEND
# Verificar service
find @BACKEND -name "*{nombre}*.service.ts"
grep -rn "class {Nombre}Service" @BACKEND
# Verificar controller
find @BACKEND -name "*{nombre}*.controller.ts"
Frontend (React)
# Verificar componente
find @FRONTEND -name "*{Nombre}*.tsx"
grep -rn "export.*{Nombre}" @FRONTEND_ROOT
# Verificar hook
find @FRONTEND -name "use{Nombre}*.ts"
# Verificar type
grep -rn "interface {Nombre}\|type {Nombre}" @FRONTEND_ROOT
SI ENCUENTRAS DUPLICADO
Duplicado Exacto
🛑 DETENER INMEDIATAMENTE
El objeto `{nombre}` YA EXISTE:
- **Ubicación:** {ruta}
- **Inventario:** {línea en inventario}
- **Estado:** {estado}
**Acción:** Usar el existente, NO crear nuevo.
**Si necesitas modificarlo:**
Ver @MODIFICAR (SIMCO-MODIFICAR.md)
Objeto Similar
⚠️ OBJETO SIMILAR ENCONTRADO
Encontré `{nombre_similar}` que podría ser lo mismo:
- **Ubicación:** {ruta}
- **Propósito:** {descripción}
**Preguntas a resolver:**
1. ¿Es el mismo objeto con diferente nombre?
2. ¿Debo modificar el existente?
3. ¿Son diferentes y debo crear con otro nombre?
ESPERAR CLARIFICACIÓN antes de proceder.
CONSECUENCIAS DE DUPLICAR
❌ Confusión sobre cuál usar
→ Diferentes partes del código usan diferentes versiones
❌ Mantenimiento duplicado
→ Cambios deben hacerse en múltiples lugares
❌ Bugs por inconsistencia
→ Un objeto se actualiza, el duplicado no
❌ Inventarios incorrectos
→ Estado del proyecto confuso
❌ Tiempo perdido
→ Trabajo que hay que deshacer
PREVENCIÓN PROACTIVA
Al Planificar
ANTES de diseñar nuevo objeto:
1. [ ] Busqué en inventarios
2. [ ] Busqué en código
3. [ ] Confirmé que no existe
Al Crear
DURANTE creación de objeto:
1. [ ] Nombre no colisiona con existente
2. [ ] Ubicación es única
3. [ ] Propósito no está cubierto por otro objeto
Al Completar
DESPUÉS de crear:
1. [ ] Actualicé inventario
2. [ ] No hay advertencias de duplicados
CASOS ESPECIALES
¿Qué pasa si necesito algo PARECIDO pero diferente?
Ejemplo: Existe `UserEntity`, necesito `AdminUserEntity`
Verificar:
1. ¿Es una extensión? → Heredar/extender existente
2. ¿Es un caso especial? → Agregar campo al existente
3. ¿Es realmente diferente? → Crear nuevo con nombre claro
Nombrar claramente:
- ❌ `User2Entity` (confuso)
- ✅ `AdminUserEntity` (claro y diferenciado)
¿Qué pasa si el existente está mal?
Si el objeto existente tiene problemas:
1. Documentar los problemas
2. Decidir: ¿Corregir existente o reemplazar?
3. Si reemplazar: eliminar viejo completamente
4. NUNCA tener ambos coexistiendo
CHECKLIST RÁPIDO
Antes de crear CUALQUIER objeto:
[ ] 🆕 Busqué funcionalidad en @CATALOG_INDEX (PRIMERO)
[ ] Busqué "{nombre}" en @INVENTORY
[ ] Busqué archivos con find
[ ] Busqué definiciones con grep
[ ] Confirmé que NO existe en catálogo NI en proyecto
[ ] Si existe en catálogo, seguí @REUTILIZAR
[ ] Si existe similar, pregunté qué hacer
REFERENCIAS SIMCO
- @CATALOG - Catálogo de funcionalidades reutilizables (CONSULTAR PRIMERO)
- @REUTILIZAR - Proceso para reutilizar del catálogo
- @CREAR - Proceso completo de creación (incluye verificación)
- @BUSCAR - Estrategias de búsqueda
- @DOCUMENTAR - Actualización de inventarios
Este principio es OBLIGATORIO y NO puede ser ignorado por ningún agente.
Versión: 1.0.0 | Sistema: SIMCO | Tipo: Principio Fundamental