# Dashboard consolidado do ciclo completo (Etapa 76)

## Visão geral

A **Etapa 76** cria a **base de um dashboard consolidado** do ciclo completo do pedido/evento: **Quest → Hotel → Produtor → Aceite Final**. A visão é apenas **agregadora**: reúne sinais já existentes (comercial, sessão Quest, handoff, produtor, execução, relatório final, aceite final) sem duplicar regras nem substituir os módulos. O hotel consegue ver o estado geral de cada ciclo num único painel e numa faixa de resumo.

| Conceito | Descrição |
|----------|-----------|
| **Estado do ciclo** | **EventCycleDashboardState**: CycleId, LeadId, OpportunityId, ProposalId, SessionId, ProducerOrderId, FinalAcceptanceStatus, CommercialStageLabel, OperationalStageLabel, OverallCycleStatus, IsQuestSessionDone, IsHandoffGenerated, IsProducerAccepted, IsScopeConfirmed, IsPreparationConfirmed, IsExecutionStarted, IsExecutionCompleted, IsFinalAcceptanceDone, LastUpdatedAt, Sections. |
| **Secção** | **EventCycleDashboardSection**: SectionKey, Title, Summary, StatusLabel, IsHealthy, Notes. |
| **Controller** | **EventCycleDashboardController**: BuildDashboard(orders, opportunities, proposals, sessions), BuildCycleState(order, opportunity, proposal, session), CountSectionsHealth(state, out healthy, out pending). Constantes de secção: Comercial, SessaoQuest, Handoff, Produtor, Execucao, AceiteFinal, StatusGeral. |

## Fontes agregadas (apenas leitura)

O controller cruza dados de:

- **SalesOpportunity** (e ProposalRecord, SessionRecord): estágio comercial, lead, proposta, sessão Quest.
- **ProducerOrder** (HandoffStore): handoff gerado, aceite do produtor, escopo.
- **ProducerExecutionReadinessState** (ProducerExecutionReadinessController.Evaluate): prontidão, escopo confirmado, bloqueios.
- **ProducerPreparationChecklistState** (ProducerPreparationChecklistController, PreparationChecklistStore): preparação confirmada.
- **ProducerExecutionStatusState** (ProducerExecutionTrackingController): execução iniciada/concluída, progresso.
- **ProducerExecutionFinalReport** (ProducerExecutionFinalReportController, FinalReportStore): relatório final e conclusão operacional.
- **HotelFinalAcceptanceState** (HotelFinalAcceptanceController): aceite final, encerramento do ciclo.

Nenhuma escrita é feita no dashboard; não há dependência circular.

## Secções do dashboard

Para cada ciclo (pedido) são construídas sete secções:

1. **Comercial** — Oportunidade (título, estágio, próxima ação). IsHealthy quando estágio ≠ Lost.
2. **Sessão Quest** — Sessão realizada ou não; resultado (FinalDecisionState, CTA). IsHealthy quando sessão existe.
3. **Handoff** — Pedido gerado, resumo, aceite. IsHealthy quando não rejeitado.
4. **Produtor** — Readiness, checklist, preparação confirmada. IsHealthy quando aceite e sem esclarecimento pendente.
5. **Execução** — Estado da execução, progresso, relatório final. IsHealthy quando sem issues e não bloqueado.
6. **Aceite Final** — Decisão do hotel (pendente, aceite, rejeição, ajuste, ciclo encerrado). IsHealthy quando não rejeitado.
7. **Status Geral** — OverallCycleStatus, OperationalStageLabel, última atualização, contagem de secções saudáveis.

## UI

- **EventCycleDashboardStripView** — Faixa de resumo: "Ciclos: N | Secções saudáveis: X | Pendentes: Y | Última atualização: …". Inscrita em WebRuntimeContext.OnDataChanged.
- **EventCycleDashboardPanel** — Painel principal: por ciclo, cabeçalho (ProducerOrderId, OverallCycleStatus, OperationalStageLabel, LastUpdatedAt) e uma linha por secção (Title, StatusLabel, Summary, ✓/!, Notes). Botão "Atualizar" que chama Refresh(). Inscrita em WebRuntimeContext.OnDataChanged.

Ambos obtêm dados via WebRuntimeContext.DataService (oportunidades, propostas, sessões) e HandoffStore.GetOrders(), e chamam EventCycleDashboardController.BuildDashboard.

## Ações

- **Abrir dashboard** — O dashboard é uma secção do CRM do hotel (scroll até "Dashboard consolidado do ciclo completo").
- **Atualizar** — Refresh automático em OnDataChanged; botão "Atualizar" no painel.
- **Navegar para blocos relacionados** — O utilizador usa o scroll do CRM para abrir Handoff, Comunicação, Escopo, Readiness, Checklist, Execução, Relatório final, Aceite final (secções já existentes).

## Limitações actuais

- Sem persistência real: todos os dados vêm de stores em memória.
- Sem multiusuário real: um único contexto de dados.
- Sem integrações externas (ERP/CRM): apenas dados mock da camada Web e Producer.
- Navegação para secções relacionadas é por scroll no mesmo dashboard CRM; não há deep-links nem tabs.

## Como cada ponta contribui

| Ponta | Contribuição para o dashboard |
|-------|------------------------------|
| **Quest** | SessionRecord (SessionId, FinalDecisionState, CTA); oportunidade com SessionRecordId. O dashboard não chama Quest; usa apenas dados já exportados para a Web. |
| **Hotel (CRM)** | SalesOpportunity, ProposalRecord, SessionRecord; handoff (gera ProducerOrder); aceite final. |
| **Produtor** | Aceite do pedido, escopo, readiness, checklist, execução, relatório final. |

A visão consolidada **não altera** Quest, nem os módulos de handoff, comunicação, escopo, readiness, checklist, execução, relatório final ou aceite final; apenas **lê** e **apresenta** o estado agregado.
