Reglas de texto compartidas por las aplicaciones propias de APS Conecta, enunciadas una sola vez: el dialecto CSV (Csv), la familia de plegado y slugs (Text y su mitad JS en js/), la postura de rechazo (Refusal/Refuses) y la única forma del error en el cliente (js/api.js).
Una biblioteca de Composer, no una aplicación: no tiene appinfo, rutas ni base de datos, y no depende de ninguna clase OCP salvo un trait deliberadamente ligado a OCP, que la batería de pruebas del propio paquete nunca carga. Todo lo que contiene es idéntico byte a byte por doctrina: código que dos aplicaciones, de otro modo, copiarían y adaptarían hasta que las copias divergieran.
Una regla pertenece aquí cuando dos o más aplicaciones deben coincidir en su comportamiento y una divergencia rompe en silencio búsquedas o viajes de ida y vuelta: el dialecto CSV de es-CL, el plegado de acentos, los slugs, la neutralización de fórmulas y la forma del mensaje de error. Las formas propias de cada aplicación no se mueven: la exportación con pérdida de territorio y la planilla de ida y vuelta de farmacia son distintas a propósito.
La explicación completa —las cuatro superficies, el contrato de rechazo, la distribución y el cerco— vive en el sitio de documentación, en aps-common. Dentro de este repositorio quedan solo los documentos que viajan con el código:
CONTEXT.md: el vocabulario (las cuatro superficies y los términos de la doctrina), en inglés.docs/adr/0001-committed-subtree-is-the-distribution.md: por qué el subárbol versionado, y no una publicación, es la distribución.src/yjs/: la API pública. El código fuente es la API; las firmas no se repiten en ningún documento.CHANGELOG.md: qué cambió y cuándo.
Los números de ADR son direcciones: una decisión nunca se elimina, y la que la reemplaza la enlaza hacia adelante.
Estable, y consumido por las cuatro aplicaciones propias: territorio, farmacia y estadistica usan las cuatro superficies mediante sus subárboles versionados, y epidemiologia usa solo la mitad JS (src/aps/). Lo que hay aquí está terminado y verificado; nada es especulativo. Es la primera dependencia de Composer en tiempo de ejecución de la organización, y se distribuye por subárbol versionado, no por una publicación en Packagist.
Un cambio incompatible tiene exactamente ese alcance: las compuertas aps-drift de territorio, farmacia y estadistica se ponen en rojo hasta que cada una vuelve a sincronizar y confirma (la integración continua de epidemiologia no tiene paso de deriva). Ese es el cerco: el paquete no puede avanzar sin que avancen sus consumidores.
- Clonar el repositorio como hermano de las copias de trabajo de las aplicaciones: sus objetivos de sincronización resuelven el paquete en
../aps-common. - Verificar la batería propia en verde con el objetivo
testdel Makefile (un contenedor PHP básico, igual que las aplicaciones; no requiere Nextcloud). La mitad JS se prueba connode --test js/*.test.js; su corpus de conformidad lo comparten las baterías vitest de las aplicaciones. La integración continua (.github/workflows/ci.yml) ejecuta ambas en cada pull request.
Para consumirlo desde una aplicación: un repositorio de tipo ruta de Composer que apunte a la copia hermana, un require de aps/common, y el subárbol vendor/aps/common/src confirmado en la aplicación (justificación en el ADR 0001). vendor/autoload.php no se confirma: el Application.php de cada aplicación registra un pequeño cargador PSR-4 para APS\Common\. El piso es PHP ^8.1, porque territorio fija config.platform.php 8.1 y un piso mayor haría el paquete no instalable allí.
Tras editar el paquete, ejecutar el objetivo aps-sync de cada aplicación (copia src/ a vendor/aps/common/src/, el stub a tests/stubs/ y js/ a src/aps/) y luego su objetivo aps-drift, que prueba que el subárbol confirmado es igual al paquete.
AGPL-3.0-or-later (ADR-0010 de gestion): la obligación viene de lo que enlazan las aplicaciones, no de una elección de este paquete. No tiene dependencias de ejecución más allá de PHP ^8.1, así que no hay avisos de terceros que atribuir; los avisos y licencias de la organización viven en Aviso y licencias.