# Status de execução do pedido e acompanhamento operacional (Etapa 73)

## Visão geral

A **Etapa 73** implementa a **camada de status de execução do pedido** e **acompanhamento operacional pós-preparação**: o produtor pode iniciar a execução após a preparação confirmada, actualizar progresso, registar updates, marcar issues/bloqueios, pausar/retomar e concluir. O hotel visualiza status, progresso, últimos updates, issues/bloqueios e conclusão.

| Conceito | Descrição |
|----------|-----------|
| **Execution status state** | **ProducerExecutionStatusState**: ProducerOrderId, ExecutionStatus, StartedAt, LastUpdatedAt, ProgressPercent, CurrentExecutionSummary, HasIssues, IsPaused, IsCompleted, CompletionSummary. |
| **Execution update** | **ProducerExecutionUpdate**: UpdateId, ProducerOrderId, Title, Summary, ProgressPercent, IsIssue, IsBlocking, CreatedAt, CreatedByRole, UpdateType. |
| **Status** | **ProducerExecutionStatus**: NotStarted, Preparing, InExecution, Paused, Blocked, Completed. |
| **Update type** | **ProducerExecutionUpdateType**: ProgressUpdate, Issue, Blocker, Completion, InternalNote. |
| **Controller** | **ProducerExecutionTrackingController**: StartExecution (só se preparação confirmada), UpdateProgress, AddUpdate, PauseExecution, ResumeExecution, CompleteExecution, GetState, GetUpdates. |

## Fluxo

1. **Início**  
   O produtor só pode **iniciar execução** quando **PreparationChecklistStore.IsPreparationConfirmed(orderId)** é true e o estado está em NotStarted ou Preparing. StartExecution define status InExecution, StartedAt, ProgressPercent 0 e cria o primeiro update.

2. **Progresso**  
   **UpdateProgress(orderId, progressPercent, summary)** actualiza ProgressPercent e CurrentExecutionSummary e regista um update do tipo ProgressUpdate.

3. **Updates operacionais**  
   **AddUpdate(orderId, updateType, title, summary, …)** regista um update. Se **isBlocking** = true, o status passa a Blocked. Se **isIssue** = true, HasIssues = true.

4. **Pausar / Retomar**  
   **PauseExecution** define status Paused e IsPaused = true; **ResumeExecution** define status InExecution e IsPaused = false. Ambos criam um InternalNote.

5. **Conclusão**  
   **CompleteExecution(orderId, completionSummary)** define status Completed, IsCompleted = true, ProgressPercent = 100, CompletionSummary e cria update Completion.

## Armazenamento

- **ExecutionTrackingStore** (em memória): estado por orderId (GetOrCreateState, SetState); lista de updates por orderId (AddUpdate, GetUpdates com limite). Tudo com lock para acesso seguro.

## Integração

- **ProducerOrder**: identificação do pedido (orderId).
- **ProducerPreparationChecklistState / PreparationChecklistStore**: StartExecution só corre se IsPreparationConfirmed(orderId).
- **ProducerExecutionReadinessState**: integração conceptual (readiness antes da preparação; execução após preparação confirmada).
- **CommunicationThread, SalesOpportunity, ProposalRecord, SessionRecord**: ligação por orderId; sem referência directa no módulo de execução.

Nenhuma alteração em Quest, CRM do hotel (apenas nova secção) nem painel do produtor (apenas nova secção).

## UI

- **Produtor (ProducerExecutionTrackingView)**  
  Por pedido: estado (status, %, pausado, concluído, issues); botão "Iniciar execução" (activo só se preparação confirmada e NotStarted/Preparing); campo progresso % + "Atualizar"; botões Pausar, Retomar, Reg. update, Issue, Bloqueio, Concluir; resumo e lista dos últimos updates.

- **Hotel (OrderExecutionPanel)**  
  Por pedido: header (orderId, status, %, pausado, concluído, issues); progresso e resumo actual; conclusão (se IsCompleted); aviso de issues/bloqueio; lista dos últimos updates.

## Limitações actuais

- Sem persistência real (ExecutionTrackingStore em memória).
- Sem notificações ao hotel quando o produtor altera estado.
- Updates e estado perdem-se ao reiniciar a aplicação.
