# Checklist operacional e confirmação final de preparação (Etapa 72)

## Visão geral

A **Etapa 72** introduz o **checklist operacional** do pedido e a **confirmação final de preparação**: itens verificáveis (obrigatórios e opcionais), progresso e botão de confirmação quando os obrigatórios estão concluídos. O fluxo hotel → produtor fica com um estado claro e verificável antes da execução.

| Conceito | Descrição |
|----------|-----------|
| **Item de checklist** | **ProducerPreparationChecklistItem**: ItemId, ProducerOrderId, Title, Summary, Category (Scope, Communication, Approval, Logistics, Materials, Team, Other), IsRequired, IsCompleted, CompletedByRole, CompletedAt, Notes. |
| **Estado do checklist** | **ProducerPreparationChecklistState**: ProducerOrderId, Items, TotalItems, CompletedItems, RequiredItems, CompletedRequiredItems, IsPreparationConfirmed, PreparationConfirmedAt, PreparationSummary. |
| **Controller** | **ProducerPreparationChecklistController**: EnsureChecklist (gera base se não existir), GetChecklistState, MarkItemCompleted, MarkItemIncomplete, ConfirmPreparation (só quando todos os obrigatórios estão concluídos). **PreparationChecklistStore** guarda itens e estado de confirmação em memória. |

## Relação entre readiness e checklist

- **Readiness (Etapa 71)** avalia se o pedido está pronto para preparação/execução com base em **bloqueios** (aceite, escopo, esclarecimento, revisão). É um estado **calculado** a partir do pedido e do escopo.
- O **checklist (Etapa 72)** é uma lista **explícita** de passos (aceite, escopo confirmado, sem esclarecimentos, logística, materiais, equipa). O checklist base é **gerado** a partir do pedido, readiness e escopo: os três primeiros itens (obrigatórios) são pré-marcados como concluídos quando o readiness/escopo já refletem essa condição; os restantes (opcionais) ficam para o produtor marcar.
- **Confirmação final de preparação** só fica disponível quando **CompletedRequiredItems == RequiredItems**. Caso contrário, a UI mostra "Ainda há pendências obrigatórias" e o botão "Confirmar preparação final" fica desactivado (ou com texto explicativo). Assim, a confirmação é coerente com o checklist verificável.

## Geração do checklist base

- **EnsureChecklist(orderId)** chama **GenerateBaseChecklist** quando o pedido ainda não tem itens. Itens criados:
  1. Pedido aceite pelo produtor (Approval, obrigatório) — pré-preenchido se readiness.IsProducerAccepted.
  2. Escopo confirmado (Scope, obrigatório) — pré-preenchido se scope state = Confirmed.
  3. Sem pendências de esclarecimento (Communication, obrigatório) — pré-preenchido se !readiness.HasPendingClarifications.
  4. Logística verificada (Logistics, opcional).
  5. Materiais confirmados (Materials, opcional).
  6. Equipa alocada (Team, opcional).

Integração com **ProducerOrder**, **ProducerExecutionReadinessState**, **ProducerOrderScopeRevision**, **ProducerScopeConfirmationState** (e conceptualmente **CommunicationThread**) é feita por **orderId** e leitura dos estados via HandoffStore, ProducerExecutionReadinessController e ScopeRevisionStore; não há referência a SalesOpportunity/ProposalRecord/SessionRecord no módulo de checklist.

## Indicadores

- **ChecklistIndicatorHelper.GetChecklistLabel(state)**: "Preparação confirmada", "Pendências obrigatórias", "Checklist em andamento", "Pronto para iniciar preparação operacional".
- **GetChecklistSummaryLabel(state)** (vista hotel): "Preparação confirmada", "N pendência(s) obrigatória(s)", "X/Y itens".

## UI

- **Produtor**: **ProducerPreparationChecklistView** — lista de itens com caixa para marcar concluído/não concluído, progresso (CompletedItems/TotalItems, CompletedRequiredItems/RequiredItems), mensagem de pendências obrigatórias, botão "Confirmar preparação final" (activo só quando todos os obrigatórios estão concluídos).
- **Hotel**: **OrderChecklistPanel** — resumo por pedido (indicador do checklist, pronto para preparação vindo do readiness, "Preparação confirmada", pendências principais quando existem).

## Limitações actuais

- Sem persistência real (PreparationChecklistStore em memória).
- Sem workflow completo (notificações, prazos, aprovação da confirmação pelo hotel). A confirmação é apenas registada no lado produtor (mock).
