ums

BC-D — Audit Context

Idioma: Español Versión en inglés no disponible

Schema: [ums_audit] | Owner: UMS Core API .NET 8
Misión: Mantener un ledger inmutable y a prueba de manipulaciones de todos los eventos de la plataforma.
Patrón: Conformist puro — solo recibe, nunca emite.
Versión: 2.0 | Fecha: 2026-05-15

Arquitectura de Agregados: Modelo completo con diagramas, secuencias, ER y API: AuditRecord


Aggregate: AuditRecord

Aggregate Root: AuditRecord (append-only)

Entidades

Entidad Descripción
AuditRecord (AR) Registro inmutable: quien, cuando, que, resultado

Value Objects

Value Object Tipo Descripción
AuditEventType enum/string Tipo de evento que origino el registro
SubjectType enum USER / ADMIN / SYSTEM / BACKGROUND_WORKER
AuditResult enum SUCCESS / FAILURE / PARTIAL
AffectedEntity record (entityType: string, entityId: Guid)
AuditMetadata JSON Payload adicional especifico del evento

Invariantes

ID Regla Fuente
INV-AU1 Registros inmutables una vez escritos; no existe UPDATE ni DELETE ADR-0016
INV-AU2 Todo registro debe tener: WhoActed, WhenOccurred, WhatChanged, AffectedEntityId ADR-0016
INV-AU3 El contexto de Audit no publica eventos; es receptor terminal bounded-context-map.md

Eventos Auditados por Contexto

Origen Eventos auditados
Identity UserRegistered, UserActivated, UserBlocked, AuthenticationAttempted, MfaEnrolled
Authorization PermissionMutated, ProfileCreated, TemplatePublished, TemplateAssigned
Configuration IdpConfigUpdated, AppConfigPublished, FeatureFlagStateChanged
Approvals ApprovalRequestSubmitted, ApprovalResolved, ApprovalRejected, ApprovalExpired
Compliance DocumentUploaded, DocumentValidated, DocumentExpired, NotificationSent, EnforcementExecuted
IGA PromotionCriteriaMet, PromotionApproved, PromotionRejected, DelegationCreated, DelegationRevoked

Diagrama del Agregado

classDiagram
    direction TB
    class AuditRecord {
        <<AggregateRoot>>
        +Guid Id
        +Guid RootTenantId
        +AuditEventType EventType
        +SubjectType SubjectType
        +Guid WhoActed
        +DateTimeOffset WhenOccurred
        +string WhatChanged
        +AffectedEntity AffectedEntity
        +AuditResult Result
        +JSON AuditMetadata
    }
    note for AuditRecord "Append-only — sin UPDATE ni DELETE (ADR-0016)"

Comandos y Repositorio

AppendAuditRecordCommand  (interno, no expuesto via API publica)

IAuditRepository {
    AppendAsync(record)
    QueryByEntityAsync(entityId, entityType, rootTenantId, from, to)
    QueryByActorAsync(actorId, from, to)
    QueryByEventTypeAsync(eventType, rootTenantId, from, to)
}

Anterior: Configuration Context Índice DDD Siguiente: Approvals Context