# Plano de recuperação do ciclo (Etapa 87)

## Visão geral

A **Etapa 87** cria a **base do plano de recuperação do ciclo** e **estratégia sugerida** para casos em risco ou bloqueados, permitindo à gestão sair da leitura diagnóstica e entrar num **plano estruturado de recuperação**. A camada é **agregadora**: consome closure, alertas, plano de ações, resumo executivo, SLA, mapa de dependências e gargalos; não substitui esses módulos.

| Conceito | Descrição |
|----------|-----------|
| **Ação de recuperação** | **EventCycleRecoveryAction**: RecoveryActionId, CycleId, Title, Summary, Priority, ResponsibleRole, RelatedBottleneckId, RelatedSectionKey, EstimatedRecoveryImpact, EstimatedRecoveryEffort, IsImmediateAction, Notes. |
| **Prioridade** | **EventCycleRecoveryPriority**: Low, Medium, High, Urgent. |
| **Esforço** | **EventCycleRecoveryEffort**: Small, Medium, Large. |
| **Responsável** | **EventCycleRecoveryResponsibleRole**: HotelSales, HotelAdmin, Producer, InternalAdmin, Shared. |
| **Estado do plano** | **EventCycleRecoveryPlanState**: CycleId, RecoveryActions, RecoverySummary, PrimaryRecoveryAction, IsRecoveryNeeded, RecoveryConfidenceLabel, LastGeneratedAt. |
| **Controller** | **EventCycleRecoveryPlanController**: GenerateRecoveryPlans(...), GenerateRecoveryPlanForCycle(...), MarkRecoveryActionCompleted(id), ClearCompletedForCycle(cycleId), ClearAllCompleted(). |
| **Store** | **CompletedRecoveryActionStore**: MarkCompleted, IsCompleted, ClearCompletedForCycle, ClearAllCompleted (em memória). |

## Diferença entre alerta, gargalo, ação recomendada e ação de recuperação

- **Alerta** — Sinal de que algo está em risco ou pendente (ex.: "Pedido sem aceite do produtor"). Diagnóstico pontual.
- **Gargalo** — Ponto que **trava o fluxo**, com priorização por impacto e valor de destravamento. Diagnóstico agregado de bloqueios.
- **Ação recomendada** — Próximo passo sugerido no plano de ações (comercial/operação), genérico e contínuo.
- **Ação de recuperação** — Passo **estruturado** para **sair de risco ou bloqueio**: prioridade, responsável, impacto e esforço estimados, ligação opcional a um gargalo. Foco em **estratégia de recuperação** para casos em risco/bloqueados.

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

- **Ciclo bloqueado** (closure) → Ação urgente: "Desbloquear ciclo" com ClosingRecommendation; responsável HotelAdmin.
- **Gargalos bloqueantes** → Uma ação de recuperação por gargalo (evitando duplicar secção): Handoff → "Gerar handoff ou contactar produtor"; Scope → "Esclarecer escopo e obter aprovação rápida"; Execution → "Resolver bloqueio operacional"; FinalAcceptance → "Revisão final com hotel"; Commercial/QuestSession → "Reforçar follow-up ou nova sessão Quest"; Preparation → "Concluir checklist e preparação".
- **Ciclo em risco** (não bloqueado) + riscos no resumo executivo → Ação comercial: "Reduzir risco comercial" (follow-up, proposta, Quest).
- **SLA em atraso** → Ação "Reduzir atraso no ciclo"; prioridade Urgent se Critical.

Ações marcadas como concluídas em **CompletedRecoveryActionStore** são excluídas na próxima geração (mock).

## Priorização e confiança

- **PrimaryRecoveryAction** — Primeira por Priority (Urgent > High > Medium > Low) e depois por EstimatedRecoveryImpact.
- **RecoveryConfidenceLabel** — "Alta" (1–2 ações), "Média" (3–4), "Baixa" (muitas).

## UI

- **EventCycleRecoveryPlanStripView** — Primeiro ciclo com recuperação necessária: "Recuperação: [CycleId] | Principal: [título] [Prioridade] Esforço [Effort] | Confiança [label] | timestamp". Cor para Urgent/High.
- **EventCycleRecoveryPlanPanel** — Por ciclo: resumo da estratégia; ★ ação principal (título, impacto, esforço, responsável); lista de ações (prioridade, imediata, impacto, esforço, responsável, secção, notas); botão "Marcar concluída" por ação (mock); "Recalcular" e "Limpar concluídas".
- **EventCycleDashboardPanel** — Por ciclo: quando IsRecoveryNeeded e existe PrimaryRecoveryAction, linha "Recuperação: Sim | Principal: [título] | Confiança: [label] | timestamp".

## Ações

- **Recalcular** — Refresh (regenera planos e repinta).
- **Marcar concluída** — CompletedRecoveryActionStore.MarkCompleted(recoveryActionId); na próxima geração a ação deixa de aparecer (mock).
- **Limpar concluídas** — ClearAllCompleted(); todas voltam a poder aparecer.
- **Navegar para secção** — RelatedSectionKey para futuro scroll no CRM.

## Como ajuda gestão em casos em risco ou bloqueados

- Passar do **diagnóstico** (alertas, gargalos) para um **plano de passos** ordenados por prioridade e impacto.
- Saber **quem** deve fazer **o quê** (ResponsibleRole) e com que **esforço** estimado.
- Ver a **ação principal** e a **confiança** da estratégia de forma imediata no dashboard e na faixa.

## Limitações atuais

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

## Modo de teste / HUD

A **EventCycleRecoveryPlanStripView** funciona como visão rápida/debug: indica se existe plano de recuperação para algum ciclo, ação principal, prioridade, esforço estimado e timestamp da última geração.

## 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ê closure, alertas, ações, resumo, SLA, dependências e gargalos; sem dependência circular.
