mirror of
https://github.com/Sea-Haven-Industries/shoc-backend.git
synced 2026-10-01 22:07:59 +00:00
75 lines
2.7 KiB
Markdown
75 lines
2.7 KiB
Markdown
# 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: _______
|