Expediente del caso

IA Licita

Simbolo de la marca de la edicion del caso
Simbolo de la marca de la edicion del caso
Periodo
2024-09 — presente
Estado
active
Visibilidad
private
Stack
Odoo 17, Python, pandas, OCA queue_job, Telegram
  • technology:odoo
  • technology:python
  • technology:pandas
  • architecture:plugin
  • domain:procurement
  • domain:tenders

Evidencias · IA-LICITA


En producción

  • SaaS en produccion en ialicita.com

Métricas

  • 8 modulos Odoo custom
  • ~4400 lineas de Python
  • 177 commits
Plataforma SaaS multi-modulo sobre Odoo 17 para inteligencia de licitaciones publicas. Ingiere licitaciones desde hojas Excel y APIs (Socrata de la Generalitat de Catalunya), normaliza los registros y los expone en un portal cliente con busqueda avanzada, mercados guardados, notificaciones por email e informes PDF/HTML/XLSX. Arquitectura de datos extensible con el patron `AbstractDataSource`/`AbstractImporter` y un `APIClient` generico con retry y rate limiting. Dominios de busqueda reutilizables (`get_domain`/`advanced_search_domain`) serializados en JSON y compartidos por portal, notificaciones e informes. Importacion Excel en lotes de 2.500 filas con colas asincronas OCA `queue_job` y bot de Telegram anexo.

Expediente del caso

Motivación

Las licitaciones publicas llegan en formatos dispares: hojas Excel, portales de datos abiertos y APIs. Un equipo comercial necesita cruzarlas, buscarlas y no perderse ninguna apertura. La motivacion fue construir un SaaS que normalice esas fuentes en un unico portal con alertas e informes, en lugar de seguir pegando datos en hojas.

El reto

El reto no era un solo conector, sino hacer crecer el numero de fuentes sin reescribir el resto del sistema. Cada origen tiene su esquema, su paginacion y sus limites de rate limit. Ademas, un mismo dominio de busqueda debia alimentar al portal, a las notificaciones por email y a los informes sin triplicar la logica.

Enfoque

La solucion fue un patron de plugin: `AbstractDataSource`/`AbstractImporter` define el contrato y cada fuente (Excel, Socrata, API) aporta su implementacion. Un `APIClient` generico centraliza retry y rate limiting. Los dominios de busqueda se serializan en JSON y se comparten por portal, notificaciones e informes. La importacion masiva de Excel va en lotes de 2.500 filas por colas OCA `queue_job`.

Aprendizaje

Un patron de plugin bien definido permite sumar fuentes de datos sin tocar el nucleo. Serializar los dominios de busqueda evito triplicar la logica de filtrado y mantuvo coherentes portal, alertas e informes. Las colas asincronas convierten una importacion que bloquea en un proceso que avisa por Telegram cuando termina.

Estado actual

Activo y en produccion en ialicita.com. El producto suma 8 modulos Odoo custom, alrededor de 4.400 lineas de Python y 177 commits. La linea de trabajo sigue abierta: nuevas fuentes de datos, informes y canales de notificacion.