# Etapa 70 — Resumo da entrega

## Objetivo

Criar a **base de ajustes de escopo do pedido** e **confirmação operacional** entre hotel e produtor, sem quebrar a camada Quest nem as camadas web já existentes.

---

## Ficheiros criados

### Producer (Assets/Web/Producer/)

| Caminho | Descrição |
|---------|-----------|
| **Core/ProducerScopeChangeType.cs** | Enum: AddItem, RemoveItem, ReplaceItem, ClarifyRequirement, ChangePriority, ChangeExecutionNote. |
| **Core/ProducerScopeConfirmationStatus.cs** | Enum: Draft, PendingHotelApproval, PendingProducerApproval, Confirmed, Rejected, NeedsRevision. |
| **Core/ScopeRevisionRequestedByRole.cs** | Enum: HotelSales, HotelAdmin, Producer, InternalAdmin. |
| **Domain/ProducerScopeChangeItem.cs** | ItemId, ChangeType, TargetReference, Description, PreviousValue, NewValue. |
| **Domain/ProducerOrderScopeRevision.cs** | RevisionId, ProducerOrderId, RequestedByRole, RevisionSummary, ChangeItems, CreatedAt, IsApprovedByHotel, IsApprovedByProducer, IsCurrentActiveRevision, Notes, Status. |
| **Domain/ProducerScopeConfirmationState.cs** | OrderId, Status, ConfirmedRevisionId, LastUpdatedAt. |
| **Application/ScopeRevisionStore.cs** | Em memória: AddRevision, UpdateRevision, GetRevisionsForOrder, GetRevisionById, GetCurrentActiveRevision, GetConfirmationState, SetConfirmationState, SetCurrentActiveRevision. |
| **Application/ProducerOrderScopeController.cs** | CreateRevision, AddChangeItem, ApproveByHotel, RejectByHotel, ApproveByProducer, RejectByProducer, SetAsCurrentActive, GetRevisionsForOrder, GetRevisionById, GetCurrentActiveRevision, GetConfirmationState. |
| **Application/ScopeIndicatorHelper.cs** | GetScopeStatusLabel (Escopo inicial, Aguardando aprovação hotel/produtor, Escopo confirmado, etc.), GetReadyForPreparationLabel. |
| **Presentation/ProducerScopeRevisionView.cs** | Escopo actual, propor ajuste, listar revisões, aprovar/rejeitar (quando aguarda produtor), indicador pronto para preparação. |

### Hotel (Assets/Web/Presentation/)

| Caminho | Descrição |
|---------|-----------|
| **OrderScopePanel.cs** | Escopo actual por pedido, revisões, solicitar ajuste de escopo, aprovar/rejeitar (quando aguarda hotel), status de confirmação operacional. |

### Documentação

| Caminho | Descrição |
|---------|-----------|
| **Docs/Web/WEB_SCOPE.md** | Ajustes de escopo, confirmação operacional, versões de escopo, integração, indicadores, limitações. |
| **Docs/Web/ETAPA_70_RESUMO.md** | Este resumo. |

---

## Ficheiros alterados

| Caminho | Alteração |
|---------|-----------|
| **Presentation/HotelCRMDashboardController.cs** | Nova secção OrderScopePanel ("Escopo do pedido e confirmação operacional"). |
| **Producer/Presentation/ProducerDashboardController.cs** | Nova secção ProducerScopeRevisionView ("Escopo e confirmação operacional"). |
| **Docs/Web/WEB_PRODUCER.md** | Secção "Ajustes de escopo e confirmação operacional (Etapa 70)"; estrutura actualizada (Core, Domain, Application, Presentation); OrderScopePanel. |
| **Docs/Web/WEB_MODULES.md** | OrderScopePanel no hotel; Producer: Core, Domain, Application, Presentation com scope; referência WEB_SCOPE.md. |

---

## Como os ajustes de escopo foram implementados

1. **Modelos**  
   **ProducerOrderScopeRevision** liga-se ao pedido por **ProducerOrderId**; contém RequestedByRole, RevisionSummary, ChangeItems (lista de **ProducerScopeChangeItem**), IsApprovedByHotel, IsApprovedByProducer, IsCurrentActiveRevision, Status (ProducerScopeConfirmationStatus). **ProducerScopeConfirmationState** por pedido: OrderId, Status, ConfirmedRevisionId.

