Contexto Delimitado: Aprobaciones
Raíz de Agregado: ApprovalWorkflow
Módulo: Ums.Domain.Approvals.ApprovalWorkflow
Estado: Producción
El agregado ApprovalWorkflow establece las reglas de enrutamiento dinámico y las listas de verificación de documentos para operaciones que requieren supervisión administrativa. Garantiza que ciertas acciones de usuario (como solicitar promociones de perfiles o subir archivos sensibles) desencadenen flujos correspondientes de autorización humana y definan qué archivos de respaldo son obligatorios. Las configuraciones específicas de qué documentos son obligatorios (ej. Prueba de Identidad) se manejan a través de su entidad hija ApprovalRequiredDocument.
ApprovalRequiredDocument.DocumentTypeId explícito obligatorio para el contexto de un flujo de trabajo.ApprovalWorkflow es la raíz del agregado. Agregar o quitar documentos requeridos (entidades ApprovalRequiredDocument) debe fluir a través de él para mantener la integridad del modelo. La entidad hija no puede existir ni modificarse fuera del alcance de su agregado padre.
ApprovalWorkflow debe cumplir con la plantilla corporativa de código-nombre-descripción.Code debe ser único dentro del TenantId activo.RequiresApproval es verdadero, el flujo de trabajo debe tener al menos un grupo de aprobadores o criterio de lista de verificación válido.ApprovalRequiredDocument) debe ser único; un flujo de trabajo no puede duplicar tipos de documentos requeridos.ApprovalRequiredDocument está ligado al ApprovalWorkflow padre.ApprovalRequiredDocument debe contener un WorkflowId y un DocumentTypeId válidos, además de tener un Id válido (basado en Guid ApprovalRequiredDocumentId).| Entidad / VO | Tipo | Propietario | Descripción |
|—|—|—|—|
| ApprovalWorkflowId | Objeto de Valor | | Identificador de raíz de agregado |
| ApprovalRequiredDocument | Entidad | Propia | Especifica asignaciones de clasificaciones de documentos requeridos obligatorios |
| ApprovalRequiredDocumentId | Objeto de Valor | | Identificador único de la entidad hija |
| DocumentTypeId | Objeto de Valor | | Referencia de Guid a la clasificación del documento |
| UserCategory | Enumerado | | INTERNAL · EXTERNAL · AUDITOR |
| AuditValueObject | Objeto de Valor | | Rastrea metadatos de creación y modificación |
| Evento | Desencadenante |
|—|—|
| ApprovalWorkflowCreatedEvent | Se registra una nueva definición de flujo de aprobación |
| RequiredDocumentAddedEvent | Se añade un mapeo de requisito de documento a la lista de verificación |
| RequiredDocumentRemovedEvent | Se elimina un mapeo de requisito de documento de la lista |
| Comando | Descripción |
|—|—|
| CreateApprovalWorkflowCommand | Inicializar un nuevo mapeo de flujo de aprobación |
| AddRequiredDocumentToWorkflowCommand | Vincular un DocumentType como mandato para completar el flujo |
| RemoveRequiredDocumentFromWorkflowCommand | Eliminar una restricción de DocumentType de la lista de verificación |
IApprovalWorkflowRepository — Persiste y carga flujos de trabajo.TenantId actual.ApprovalWorkflow (Raíz de Agregado)
├── Props: ApprovalWorkflowProps
│ ├── Id: ApprovalWorkflowId
│ ├── TenantId: TenantId
│ ├── SystemSuiteId?: SystemSuiteId
│ ├── Code: Code
│ ├── Name: Name
│ ├── Description: Description
│ ├── TargetUserCategory: UserCategory
│ ├── RequiresApproval: bool
│ └── Audit: AuditValueObject
└── Hijos
└── IReadOnlyCollection<ApprovalRequiredDocument>
└── Props: ApprovalRequiredDocumentProps
├── Id: ApprovalRequiredDocumentId
├── WorkflowId: ApprovalWorkflowId
├── DocumentTypeId: DocumentTypeId
├── IsMandatory: bool
└── Audit: AuditValueObject
classDiagram
direction LR
class ApprovalWorkflow {
+Guid Id
+Guid TenantId
+Guid? SystemSuiteId
+Code Code
+Name Name
+Description Description
+UserCategory TargetUserCategory
+bool RequiresApproval
+List~ApprovalRequiredDocument~ RequiredDocuments
+Create()
+AddRequiredDocument()
+RemoveRequiredDocument()
}
class UserCategory {
<<enumeration>>
INTERNAL
EXTERNAL
AUDITOR
}
class ApprovalRequiredDocument {
+Guid Id
+Guid WorkflowId
+Guid DocumentTypeId
+bool IsMandatory
+Create()
}
ApprovalWorkflow "1" *-- "0..*" ApprovalRequiredDocument
ApprovalWorkflow "1" *-- "1" UserCategory
sequenceDiagram
participant C as AdministradorInquilino
participant H as AddDocHandler
participant R as IApprovalWorkflowRepository
participant W as ApprovalWorkflow (AR)
C->H: AddRequiredDocumentToWorkflowCommand(workflowId, docTypeId, isMandatory)
H->R: GetById(workflowId)
R-->>H: ApprovalWorkflow (AR)
H->W: AddRequiredDocument(docTypeId, isMandatory, actorId)
W->W: Validar unicidad del tipo de documento
W->W: Levantar RequiredDocumentAddedEvent
H->R: Save(workflow)
R-->>H: ok
H-->>C: ok
erDiagram
TENANT ||--o{ APPROVAL_WORKFLOW : "gobierna"
SYSTEM_SUITE ||--o{ APPROVAL_WORKFLOW : "acota"
APPROVAL_WORKFLOW ||--o{ APPROVAL_REQUIRED_DOCUMENT : "demanda"
DOCUMENT_TYPE ||--o{ APPROVAL_REQUIRED_DOCUMENT : "define"
APPROVAL_WORKFLOW {
uniqueidentifier WorkflowId PK
uniqueidentifier TenantId FK
uniqueidentifier SystemSuiteId FK "Nullable"
nvarchar Code "Único por TenantId"
nvarchar Name
nvarchar Description
nvarchar TargetUserCategory "INTERNAL-EXTERNAL-AUDITOR"
bit RequiresApproval
datetime2 UpdatedAt
uniqueidentifier UpdatedBy
}
APPROVAL_REQUIRED_DOCUMENT {
uniqueidentifier RequiredDocId PK
uniqueidentifier WorkflowId FK
uniqueidentifier DocumentTypeId FK
bit IsMandatory
}
DOCUMENT_TYPE {
uniqueidentifier DocumentTypeId PK
}
APPROVAL_WORKFLOW están particionados por TenantId. Las consultas directas a la base de datos requieren filtrado en los repositorios de la aplicación (R-10).APPROVAL_REQUIRED_DOCUMENT hereda las reglas de delimitación y de aislamiento de base de datos de APPROVAL_WORKFLOW.SystemSuiteId opcional del contexto de Autorización. Se dirige directamente a las configuraciones de DocumentType.ApprovalRequest para verificar las listas de verificación presentadas y por PromotionRequest en el contexto IGA para verificar los mandatos de autorización.CreateApprovalWorkflowCommand -> Entradas: TenantId, Code, Name, Description, UserCategory, RequiresApproval, SystemSuiteId? -> Retorna: GuidAddRequiredDocumentCommand -> Entradas: WorkflowId, DocumentTypeId, IsMandatory -> Retorna: voidRemoveRequiredDocumentFromWorkflowCommand -> Entradas: WorkflowId, DocumentTypeId -> Retorna: voidTenantId, Code para evitar códigos duplicados en el padre. Para la entidad hija, clave primaria agrupada en RequiredDocId e índice compuesto en WorkflowId, DocumentTypeId.Tenant:Admin o superiores. (Las reglas se heredan a los mapeos de documentos requeridos).ApprovalRequiredDocument sin estado, aparte de los atributos relacionales, evita una sobrecarga excesiva durante las evaluaciones de flujos de trabajo.