Contexto Delimitado: Configuración
Raíz de Agregado: AppConfiguration
Módulo: Ums.Domain.Configuration.AppConfiguration
Estado: Producción
El agregado AppConfiguration representa una entrada individual de configuración jerárquica en UMS. Sigue el patrón corporativo obligatorio code / value / description y puede quedar acotado globalmente, por tenant, por suite o por módulo.
AppConfiguration es una raíz de agregado independiente. Cada fila de configuración se administra de forma autónoma.
Code, Value y Description.TenantId, SystemSuiteId y ModuleId.Draft.| Entidad / VO | Tipo | Propiedad |
|—|—|—|
| AppConfigurationId | Objeto de Valor | Identificador del agregado |
| TenantId | Objeto de Valor | Alcance opcional por tenant |
| SystemSuiteId | Objeto de Valor | Alcance opcional por suite |
| IdValueObject | Objeto de Valor | Alcance opcional por módulo |
| Code | Objeto de Valor | Clave técnica |
| ConfigurationValue | Objeto de Valor | Valor operacional |
| Description | Objeto de Valor | Significado funcional |
| ConfigurationScope | Enumeración | Global, Tenant, Suite, Module |
| ConfigStatus | Enumeración | Draft, Published, Archived |
| Evento | Disparador |
|—|—|
| AppConfigCreatedEvent | Nueva configuración creada |
| AppConfigUpdatedEvent | Configuración draft actualizada |
| AppConfigPublishedEvent | Configuración publicada |
| AppConfigArchivedEvent | Configuración archivada |
AppConfiguration (Raíz de Agregado)
└── Props: AppConfigurationProps
├── Id: IdValueObject
├── TenantId?: TenantId
├── SystemSuiteId?: SystemSuiteId
├── ModuleId?: IdValueObject
├── Code: Code
├── Value: ConfigurationValue
├── Description: Description
├── Scope: ConfigurationScope
├── IsInheritable: bool
├── IsEncrypted: bool
├── Version: string
├── Status: ConfigStatus
└── Audit: AuditValueObject
classDiagram
class AppConfiguration {
+Guid Id
+Guid? TenantId
+Guid? SystemSuiteId
+Guid? ModuleId
+Code Code
+ConfigurationValue Value
+Description Description
+ConfigurationScope Scope
+bool IsInheritable
+bool IsEncrypted
+string Version
+ConfigStatus Status
+Create(tenantId, systemSuiteId, moduleId, code, value, description, isInheritable, isEncrypted, actor)
+Update(value, description, actor)
+Publish(actor)
+Archive(actor)
}
sequenceDiagram
participant C as Cliente
participant H as Handler
participant R as IAppConfigurationRepository
participant A as AppConfiguration (AR)
C->>H: PublishAppConfiguration(configId)
H->>R: GetById(configId)
R-->>H: AppConfiguration
H->>A: Publish(actor)
A->>A: Validar estado Draft
A->>A: Levantar AppConfigPublishedEvent
H->>R: Update(configuration)
R-->>H: ok
erDiagram
APP_CONFIGURATION {
uniqueidentifier Id PK
uniqueidentifier TenantId FK "Nullable"
uniqueidentifier SystemSuiteId FK "Nullable"
uniqueidentifier ModuleId FK "Nullable"
nvarchar Code
nvarchar Value
nvarchar Description
int ScopeId
bit IsInheritable
bit IsEncrypted
nvarchar Version
int StatusId
nvarchar CreatedBy
datetime2 CreatedAtUtc
nvarchar UpdatedBy
datetime2 UpdatedAtUtc
nvarchar AuditTimeSpan
}
TenantId nulo.IsEncrypted identifica entradas que deben tratarse como datos sensibles.Description debe explicar propósito, impacto, comportamiento esperado y alcance aplicable.AppConfiguration está modelado como una entrada de configuración por agregado, no como una hoja por ambiente con hijos.