Handoff Core + CMS → CRM
Contratos listos para construir SaaSCol CRM sin inventar storage/bus propios.
APIs de deals
| Método | Ruta | Uso |
|---|---|---|
GET | /api/v1/crm/deals | Pipeline / listado |
POST | /api/v1/crm/deals | Alta manual (title obligatorio; stage default new_lead) |
PATCH | /api/v1/crm/deals/{dealId} | Actualizar; si stage pasa a won/converted → evento |
Schema UAP: crm.deal (seed SAMI).
Entrada desde CMS (ya cableada)
POST /api/v1/public/tenant/{tenantId}/forms/{formId}/submit
Content-Type: application/json
{ "name": "…", "email": "…", "message": "…" }
→ Evento cms.form.submitted → worker Core crea crm.deal (source: cms_form).
El template Healthcare incluye nodo ContactForm en /contacto.
Eventos que el CRM debe usar
| Acción CRM | Evento a publicar |
|---|---|
| Lead ganado / convertido | crm.opportunity.converted |
| (futuro) lead desde Bot | consumir bot.interaction.lead_captured |
Publicar vía POST /api/v1/events/publish con product: "crm".
Primeros pasos recomendados
- El browser nunca llama a Core: el admin CRM habla con el BFF (
saas-col-crmen:3012). El BFF usaCORE_API_URLhacia Core. - UI pipeline vía BFF →
GET/POST/PATCH …/crm/dealsen Core. - No montar MinIO ni Redis de plataforma propios (cache = creds provisionadas por Core si hace falta).
- Reutilizar Keycloak / JWT Core (
tenant_iden claims). Chart:deploy/helm/saascol-crm/. Postgres compartido schemacrm.
Detalle en repo: architecture/37-handoff-core-cms-hacia-crm.md · contracts: architecture/42-service-contracts-y-postgres-compartido.md.