# Prontidão para preparação e execução (Etapa 71)

## Visão geral

A **Etapa 71** introduz a **confirmação final do pedido** e a base de **readiness operacional**: um estado consolidado que indica se o pedido está **pronto para preparação** e **pronto para execução**, com bloqueios explícitos e resumo operacional.

| Conceito | Descrição |
|----------|-----------|
| **Readiness state** | **ProducerExecutionReadinessState**: ProducerOrderId, IsScopeConfirmed, IsProducerAccepted, HasPendingClarifications, HasPendingRevisions, IsReadyForPreparation, IsReadyForExecution, BlockingItems, ReadinessSummary, LastEvaluatedAt, ActiveScopeRevisionId. |
| **Blocking item** | **ProducerExecutionBlockingItem**: Code, Title, Summary, Severity (Low, Medium, High, Critical), IsResolved. Usado para aceite pendente, escopo não confirmado, esclarecimento pendente, revisão em aberto. |
| **Controller** | **ProducerExecutionReadinessController**: Evaluate(orderId) devolve o estado; MarkBlockingResolved / MarkBlockingUnresolved (mock). **ResolvedBlockingStore** guarda em memória quais bloqueios o utilizador marcou como resolvidos. |

## Bloqueios e critérios de prontidão

- **Aceite pendente** (Critical): o produtor ainda não aceitou o pedido (AcceptanceStatus != Accepted).
- **Escopo não confirmado** (High): o escopo não está confirmado por ambos (ProducerScopeConfirmationState.Status != Confirmed).
- **Esclarecimento pendente** (High): o pedido tem RequiresClarification.
- **Revisão em aberto** (Medium): existe revisão em PendingHotelApproval, PendingProducerApproval ou NeedsRevision.

**Pronto para preparação:** pedido aceite, escopo confirmado, sem esclarecimento pendente e sem bloqueios críticos/altos não resolvidos.  
**Pronto para execução:** igual a pronto para preparação (na etapa actual; critérios adicionais podem ser adicionados depois).

O utilizador (produtor) pode **marcar um bloqueio como resolvido** (mock): o **ResolvedBlockingStore** guarda essa decisão e o **Evaluate** considera o item com IsResolved = true, podendo assim alterar IsReadyForPreparation/IsReadyForExecution quando não restam bloqueios críticos/altos por resolver.

## Diferença entre pronto para preparação e pronto para execução

- **Pronto para preparação**: o pedido pode avançar para a fase de preparação operacional (montagem, logística, etc.); não há bloqueios que impeçam o produtor de começar a preparar.
- **Pronto para execução**: na implementação actual coincide com pronto para preparação. Em etapas futuras pode incluir, por exemplo, confirmação de data, recursos ou checklist pré-evento.

## Visão operacional

A UI mostra de forma clara:
- **Revisão de escopo vigente**: ActiveScopeRevisionId (revisão confirmada) ou “—” (escopo inicial do pedido).
- **Pendências de comunicação**: HasPendingClarifications e bloqueio “Esclarecimento pendente” quando aplicável.
- **Aceite final**: IsProducerAccepted.
- **Caminho para iniciar preparação**: IsReadyForPreparation e lista de bloqueios pendentes; no produtor, botão “Resolvido”/“Desfazer” por bloqueio (mock).

## Indicadores

- **ReadinessIndicatorHelper.GetReadinessLabel(state)**:
  - "Pronto para execução" (IsReadyForExecution).
  - "Pronto para preparação" (IsReadyForPreparation e não execução).
  - "Bloqueado por aceite", "Bloqueado por escopo", "Bloqueado por esclarecimento", "Aguardando resolução interna" (conforme o primeiro bloqueio não resolvido).

## Integração

- **ProducerOrder**: aceite e esclarecimento (AcceptanceStatus, RequiresClarification).
- **ProducerScopeConfirmationState / ProducerOrderScopeRevision**: escopo confirmado e revisão vigente.
- **CommunicationThread**: não referenciado directamente; o “esclarecimento pendente” vem do flag RequiresClarification do pedido.
- **SalesOpportunity, ProposalRecord, SessionRecord**: ligação por IDs no pedido; sem referência directa no módulo de readiness.

Tudo em memória (ReadinessState é calculado em cada Evaluate; ResolvedBlockingStore persiste apenas as marcas “resolvido” por ordem+código).

## Limitações actuais

- Sem persistência real; ResolvedBlockingStore e estado avaliado perdem-se ao reiniciar.
- Sem workflow empresarial completo (notificações, prazos, aprovações em cadeia).
- “Marcar como resolvido” é mock: não altera o estado real do pedido (ex.: marcar “Escopo não confirmado” como resolvido não confirma o escopo); serve para simular resolução interna e ver o impacto no indicador de readiness.
