metis-desk/docs/architecture/resources-global-scope/06-matriz-consumidores.md
2026-10-25 01:19:17 +02:00

100 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# R2.0 — Matriz de consumidores y elegibilidad
> **Ratificación posterior — 24 de octubre de 2026:** D01–D10 y D04-R ratificadas en los términos recomendados de R2.0; variante A, Resource único con `scope` explícito. Solo se autoriza implementar R2.1a. El registro vigente de alcance y evidencias está en [11 — Lectores compatibles](11-r2-1a-lectores-compatibles.md). Los estados «propuesto», «recomendado» y «pendiente» del cuerpo se conservan como evidencia de la versión documental inicial y quedan actualizados por este registro; ratificación conceptual no equivale a ejecución de R2.1b–R2.6.
Matrices **normativas propuestas** sujetas a decisiones de 02; no describen soporte global implementado. Compañía operativa fija **A**, aunque el operador tenga permitido abrir otras compañías bajo el modelo compartido. Capacidad global no permite mezclar datos de B en A.
Leyenda: **P Permitida**, **R Rechazada**, **C Condicionada** por las reglas numeradas, **H Solo lectura histórica/existente**: incluye recuperación de notas/retirada según mapper, nunca asociación nueva. Un estado H no exige que la relación esté cerrada; describe resolución de un vínculo ya existente. Todos los locales A de las filas se suponen activos; inactivos conservan lectura y recuperación según su consumidor actual. Local B siempre se rechaza dentro de A, cualquiera que sea tipo/actividad.
## 1. Recursos frente a consumidores principales
S-inst y S-perfil son selectores de **nuevo** vínculo; referencia actual desactivada se muestra aparte para conservar contexto, no como candidato nuevo. G-local es la gestión del propio Resource en A. G-global es administración del producto, siempre exige M de 03. Catálogo es producto mínimo autenticado.
| Recurso | SoftwareInstallation A | ApplicationConfiguration A | S-inst A | S-perfil A | G-local A | G-global | Catálogo global |
| --- | --- | --- | --- | --- | --- | --- | --- |
| Aplicación global activa | C F01 | C F02 | P F03 | P F03 | R | C F04 | P |
| Aplicación global desactivada | H F05 | H F05 | R | R | R | C F04 | P, estado inactivo |
| Aplicación particular A (serie/usage application) | C F01 | C F02 | P F03 | P F03 | C F06 | R | R |
| Aplicación particular B | R | R | R | R | R | R | R |
| Sistema operativo A | C F01 | R | P F03 | R | C F06 | R | R |
| Licencia A | R como resourceId; C como licenseResourceId F07 | R | R en software; C selector licencia F07 | R | C F06 | R | R |
| SMB A | R | R | R | R | C F06 | R | R |
| Certificado A | R | R | R | R | C F06 | R | R |
| Soporte A | R | R | R | R | C F06 | R | R |
| Dominio Windows A | R | R | R | R | C F06 | R | R |
| Resource proyectado Access A, uso general | R | R | R | R | C F06 | R | R |
| Buzón A | R | R | R | R | C F06 | R | R |
| Otro Resource general A | R | R | R | R | C F06 | R | R |
No existe global license/os/certificate/support/SMB/domain permitido: su creación es inválida, y un dato persistido así constituye inconsistencia, no un candidato rechazado silenciosamente. La fila de aplicación A se evalúa por serie/usage, aunque tuviera una integración local; no se globaliza esa integración. La fila Access de uso general no tiene usage application/os.
## 2. Consumidores operativos que no se amplían
Access indica grant/need sobre AccessItem(resource); carpetas significa FolderMapping y su cuenta/cobertura. No son un nuevo endpoint de Resource. Remoto es destino de RemoteConnection, no herramienta de asistencia. Estos contratos mantienen selección/validación propias actuales.
| Recurso | Access grant/need | Carpeta perfil | Publicación SMB | Pertenencia dominio | Certificado perfil | Asistencia de activo | Destino remoto A | MailboxUse/MailConfiguration |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Aplicación global activa | R | R | R | R | R | R | R | R |
| Aplicación global inactiva | R | R | R | R | R | R | R | R |
| Aplicación A | C F08 | C F09 | R | R | R | R | C F13 | R |
| Aplicación B | R | R | R | R | R | R | R | R |
| OS A | C F08 | C F09 | R | R | R | R | C F13 | R |
| Licencia A | C F08 | C F09 | R | R | R | R | C F13 | R |
| SMB A | C F08 | C F09 | C F10 | R | R | R | C F13 | R |
| Certificado A | C F08 | C F09 | R | R | C F11 | R | C F13 | R |
| Soporte A | C F08 | C F09 | R | R | R | C F12 | C F13 | R |
| Dominio Windows A | C F08 | C F09 | R | C F10 | R | R | C F13 | R |
| Access proyectado A, uso general | C F08 | C F09 | R | R | R | R | C F13 | R |
| Buzón A | C F08 | C F09 | R | R | R | R | C F13 | C F14 |
| Otro general A | C F08 | C F09 | R | R | R | R | C F13 | R |
Las C de Access/carpetas no afirman que una licencia, OS o aplicación tengan proyección Access hoy: requieren **proyección existente** válida de integración access y todas sus reglas. Sin ella se rechazan, no se crea automáticamente por tipo. Esta precisión evita atribuir a Resource una relación directa que realmente apunta a access_items. No se relaja nada por ser el mismo UUID.
RemoteReferences actualmente admite cualquier Resource local como destino, sin filtro usage; la matriz lo conserva expresamente, sin validar como diseño nuevo esa semántica ni ampliar a globales. [remote-connection-policy.ts:6](../../../modules/companies/src/api/application/remote-connection-policy.ts#L6) [access-relational.ts:32](../../../modules/companies/src/api/infrastructure/persistence/access-relational.ts#L32) [folder-mapping-policy.ts:7](../../../modules/companies/src/api/application/folder-mapping-policy.ts#L7).
## 3. Reglas completas y responsable
Los servicios de «candidatos/referencias aplicación» son contratos nuevos propuestos, sin nombre de clase definitivo. Los nombres existentes se distinguen en evidencia.
| Regla | Condición | Servicio/capa responsable |
| --- | --- | --- |
| F01 | Activo de A no retirado; referencia application global elegible o local application/os A; alta/reconfiguración exige activo; pareja abierta única; versión/estado/historia locales | Resources nueva resolución software + SoftwareInstallationUseCases/mapSoftwareInput/policies y repositorio Companies |
| F02 | Perfil, persona y activo de A; perfil/persona activos y activo no retirado; aplicación global elegible o local application A; versión solo installed; pareja abierta única | Resources nueva resolución application + ApplicationConfigurationUseCases/mapApplicationInput/policies Companies |
| F03 | C autorizado; tipo correcto/activo; búsqueda antes de paginar; referencia seleccionada aparte; no completa versión/licencia ni concede permiso | Resources nueva consulta candidatos; UI consumidor valida schema |
| F04 | Manager vigente; raíz scope global; plantilla serie Aplicación global; integración ausente; global inactivo editable/reactivable; no delete ni cambio de ámbito/plantilla | Identity capacidad propuesta + ResourceUseCases/rutas globales futuros en Resources |
| F05 | UUID pertenecía a relación ya encontrada por backend; sigue estructuralmente elegible; lectura/notes/retirada permitida según estado; closed no editable; needsReview derivado solo si abierta | Resolución Resources incluye inactivos + mappers/builders Companies |
| F06 | Sesión/modelo soporte y contexto A; dueño A; plantilla fija, reglas características/integración/proyección, status y delete locales actuales | ResourceInventoryService.list, ResourceUseCases y SequelizeResourceRepository existentes |
| F07 | licenseResourceId opcional local A usage license; al añadir/cambiar activa y expiresOn inclusivo UTC; histórico conserva FK; no calcula cobertura/plazas | softwareReferences/softwareLicenseAvailable y contexto local separado |
| F08 | Existe AccessItem kind resource en workspace de A proyectado por integración access; referencias/periodos/permisos/cuentas/grupos conforme a Access; ningún global producto se proyecta | AccessWorkspace/Access policy + ResourceAccessWriter local, sin nueva resolución mixta |
| F09 | Need local, perfil/persona A, recurso Access con UNC y ámbito válidos, path/cuenta/cobertura según policy; no relación directa FolderMapping→Resource/producto | folderReferences/folderAvailable y folder-mapping-account-policy Companies |
| F10 | Proyección específica resource_network_shares o resource_directory_domains con compañía/template/stockKey correctos; activo y relación local coherentes; historia de publicación/pertenencia permanece local | Lectores públicos NetworkShareReader/DirectoryDomainReader Resources; repositorios Assets propietarios |
| F11 | Perfil A y Resource local usage certificate; actividad/vigencia y ubicación propias de configuración; nunca application global | CertificateConfiguration policy Companies + inventario local |
| F12 | Resource local support, plantilla/override efectivos; activo A y atributos de conexión locales; FK compuesta actual | SequelizeSupportRepository y SupportConnection Assets |
| F13 | Destino Resource local A; persona/origen/activo/sede y autorización teletrabajo según contrato remoto; inactivos provocan revisión/recuperación existentes | remoteReferences/remoteNeedsReview Companies + list local |
| F14 | Proyección mailbox local real; usos/configuraciones por compañía, cuenta/persona/perfil según su contrato; producto global no es buzón | projectResource Resources + Mailbox/MailConfiguration Companies |
[software-installation-policy.ts:5](../../../modules/companies/src/api/application/software-installation-policy.ts#L5) [software-installation-input.mapper.ts:15](../../../modules/companies/src/api/application/software-installation-input.mapper.ts#L15) [application-configuration-policy.ts:5](../../../modules/companies/src/api/application/application-configuration-policy.ts#L5) [application-configuration-input.mapper.ts:11](../../../modules/companies/src/api/application/application-configuration-input.mapper.ts#L11) [software-installation-response.builder.ts:7](../../../modules/companies/src/api/application/software-installation-response.builder.ts#L7) [application-configuration-response.builder.ts:7](../../../modules/companies/src/api/application/application-configuration-response.builder.ts#L7) [resource-inventory.service.ts:7](../../../modules/resources/src/api/application/resource-inventory.service.ts#L7) [resource-compatibility.ts:13](../../../modules/resources/src/api/infrastructure/persistence/resource-compatibility.ts#L13) [directory-domain-reader.ts:19](../../../modules/resources/src/api/infrastructure/persistence/directory-domain-reader.ts#L19) [network-share-reader.ts:22](../../../modules/resources/src/api/infrastructure/persistence/network-share-reader.ts#L22) [sequelize-support.repository.ts:21](../../../modules/assets/src/api/infrastructure/persistence/sequelize-support.repository.ts#L21).
## 4. Referencias, históricos y lectores secundarios
| Consumidor adicional | Local | Global | Regla y responsable |
| --- | --- | --- | --- |
| ResourceRevision y specification/characteristics hijas | P, heredan dueño inmutable | P, heredan ámbito global de raíz | Mapper Resources, FK y snapshots; no endpoint directo a tabla hija |
| Historial SoftwareInstallation de A | H de application/os/licencia A | H solo application | Resolver por propósito software y licencia local separado; historial no modifica Resource |
| Historial ApplicationConfiguration de A | H application A | H application | Resolver por propósito aplicación, sin historial admin |
| Procesos de personas / revisión | C, referencias operativas de A admitidas hoy | C solo a través de ApplicationConfiguration de A que ya usa global | ProcessReviewReader/SequelizeProcessRepository, resolución por lote de usados; no ampliación de targets remotos ni garantía de que el proceso revise software de equipo no soportado hoy |
| Puesto/entorno/ficha activo/perfil | C, datos locales de cada relación | C, nombres/origen de application usados por relaciones de A | API/query consumidores; compactos con estados y contexto; nunca copiar config de B |
| Dashboard de compañía | P, conteos operativos actuales | R como Resource local contado; C nombre de producto usado | ResourceDashboardReader cuenta scope company; los avisos de relaciones pueden resolver global sin contar producto como instalación |
| Dashboard transversal de soporte | C según modelo de acceso actual | C catálogo global separado, sin sumarlo a activos o uso de compañía | Mantener totales consistentes con filas/joins; no nuevo permiso transversal concedido por manage |
| Relaciones tipadas directorio/SMB | C, contexto y capacidad específicos | R para application global | Registry/RelationshipReadAccess y resolutores propietarios conservan contratos |
| Migración legacy Mailbox/Access/Support | C recursos locales de compañía original | R conversión a global | Migración explícita conserva IDs/referencias; no se vuelve mecanismo de adopción |
| Coincidencias/adopción inicial | C lectura local A y global mínimo | C global elegible | Proyección nueva de coincidencias/consulta, sin escritura de vínculos; futuro D08 aparte |
Referencias estructurales inválidas o corruptas no se presentan como H/unavailable en un repositorio que reconstruye datos propios: fallan con diagnóstico interno saneado. Un UUID enviado desde fuera, ajeno o incompatible, sí se responde unavailable de forma uniforme sin identificar compañía/tipo.
## 5. Completitud y efectos indirectos
Esta matriz cubre los consumidores persistidos e indirectos de auditoría 05, incluidas proyecciones de IDs compartidos, ResourceRevision, licencias, Access, carpetas, directorio/SMB, asistencia, remoto, procesos y vistas web. Un nuevo consumidor debe declarar propósito, proyección, política local/global y pruebas antes de usar un servicio mixto; no obtiene acceso por importar un DTO.
El conjunto exacto de tests parametrizados se deriva de cada fila/columna P/R/C/H; T05–T08, T14, T26 y M01 del plan 08 lo exigen. No basta un camino feliz application global. Las C son condiciones conjuntas verificables y ninguna permite local B en A ni proyección global operativa.