shoc-backend/docs/work-orders/phase-0/data-ownership-model.md

2.7 KiB

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