# Métricas consolidadas do ciclo completo (Etapa 81)

## Visão geral

A **Etapa 81** cria a **base de métricas consolidadas do ciclo completo** e **indicadores de performance comercial e operacional**, para que a gestão avalie não apenas o estado actual do evento/pedido, mas também a **qualidade e eficiência do ciclo**. A camada é **agregadora**: consome dashboard, alertas, closure e dados operacionais (scope, comunicação, checklist, execução, relatório final, aceite final); não substitui nenhum módulo.

| Conceito | Descrição |
|----------|-----------|
| **Estado de métricas** | **EventCycleMetricsState**: CycleId, TotalCycleEstimatedDurationDays, QuestSessionCount, QuestCompletionSignalScore, CommercialConversionSignalScore, HandoffDelayRiskScore, ProducerResponseScore, ScopeRevisionCount, CommunicationActivityScore, PreparationReadinessScore, ExecutionProgressScore, FinalAcceptanceCompletionScore, OverallCyclePerformanceScore, PerformanceLabel, TopPositiveFactors, TopNegativeFactors, LastCalculatedAt. |
| **Controller** | **EventCycleMetricsController**: CalculateMetrics(orders, opportunities, proposals, sessions, followUpTasks), CalculateMetricsForCycle(...), GetTopFactor(metrics, out topPositive, out topNegative). |

## Sub-indicadores (0–100)

| Indicador | Descrição (heurística) |
|-----------|------------------------|
| **QuestCompletionSignalScore** | Sinal de conclusão da sessão Quest: ReadyToClose=100, ReadyToAdvance=85, Interested=70, NeedsFollowUp=50, ExplorationOnly=25, Unknown=0. |
| **CommercialConversionSignalScore** | Oportunidade + proposta + sessão + decisão clara (ReadyToClose/ReadyToAdvance). |
| **HandoffDelayRiskScore** | Handoff gerado + produtor aceite (menor risco de atraso = maior score). |
| **ProducerResponseScore** | Aceite + escopo confirmado + checklist/preparação + execução concluída. |
| **ScopeRevisionCount** | Número de revisões de escopo (não é score; mais revisões penalizam o score geral). |
| **CommunicationActivityScore** | Thread existe + LastMessageAt recente (7 dias = +50, 30 dias = +25). |
| **PreparationReadinessScore** | Checklist obrigatórios concluídos; preparação confirmada = 100. |
| **ExecutionProgressScore** | ProgressPercent da execução; concluído = 100. |
| **FinalAcceptanceCompletionScore** | Aceite final Aceited/Rejected/Closed = 100. |

## Score geral e label

- **OverallCyclePerformanceScore**: Média dos sub-scores (0–100), menos **5 pontos por revisão de escopo** e **15 pontos por alerta bloqueante**. Limitado a 0–100.
- **PerformanceLabel**: Excellent (≥80), Good (≥60), Fair (≥40), Poor (&lt;40).

## Fatores positivos e negativos

- **TopPositiveFactors**: Ex.: "Aceite final concluído", "Execução concluída", "Preparação confirmada", "Escopo confirmado", "Pedido aceite pelo produtor", "Sessão Quest com decisão clara", "Sem revisões de escopo", "Comunicação operacional ativa".
- **TopNegativeFactors**: Ex.: "N revisões de escopo", "N alerta(s) bloqueante(s)", "Múltiplos alertas de alta severidade", "Issues/bloqueios no relatório final", "Ciclo bloqueado", "Pedido sem aceite do produtor", "Escopo não confirmado".

## Regras simples

- Mais revisões de escopo → maior custo/atrito operacional (penalidade no score e fator negativo).
- Mais alertas bloqueantes → pior performance geral (penalidade por bloqueante).
- Execução concluída + aceite final → melhora score de conclusão e fatores positivos.
- Sessão Quest com decisão clara (ReadyToClose/ReadyToAdvance) → melhora sinal comercial e fator positivo.
- Falta de handoff ou aceite do produtor → reduz score global e gera fatores negativos.

## UI

- **EventCycleMetricsStripView** — Faixa: "Métricas: Score N (Label) | + maior positivo | − maior negativo | timestamp". HUD/debug.
- **EventCycleMetricsPanel** — Por ciclo: score geral, label, sub-indicadores (Quest, Comercial, Handoff, Produtor, Comms, Prep, Exec, Aceite, revisões); fatores positivos; fatores negativos; botão "Recalcular".
- **EventCycleDashboardPanel** — Por ciclo: linha **"Performance: Score N (Label) | + … | − … | último cálculo"**.

## Ações

- **Calcular/Recalcular** — Refresh no painel (re-chamar CalculateMetrics e repintar).
- **Limpar** — Não há store; métricas são sempre recalculadas.
- **Navegar para secções** — Futuro: usar chaves das secções para scroll no CRM.

## Como ajuda a gestão e otimização futura

- Comparar ciclos por score e label (Excellent/Good/Fair/Poor).
- Identificar fatores negativos recorrentes (revisões de escopo, alertas bloqueantes) para melhorar processos.
- Reforçar fatores positivos (sessão Quest clara, comunicação ativa, preparação confirmada).
- Base para futuros analytics e KPIs quando existir persistência e integrações.

## Limitações atuais

- **Sem persistência real** — Métricas calculadas on-demand; não guardadas em base de dados.
- **Sem analytics reais remotos** — Sem envio para plataformas de analytics.
- **Sem integrações externas** — Dados apenas do contexto Web (HandoffStore, DataService, stores de produtor e comunicação).
- **Heurísticas simples** — Pesos e bandas (Excellent/Good/Fair/Poor) são fixos e podem ser afinados depois.

## Garantias

- **Quest intacto** — Nenhum fluxo Quest, runtime XR ou apresentação foi alterado.
- **Web Hotel e Produtor intactas** — Apenas adicionadas secções de métricas e uma linha no dashboard consolidado.
- **Camada agregadora** — Não substitui módulos detalhados; não duplica lógica complexa; sem dependência circular.
