# Data Ownership Model — Work Orders **Fase:** 0 **Status:** Draft para sign-off CTO --- ## 1. Princípios 1. **SHOC (React)** é o único destino de novas features do board. 2. **SQL Server** é fonte operacional para board, Blazor e Portal. 3. **DynamoDB/Sync** é ponte temporária de ingestão externa. 4. Conflito entre atores resolve-se pela Field Ownership Matrix, não por last-write-wins global. --- ## 2. Ownership por ator | Ator | Conexão | Pode alterar | Não pode alterar | |------|---------|--------------|------------------| | **SHOC** | REST JWT (`api/WorkOrder`) | Lifecycle, Schedule, Assignment, Completion, vendor via Dispatch, POC, WO# | Checklist/signoff vendor | | **Vendor Portal** | REST `X-Vendor-Token` | Dispatch status, checklist, signoff, comments vendor | Schedule, lifecycle, assignment, DueDate | | **Sync/Lambda** | `POST api/Sync/WorkOrders` | Campos ingest (Description, ExternalId, SiteCode na criação, etc.) | Campos SHOC-owned após ManualEditFlag | | **Blazor** | EF direto (`WorkorderService`) | Campos legados existentes até sunset | Campos novos board; **congelado** | | **Jobs** | Domain events (Fase 5+) | Incremento CarriedOver; audit System | Lifecycle, Schedule, Dispatch | --- ## 3. Política Blazor (sunset) - Manutenção mínima: bugfix crítico only. - Não recebe: board, inline edit, jobs, advanced search, completion doc WO-level. - Schema: colunas novas Fase 0 são **nullable** — Blazor continua funcionando sem conhecer novos campos. - Conflito Blazor vs SHOC: **SHOC vence**; Blazor não deve escrever campos board após go-live Fase 1. - Smoke test EF obrigatório pós-migration (ver checklist smoke). --- ## 4. Política Vendor Portal - Dispatch intacto; zero regressão checklist/signoff/verify. - Vendor não muta WorkOrder core — apenas Dispatch e comments associados. - Audit EventType = `Vendor` para mutações portal. --- ## 5. Política Sync/Lambda - Upsert por `ExternalWorkOrderId` (idempotente). - Field-level merge conforme Field Ownership Matrix. - Campo com ManualEditFlag → skip + audit `SyncRejected`. - Cutover Lambda → API direta: Fase 7. --- ## 6. Regras de conflito (resumo) | Cenário | Vencedor | |---------|----------| | SHOC vs SHOC (mesmo campo) | 409 RowVersion; último commit válido | | SHOC vs Sync (mesmo campo) | SHOC se ManualEditFlag | | SHOC vs Sync (campos distintos) | Merge | | Vendor vs Sync | Domínios separados | | SHOC vs Vendor (mesmo conceito) | Impossível por design (vendor = Dispatch) | | Blazor vs SHOC | SHOC vence; Blazor congelado | --- ## 7. Critérios de aceite - [ ] Matriz por ator revisada por CTO - [ ] PO confirma política Blazor sunset - [ ] Sync merge referencia Field Ownership Matrix **Assinatura CTO:** _________________ Data: _______