Skip to main content
El proyecto local es la fuente de verdad del código. Esta guía también sirve como fuente para la actualización del artículo de Desarrollo en Chatwoot. Los cambios descritos están implementados localmente; su publicación no implica que se hayan desplegado en producción.

Aplicaciones y acceso

apps/frontend presenta el registro público en app.venezuelateayuda.com. El panel y sus callbacks de autenticación viven en admin.venezuelateayuda.com. Los enlaces administrativos publicados redirigen a ese dominio; el Service Binding ADMIN se conserva para el desarrollo local. Los formularios de coordinación están retirados. Frontend y admin consultan apps/backend mediante BACKEND. Backend valida la sesión original, los permisos y el alcance de organización o sede. Los campos del navegador y las cabeceras de identidad no sustituyen esas comprobaciones. Backend es el único propietario de D1, R2, secretos, correo, webhooks, cron y Workflows. Marketing sirve el sitio estático y conserva enlaces antiguos mediante redirecciones y Service Bindings al frontend y a la API pública. No accede a D1 ni a los secretos de proveedores.

Alcance del panel administrativo

El panel conserva personas, familias, contactos y organizaciones. Se retiraron calendario, solicitudes, inventario, pedidos, entregas, centros y colocaciones, incluidos sus paquetes, pantallas y operaciones. Las rutas retiradas, /forms/C36PV1U4, /forms/DU2INZQ4 y /delivery/:token devuelven 404. El Inbox oculta notificaciones de coordinación; sus registros siguen almacenados. Este retiro no modifica la base de datos, el esquema, las migraciones ni los registros históricos. Se conservan temporalmente como respaldo. Las asignaciones históricas de centros siguen limitando acceso a los registros de CRM. Las familias nuevas no crean colocaciones; cambiar miembros tampoco altera colocaciones antiguas. La persistencia y autenticación de claves API pertenecen a apps/backend/src/api-keys; solo las definiciones de permisos compartidas viven en packages/auth/constants. Los enlaces de atribución viven en packages/utils/links. No existen paquetes separados api-keys ni links.

Importación y fuentes

La carga CSV mantiene sus formatos y validaciones documentados en Importar listas de personas. La aplicación administrativa presenta el formulario; backend autoriza la operación, almacena el archivo y coordina su Workflow. Las credenciales de fuentes externas no se incluyen en los ejemplos ni se crean durante el setup. La sincronización automática desde Venezuela Te Cuida y Pacientes Terremoto está retirada. No requiere credenciales nuevas ni debe reactivarse con el cron. Se mantienen las importaciones manuales autorizadas y el historial existente. packages/ingestions conserva la planificación, validación, reconciliación y estado de ejecuciones. Los adaptadores específicos conservan sus cursores, conteos del proveedor y reglas de reintento. El registro de fuentes sigue en packages/ingestions/src/registry.ts. Desactivar una programación conserva el perfil y el historial de la fuente. El adaptador histórico de Venezuela Te Cuida mantiene marcas separadas para pacientes e ingresos y vuelve a consultar un solapamiento de cinco minutos. Las filas malformadas no bloquean las páginas posteriores. La deduplicación por identidad de fuente evita crear otra persona al reprocesar un registro conocido.

Duplicados, historial y notificaciones

packages/duplicates decide coincidencias, revisiones y fusiones. Las fusiones conservan su lote SQL atómico, los conflictos de identidad y fecha de nacimiento, y el historial de las entidades relacionadas. Backend comprueba los permisos y registra la auditoría. El orden de candidatos incluye un identificador único para que los empates sean reproducibles. Las lecturas de dominio usan páginas acotadas y orden estable. Cuando una respuesta existente necesita una colección completa, backend recorre sus páginas; no presenta solamente la primera página. La agrupación del historial de fuentes ocurre después de reunir las páginas. Las notificaciones conservan todos los destinatarios elegibles. La creación usa sentencias compatibles con el límite de parámetros de D1 dentro de un mismo lote atómico. La reclamación, reintento y envío del correo siguen siendo responsabilidades distintas; crear una notificación no garantiza su entrega. El cron de backend inicia únicamente la revisión de duplicados y la recuperación de notificaciones por correo. Son tareas independientes: un fallo al iniciar la revisión de duplicados no impide recuperar correos. Tras la conciliación de datos, solo el backend nuevo ejecuta estas tareas cada 15 minutos. El cron del Worker antiguo permanece desactivado; el cambio no reactiva fuentes externas.

Desarrollo y publicación

bun run dev carga Doppler y ejecuta las migraciones locales antes de iniciar frontend y admin. Se accede a ambas aplicaciones por localhost:5173. La persistencia local existente se conserva; no hay sincronización automática con otro equipo. Los 105 archivos SQL originales permanecen intactos. Un build no aplica migraciones de producción. La primera publicación requiere coordinar los Workflows activos y un único propietario del cron, configurar backend y publicar backend, admin y frontend en ese orden. Véase Service Bindings para los contratos y prerrequisitos.

Contacto canónico de personas

La migración 0101_drop_person_reporter_fields.sql rellena los datos de contacto canónicos que faltan y elimina las columnas antiguas persons.reporter_*. Conserva los valores canónicos existentes. Los escritores de ingesta y las semillas escriben únicamente contact_person_*; no existe escritura duplicada. Los campos del autor de un reporte en la tabla reports se mantienen. Ejecuta las migraciones locales antes de arrancar esta versión contra un estado persistido anterior. La migración de producción se ejecuta en el despliegue autorizado.