2. **Store e controlador**  
   **ScopeRevisionStore** guarda revisões e estados em memória. **ProducerOrderScopeController** cria revisões (CreateRevision), adiciona itens (AddChangeItem), aprova/rejeita por hotel (ApproveByHotel, RejectByHotel) ou produtor (ApproveByProducer, RejectByProducer). Quando ambos aprovam, a revisão fica Confirmed e é marcada como activa (SetCurrentActive); o estado do pedido passa a Confirmed com ConfirmedRevisionId.

3. **Regras de aprovação**  
   Revisão pedida pelo **produtor** → estado inicial PendingHotelApproval (hotel aprova/rejeita). Revisão pedida pelo **hotel** → estado inicial PendingProducerApproval (produtor aprova/rejeita).

4. **Indicadores**  
   **ScopeIndicatorHelper.GetScopeStatusLabel** devolve: Escopo inicial, Aguardando aprovação do hotel, Aguardando aprovação do produtor, Escopo confirmado, Revisão rejeitada, Escopo em revisão. **GetReadyForPreparationLabel** devolve "Pronto para preparação" quando estado Confirmado e pedido aceite.

5. **UI Hotel**  
   **OrderScopePanel** lista pedidos; por pedido mostra escopo actual (OrderSummary), indicador de estado, "Operacionalmente confirmado" quando Confirmed, botão "Solicitar ajuste de escopo" (cria revisão como HotelSales), lista de revisões com quem pediu e aprovações, e para revisões PendingHotelApproval botões Aprovar/Rejeitar.

6. **UI Produtor**  
   **ProducerScopeRevisionView** lista pedidos; por pedido mostra escopo actual, indicador e "Pronto para preparação" quando aplicável, botão "Propor ajuste de escopo" (cria revisão como Producer), lista de revisões, e para revisões PendingProducerApproval botões Aprovar/Rejeitar.

7. **Integração**  
   Revisões e estados referenciam apenas **ProducerOrderId**; não há alteração aos modelos Quest, Communication (apenas ligação conceptual por pedido). Hotel usa Producer.Application e Producer.Domain; produtor usa os mesmos; sem dependência circular.

---

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

1. **Nenhum ficheiro Quest alterado**  
   Nenhum script em Presentation/Quest, Core (Quest), Bridge, runtime XR ou apresentação Quest foi modificado. A camada Quest permanece **totalmente intacta**.

2. **CRM do hotel**  
   Apenas foi **adicionada** a secção OrderScopePanel. HandoffToProducerPanel, OrderCommunicationPanel, pipeline, leads, oportunidades e restantes secções não foram alterados.

3. **Painel do produtor**  
   Apenas foi **adicionada** a secção ProducerScopeRevisionView. Handoff, aceite/revisão, comunicação e demais secções permanecem inalterados.

4. **Handoff e comunicação (Etapas 68 e 69)**  
   HandoffStore, ProducerOrder, CommunicationStore, ProducerOrderCommunicationController e vistas existentes não foram alterados de forma destrutiva.

5. **Dependências**  
   Toda a lógica de escopo está em **Producer** (Core, Domain, Application, Presentation). O hotel referencia Producer para OrderScopePanel; não há ciclo.

---

## Limitações actuais (documentadas)

- Sem persistência real (ScopeRevisionStore em memória).
- Sem workflow empresarial complexo (múltiplas rondas automáticas, notificações, prazos).
- A aplicação do escopo confirmado ao pedido (ex.: actualizar RequiredShowroomItems a partir da revisão) não está implementada; a revisão serve como registo e acordo bilateral.

---

## Critérios de aceite

- Existe base de revisão/ajuste de escopo do ProducerOrder (ProducerOrderScopeRevision, ProducerScopeChangeItem, ProducerScopeConfirmationState, ScopeRevisionStore, ProducerOrderScopeController).
- Hotel e produtor conseguem propor, aprovar e rejeitar revisões mockadas (OrderScopePanel, ProducerScopeRevisionView).
- Existe status de confirmação operacional (ProducerScopeConfirmationStatus, GetConfirmationState, indicadores).
- Origem e estado das revisões ficam claros (RequestedByRole, Status, IsApprovedByHotel/ByProducer, IsCurrentActiveRevision).
- Quest continua intacto.
- Web do hotel e do produtor continuam intactas (evoluções aditivas).
- Projeto limpo e organizado; documentação actualizada (WEB_SCOPE.md, WEB_PRODUCER.md, WEB_MODULES.md, ETAPA_70_RESUMO.md).
