mirror of
https://github.com/Sea-Haven-Industries/shoc-backend.git
synced 2026-10-01 19:13:13 +00:00
106 lines
2.8 KiB
Markdown
106 lines
2.8 KiB
Markdown
# Audit Event Contract — Work Orders
|
||
|
||
**Fase:** 0
|
||
**Status:** Aprovado para implementação baseline
|
||
**Schema EF:** `WorkOrderAuditLog` estendido
|
||
|
||
---
|
||
|
||
## 1. Princípios
|
||
|
||
- Toda mutação gera audit **síncrono** desde Fase 0.
|
||
- Edição inline (Fase 2) = **1 evento por campo**.
|
||
- Audit serve investigação operacional, não só compliance.
|
||
|
||
---
|
||
|
||
## 2. Schema por evento
|
||
|
||
| Campo | Tipo | Obrigatório |
|
||
|-------|------|-------------|
|
||
| Id | int | Sim (PK) |
|
||
| WorkOrderId | int | Sim |
|
||
| EventType | enum string | Sim: Manual, System, Sync, Vendor |
|
||
| Action | string | Sim: FieldChanged, StatusChanged, WeekRolled, SyncRejected, AssignmentChanged |
|
||
| FieldName | string | Sim para inline / field change |
|
||
| OldValue | string | Sim |
|
||
| NewValue | string | Sim |
|
||
| UserId / ActorId | string | Sim para Manual |
|
||
| ActorType | enum string | Sim: Dispatcher, Vendor, System, Sync |
|
||
| CreatedAt | DateTime UTC | Sim |
|
||
| CorrelationId | string | Recomendado |
|
||
| DispatchId | int? | Quando evento é no dispatch |
|
||
|
||
**Compatibilidade:** colunas `Action` legada mapeada para novo `Action`; `UserId` = ActorId para Manual.
|
||
|
||
---
|
||
|
||
## 3. Enums
|
||
|
||
```csharp
|
||
AuditEventType: Manual | System | Sync | Vendor
|
||
AuditActorType: Dispatcher | Vendor | System | Sync
|
||
AuditActionType: FieldChanged | StatusChanged | AssignmentChanged | WeekRolled | SyncRejected | Create | Delete
|
||
```
|
||
|
||
---
|
||
|
||
## 4. Mutação → eventos
|
||
|
||
| Mutação | Eventos |
|
||
|---------|---------|
|
||
| ChangeStatus | 1× StatusChanged (EventType=Manual) |
|
||
| ChangeAssignment | 1× AssignmentChanged (FieldName=AssignTo) |
|
||
| Inline cell (Fase 2) | 1× FieldChanged por campo |
|
||
| Auto-schedule (Fase 2) | StatusChanged + FieldChanged se aplicável |
|
||
| Reschedule (Fase 2) | FieldChanged + analytics |
|
||
| WeekRolled (Fase 5) | System WeekRolled + CarriedOver |
|
||
| Sync skip | Sync SyncRejected |
|
||
| Vendor checklist | Vendor FieldChanged + DispatchId |
|
||
|
||
---
|
||
|
||
## 5. Contrato FE (Audit tab)
|
||
|
||
```typescript
|
||
interface AuditEntry {
|
||
type: 'manual' | 'system' | 'sync' | 'vendor';
|
||
dispatcherId?: string;
|
||
action: string;
|
||
fieldName?: string;
|
||
oldValue: string;
|
||
newValue: string;
|
||
time: string; // ISO UTC
|
||
dispatchId?: number;
|
||
}
|
||
```
|
||
|
||
Mapeamento API → FE:
|
||
|
||
| API EventType | FE type |
|
||
|---------------|---------|
|
||
| Manual | manual |
|
||
| System | system |
|
||
| Sync | sync |
|
||
| Vendor | vendor |
|
||
|
||
---
|
||
|
||
## 6. Baseline Fase 0 (endpoints)
|
||
|
||
| Endpoint | Garantia |
|
||
|----------|----------|
|
||
| POST ChangeStatus | 1 audit StatusChanged; Old/New preenchidos |
|
||
| POST ChangeAssignment | 1 audit AssignmentChanged; nomes usuário em Old/New |
|
||
|
||
Implementação via `IWorkOrderAuditService`.
|
||
|
||
---
|
||
|
||
## 7. Critérios de aceite
|
||
|
||
- [ ] Migration estende WorkOrderAuditLog
|
||
- [ ] ChangeStatus/ChangeAssignment usam serviço central
|
||
- [ ] Testes assertam 1 evento por mutação
|
||
|
||
**Assinatura Backend Lead:** _________________ Data: _______
|