CRM para control de plagas
Capturas
Puntos clave
-
Cada estación de control lleva una etiqueta con código QR. El técnico la escanea y registra en sitio el hallazgo (por ejemplo, el consumo del cebo), el estado del dispositivo, las plagas encontradas y una fotografía. El reporte no se puede firmar mientras falte una estación del servicio.
-
Cuando firman el cliente y el técnico, el sistema genera el PDF con el formato de la empresa y lo archiva sin cambios: es la evidencia que se presenta en una auditoría. Si el cliente es persona moral y se aplicaron productos, también emite el certificado de control de plagas con la firma del propietario.
-
Integré la API de WhatsApp Cloud de Meta para enviar una plantilla al cliente cuando se firma su reporte, y Google Maps para ubicar en el mapa las direcciones de los clientes y abrir la ruta desde el teléfono del técnico.
-
La app de campo, hecha con Expo y React Native, permite terminar el reporte completo sin señal: guarda cada paso en el teléfono y lo envía sola cuando vuelve la conexión, sin duplicar reportes ni cobros.
-
La oficina tiene agenda por mes, semana, día y técnico, clientes con sus direcciones y estaciones, cotizaciones en PDF, servicios recurrentes, ingresos y cuentas por cobrar, y estadísticas de plagas y tendencias de estaciones.
Problema
En una auditoría sanitaria, una empresa de control de plagas tiene que demostrar qué pasó en cada visita: qué estaciones se revisaron, qué se encontró, qué producto se aplicó y quién firmó. El reporte de servicio era el formato impreso de la empresa y el certificado de control de plagas se expedía a mano. Además, los técnicos trabajan en bodegas y sótanos donde la señal se pierde.
Solución
Una sola API en FastAPI atiende a una web con tres vistas y a una app móvil. En la oficina se agenda, se lleva la cartera de clientes con sus direcciones y estaciones, se cotiza y se da seguimiento a los cobros. En campo, el técnico abre su jornada, escanea el QR de cada estación y completa el reporte en cuatro pasos: estaciones, productos aplicados, evidencias y firmas del cliente y del técnico. Al firmar, el sistema archiva el PDF, emite el certificado cuando corresponde y avisa al cliente por WhatsApp. En el portal, cada cliente consulta sus servicios, sus próximas visitas, sus estaciones y sus certificados.
Decisiones técnicas
- FastAPI es la única puerta a los datos: ni el navegador ni la app hablan con Supabase, y las fotos, firmas y PDF se sirven a través de la API.
- Los permisos se asignan por capacidad y no por rol. Cada endpoint declara la que exige, y un registro fuera del alcance del usuario responde 404 para no revelar qué clientes existen.
- Un reporte firmado no se edita: el PDF se archiva al momento de firmar y no se vuelve a generar con catálogos que pudieron cambiar después.
- Se desarrolla contra un Supabase local en Docker con datos anonimizados. El backend, la web y la app se niegan a arrancar en desarrollo si apuntan a producción.
Manejo de fallas
- El aviso por WhatsApp corre en segundo plano después de responder: si falla, el reporte queda firmado igual. Solo reintenta, hasta tres veces, los errores transitorios.
- En la app de campo, cada acción entra a una cola en SQLite. El cierre del reporte y la declaración de pago llevan una llave generada en el teléfono, así que reenviarlos tras perder la respuesta no crea un segundo reporte ni un segundo ingreso.
- Si el servidor rechaza un envío, nada se borra: queda en «Requiere atención» con el motivo, y el técnico decide si lo reintenta, lo corrige o lo descarta.
Mi rol
Desarrollo el proyecto solo, de punta a punta. Diseñé la base de datos en Supabase (PostgreSQL) y la mantengo con migraciones versionadas; construí la API en FastAPI, organizada por módulos de negocio; implementé la web en React, TypeScript y Material UI a partir de un prototipo en Figma, y la app de campo con Expo y React Native. Integré WhatsApp Cloud API y Google Maps, configuré el despliegue en Render y escribí más de mil pruebas automatizadas para el backend.
Resultado
- El cliente contrató también el mantenimiento.
Siguientes pasos
Compilar y probar la app en iOS, hacer que la cámara del teléfono abra la app al escanear una etiqueta (hoy abre la web) y construir el módulo de egresos.
Código privado por confidencialidad con los clientes; capturas, arquitectura y demostración disponibles a solicitud.