# ALEPH CRM — Decision Log ## Propósito Documentar las decisiones de diseño del flujo Gemelo → ALEPH → CRM. --- ## D-001 — Orden jerárquico El flujo sigue: EMPRESA → PERSONA → PERSONA_PROYECTO Razón: evitar registros huérfanos y mantener integridad en ALEPH. --- ## D-002 — Dry-run obligatorio Toda escritura pasa por: preview → dry-run → ejecución Razón: minimizar errores en base productiva y permitir auditoría. --- ## D-003 — Resolución de empresa Se resuelve por: 1. NIT 2. nombre normalizado Estados: - MATCHED - AMBIGUOUS - NOT_FOUND --- ## D-004 — Creación de empresa condicionada Solo se permite crear empresa si existe NIT. Razón: evitar contaminar maestros con datos incompletos. --- ## D-005 — Contacto mínimo Para CRM operativo se requiere: - full_name - email o phone --- ## D-006 — Regla de nombres - 1 palabra → nombre - 2 palabras → nombre + apellido - 3+ palabras → nombre = todas menos última Siempre: nombreC = full_name --- ## D-007 — Defaults de EMPRESAS - id_tipo = 'NA' - id_estado = 'OK' - persona_natural = 0 Razón: usar valores válidos mínimos mientras no se modele completamente. --- ## D-008 — Idempotencia CRM Antes de escribir: PERSONAS: - buscar por email - o por (nombre + NIT) PERSONA_PROYECTO: - buscar por (id_persona + id_proyecto) Si ambos existen: → CRM_ALREADY_SYNCED --- ## D-009 — Separación lectura/escritura DB - run_query → SELECT - run_execute → INSERT/UPDATE Razón: evitar errores por uso incorrecto de funciones. --- ## D-010 — Proyecto interno obligatorio Para CRM operativo se requiere: internal_commercial_project_id Razón: PERSONA_PROYECTO depende de ese identificador. --- ## D-011 — Vendor registration no bloqueante Inicialmente se consideró como prerequisito. Se corrigió a: - NO bloquea contacto ni actividad inicial - SÍ afecta madurez comercial Razón: en la práctica comercial se puede iniciar contacto antes del registro.