# Painel final de encerramento do ciclo (Etapa 80)

## Visão geral

A **Etapa 80** cria a **base do painel final de encerramento do ciclo** e uma **leitura consolidada do estado global** do evento/pedido, para que a gestão veja com clareza se o ciclo está **concluído**, **em andamento**, **em risco** ou **travado**. A camada é **agregadora**: consome dashboard, alertas, plano de ações e resumo executivo; não substitui nenhum deles.

| Conceito | Descrição |
|----------|-----------|
| **Estado de encerramento** | **EventCycleClosureState**: CycleId, ClosureStatus, IsCycleCompleted, IsCycleHealthy, IsCycleAtRisk, IsCycleBlocked, ClosureSummary, ClosingRecommendation, MainBlockingReason, MainProgressReason, FinalManagementNote, EvaluatedAt. |
| **Status global** | **EventCycleClosureStatus** (enum): InProgress, AtRisk, Blocked, Completed, CompletedWithIssues. |
| **Controller** | **EventCycleClosureController**: EvaluateClosure(orders, opportunities, proposals, sessions, followUpTasks), EvaluateClosureForCycle(dashboardState, alertState, actionPlanState, executiveSummary, evaluatedAt). |

## Regras de avaliação (simples e coerentes)

1. **Completed** — Aceite final do hotel concluído e sem alertas bloqueantes; sem alertas restantes.
2. **CompletedWithIssues** — Aceite final concluído, sem bloqueios, mas com alertes restantes (ex.: ajuste final solicitado).
3. **Blocked** — Existem alertas bloqueantes ou próxima ação crítica e bloqueante pendente.
4. **AtRisk** — Sem bloqueios mas com dois ou mais alertas de alta severidade, ou próxima ação prioritária crítica.
5. **InProgress** — Caso contrário: ciclo em andamento (handoff, execução ou aceite pendentes).

## Fontes de dados (apenas leitura)

- **EventCycleDashboardState** — IsFinalAcceptanceDone, IsExecutionCompleted, etc.
- **EventCycleAlertState** — BlockingAlerts, HighSeverityAlerts, primeiro alerta bloqueante.
- **EventCycleActionPlanState** — TopPriorityAction (Critical + IsBlockingResolution), BlockingActions.
- **EventCycleExecutiveSummary** — TopProgressPoints para MainProgressReason.

Sem store próprio; estado calculado a cada pedido.

## UI

- **EventCycleClosureStripView** — Faixa: "Encerramento: [ClosureStatus] | Bloqueio: [MainBlockingReason] | Progresso: [MainProgressReason] | Avaliado: [timestamp]". Cores para Blocked/AtRisk.
- **EventCycleClosurePanel** — Por ciclo: status global (saudável/bloqueado/em risco); resumo de encerramento; principal bloqueio; principal progresso; recomendação final; nota de gestão (se preenchida). Botão "Atualizar".
- **EventCycleDashboardPanel** — Por ciclo: linha **"Estado global: [ClosureStatus] ([Saudável|Bloqueado|Em risco|Em andamento]) | Recomendação: [ClosingRecommendation]"**.

## Ações

- **Gerar/atualizar estado** — Refresh no painel (re-chamar EvaluateClosure e repintar).
- **Limpar estado** — Não há persistência; o estado é sempre recalculado. "Limpar" equivale a atualizar sem ciclos.
- **Navegar para secções** — Futuro: usar chaves das secções (Handoff, Execucao, AceiteFinal) para scroll no CRM.

## Como ajuda a gestão

- **Concluído** — Ciclo encerrado; foco noutros ciclos ou em encerramento formal (faturação, arquivo).
- **Em risco** — Atenção à próxima ação e aos alertas de alta severidade.
- **Bloqueado** — Resolver primeiro o principal bloqueio (alerta ou ação crítica).
- **Em andamento** — Acompanhar próximo passo recomendado e principal evidência de progresso.

## Limitações atuais

- **Sem persistência real** — Estado avaliado on-demand; não guardado em base de dados.
- **Sem automação real** — Sem jobs em background nem notificações.
- **Sem integrações externas** — Dados apenas do contexto Web (HandoffStore, DataService, dashboard, alertas, ações, resumo executivo).
- **FinalManagementNote** — Campo existente no modelo; edição na UI pode ser adicionada em etapa futura.

## Garantias

- **Quest intacto** — Nenhum fluxo Quest, runtime XR ou apresentação foi alterado.
- **Web Hotel e Produtor intactas** — Apenas adicionadas secções de encerramento e uma linha no dashboard consolidado. Sem refatoração destrutiva.
- **Camada agregadora** — Não duplica lógica complexa; não substitui dashboard, alertas, ações nem resumo executivo; sem dependência circular.
