# Painel Web do Produtor / Prestador

## Visão geral

A **terceira ponta** do sistema é o painel Web do **produtor/prestador**: recebimento do pedido (handoff do hotel), escopo operacional do evento, requisitos, status e observações. Entra como camada **isolada** e **compatível** com a Quest e com o CRM do hotel.

| Ponta | Foco |
|-------|------|
| **Quest** | Experiência do cliente / decisão / sinais comerciais |
| **Web Hotel/Espaço** | CRM, pipeline, proposta, follow-up, sessão Quest associada |
| **Web Produtor/Prestador** | Recebimento do pedido, escopo, prioridade, execução inicial |

## Handoff formal Hotel → Produtor (Etapa 68)

O handoff entre a web do hotel e a web do produtor foi **formalizado** como pedido operacional com geração explícita e status de aceite/revisão.

1. **Geração do pedido (hotel)**  
   O CRM do hotel dispõe da secção **Handoff para produtor**, onde o comercial pode **Gerar pedido operacional** por oportunidade. O serviço **HotelToProducerHandoffService.GenerateOrder** monta um **ProducerOrder** a partir de SalesOpportunity, ProposalRecord e SessionRecord (quando existirem), preenchendo OrderSummary, SalesHandoffNotes, prioridade e próxima ação. O pedido é armazenado em **HandoffStore** (em memória) e fica visível no painel do produtor.

2. **Status de aceite/revisão**  
   O produtor pode **Aceitar**, **Rejeitar** ou marcar como **Precisa esclarecimento** (com motivo opcional). O estado é representado pelo enum **ProducerAcceptanceStatus** (PendingReview, Accepted, Rejected, NeedsClarification). A actualização é feita via **HandoffStore.UpdateAcceptance** (ou **IMockProducerDataService.UpdateOrderAcceptance**).

3. **Indicadores**  
   **HandoffIndicatorHelper.GetIndicatorLabel** devolve rótulos claros: "Aguardando aceite do produtor", "Aceito para preparação", "Rejeitado pelo produtor", "Precisa esclarecer escopo", "Pronto para avançar". Usados na UI do hotel (status do handoff) e do produtor (lista e detalhes do pedido).

4. **Limitações atuais**  
   Não há persistência real (tudo em memória), nem mensageria/notificação real, nem autenticação. O hotel e o produtor partilham o mesmo **HandoffStore** em memória; ao reiniciar a aplicação os dados perdem-se.

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

O **checklist operacional** do pedido e a **confirmação final de preparação** permitem passos verificáveis (obrigatórios: aceite, escopo confirmado, sem esclarecimentos; opcionais: logística, materiais, equipa). O produtor vê a lista, marca itens concluídos e pode **confirmar preparação** quando todos os obrigatórios estão feitos; o hotel vê o **resumo** do checklist, se está pronto para preparação e se a preparação já foi confirmada. Relação com readiness: o checklist é gerado a partir do pedido, readiness e escopo; os obrigatórios podem vir pré-preenchidos quando já cumpridos. Ver **Docs/Web/WEB_CHECKLIST.md**.

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

A **readiness operacional** consolida o pedido num estado final de prontidão: **ProducerExecutionReadinessState** indica se está **pronto para preparação** e **pronto para execução**, com **bloqueios** (aceite pendente, escopo não confirmado, esclarecimento pendente, revisão em aberto) e **resumo operacional**. O hotel vê no painel **Prontidão para preparação / execução** o status e os bloqueios; o produtor vê **Prontidão para execução**, checklist do que falta e pode **marcar bloqueio como resolvido** (mock). A revisão de escopo vigente (ActiveScopeRevisionId) e o aceite final ficam explícitos. Ver **Docs/Web/WEB_READINESS.md**.

## Ajustes de escopo e confirmação operacional (Etapa 70)

O **ajuste de escopo** do pedido e a **confirmação operacional** permitem ao hotel e ao produtor propor revisões de escopo (ProducerOrderScopeRevision), aprovar ou rejeitar, e marcar uma revisão como escopo actual confirmado. Cada pedido tem um **ProducerScopeConfirmationState** (Draft, PendingHotelApproval, PendingProducerApproval, Confirmed, Rejected, NeedsRevision). O hotel pode **solicitar ajuste de escopo** e **aprovar/rejeitar** revisões propostas pelo produtor; o produtor pode **propor ajuste**, **aprovar/rejeitar** revisões solicitadas pelo hotel e ver **pronto para preparação** quando o escopo está confirmado e o pedido aceite. Ver **Docs/Web/WEB_SCOPE.md**.

## Comunicação operacional (Etapa 69)

A **comunicação operacional** entre hotel e produtor está ligada ao pedido: cada **ProducerOrder** tem uma **thread** (CommunicationThread) criada ao gerar o handoff. No painel do produtor, a secção **Comunicação com o hotel** mostra por pedido: thread, mensagens recentes, campo de resposta (mock) e indicadores (ex.: aguardando esclarecimento, pronto para continuar). No CRM do hotel, a secção **Comunicação operacional** mostra por pedido: thread, mensagens recentes, nova mensagem (mock) e indicadores (dúvida pendente, resposta recebida). Pedidos de esclarecimento e respostas são representados por mensagens do tipo ClarificationRequest e ClarificationResponse. Ver **Docs/Web/WEB_COMMUNICATION.md**.

