# Visão de SLA do ciclo (Etapa 84)

## Visão geral

A **Etapa 84** cria a **base de visão de SLA do ciclo** e **tempo estimado entre marcos críticos**, para que a gestão enxergue **atrasos**, **riscos de demora** e **tempo esperado entre etapas** do fluxo. A camada é **agregadora**: usa dashboard, alertas, execução e aceite final; não substitui timeline (quando existir), nem módulos operacionais.

| Conceito | Descrição |
|----------|-----------|
| **Estado SLA** | **EventCycleSLAState**: CycleId, TotalEstimatedCycleTimeDays, CurrentElapsedCycleTimeDays, expectativas por trecho (LeadToQuest, QuestToHandoff, HandoffToProducerAcceptance, etc.), Segments, DelayRiskLevel, MainDelayReason, LastEvaluatedAt. |
| **Segmento** | **EventCycleSLASegment**: FromMilestoneType, ToMilestoneType, ExpectedDurationDays, CurrentOrObservedDurationDays, IsDelayed, DelaySeverity, Notes. |
| **Severidade** | **EventCycleDelaySeverity** (enum): None, Low, Medium, High, Critical. |
| **Controller** | **EventCycleSLAController**: EvaluateSLA(orders, opportunities, proposals, sessions, followUpTasks), EvaluateSLAForCycle(...). |

## Trechos temporais (segmentos)

| Trecho | Esperado (dias) | Observado |
|--------|-----------------|-----------|
| Lead → QuestSession | 7 | order.CreatedAt até session.LastSessionTimestamp |
| QuestSession → Handoff | 3 | sessão até order.GeneratedAt |
| Handoff → ProducerAcceptance | 5 | handoff até order.AcceptedAt |
| ProducerAcceptance → Preparation | 7 | — (heurístico) |
| Preparation → ExecutionStarted | 3 | — |
| ExecutionStarted → FinalReport | 14 | execState.StartedAt até finalReport.ClosedByProducerAt |
| FinalReport → HotelAcceptance | 5 | relatório até finalAcceptance.AcceptedAt/ClosedAt |

Quando o tempo observado supera o esperado, o segmento fica **IsDelayed** e recebe **DelaySeverity** (excesso ≥14d → Critical, ≥7d → High, ≥3d → Medium, senão Low). Quando o marco de destino ainda não ocorreu, usa-se o tempo de espera desde o marco de origem; se esse tempo superar o esperado, também se marca atraso.

## Regras de risco

- **Execução bloqueada** (ProducerExecutionStatus.Blocked) → segmento ExecutionStarted → FinalReport com Critical e nota "Execução bloqueada".
- **Quest concluída mas handoff não gerado** → segmento QuestSession → Handoff com High e "Handoff pendente após Quest".
- **Handoff gerado mas produtor não aceitou** → segmento Handoff → ProducerAcceptance com Medium e "Aceite do produtor pendente".
- **Relatório final concluído mas aceite do hotel pendente** → segmento FinalReport → HotelAcceptance com High e "Aceite final do hotel pendente".

**DelayRiskLevel** do ciclo = máxima severidade entre todos os segmentos. **MainDelayReason** = descrição do pior segmento em atraso (From → To: Notes).

## UI

- **EventCycleSLAStripView** — Faixa: "SLA: Risco [DelayRiskLevel] | Maior atraso: [MainDelayReason] | timestamp". Cor vermelha para High/Critical.
- **EventCycleSLAPanel** — Por ciclo: tempo decorrido vs estimado total; risco; principal atraso; lista de segmentos (esperado vs observado, ⚠ quando atrasado); botão "Recalcular".
- **EventCycleDashboardPanel** — Por ciclo: quando DelayRiskLevel ≠ None, linha "SLA: Risco X | MainDelayReason | timestamp".

## Ações

- **Calcular/Recalcular** — Refresh (EvaluateSLA e repintar).
- **Limpar** — Não há store; análise sempre recalculada.
- **Navegar para marco/segmento** — Futuro: usar RelatedSectionKey ou IDs para scroll no CRM.

## Como ajuda gestão de atraso e risco operacional

- Identificar em que trecho o ciclo está atrasado (handoff, aceite produtor, execução, aceite final).
- Priorizar ciclos com Critical ou High.
- Acompanhar tempo decorrido vs tempo total estimado.

## Limitações atuais

- **Sem persistência real** — SLA avaliado on-demand; não guardado em base de dados.
- **Sem telemetria temporal real** — Expectativas em dias são heurísticas fixas; não há histórico de SLAs nem integração com sistemas externos.

## Garantias

- **Quest intacto** — Nenhum fluxo Quest nem runtime XR alterado.
- **Web Hotel e Produtor intactas** — Apenas novas secções e uma linha no dashboard quando há risco.
- **Camada agregadora** — Só lê dashboard, alertas, execução e aceite final; sem dependência circular.
