# Mapa de dependências do ciclo (Etapa 85)

## Visão geral

A **Etapa 85** cria a **base do mapa de dependências do ciclo** e uma **visão simples de causa → efeito** entre comercial, Quest e operação, para que a gestão entenda **relações entre etapas**, **travas** e **impactos** no fluxo ponta a ponta. A camada é **agregadora**: usa dashboard, alertas, plano de ações, resumo executivo e closure; não substitui módulos detalhados.

| Conceito | Descrição |
|----------|-----------|
| **Nó** | **EventCycleDependencyNode**: NodeId, Title, Category (Commercial, QuestSession, Handoff, Producer, Scope, Preparation, Execution, FinalAcceptance), StatusLabel, IsCompleted, IsBlockingOthers, Notes. |
| **Ligação** | **EventCycleDependencyLink**: FromNodeId, ToNodeId, DependencyType (Requires, Influences, Blocks, Accelerates, Finalizes), ImpactSummary, IsCurrentlyBlocked. |
| **Mapa** | **EventCycleDependencyMapState**: CycleId, Nodes, Links, BlockingNodes, MostCriticalDependency, DependencySummary, LastEvaluatedAt. |
| **Controller** | **EventCycleDependencyMapController**: BuildMaps(...), BuildMapForCycle(cycleId, dashboardState, alertState, actionPlanState, executiveSummary, closureState, evaluatedAt). |

## Nós (etapas)

| NodeId | Título | Condição de conclusão |
|--------|--------|------------------------|
| Commercial | Proposta/Oportunidade | Oportunidade ou proposta presente |
| QuestSession | Sessão Quest concluída | IsQuestSessionDone |
| Handoff | Handoff gerado | IsHandoffGenerated |
| ProducerAcceptance | Aceite do produtor | IsProducerAccepted |
| Scope | Escopo confirmado | IsScopeConfirmed |
| Preparation | Preparação confirmada | IsPreparationConfirmed |
| Execution | Execução concluída | IsExecutionCompleted |
| FinalReport | Relatório final gerado | (derivado da execução) |
| FinalAcceptance | Aceite final do hotel | IsFinalAcceptanceDone |
| CycleClosed | Ciclo encerrado | closure.IsCycleCompleted |

**IsBlockingOthers**: verdadeiro quando a etapa anterior está concluída e a atual não (a atual “bloqueia” as seguintes).

## Relações (causa → efeito)

- **Commercial → QuestSession** (Requires): Proposta preparada permite agendar sessão Quest.
- **QuestSession → Handoff** (Requires): Sessão Quest concluída permite gerar handoff.
- **Handoff → ProducerAcceptance** (Requires): Handoff gera pedido; aceite do produtor necessário.
- **ProducerAcceptance → Scope** (Requires): Aceite do produtor permite confirmar escopo.
- **Scope → Preparation** (Requires): Escopo confirmado desbloqueia preparação.
- **Preparation → Execution** (Requires): Preparação confirmada permite iniciar execução.
- **Execution → FinalReport** (Requires): Execução concluída permite relatório final.
- **FinalReport → FinalAcceptance** (Requires): Relatório final aguarda aceite do hotel.
- **FinalAcceptance → CycleClosed** (Finalizes): Aceite final encerra o ciclo.

**IsCurrentlyBlocked**: verdadeiro quando o nó de origem está concluído e o de destino não (a ligação está “travada”).

## Dependência mais crítica e nós bloqueantes

- **MostCriticalDependency**: primeira ligação com IsCurrentlyBlocked e tipo Requires (ou primeira bloqueada).
- **BlockingNodes**: nós com IsBlockingOthers = true (etapas pendentes que travam as seguintes).
- **DependencySummary**: texto com número de nós bloqueantes, dependência crítica e progresso (X/Y nós concluídos).

## Influências implícitas (regras)

- Sessão Quest inconclusiva atrasa follow-up/handoff (QuestSession não concluído bloqueia Handoff).
- Escopo não confirmado bloqueia preparação (Scope pendente → Preparation bloqueada).
- Execução bloqueada impede relatório final (Execution não concluída → FinalReport bloqueada).
- Aceite final pendente impede fechamento (FinalAcceptance pendente → CycleClosed bloqueado).

A lógica é derivada dos flags do dashboard e do closure; não há persistência de “grafo” separada.

## UI

- **EventCycleDependencyMapStripView** — Faixa: N nós, M ligações, dependência mais crítica (From→To), timestamp. Cor quando há ligação bloqueada.
- **EventCycleDependencyMapPanel** — Por ciclo: resumo; dependência mais crítica; nós bloqueantes; lista de nós (categoria, título, status, ⚠ se bloqueia); lista de relações (From→To, tipo, ⚠ se bloqueado); botão Recalcular.
- **EventCycleDashboardPanel** — Por ciclo: quando existe dependência crítica ou nós bloqueantes, linha “Dependências: crítica X→Y | N nó(s) bloqueante(s) | timestamp”.

## Ações

- **Gerar/Recalcular** — Refresh (BuildMaps e repintar).
- **Limpar** — Não há store; mapa sempre recalculado.
- **Navegar para secção** — Futuro: usar Category ou NodeId para scroll no CRM (ex.: Handoff → secção Handoff).

## Como ajuda gestão, diagnóstico e priorização

- Ver em que etapa o fluxo está travado (primeira ligação bloqueada).
- Identificar nós bloqueantes e priorizar a conclusão da etapa correspondente.
- Entender a cadeia comercial → Quest → handoff → produtor → escopo → preparação → execução → relatório → aceite final → encerramento.

## Limitações atuais

- **Sem persistência real** — Mapa calculado on-demand; não guardado em base de dados.
- **Sem automação real** — Sem workflows engine nem notificações automáticas.
- **Sem integrações externas** — Dados apenas do contexto Web (dashboard, alertas, closure, etc.).

## 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ê dashboard, alertas, plano de ações, resumo executivo e closure; sem dependência circular.