## Como o pedido chega do hotel ao produtor (conceptual)

O fluxo **Hotel → Produtor** continua mockado:

1. **No hotel (CRM)**: a oportunidade tem proposta e, quando há sessão Quest, resultado (SessionRecord) com recomendação, CTA, próxima ação, prioridade.
2. **Handoff**: o comercial usa **Gerar pedido operacional** na secção Handoff; o **HotelToProducerHandoffService** cria ProducerOrder e regista-o no HandoffStore. Em cenário real seria notificação, API ou integração.
3. **No painel do produtor**: **ProducerOrder** representa esse handoff com todos os campos (incluindo os de handoff formal: OrderSummary, AcceptanceStatus, RequiresClarification, ClarificationReason, SalesHandoffNotes, GeneratedAt, AcceptedAt, RejectedAt, LastUpdatedAt).

## Como o handoff é interpretado operacionalmente

- **Origem do pedido**: a UI mostra qual proposta gerou o pedido, qual sessão Quest influenciou a decisão (quando existir), recomendação e proposta selecionada.
- **Escopo**: tema, pacote comercial, itens necessários (RequiredShowroomItems), hotspots/destaques (KeyHotspots) e notas do comercial (KeyNotesFromSales) indicam prioridades e expectativas.
- **Requisitos**: **ProducerRequirementItem** por tipo (Decoration, Lighting, Buffet, Stage, Furniture, Logistics, Other) com título, descrição e estado (concluído/pendente).
- **Status**: **ProducerOrderStatus** (New, UnderReview, NeedsClarification, Accepted, InPreparation, ReadyForExecution) e **ProducerStatusUpdate** para histórico de mudanças.
- **Observações**: **ProducerExecutionNote** para comentários do produtor ou do comercial.

A ponte é **conceptual**: o produtor não referencia tipos do CRM nem da Quest; usa apenas IDs e rótulos (ProposalId, SessionId, ThemeLabel, etc.) em **ProducerOrder**. Quando houver integração real, o hotel poderá criar ProducerOrder a partir de ProposalRecord + SessionRecord sem o produtor depender desses modelos.

## Estrutura (Assets/Web/Producer/)

- **Core**: ProducerOrderStatus, ProducerRequirementType, ProducerAcceptanceStatus, ProducerScopeChangeType, ProducerScopeConfirmationStatus, ScopeRevisionRequestedByRole, ProducerExecutionBlockingSeverity, **ProducerPreparationChecklistCategory** (Scope, Communication, Approval, Logistics, Materials, Team, Other).
- **Domain**: ProducerOrder, ProducerRequirementItem, ProducerExecutionNote, ProducerStatusUpdate, ProducerOrderScopeRevision, ProducerScopeChangeItem, ProducerScopeConfirmationState, ProducerExecutionBlockingItem, ProducerExecutionReadinessState, **ProducerPreparationChecklistItem** (ItemId, ProducerOrderId, Title, Summary, Category, IsRequired, IsCompleted, CompletedByRole, CompletedAt, Notes), **ProducerPreparationChecklistState** (ProducerOrderId, Items, TotalItems, CompletedItems, RequiredItems, CompletedRequiredItems, IsPreparationConfirmed, PreparationConfirmedAt, PreparationSummary).
- **Application**: IMockProducerDataService, MockProducerDataService, HandoffStore, HandoffIndicatorHelper, ScopeRevisionStore, ProducerOrderScopeController, ScopeIndicatorHelper, ResolvedBlockingStore, ProducerExecutionReadinessController, ReadinessIndicatorHelper, **PreparationChecklistStore**, **ProducerPreparationChecklistController** (EnsureChecklist, GenerateBaseChecklist, GetChecklistState, MarkItemCompleted, MarkItemIncomplete, ConfirmPreparation), **ChecklistIndicatorHelper**.
- **Presentation**: ProducerDashboardController, ProducerOrderListView, ProducerOrderDetailsView, ProducerAcceptancePanel, ProducerOrderCommunicationView, ProducerScopeRevisionView, ProducerReadinessView, **ProducerPreparationChecklistView** (checklist, marcar concluído, progresso, confirmar preparação), ProducerRequirementListView, ProducerStatusView, ProducerExecutionNotesView.
- **Scenes**: ProducerDashboard.unity.

Na camada **Web (Hotel)**:
- **Application**: **HotelToProducerHandoffService** (GenerateOrder a partir de oportunidade, proposta, sessão; usa HandoffStore).
- **Presentation**: **HandoffToProducerPanel**, **OrderScopePanel**, **OrderReadinessPanel**, **OrderChecklistPanel** (resumo do checklist, pronto para preparação, preparação confirmada, pendências principais).

Cena **ProducerDashboard**: abrir para ver o painel do produtor (pedidos, escopo/origem, requisitos, status, observações).
