# Etapa 78 — Resumo da entrega

## Objetivo

Criar a **base de próximos passos recomendados** do ciclo e um **painel de ações sugeridas** para comercial e operação, para que o sistema **não apenas mostre o estado actual**, mas **oriente o que fazer em seguida**. Sem quebrar a camada Quest nem as camadas web já existentes. A camada é agregadora: gera acções a partir do mesmo contexto do dashboard e dos alertas; não substitui os módulos.

---

## Ficheiros criados

### Web (Assets/Web/)

| Caminho | Descrição |
|---------|-----------|
| **Core/EventCycleActionType.cs** | Enum: ContactLead, SendProposal, RunQuestSession, FollowUpClient, GenerateHandoff, ClarifyScope, ApproveRevision, ConfirmPreparation, StartExecution, ResolveIssue, ReviewFinalReport, ApproveFinalAcceptance, CloseCycle. |
| **Core/EventCycleActionPriority.cs** | Enum: Low, Medium, High, Critical. |
| **Core/EventCycleResponsibleRole.cs** | Enum: HotelSales, HotelAdmin, Producer, InternalAdmin. |
| **Domain/EventCycleRecommendedAction.cs** | ActionId, CycleId, Title, Summary, ActionType, Priority, ResponsibleRole, RelatedSectionKey, SuggestedReason, IsBlockingResolution, IsCompleted, CreatedAt. |
| **Domain/EventCycleActionPlanState.cs** | CycleId, Actions, TopPriorityAction, TotalActions, BlockingActions, LastGeneratedAt. |
| **Application/CompletedCycleActionStore.cs** | Em memória: MarkCompleted, MarkIncomplete, IsCompleted, ClearCompletedForCycle, ClearAllCompleted. |
| **Application/EventCycleActionPlanController.cs** | GenerateActionPlans(orders, opportunities, proposals, sessions, followUpTasks), GenerateActionPlanForCycle(order, opportunity, session, followUpsForOpportunity), MarkActionCompleted, ClearCompletedForCycle, ClearAllCompleted, GetTotals. Regras: ciclo encerrado; encerrar ciclo; aceite final; relatório final; resolver bloqueio; retomar/iniciar execução; confirmar preparação; confirmar escopo; contactar produtor; sessão Quest; follow-up prioritário. |
| **Presentation/EventCycleActionPlanStripView.cs** | Faixa: Ações N, Bloqueantes X, Próxima [título], Gerado (timestamp). |
| **Presentation/EventCycleActionPlanPanel.cs** | Lista de acções por ciclo; ★ próxima; prioridade, responsável, motivo, secção; "Marcar concluída"; "Atualizar" e "Limpar concluídas". |

### Documentação

| Caminho | Descrição |
|---------|-----------|
| **Docs/Web/WEB_EVENT_CYCLE_ACTIONS.md** | Próximos passos, tipos e prioridades, responsáveis, regras, concluídas (mock), UI, acções, gestão comercial/operacional, limitações. |
| **Docs/Web/ETAPA_78_RESUMO.md** | Este resumo. |

---

## Ficheiros alterados

| Caminho | Alteração |
|---------|-----------|
| **Presentation/EventCycleDashboardPanel.cs** | Geração de actionPlans (GenerateActionPlans); por ciclo, linha "Próxima ação: [TopPriorityAction.Title] (ResponsibleRole) — SuggestedReason". |
| **Presentation/HotelCRMDashboardController.cs** | Novas secções: EventCycleActionPlanStripView ("Próximos passos (resumo)"), EventCycleActionPlanPanel ("Ações recomendadas (comercial e operação)"). |

---

## Como as ações recomendadas foram implementadas

1. **Modelos**  
   **EventCycleRecommendedAction** identifica cada acção por ActionId (determinístico: CycleId_ActionType_suffix) para permitir "marcar concluída" de forma estável. **EventCycleActionPlanState** agrega a lista de acções do ciclo, **TopPriorityAction** (primeira Critical, senão primeira High, etc.), TotalActions, BlockingActions e LastGeneratedAt.

2. **Geração**  
   **GenerateActionPlanForCycle** recebe o mesmo contexto que os alertas (order, opportunity, session, followUps) e obtém readiness, checklist, execState, finalReport, finalAcceptance. Aplica as regras em ordem (CloseCycle quando encerrado; senão encerrar ciclo, aceite final, relatório final, resolver bloqueio, retomar/iniciar execução, confirmar preparação, confirmar escopo, contactar produtor, sessão Quest, follow-up). Filtra as que estão em **CompletedCycleActionStore** e define **TopPriorityAction**. **GenerateActionPlans** itera sobre os pedidos e chama GenerateActionPlanForCycle para cada um.

3. **Concluídas**  
   **CompletedCycleActionStore** guarda ActionIds. Marcar concluída não altera o estado real do ciclo; na próxima geração a acção deixa de aparecer.

4. **Strip**  
   **EventCycleActionPlanStripView** chama GenerateActionPlans e GetTotals e mostra totais, título da próxima acção e timestamp; cor verde quando há prioridade crítica.

5. **Painel**  
   **EventCycleActionPlanPanel** lista acções por ciclo com ★ na próxima; prioridade, responsável, motivo, secção; botão "Marcar concluída" por acção; "Atualizar" e "Limpar concluídas".

6. **Dashboard**  
   **EventCycleDashboardPanel** obtém actionPlans e, por cada ciclo, mostra uma linha com a próxima acção (título, responsável, motivo) quando existe TopPriorityAction.

7. **Agregador**  
   Nenhuma escrita nos módulos de handoff, escopo, readiness, checklist, execução, relatório final ou aceite final. Apenas leitura e geração de acções recomendadas; sem dependência circular.

---

## Como foi garantido que Quest e camadas web existentes não foram quebrados

1. **Nenhum ficheiro Quest alterado** — A camada Quest permanece **totalmente intacta**.

2. **CRM do hotel** — Apenas foram **adicionadas** duas secções (EventCycleActionPlanStripView, EventCycleActionPlanPanel) e **evoluído** o EventCycleDashboardPanel (linha da próxima acção). Nenhuma secção existente foi removida nem alterada de forma destrutiva.

3. **Painel do produtor** — Nenhuma alteração.

4. **Dashboard e alertas** — EventCycleDashboardController e EventCycleAlertController não foram alterados. A etapa 78 apenas adiciona o plano de acções e a sua exibição.

5. **Módulos do ciclo** — Handoff, comunicação, escopo, readiness, checklist, execução, relatório final e aceite final não foram alterados.

6. **Dependências** — EventCycleActionPlanController está em Web.Application e usa Web.Core, Web.Domain e Producer.Application. Sem ciclos.

---

## Critérios de aceite

- Existe camada de acções recomendadas do ciclo (EventCycleRecommendedAction, EventCycleActionPlanState, enums, CompletedCycleActionStore, EventCycleActionPlanController).
- O dashboard mostra próximos passos úteis (strip, painel, linha "Próxima ação" por ciclo).
- Responsável e prioridade ficam claros (ResponsibleRole, Priority, destaque no painel).
- O hotel consegue visualizar rapidamente o que fazer a seguir (strip + painel + dashboard).
- Quest continua intacto.
- Web do hotel e do produtor continuam intactas.
- Projeto limpo e organizado; documentação actualizada (WEB_EVENT_CYCLE_ACTIONS.md, ETAPA_78_RESUMO.md).
