# 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.