Copie TODO esto dentro del archivo:
ALEPH CRM FLOW — Gemelo Comercial¶
1. Propósito¶
Definir el flujo operativo del Gemelo Comercial para:
gestionar prospectos
sincronizar información con ALEPH
evitar duplicidades (idempotencia)
mantener consistencia entre sistemas
2. Arquitectura del flujo¶
Prospect Store ↓ company_resolver ↓ company_push ↓ company_writer (dry-run → execute) ↓ crm_sync ↓ crm_push ↓ crm_writer (dry-run → execute) ↓ ALEPH
3. Flujo operativo¶
3.1 Empresa¶
Resolver empresa (
company_resolver)Si no existe →
CREATE_COMPANYGenerar dry-run
Ejecutar inserción en
EMPRESAS
3.2 CRM¶
Clasificar (
crm_sync)Validar (
crm_push)Generar dry-run (
crm_writer)Ejecutar:
PERSONASPERSONA_PROYECTO
4. Tablas ALEPH¶
EMPRESAS¶
NITrazon_socialid_tipoid_estado
Defaults:
id_tipo = 'NA'id_estado = 'OK'
PERSONAS¶
id_personanombreapellidonombreCe_mailtelefonocelularNIT
Regla de nombres (Regla 3)¶
1 palabra → nombre
2 palabras → nombre + apellido
3+ → nombre = todas menos última
Siempre:
nombreC = full_name
PERSONA_PROYECTO¶
id_personaid_proyectofecha_visitafecha_sig_contactonota_ultimo_contacto
5. Reglas clave¶
5.1 Orden jerárquico¶
EMPRESA → PERSONA → RELACIÓN
5.2 Contacto mínimo¶
Se requiere:
full_name(
emailophone)
5.3 Idempotencia¶
Antes de insertar:
PERSONAS: buscar por email o por (nombre + NIT)
PERSONA_PROYECTO: buscar por (id_persona + id_proyecto)
5.4 Dry-run obligatorio¶
preview → dry-run → execute
6. Estados del sistema¶
Estado |
Significado |
|---|---|
CREATE_CONTACT_AND_ACTIVITY |
Crear persona + relación |
ENRICH_CONTACTS |
Falta contacto |
CRM_ALREADY_SYNCED |
Ya existe en ALEPH |
CREATE_ACTIVITY_ONLY |
Falta relación |
PENDING_COMPANY_CREATION |
Falta empresa |
VENDOR_REGISTRATION |
Flujo internacional |
7. Estado actual¶
Prospecto |
Estado |
|---|---|
NAC-0002 |
✅ CRM_ALREADY_SYNCED |
NAC-0001 |
⛔ PENDING_COMPANY_CREATION |
NAC-0003 |
⛔ PENDING_COMPANY_CREATION |
INT-* |
⛔ VENDOR_REGISTRATION |
8. Archivos del pipeline¶
data/commercial/
prospects.jsonl
company_resolution_preview.jsonl
company_push_preview.jsonl
company_write_dry_run.jsonl
crm_sync_preview.jsonl
crm_push_preview.jsonl
crm_write_dry_run.jsonl
9. Comandos operativos¶
Empresas¶
python -m prodisys.comercial.company_resolver
python -m prodisys.comercial.company_push
python -m prodisys.comercial.company_writer
CRM
python -m prodisys.comercial.crm_sync
python -m prodisys.comercial.crm_push
python -m prodisys.comercial.crm_writer
10. Estado del sistema
✔ Escritura en EMPRESAS
✔ Escritura en PERSONAS
✔ Escritura en PERSONA_PROYECTO
✔ Idempotencia funcional
✔ Flujo completo operativo
11. Próximos pasos
Corto plazo
Completar NAC-0001 y NAC-0003
Medio plazo
Normalización de nombres
Validación de teléfonos
Generación automática de contact_id
Largo plazo
Vendor registration (internacional)
Sincronización bidireccional
---
## ✅ Luego guarde y salga
En nano:
```bash
Ctrl + O
Enter
Ctrl + X
🧠 Resultado
Ahora tiene:
documentación persistente
alineada al código real
lista para equipo o escalamiento
### Regla 6 — Proyecto interno obligatorio para CRM operativo
Para crear relación en `PERSONA_PROYECTO` se requiere:
- `internal_commercial_project_id`
Si no existe, el prospecto queda bloqueado con:
- `falta_proyecto_interno`
Razón:
sin proyecto interno comercial no se puede crear la relación CRM operativa en ALEPH.
## Estado actual por prospecto
- `NAC-0002`: sincronizado completamente (`CRM_ALREADY_SYNCED`)
- `NAC-0001`: empresa creada y contacto válido, bloqueado por `falta_proyecto_interno`
- `NAC-0003`: contacto válido, bloqueado por `PENDING_COMPANY_CREATION`
- `INT-0001`, `INT-0002`: bloqueados por `VENDOR_REGISTRATION`
## D-011 — Proyecto interno obligatorio
Para CRM operativo no basta con empresa y contacto.
También se requiere `internal_commercial_project_id`.
Sin ese dato, el prospecto debe quedar bloqueado como no escribible.
Razón:
`PERSONA_PROYECTO` exige proyecto y el writer CRM depende de esa relación.
## 12. Flujo internacional
A diferencia del flujo nacional, el flujo internacional introduce el concepto de:
- `vendor_registration_required`
- `vendor_registration_status`
### Regla operativa
El vendor registration:
- NO bloquea la creación de contactos ni actividades iniciales
- SÍ afecta la madurez comercial del prospecto
### Interpretación en CRM
| Condición | Acción |
|----------|--------|
| Sin contacto | ENRICH_CONTACTS |
| Con contacto y acción | CREATE_CONTACT_AND_ACTIVITY |
| Con vendor pendiente | se refleja en `reason`, no bloquea |
### Ejemplo
```text
CREATE_CONTACT_AND_ACTIVITY
→ "Prospecto internacional listo para gestión comercial; vendor registration pendiente."