ABE BIYOSIDAL · 2020 – ACTUALIDAD
Sistema de equipos de campo Biocidal
Software multi-tenant basado en SIG para gestionar equipos de campo, que reúne en un solo sistema el control de plagas y vectores de ayuntamientos y empresas privadas de control de plagas, desde el aviso de un vecino hasta el cierre al final del día. Lo utilizan varios ayuntamientos.
Mi función: Arquitectura de software: diseñé la arquitectura desde cero y dirijo el desarrollo desde 2020.
- en producción desde
- 2020
- datos separados por organización
- Multi-tenant
- consultas espaciales
- PostGIS
- ayuntamientos lo utilizan
- Varios
El problema
En el control de vectores, el trabajo se reparte en muchos pasos: llega la queja de un vecino, se convierte en una orden de trabajo, un equipo de campo realiza el tratamiento, el producto utilizado se descuenta del inventario y, por último, se preparan los informes que exige el pliego de la licitación.
Si esos pasos están en sitios distintos, es difícil responder a la pregunta “¿qué equipo usó qué producto, dónde y en qué cantidad?”, y las inspecciones y los informes llevan días.
Arquitectura
Panel de administración
- Angular
Mapa
App de campo
- React Native
Móvil
API GraphQL
- GraphQL Yoga
- WebSocket
Datos en vivo y suscripciones
Base de datos
- PostgreSQL
- PostGIS
Datos por tenant
Caché
- Redis
Eventos en tiempo real
Las notificaciones funcionan en dos capas: mediante una suscripción WebSocket mientras la app está abierta, y por push, SMS y correo electrónico cuando está cerrada.
Lo que he construido
Trabajo de campo
El ciclo aviso → orden de trabajo → tratamiento in situ → cierre del día; las órdenes de trabajo avanzan por una máquina de estados.
Inteligencia espacial
Zonas de responsabilidad, planificación de rutas y asignación punto en polígono que determina en qué zona cae una ubicación, con PostGIS.
Inventario y coste
Seguimiento por lotes, salida por fecha de caducidad (FEFO) y valoración según primero en entrar, primero en salir (FIFO).
Entrega a equipos y conciliación
Los productos entregados a un equipo quedan a nombre de ese equipo; el inventario se descuenta cuando se aprueba el tratamiento in situ.
Permisos y auditoría
Permisos dinámicos por módulo y acción; un registro de quién cambió qué y cuándo.
Informes y notificaciones
Informes por provincia y distrito; notificaciones en la app, push, SMS y correo electrónico.
Problemas difíciles que he resuelto
- 1
Añadir multi-tenancy a un sistema en producción
Añadí el aislamiento de datos por organización a un esquema que ya estaba en producción. Las consultas sobre tablas ligadas a un tenant se filtran automáticamente en la capa de datos, de modo que un filtro olvidado por un desarrollador no provoca una fuga de datos.
- 2
Valoración del inventario
Para lotes del mismo producto con precios y fechas de caducidad distintos, la salida se calcula según FEFO y el coste según FIFO; el consumo en campo se asocia al lote y al coste correctos.
- 3
Migración de la capa de datos en producción
Mientras el sistema estaba en uso, se sustituyeron el ORM y el enfoque del esquema GraphQL; las definiciones del esquema están ahora en archivos SDL escritos a mano.
Tecnologías
- Angular
- TypeScript
- GraphQL
- Node.js
- Prisma
- PostgreSQL
- PostGIS
- Redis
- Firebase
Servicios relacionados
¿Está construyendo un sistema similar? Podemos trabajar juntos desde la arquitectura hasta la puesta en producción.
Contactar