{"mode":"postgres","generatedAt":"2026-05-16T22:39:06.163Z","day":"2026-05-16","status":"warn","operatorScore":87,"scoreMeta":{"value":87,"band":"ready","threshold":{"ready":80,"warn":60},"caption":"Score 87/100 ≥ 80: control center listo para operación manual con guardrails.","drivers":[{"id":"readiness:journey_fathom:warn","label":"Journey/Fathom Coverage con warning","impact":-8,"status":"warn"},{"id":"loop:empty","label":"Sin approval logs (loop sin datos)","impact":-5,"status":"warn"}]},"headline":"Operación posible con warnings explícitos y aprobación humana.","priorityFocus":{"status":"warn","title":"Resolver Readiness Gate antes de operar","reason":"Compuerta GO/WATCH/NO-GO con blockers, thresholds de Campaign Bridge, approval logs y next actions claros.","metric":"WATCH · score 90/100","evidenceRefs":["readiness","campaign-bridge","approval-log"],"nextActions":["Cerrar gap de recordings/resúmenes Fathom hasta lograr cobertura útil en calls del día."],"primaryCta":{"label":"Ver Readiness","href":"/api/readiness"},"secondaryCta":{"label":"Ver actions","href":"/actions"},"source":{"phaseId":"phase3","moduleId":null}},"phases":[{"id":"phase1","title":"Upstream Campaign Bridge","status":"ready","metric":"8/8 (100%)","detail":"Cobertura campaign/ad suficiente para bajar a campaña/ad con guardrails.","nextAction":"Confirmar que el export crm-calls-lite incluye esos campos seguros para cada call nueva.","evidenceRefs":["crm-calls-lite","ad-spend-daily","campaign-bridge"]},{"id":"phase2","title":"Read-only Campaign/Ad bridge","status":"ready","metric":"8 calls · 10 citas · 1 show ups · 0 HT","detail":"Agregado PII-free por campaña/adset/ad usando señales existentes; conserva revenue null cuando upstream no soporta atribución confiable.","nextAction":"Usar el agregado solo como lectura/diagnóstico hasta que Campaign Bridge ≥80%.","evidenceRefs":["campaign-ad-bridge","crm-calls-lite","journey","payments-summary"]},{"id":"phase3","title":"Readiness gate","status":"warn","metric":"WATCH · score 90/100","detail":"Compuerta GO/WATCH/NO-GO con blockers, thresholds de Campaign Bridge, approval logs y next actions claros.","nextAction":"Cerrar gap de recordings/resúmenes Fathom hasta lograr cobertura útil en calls del día.","evidenceRefs":["readiness","campaign-bridge","approval-log"]},{"id":"phase4","title":"Recommendation preview","status":"ready","metric":"3 drafts","detail":"Los drafts son manual-only/draft_only y no ejecutan mutaciones externas.","nextAction":"Usar /actions para aprobar/rechazar/deferir y ejecutar cambios fuera de Cerebro solo con aprobación humana.","evidenceRefs":["actions-drafts","recommendations-preview"]},{"id":"phase5","title":"Approval logs","status":"warn","metric":"0 approval logs","detail":"Bitácora PII-safe/hashed para approved/rejected/deferred sin ejecutar cambios externos.","nextAction":"Registrar approved/rejected/deferred para empezar el loop de aprendizaje operativo.","evidenceRefs":["approval-log"]},{"id":"phase6","title":"Operator UI","status":"ready","metric":"/command-center + /api/command-center","detail":"Consola diaria iPhone-first con prioridad, gaps de tracking, drafts, checklist manual y evidence refs PII-free.","nextAction":"Usar /command-center como superficie ejecutiva; mantener unknowns explícitos cuando falte upstream data.","evidenceRefs":["command-center","operator-index","contracts"]},{"id":"phase7","title":"Smarter daily report","status":"ready","metric":"1 next actions · diff snapshot","detail":"Validación diaria cron-friendly separa fallo técnico, insuficiencia de datos y oportunidad; reporta solo cambios importantes.","nextAction":"Abrir el reporte diario y actuar solo sobre blockers/cambios importantes.","evidenceRefs":["validate:daily","briefing","readiness"]}],"modules":[{"id":"closer_performance","label":"Closer performance","status":"warn","metric":"0/0 calls linked","detail":"Mide calls, show/no-show indirecto, Call→Cita y follow-up por closer sin exponer lead PII.","evidenceRefs":["closer-stats","journey"]},{"id":"landing_vsl_attribution","label":"Landing/VSL attribution","status":"ready","metric":"8/8 bridged","detail":"Usa solo campos PII-free; si GHL/export no entrega UTMs/campaign/ad, se mantiene pending_external.","evidenceRefs":["campaign-bridge","landing-vsl"]},{"id":"ads_spend_readiness","label":"Ads spend/readiness","status":"ready","metric":"$0.00 · 0 campaign rows","detail":"Spend visible, pero decisiones por campaña requieren bridge suficiente y aprobación manual.","evidenceRefs":["ad-spend-daily","readiness"]},{"id":"forecast_anomalies","label":"Forecast/anomalies","status":"ready","metric":"0 follow-up · 0 gaps","detail":"Forecast conservador: usa journey/Fathom y marca anomalías/gaps en vez de inventar predicciones.","evidenceRefs":["journey","fathom"]},{"id":"operator_score","label":"Operator score","status":"ready","metric":"87/100","detail":"Score operativo derivado de readiness, freshness, drift, bridge, drafts y loop de aprobaciones.","evidenceRefs":["readiness","actions-drafts","approval-log"]}],"campaignBridgePlan":{"status":"ready","coverage":1,"calls":8,"withSignal":8,"safeFieldsObserved":["ad_id","adset_id","campaign_id","captured_at","fbclid","session_id","utm_campaign","utm_content","utm_medium","utm_source","visitor_id"],"requiredSafeFields":["visitor_id/sessionId","utm_source/utm_medium/utm_campaign","campaign_id/adset_id/ad_id","click ids","captured_at"],"missingFieldGroups":[],"manualChecklist":["Confirmar que landing/VSL captura visitor_id, UTMs, campaign_id, adset_id, ad_id, click IDs y captured_at en hidden fields.","Confirmar que GHL guarda esos campos como custom fields del contacto/opportunity/appointment sin datos personales en evidence.","Confirmar que el export crm-calls-lite incluye esos campos seguros para cada call nueva.","Correr sync:entities y validar /api/command-center hasta que campaignBridge supere 80%."],"fieldGuide":[{"id":"visitor","label":"Visitor / Session","detail":"Persistir visitor_id (anónimo) y session_id desde landing/VSL hasta GHL.","expectedFields":["visitor_id","session_id"],"observed":true},{"id":"utm","label":"UTMs","detail":"Propagar utm_source, utm_medium, utm_campaign, utm_content, utm_term como hidden fields.","expectedFields":["utm_source","utm_medium","utm_campaign","utm_content","utm_term"],"observed":true},{"id":"campaign","label":"Campaign / Ad ids","detail":"Capturar campaign_id, adset_id, ad_id (Meta) y campaign/ad_group/ad ids (Google) en cada lead.","expectedFields":["campaign_id","adset_id","ad_id"],"observed":true},{"id":"click","label":"Click ids","detail":"Persistir gclid, fbclid (y wbraid/gbraid si llega) para puente exacto con la fuente.","expectedFields":["gclid","fbclid","wbraid","gbraid"],"observed":true},{"id":"captured","label":"Captured timestamp","detail":"Guardar captured_at para reconciliar latencia entre lead, cita y call.","expectedFields":["captured_at","lead_captured_at","first_seen_at"],"observed":true}]},"campaignAdBridgeEvidence":{"dataStatus":"supported","calls":8,"citas":10,"showUps":1,"hot":0,"htCloses":0,"revenueUsd":null,"notes":["Bridge read-only: agregado desde señales existentes sin mutaciones externas.","Revenue por campaña/adset/ad no disponible en esta capa; conservar null hasta soporte upstream verificable."]},"validation":{"freshness":"ok · 1 min","sourceDrift":"0 critical / 0 warn","callToAppointment":"0/8 linked","campaignBridge":"8/8 (100%)"},"decisionLoop":{"total":0,"byAction":{},"recentEvidenceRefs":[],"nextLearningStep":"Registrar approved/rejected/deferred para empezar el loop de aprendizaje operativo."},"domain":{"status":"pending_external","current":"https://cerebro.52.22.45.224.sslip.io","target":"cerebro.unlockedecom.co","expectedIp":"52.22.45.224","detail":"Cutover documentado; DNS final pendiente de verificación externa antes de activar Caddy.","manualChecklist":["Confirmar registro A cerebro.unlockedecom.co → 52.22.45.224 en el proveedor DNS.","Esperar propagación y verificar con `dig +short cerebro.unlockedecom.co`.","Activar la configuración Caddy según docs/CEREBRO_DOMAIN_CUTOVER.md.","Smoke /api/command-center contra el dominio nuevo y registrar en la bitácora."]},"dailyRoutine":["Abrir /command-center y leer la tira de prioridad antes de cualquier decisión.","Validar freshness, source drift, Call→Cita y Campaign Bridge antes de aprobar scale/cut.","Resolver cada draft en /actions: approved / rejected / deferred con evidencia y nota corta.","Ejecutar cambios externos fuera de Cerebro solo con aprobación humana y registrar resultado posterior."],"drafts":[{"id":"draft:coach_closer:closer:closer-low-show-daryi-perez:738a33c6ad69dc8f","decisionType":"coach_closer","targetType":"closer","targetId":"closer-low-show-daryi-perez:738a33c6ad69dc8f","title":"Show rate bajo por closer","executionMode":"draft_only","approvalRequired":true,"externalMutation":false,"proposedSteps":["Revisar métricas agregadas del closer y evidencia Fathom disponible.","Preparar coaching manual con objeción/next action agregada; no exponer datos del lead.","Registrar si se aprobó, rechazó o difirió la intervención."],"evidenceRefs":["daily-closers-history-lite"]},{"id":"draft:observe:closer:closer-cancel-invalid-daryi-perez:6ec0e14ab90ee7d0","decisionType":"observe","targetType":"closer","targetId":"closer-cancel-invalid-daryi-perez:6ec0e14ab90ee7d0","title":"Muchas citas canceladas o inválidas","executionMode":"draft_only","approvalRequired":true,"externalMutation":false,"proposedSteps":["Mantener sin cambios automáticos mientras se valida la señal.","Revisar siguiente sync y comparar si el warning persiste.","Registrar decisión humana si se acepta el seguimiento."],"evidenceRefs":["daily-closers-history-lite"]},{"id":"draft:observe:closer:closer-no-show-daryi-perez:417c47c820a93fa2","decisionType":"observe","targetType":"closer","targetId":"closer-no-show-daryi-perez:417c47c820a93fa2","title":"No show concentrado","executionMode":"draft_only","approvalRequired":true,"externalMutation":false,"proposedSteps":["Mantener sin cambios automáticos mientras se valida la señal.","Revisar siguiente sync y comparar si el warning persiste.","Registrar decisión humana si se acepta el seguimiento."],"evidenceRefs":["daily-closers-history-lite"]}],"operation":{"mode":"preview","readOnly":true,"writes":false,"externalMutations":false}}