# Painel de gargalos do ciclo (Etapa 86)

## Visão geral

A **Etapa 86** cria a **base do painel de gargalos do ciclo** e **priorização de destravamento**, para que a gestão identifique **quais pontos estão travando mais o caso** e **qual ordem de ação gera maior impacto**. A camada é **agregadora**: consome alertas, plano de ações, closure, mapa de dependências e SLA; não substitui esses módulos.

| Conceito | Descrição |
|----------|-----------|
| **Gargalo** | **EventCycleBottleneck**: BottleneckId, CycleId, Title, Summary, RelatedSectionKey, Severity, Category, EstimatedImpactScore, EstimatedUnlockValue, RootCauseHint, SuggestedResolution, IsBlocking, IsResolved, CreatedAt. |
| **Severidade** | **EventCycleBottleneckSeverity**: Low, Medium, High, Critical. |
| **Categoria** | **EventCycleBottleneckCategory**: Commercial, QuestSession, Handoff, Scope, Preparation, Execution, FinalAcceptance, CrossStage. |
| **Estado** | **EventCycleBottleneckState**: CycleId, Bottlenecks, TopPriorityBottleneck, BlockingBottlenecks, ResolvedBottlenecks, BottleneckSummary, LastEvaluatedAt. |
| **Controller** | **EventCycleBottleneckController**: EvaluateBottlenecks(...), EvaluateBottlenecksForCycle(...), MarkBottleneckResolved(id), ClearResolvedForCycle(cycleId), ClearAllResolved(). |
| **Store** | **ResolvedBottleneckStore**: MarkResolved, IsResolved, ClearResolvedForCycle, ClearAllResolved (em memória). |

## Diferença entre alerta, dependência e gargalo

- **Alerta** — Sinal de que algo está em risco ou pendente (ex.: "Pedido sem aceite do produtor"). Pode gerar um gargalo quando é bloqueante.
- **Dependência** — Relação causa→efeito entre etapas (ex.: Handoff → ProducerAcceptance). Quando a ligação está bloqueada (origem feita, destino não), vira candidato a gargalo.
- **Gargalo** — Ponto que **trava o fluxo** com **priorização** (impacto e valor de destravamento). Agrega alertas bloqueantes, dependência crítica bloqueada, closure bloqueado e SLA em atraso num único painel com **ação sugerida** e **ordem de prioridade**.

## Regras de deteção (heurísticas)

- **Dependência crítica bloqueada** (mapa) → Gargalo High; impacto 80, destravamento 90; causa "Dependência crítica bloqueada"; resolução conforme trecho (ex.: "Gerar handoff para produtor").
- **Nó bloqueante** (mapa) → Gargalo Medium; impacto 70, destravamento 85.
- **Alerta bloqueante** → Gargalo Critical se severidade Critical, senão High; impacto 75, destravamento 88; resolução = SuggestedAction do alerta.
- **Ciclo bloqueado** (closure) → Gargalo Critical; impacto/destravamento 95; resolução = ClosingRecommendation.
- **SLA em atraso** (Medium ou mais) → Gargalo com severidade mapeada (Critical/High/Medium); impacto 60, destravamento 70.
- **Handoff pendente** (Quest feita, handoff não) → Gargalo Handoff High.
- **Aceite final pendente** (execução concluída) → Gargalo FinalAcceptance High.

Gargalos marcados como resolvidos no **ResolvedBottleneckStore** são excluídos da lista ativa (mock).

## Priorização

- **TopPriorityBottleneck** — Ordenação por Severity (Critical > High > Medium > Low) e depois por EstimatedUnlockValue (maior primeiro).
- **BlockingBottlenecks** — Subconjunto com IsBlocking = true.

## UI

- **EventCycleBottleneckStripView** — "Gargalos: Prioritário [título] [Severity] | N bloqueante(s) | timestamp". Cor para Critical/High.
- **EventCycleBottleneckPanel** — Por ciclo: resumo; ★ prioritário (título, impacto, destravamento, ação); lista de gargalos (severidade, título, resumo, causa, ação, impacto, destravamento); botão "Marcar resolvido" por gargalo (mock); "Atualizar" e "Limpar resolvidos".
- **EventCycleDashboardPanel** — Por ciclo: quando existe TopPriorityBottleneck, linha "Gargalo: [título] | Ação: [SuggestedResolution] | timestamp".

## Ações

- **Atualizar** — Refresh (reavalia e repinta).
- **Marcar resolvido** — ResolvedBottleneckStore.MarkResolved(bottleneckId); na próxima avaliação o gargalo deixa de aparecer (mock).
- **Limpar resolvidos** — ClearAllResolved(); todos voltam a poder aparecer.
- **Navegar para secção** — RelatedSectionKey (ex.: Handoff, SectionAceiteFinal) para futuro scroll no CRM.

## Como ajuda gestão e tomada de decisão

- Ver de imediato o **gargalo prioritário** e a **melhor ação de destravamento**.
- Ordenar intervenções por **valor de destravamento** e **impacto**.
- Reduzir ruído: um único painel agrega alertas, dependências e SLA em atraso sob a lente "o que destrava mais".

## Limitações atuais

- **Sem persistência real** — Resolvidos apenas em memória (ResolvedBottleneckStore).
- **Sem automação real** — Deteção é on-demand; não há workflows nem notificações.
- **Sem integrações externas** — Dados apenas do contexto Web.

## Garantias

- **Quest intacto** — Nenhum fluxo Quest nem runtime XR alterado.
- **Web Hotel e Produtor intactas** — Apenas novas secções e uma linha no dashboard.
- **Camada agregadora** — Só lê alertas, plano de ações, closure, mapa de dependências e SLA; sem dependência circular.
