# 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: _______