shoc-backend/docs/work-orders/phase-0/dar-persisted-vs-derived-matrix.md

55 lines
1.9 KiB
Markdown
Raw Normal View History

# DAR — Matriz Persistido vs Derivado
**Fase:** 0
**Status:** Draft para validação PO + CTO
---
## Matriz de campos (board + domínio)
| Campo FE / conceito | Persistido | Derivado | Fonte / Regra |
|---------------------|------------|----------|---------------|
| lifecycleStatus | Sim | Não | Core — `LifecycleStatus` enum |
| isPastDue | Não | **Sim** | `ScheduledDate < UTC hoje` AND NOT status terminal |
| type (Overdue) | Parcial | **Sim** | Regra type + schedule + status |
| workOrderType | Sim | Não | Core — enum `WorkOrderType` |
| carriedOver | Sim | Não | Analytics — incremento via `WeekRolled` only |
| rescheduleCount | Sim | Parcial | Analytics — incremento em mudança ScheduledDate |
| docStatus | Sim | Não | Completion slice |
| dayGroup | Não | Sim | Calculado na leitura a partir de ScheduledDate |
| apptTime | Não | Sim | Projeção Dispatch primário ScheduledDate/Start |
| vendorName / tech | Não | Sim (projeção) | Join Dispatch primário |
| targetWeek | Sim | Não | Scheduling slice |
| scheduledEnd | Sim | Não | Scheduling slice |
| originalWeek / originalDate | Sim | Não | Tracking — set-once na primeira agenda |
| operationalFlags.pastDue | Não* | Sim | *Cache opcional Fase 5; on-read authoritative |
| legacyStatus | Sim (read-only) | Não | Valor string original pré-migration |
---
## Regras de derivação (on-read)
### isPastDue
```text
isPastDue = ScheduledDate.HasValue
AND ScheduledDate.Value.Date < DateTime.UtcNow.Date
AND LifecycleStatus NOT IN (Complete, Canceled)
```
### type Overdue (derivado)
WO com type != Overdue pode exibir badge Overdue quando isPastDue && regras de negócio PO confirmadas.
---
## Validação PO
| Pergunta | Resposta PO |
|----------|-------------|
| Past Due separado do lifecycle status? | Sim |
| carriedOver persiste mesmo após reschedule? | Sim |
| Vendor nunca duplicado na WO? | Sim |
**Assinatura PO:** _________________ Data: _______