{
  "schemaVersion": 1,
  "id": "pipila",
  "language": "es",
  "canonical": "https://paynalton.tech/es/proyectos/pipila/",
  "title": "Pipila",
  "summary": "Pipila nació para resolver una migración urgente y terminó convirtiéndose en una solución de integración reutilizable. Construí una API modular que separa la interfaz del procesamiento, conserva registros pendientes ante fallos externos y permite incorporar nuevos flujos sin depender de la plataforma anterior.",
  "role": "Creación de la solución inicial; mantenimiento actual como único desarrollador, con apoyo de IA.",
  "operationalStatus": "En operación y evolución.",
  "startLabel": "Aproximadamente 2023.",
  "technologies": [
    "Node.js",
    "SailsJS",
    "OIDC"
  ],
  "body": "## Contexto y problema\nUn sitio necesitaba migrar desde una plataforma obsoleta, pero conservaba una fuerte dependencia de un servicio que recibía formularios y enviaba los datos a un concentrador. Cambiar formularios o modificar el flujo exigía mucho trabajo. Además, las caídas del concentrador se propagaban a los sitios: los usuarios recibían errores y podían perderse los registros.\n\nLa intervención debía atender una emergencia y, en principio, ser temporal. Por experiencia sabía que una solución provisional podía permanecer durante años. Por eso preparé una base capaz de crecer mientras resolvía la necesidad inmediata.\n\n## Mi participación\n\nCreé prácticamente toda la solución inicial, utilizando SailsJS para la API y Node.js para el resto de los componentes. Cuando se extendió a nuevos mercados y funciones, otros desarrolladores aportaron cambios. Actualmente soy el único desarrollador que mantiene el sistema, apoyándome en IA para el trabajo de desarrollo.\n\n## Solución y decisiones\n\nOrganicé Pipila como un sistema modular. Separé el procesamiento asíncrono en workers para facilitar los cambios de flujo y trasladé la configuración adecuada a variables de entorno, de modo que la solución pudiera adaptarse a nuevos entornos sin reconstruirse desde cero.\n\nLa decisión principal fue desacoplar la recepción de registros de la disponibilidad del concentrador. Cuando este falla, Pipila conserva los registros como pendientes y realiza reintentos periódicos hasta que se recupera. Una caché interna ayuda a mantener la atención al cliente durante esas interrupciones. La interfaz deja así de depender directamente de cada respuesta del servicio externo.\n\nCon el tiempo se incorporaron dos nuevos concentradores, control de sesiones y flujos de inicio de sesión mediante OpenID Connect (OIDC). Esa evolución conserva el propósito original: facilitar cambios e integraciones sobre una base que pueda adaptarse.\n\n## Resultados\n\nLa solución facilitó la salida gradual de la plataforma anterior y dio mayor flexibilidad al desarrollo de experiencias de usuario. Observé una disminución del esfuerzo y costo de desarrollo y una reducción importante de las caídas de servicio. Son resultados cualitativos de la operación; no dispongo aquí de una medición publicada que permita expresarlos como porcentajes.\n\n## Aprendizaje\n\nResolver una urgencia también exige pensar en lo que ocurrirá después. La modularidad, la configuración y la separación del procesamiento permitieron que una intervención temporal evolucionara sin perder su propósito inicial.\n",
  "relations": [
    {
      "kind": "during",
      "id": "sodigital",
      "title": "SoDigital",
      "url": "https://paynalton.tech/es/trayectoria/#sodigital"
    },
    {
      "kind": "demonstrates",
      "id": "integracion-de-sistemas",
      "title": "Integración de sistemas",
      "url": "https://paynalton.tech/es/temas/integracion-de-sistemas/"
    },
    {
      "kind": "demonstrates",
      "id": "tecnologia-node-js",
      "title": "Node.js",
      "url": "https://paynalton.tech/es/temas/tecnologia-node-js/"
    },
    {
      "kind": "demonstrates",
      "id": "tecnologia-oidc",
      "title": "OIDC",
      "url": "https://paynalton.tech/es/temas/tecnologia-oidc/"
    },
    {
      "kind": "demonstrates",
      "id": "tecnologia-sailsjs",
      "title": "SailsJS",
      "url": "https://paynalton.tech/es/temas/tecnologia-sailsjs/"
    },
    {
      "kind": "demonstrates",
      "id": "procesamiento-asincrono",
      "title": "Procesamiento asíncrono",
      "url": "https://paynalton.tech/es/temas/procesamiento-asincrono/"
    }
  ]
}
