clinica-veterinaria/orchestration/_archive/directivas/principios/PRINCIPIO-ANTI-DUPLICACION.md
Adrian Flores Cortes 8bb46e4d08 [ESTANDAR-ORCHESTRATION] refactor: Consolidate to standard structure
- 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>
2026-01-24 14:38:02 -06:00

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