# Etapa 89 — Resumo da entrega

## Objetivo

Criar a **base de priorização executiva entre múltiplos ciclos** e uma **fila gerencial de atenção**, para que a gestão decida quais casos recebem atenção primeiro com base em risco, valor, bloqueio e potencial de recuperação. Sem quebrar a camada Quest nem as camadas web já existentes. A nova etapa **adiciona** visão de priorização entre casos; não substitui simulação, recuperação nem gargalos.

---

## Ficheiros criados

### Web (Assets/Web/)

| Caminho | Descrição |
|---------|-----------|
| **Domain/EventCyclePortfolioItem.cs** | CycleId, OpportunityId, LeadId, Title, CommercialStageLabel, ClosureStatus, OverallCyclePerformanceScore, RiskLevelLabel, BottleneckSeverityLabel, TopRecommendedAction, TopRecoveryAction, SimulatedBestScenarioDelta, PriorityScore, PriorityReason, LastUpdatedAt. |
| **Domain/EventCyclePortfolioPriorityState.cs** | Items, HighestPriorityItem, HighestRiskItem, BestRecoveryOpportunity, NearestToCloseItem, AveragePriorityScore, PrioritizationSummary, LastPrioritizedAt. |
| **Application/EventCyclePortfolioPriorityController.cs** | BuildPortfolioPriority(orders, opportunities, proposals, sessions, followUpTasks). Obtém dashboard, closure, métricas, alertas, gargalos, recuperação, simulação e resumo executivo. Por ciclo constrói EventCyclePortfolioItem (título da oportunidade ou "Ciclo X", estágio, closure, score, risco, gargalo, ação recomendada, recuperação, delta simulado). PriorityScore heurístico: bloqueado +25, em risco +15, recuperação +20, perto fechar +18, concluído saudável -30, múltiplos críticos +12, performance baixa +10; cap 0-100. Ordena por PriorityScore desc. HighestPriorityItem = primeiro; HighestRiskItem = primeiro bloqueado/crítico; BestRecoveryOpportunity = com TopRecoveryAction e delta; NearestToCloseItem = aceite final pendente ou score ≥70. |
| **Presentation/EventCyclePortfolioPriorityPanel.cs** | Painel: resumo, prioritário, mais crítico, melhor recuperação, mais perto de fechar, média score, lista priorizada (#rank, score, título, risco, gargalo, performance, razão, ação, recuperação, delta). Destaque para o prioritário. |
| **Presentation/EventCyclePortfolioPriorityStripView.cs** | Faixa: quantidade de casos, prioritário (título e score), timestamp. |

### Documentação

| Caminho | Descrição |
|---------|-----------|
| **Docs/Web/WEB_EVENT_CYCLE_PORTFOLIO_PRIORITY.md** | Priorização entre ciclos, fila gerencial, critérios, influência de risco/recuperação/fechamento, limitações. |
| **Docs/Web/ETAPA_89_RESUMO.md** | Este resumo. |

---

## Ficheiros alterados

| Caminho | Alteração |
|---------|-----------|
| **Presentation/EventCycleDashboardPanel.cs** | Chamada a BuildPortfolioPriority; bloco global "Fila: Prioritário | Mais crítico | Melhor recuperação | timestamp" quando há itens. |
| **Presentation/HotelCRMDashboardController.cs** | Secções EventCyclePortfolioPriorityStripView ("Priorização entre ciclos (resumo)") e EventCyclePortfolioPriorityPanel ("Fila gerencial de atenção e priorização executiva"). |

---

## Como a priorização da carteira foi implementada

1. **Fontes**  
   Para cada ciclo: EventCycleDashboardState, EventCycleClosureState, EventCycleMetricsState, EventCycleAlertState, EventCycleBottleneckState, EventCycleRecoveryPlanState, EventCycleScenarioComparisonState, EventCycleExecutiveSummary (e oportunidade para título).

2. **Item**  
   BuildPortfolioItem preenche título (opportunity.Title ou "Ciclo X"), estágio comercial, closure, performance score, RiskLevelLabel (Bloqueado/Em risco/Alertas bloqueantes/Crítico/Normal), BottleneckSeverityLabel (top bottleneck), TopRecommendedAction (resumo executivo ou alerta ou recuperação), TopRecoveryAction, SimulatedBestScenarioDelta, PriorityScore (regras acima), PriorityReason (texto dos fatores).

3. **Ordenação e agregados**  
   Items ordenados por PriorityScore descendente. HighestPriorityItem = primeiro. HighestRiskItem = primeiro com risco Bloqueado/Critical ou Em risco. BestRecoveryOpportunity = primeiro com TopRecoveryAction e delta. NearestToCloseItem = primeiro com closure/estágio de aceite final ou score ≥70.

4. **Strip, painel e dashboard**  
   Strip mostra total de casos, prioritário e timestamp. Painel mostra resumo, quatro destaques e lista priorizada com destaque visual para o #1. Dashboard mostra uma linha global com prioritário, mais crítico, melhor recuperação e timestamp.

---

## Garantia de que Quest e camadas web existentes não foram quebrados

- **Quest** — Nenhuma alteração em QuestPresentation, QuestPresentationSession, controllers Quest, runtime XR ou apresentação.
- **Web Hotel** — CRM mantido; apenas duas novas secções (Strip e Panel de priorização) e um bloco no dashboard. Simulação, recuperação e restantes secções inalterados.
- **Web Produtor** — Painel do produtor e módulos operacionais não foram alterados.
- **Camada agregadora** — A priorização apenas **lê** closure, métricas, alertas, gargalos, recuperação, simulação e resumo executivo; não altera esses módulos; não introduz dependência circular.
