# Aplicaciones disponibles por compañía En Recursos, la pestaña **Aplicación** combina el catálogo global con las aplicaciones particulares de la compañía. El origen distingue productos homónimos, sin fusionarlos ni copiar los globales. El resto de pestañas y el inventario particular mantienen sus contratos de compañía. El botón **Añadir aplicación de compañía** abre el formulario existente con la plantilla de aplicación preseleccionada. El servidor guarda el recurso únicamente en la compañía de contexto. Las globales abren su ficha de catálogo; las particulares conservan sus acciones de consulta, edición, activación, desactivación y borrado. `GET /api/resource-application-candidates/:companyId/catalog` exige sesión y valida la existencia de la compañía antes de consultar datos. Devuelve resúmenes públicos de aplicaciones globales y propias, sin notas, historial ni datos de otras compañías. Utiliza los criterios de búsqueda, estado, orden y paginación del catálogo global, con cursor ligado a compañía y filtros. Las plantillas propias con uso `application` también se incluyen; se excluyen sistemas operativos y licencias. La UI utiliza `CursorEntityTable`, mantiene los criterios en la URL y reinicia la página al cambiar búsqueda, orden, estado o tamaño. El proveedor ausente se representa con `—`. Los cambios locales invalidan el catálogo de esa compañía y sus candidatos; los cambios globales invalidan los catálogos combinados. No se guarda una segunda copia del estado remoto. Los selectores existentes `ResourceApplicationSelect` y `SoftwareApplicationSelect` consultan candidatos activos de ambos ámbitos, conservando sus reglas por propósito: configuraciones de perfil solo aceptan aplicaciones; instalaciones admiten además SO locales. Para asociar globales deben estar habilitados `RESOURCE_GLOBAL_CATALOG_ENABLED`, `RESOURCE_GLOBAL_SOFTWARE_ENABLED`, `RESOURCE_GLOBAL_SOFTWARE_CANDIDATES_ENABLED` y `RESOURCE_GLOBAL_PROFILE_ENABLED`, tras migrar el esquema. Consultar no equivale a habilitar asociaciones y las lecturas históricas permanecen disponibles con los gates cerrados. La integración se comprueba con `python3 scripts/resource-scope-test.py --catalog`, `--software` y `--profiles`. El recorrido de interfaz se reproduce mediante `python3 scripts/visual-audit.py --company-applications --check`: utiliza exclusivamente una instalación desechable `metis_desk_test`, con 15 compañías, al menos 50 personas, activos, perfiles, puestos y aplicaciones propias en la principal, y 60 aplicaciones globales. No utiliza datos reales ni credenciales del entorno habitual. Skills consultadas: `ux-tables` para procedencia, acciones y paginación; `shadcn` para integrar los componentes instalados; `rdx-solid` para contratos, aislamiento y pruebas; `vercel-react-best-practices` para derivar datos y mantener el estado remoto en TanStack Query. Los auditores especializados no están instalados; las verificaciones disponibles se realizan mediante Playwright MCP, sin instalar dependencias adicionales. ## Verificación de la entrega - Typecheck dirigido de Resources, Server y Companies: correcto. - Biome y ESLint sobre los archivos del cambio, sintaxis Python y `git diff --check`: correctos. - Pruebas de Resources: 105 correctas. Prueba de rutas: correcta. - Integraciones desechables: catálogo 12, software 13 y perfiles 11 comprobaciones correctas. - Playwright MCP: alta local desde el formulario, aislamiento entre compañías, búsqueda, paginación, vacío, error/reintento, selectores de software y perfil, Escape y retorno del foco. Cuatro anchos: 1440, 1280, 768 y 390 px; capturas amplias y estrechas inspeccionadas. Informe reproducible: `.artifacts/playwright/authenticated-dhutc3tz/company-applications-report.json`. - `pnpm build`: correcto; se conserva el aviso de tamaño de chunks. - `pnpm typecheck` global: bloqueado por el tipo opcional `locale` de `packages/shadcn-ui/src/components/calendar.tsx`, fuera del alcance y vendor. - `pnpm test` completo, sobre una base desechable: falla en las aserciones de textos de compañía/persona de `companies-page.test.tsx`, ajenas a los recursos de aplicaciones. - `pnpm lint` y `pnpm check` globales: fallos de estilo en código concurrente de fotos de personas y procesos de Companies. No se han modificado esos archivos para esta tarea. En la instalación habitual se han habilitado los gates existentes y reiniciado el entorno. La comprobación final de solo lectura en Abeto Design devuelve las 40 aplicaciones globales y mantiene sus 107 buzones. No se han creado aplicaciones de prueba en la base habitual.