CMMS gratuito y open source para gestionar el mantenimiento preventivo y correctivo de tu planta, taller o flota, desde PC y Android.
En muchos talleres y plantas pequeñas o medianas, el mantenimiento se lleva entre papeles, un Excel compartido y mensajes de WhatsApp. Funciona, hasta que alguien necesita saber qué se le ha hecho a una máquina en concreto, quién lo hizo, cuándo y con qué material, y esa información está repartida entre tres sitios distintos (o en ninguno).
MantPro centraliza eso: cada técnico registra su intervención desde el móvil, en el momento, con fotos de antes y después si hace falta, y todo queda ordenado en el PC por máquina, por fecha y por persona, listo para consultarlo o sacar un informe en PDF.
Pensado para quien lleva el mantenimiento del día a día, no para departamentos de IT: técnicos de mantenimiento, responsables de planta, talleres, PYMEs industriales y encargados de almacén que necesitan un control real de máquinas, intervenciones y stock sin depender de hojas de cálculo sueltas.
- Open source y gratis: código abierto bajo AGPL-3.0, sin límite de técnicos, máquinas o registros
- Sin suscripción: no se paga por usuario ni por mes de uso
- Tus datos, en tu infraestructura: la base de datos vive en tu propio PC; no dependes de que un servicio en la nube de terceros siga existiendo el año que viene
- Offline de verdad: el móvil funciona sin conexión a internet ni al PC durante toda la jornada, y sincroniza en cuanto vuelve a haber red
- Hecho desde el propio mantenimiento: las funciones han ido saliendo de necesidades reales de taller (fotos de antes/después, vínculo a máquina, stock de recambios, avisos recurrentes...), no de una lista de requisitos genérica de CMMS
MantPro_Video.webm
- ¿Qué problema resuelve?
- ¿Para quién es?
- ¿Por qué MantPro?
- Vídeo de demostración
- Capturas de Pantalla
- Descargas
- Características
- Requisitos
- Instalación
- Uso
- Usuarios y Acceso
- Maquinaria
- Stock de Almacén
- Sincronización PC-Móvil
- Copias de Seguridad
- Estructura del Proyecto
- Contribuir
- Roadmap
- Licencia
- Contacto
Puedes descargar las versiones precompiladas desde GitHub Releases:
- Windows: Ejecutable
.exepara Windows - Linux:
- Binario ejecutable de Linux
- AppImage portable
- También disponible en AUR (Arch User Repository)
- Android: Archivos
.apkpara instalación directaMantPro.apk: app de trabajos de mantenimientoMantProStock.apk: app de stock de almacén
- 👥 Gestión de Usuarios: Login con usuario y contraseña, roles de administrador y técnico, alta y baja de usuarios, y restablecimiento de contraseñas
- ✍️ Autoría de los Trabajos: Cada intervención guarda quién la realizó, visible en el historial y en los informes
- 🔒 Permisos por Registro: un técnico solo puede editar o borrar sus propios trabajos; un administrador puede gestionar cualquiera, incluida la reasignación del autor de uno o varios registros a la vez
- 📋 Auditoría de Cambios: registro de quién edita o borra cada trabajo (no solo quién lo creó), consultable y filtrable por técnico y por tipo de acción desde "Registro de cambios" (solo administradores)
- 🔐 Sesiones de Dispositivos: lista los móviles vinculados a cada usuario, con su modelo real, y permite revocar una o varias sesiones concretas sin desactivar al usuario entero (solo administradores). Al volver a iniciar sesión desde el mismo dispositivo, su sesión anterior se sustituye automáticamente en vez de acumularse
- 📊 Dashboard con KPIs y Gráficos: tarjetas de avisos pendientes, tareas por hacer, registros del mes y MTBF/MTTR medios de toda la planta, más gráficos de máquinas con más averías y de averías por mes, dibujados sin depender de librerías externas
- 🎨 Temas Visuales: elige entre modo oscuro (por defecto), claro o un estilo retro inspirado en Windows 98, desde el menú "Apariencia"
- 📅 Calendario Interactivo: Visualiza y gestiona tareas de mantenimiento con códigos de color (festivos, vacaciones, días con tareas)
- 📝 Historial Completo: Registro histórico de todas las intervenciones realizadas, con fotos antes/después
- 📄 Reportes PDF: Generación automática de informes profesionales con logo personalizable
- 📸 Gestión de Imágenes: Almacenamiento y visualización de fotos de intervenciones
- 📱 Sincronización Móvil: Servidor integrado (arranca automáticamente) para sincronización con la app móvil vía QR
- 🔍 Sistema de Búsqueda: Búsqueda avanzada por fechas, tags y contenido
- 👤 Filtro por Técnico: Filtra el historial y las exportaciones (PDF, CSV y Excel) por la persona que hizo el trabajo
- 📦 Backup/Restore: copia manual completa (BD + fotos) eligiendo dónde guardarla, backup automático incremental al cerrar la app (ver Copias de Seguridad), y restauración con barra de progreso, con submenú
Archivo > Restaurarpara elegir entre un backup manual cualquiera o ir directo a las copias automáticas - 🏷️ Sistema de Tags: Categorización con etiquetas (Urgente, Eléctrico, Mecánico, Preventivo)
- 🔨 Tareas Pendientes: Gestión de trabajos pendientes (crear, completar, editar, eliminar) y asignación a un técnico concreto
- ↩️ Revertir a Pendiente: si un trabajo se completó por error, se puede devolver a Pendientes con un clic desde el historial (con aviso si tenía máquina vinculada, ya que se perdería ese dato), quedando registrado en la auditoría
- 🔁 Recordatorios: Avisos de mantenimiento que se repiten automáticamente
- 📦 Control de Stock de Almacén: Estructura de estanterías, baldas y secciones configurable, ficha de materiales con foto, entradas/salidas con historial y alertas de stock bajo mínimo
- 🏭 Control de Maquinaria: Árbol de máquinas y submáquinas con foto adjunta, contador de trabajos por año y mes, y vínculo directo desde cada trabajo registrado o editado (ver Maquinaria)
- 📊 Exportación: A PDF, CSV y Excel, con filtro opcional por técnico e indicando la máquina/submáquina de cada trabajo, si la tiene
- 🔐 Acceso con Usuario: Cada técnico inicia sesión una vez y la sesión queda guardada en el dispositivo
- 📝 Registro Rápido: Captura de intervenciones sobre el terreno, firmadas automáticamente con su usuario
- 📷 Cámara Integrada: Toma de fotos y edición con anotaciones
- ✏️ Editor de Imágenes: Dibuja sobre las fotos para marcar áreas de interés
- 🔄 Sincronización Automática: Envío automático de datos al PC mediante código QR
- 💾 Almacenamiento Local: Guarda registros offline hasta sincronizar
- 📋 Trabajos Pendientes: Visualiza y gestiona tareas asignadas desde el PC, con filtro "Solo míos"
- 🔄 Puesta al Día al Abrir: Al arrancar, la app sincroniza en segundo plano los datos de todas las pestañas
- 🔁 Resincronizar a Mano: Las pestañas Pendientes, Historial y Recordatorios tienen su propio botón para reenviar de inmediato lo que el móvil tenga y el PC todavía no
- ↩️ Revertir a Pendiente: manteniendo pulsado un registro del Historial se puede devolver a la pestaña Pendientes si se completó por error
- 🏷️ Tags Rápidos: Sistema de etiquetado rápido con checkboxes
- 🔌 Modo Offline: Trabaja sin conexión y sincroniza cuando estés disponible
- ⏰ Recordatorios Diarios: Notificación automática a las 8:00 AM (hora local) si hay trabajos pendientes sin completar
- 🧰 Material Usado: Añade al trabajo el material del almacén que has empleado, buscándolo por nombre o código; se descuenta solo del stock al guardar (ver Material usado en un trabajo)
- 🏭 Vincular Máquina: Selecciona en un desplegable la máquina o submáquina en la que se ha hecho el trabajo, tanto al crear un registro nuevo como al editar uno ya sincronizado del historial
Aplicación independiente (mantpro_stock_app), pensada para consultar y mover
stock de almacén desde el móvil sin necesidad de la app de trabajos.
- 🔐 Acceso con Usuario: usa el mismo sistema de usuarios y sesión que la app de trabajos
- 🗂️ Navegación del Almacén: árbol de estanterías > baldas > secciones, igual que en el PC
- 🔎 Búsqueda de Materiales: por nombre, código, descripción o ubicación
- ➕➖ Entradas y Salidas: registra movimientos de stock desde el móvil, con motivo opcional
- 🔀 Traslados: mover un material de sección queda reflejado en su historial de movimientos
- 🎨 Aviso Visual de Stock: cantidad en rojo por debajo del mínimo, en verde por encima y en el color por defecto si coincide exactamente
⚠️ Stock Bajo Mínimo: pestaña dedicada a los materiales en alerta- 🔄 Auto-actualización: la pantalla se refresca sola al detectar cambios, tanto si el cambio se hizo en el propio móvil como en el PC
- 🔌 Modo Offline: consulta con la última información sincronizada si no hay conexión con el PC
- 🔔 Recordatorio Diario de Comprobación de Stock: notificación automática a las 8:00 AM (hora local) invitando a revisar la cantidad real de 5 materiales del almacén, elegidos al azar y distintos cada día; al pulsarla se abre una pantalla para corregir la cantidad de cada uno sin buscarlos a mano. Si no hay ningún material dado de alta, no se muestra ninguna notificación
- Python: 3.8 o superior
- Sistema Operativo: Windows o Linux
- Dependencias Python:
- PyQt6
- Flask
- ReportLab
- qrcode
- requests
- xlsxwriter
- sqlite3 (incluido en Python)
Aplica tanto a mantenimiento_app (trabajos) como a mantpro_stock_app (stock):
- Flutter: 3.0 o superior
- Dart SDK: 2.17 o superior
- Android: API Level 21+ (Android 5.0+)
Descarga la versión correspondiente a tu sistema desde GitHub Releases:
- Windows: Descarga y ejecuta el
.exe - Linux:
- Descarga el binario ejecutable y dale permisos de ejecución:
chmod +x mantpro - O usa el AppImage (sin instalación):
chmod +x MantPro.AppImage && ./MantPro.AppImage - Los paquetes
.deby.rpmestán firmados digitalmente con GPG (ver Verificar la firma de los paquetes) - Arch Linux: Disponible en AUR:
yay -S mantprooparu -S mantpro
- Descarga el binario ejecutable y dale permisos de ejecución:
Los paquetes .deb y .rpm publicados en cada release están firmados con la clave GPG oficial de AnabasaSoft. Para verificarlos antes de instalar:
-
Descarga la clave pública del repositorio (
firma/anabasasoft_public.asc) a un fichero (no usescurl | rpm --import -, algunas versiones derpmno admiten leer la clave por la entrada estándar y fallan confalló la lectura para importar):curl -sL https://raw.githubusercontent.com/AnabasaSoft/MantPro/main/firma/anabasasoft_public.asc -o /tmp/anabasasoft_public.asc
-
Importa la clave (solo hace falta una vez por equipo):
# Fedora, openSUSE, RHEL... (paquete .rpm) sudo rpm --import /tmp/anabasasoft_public.asc # Debian, Ubuntu... (paquete .deb, requiere dpkg-sig) gpg --import /tmp/anabasasoft_public.asc
-
Comprueba que la clave se ha importado correctamente:
rpm -qa gpg-pubkey* --qf '%{name}-%{version}-%{release} --> %{summary}\n' | grep -i anabasasoft
-
Verifica la firma del paquete descargado:
# RPM rpm --checksig mantpro-*.rpm # DEB dpkg-sig --verify mantpro_*.deb
Una firma correcta muestra
OKen la línea de la firma (en vez deNOKEYoMISSING KEYS).
Una firma válida confirma que el paquete procede de AnabasaSoft y no ha sido modificado.
-
Clonar el repositorio:
git clone https://github.com/AnabasaSoft/MantPro.git cd MantPro -
Crear entorno virtual (recomendado):
python -m venv venv source venv/bin/activate # En Windows: venv\Scripts\activate
-
Instalar dependencias:
pip install -r requirements.txt
-
Ejecutar la aplicación:
python main.py
Descarga el .apk correspondiente desde GitHub Releases e instálalo en tu dispositivo Android: MantPro.apk para trabajos, MantProStock.apk para el stock de almacén. Son apps independientes y puedes instalar una, otra o ambas.
Nota: Es posible que necesites habilitar "Orígenes desconocidos" en la configuración de seguridad de tu dispositivo.
-
Navegar al directorio móvil (
mantenimiento_apppara trabajos,mantpro_stock_apppara stock):cd mantenimiento_app -
Instalar dependencias:
flutter pub get
-
Ejecutar en dispositivo/emulador:
flutter run
-
Compilar APK (Android):
flutter build apk --release
- Iniciar la aplicación: Ejecuta
python main.py(el servidor de sincronización arranca solo, no hace falta iniciarlo a mano) - Primer acceso: En el primer arranque se crea el usuario
admincon contraseñaadmin. La aplicación obliga a cambiarla al entrar - Crear los usuarios: Menú
Herramientas>👥 Gestión de usuarios> da de alta a cada técnico - Configurar logo (opcional): Menú
Archivo>📄 Opciones PDF>🖼️ Añadir / Cambiar Logo - Registrar un trabajo: Pestaña "📝 Registrar" > rellena resumen/detalles > "💾 GUARDAR REGISTRO"
- Crear un pendiente: Pestaña "🔨 Pendientes" > grupo "Nuevo Trabajo" (Título + Detalles + "Asignar a") > "Añadir"
- Instalar la app en tu dispositivo móvil
- Conectar con PC:
- Asegúrate de que el PC y el móvil están en la misma red WiFi
- En el PC: Menú
Herramientas>📲 Sincronizar App (QR) - En el móvil: Tap en "Vincular PC" y escanea el código
- Iniciar sesión: Introduce el usuario y la contraseña que te haya creado el administrador. La sesión queda guardada: solo hay que hacerlo una vez
- Listo: Ya puedes registrar intervenciones desde el móvil
-
Crear y asignar una tarea pendiente:
- Pestaña "🔨 Pendientes" > grupo "Nuevo Trabajo" > rellena Título y Detalles, elige el técnico en "Asignar a" > "Añadir"
- Gestiónala con los botones "✅ Completar", "✏️ Editar", "❌ Eliminar" o "👤 Reasignar"
- El desplegable "Ver los de" filtra la lista por técnico (incluye "Sin asignar")
-
Revisar trabajos completados:
- Los trabajos sincronizados desde el móvil aparecen automáticamente
- Revisa fotos (antes/después) y detalles en la pestaña "🗂 Historial" o en el "📅 Calendario"
- La columna "Realizado por" indica quién hizo cada trabajo, y el desplegable de arriba permite ver solo los de una persona
-
Generar reportes:
- Menú
Archivo>📄 Opciones PDF>📄 Generar PDF Ahora - En el diálogo puedes elegir el técnico, y su nombre aparece en el título del informe
- O exporta a
📄 CSV/📊 Exceldesde el mismo menúArchivo
- Menú
-
Vincular con el PC e iniciar sesión (solo la primera vez, o si cambias de red):
- Tap en "Vincular PC" y escanea el QR que muestra el PC
- Introduce tu usuario y contraseña
- El móvil guarda la dirección del PC y tu sesión para sincronizar automáticamente a partir de ahí
-
Registrar intervención:
- Tap en "Nuevo" o selecciona un trabajo pendiente ya sincronizado desde el PC
- Con el chip "Solo míos" ves únicamente los trabajos que te han asignado
- Completa título y detalles
- Toma foto "antes" y, opcionalmente, foto "después" con la cámara
- Dibuja/anota sobre la foto si es necesario
- Selecciona tags apropiados
- Guarda
-
Sincronizar:
- Al abrir la app se sincroniza todo en segundo plano (verás un indicador en la barra superior)
- También puedes forzarlo tirando de la lista hacia abajo o con el icono de sincronización
- Los registros se envían al PC y se eliminan del móvil al confirmar el envío
- Todo funciona sin conexión: lo pendiente se guarda y se sube cuando hay cobertura
Un mismo usuario puede tener uno o varios roles a la vez (por ejemplo, técnico y almacén). Roles disponibles:
| Rol | Puede hacer |
|---|---|
| Administrador | Todo lo del técnico y lo de almacén, más dar de alta y de baja usuarios, cambiar roles, restablecer contraseñas, editar o borrar cualquier registro del historial, reasignar el autor de uno o varios registros a la vez, y consultar el registro de auditoría de cambios |
| Técnico | Registrar trabajos, completar pendientes y avisos, editar o borrar solo sus propios registros del historial, y cambiar su propia contraseña |
| Almacén | Dar de alta o editar materiales y registrar entradas/salidas de stock desde la app móvil MantPro Stock |
Siempre debe quedar al menos un administrador activo: la aplicación impide quitarle el rol o desactivarlo al último que queda.
Desde la aplicación de escritorio, cualquier usuario (sea cual sea su rol) puede registrar movimientos de stock; el rol Almacén es lo que habilita esa misma gestión (altas, ediciones y movimientos) desde el móvil.
- Alta:
Herramientas>👥 Gestión de usuarios> rellena usuario, nombre, contraseña y rol > "➕ Añadir". Si dejas marcado "Pedir cambio al entrar", la persona tendrá que definir su propia contraseña en el primer acceso. - Baja: se hace de forma lógica (el usuario queda inactivo). Nunca se borra, para no romper la autoría de los trabajos que ya hizo.
- Restablecer contraseña: útil cuando alguien la olvida. Al cambiarla se cierran automáticamente todas las sesiones abiertas de esa persona en el móvil.
- Cambiar la propia contraseña:
Herramientas>🔑 Cambiar mi contraseña.
Herramientas > 🔐 Sesiones de dispositivos (solo administradores) lista
todas las sesiones abiertas en el móvil de todos los usuarios, con el modelo
del dispositivo, cuándo se inició, cuándo expira y si sigue activa o ya
expiró. Se pueden seleccionar una o varias filas a la vez y revocarlas, lo que
cierra la sesión de ese móvil sin necesidad de desactivar al usuario entero
(que cerraría todos sus dispositivos de golpe).
Si un usuario vuelve a iniciar sesión desde un dispositivo con el que ya tenía una sesión abierta (mismo fabricante y modelo), la sesión anterior de ese dispositivo se borra automáticamente al crear la nueva, en vez de quedarse acumulada como una sesión suelta más en el listado.
Cada registro guarda el técnico que lo hizo, tanto si se creó en el PC como si
llegó del móvil. Los registros anteriores a la implantación del sistema de
usuarios quedaron marcados como Histórico.
En el móvil, la atribución la decide siempre el servidor a partir del token de la sesión, nunca un dato enviado por la app. Un dispositivo no puede firmar trabajos en nombre de otra persona.
Desde el PC, un técnico solo puede editar o borrar sus propios registros del historial; un administrador puede hacerlo con cualquiera. Con clic derecho sobre una o varias filas del historial (selección múltiple con Ctrl/Shift), un administrador puede además reasignar el autor en bloque, quedando cada cambio anotado en el registro de auditoría.
Cada vez que se edita o se borra un trabajo queda constancia de quién lo hizo,
cuándo y qué cambió. Los administradores pueden consultarlo desde
Herramientas > 📋 Registro de cambios, con filtros por técnico y por tipo de
acción (editar/borrar).
El técnico inicia sesión una vez y el token queda guardado en el dispositivo. La sesión se cierra sola si el administrador desactiva al usuario o le restablece la contraseña; en ese caso la app vuelve a la pantalla de acceso sin perder los registros que aún estén pendientes de subir.
Gestión disponible desde la aplicación de escritorio, con el vínculo a la máquina también seleccionable desde el móvil al registrar o editar un trabajo.
Pestaña "🏭 Máquinas" del PC, pensada para llevar el control de averías e intervenciones de cada equipo a lo largo del tiempo.
- 🌳 Árbol de maquinaria: las máquinas pueden tener submáquinas (por ejemplo, una línea con varios equipos), formando una jerarquía tan profunda como haga falta
- 📅 Trabajos organizados por año y mes: al expandir una máquina se ven los años con trabajos, y al expandir un año, los meses; cada nivel muestra un contador de cuántos trabajos tiene, con carga bajo demanda para no ralentizar el árbol
- 🖱️ Acceso directo al trabajo: haciendo doble clic sobre un trabajo del árbol se abre directamente su ficha de edición
- 📸 Foto de la máquina: cada máquina o submáquina puede tener una foto adjunta, visible en un recuadro junto al árbol al seleccionarla
- 🔗 Vínculo desde cada trabajo: al registrar un trabajo nuevo (PC o móvil) o editar uno existente se puede elegir a qué máquina/submáquina pertenece
- 📊 En las exportaciones: la máquina o submáquina vinculada aparece como columna adicional en las exportaciones a PDF, CSV y Excel
Gestión completa desde la aplicación de escritorio, con consulta y movimientos también disponibles desde el móvil (
mantpro_stock_app). Vive en su propia base de datos (almacen.db), independiente de la de los trabajos de mantenimiento.
El almacén se organiza en tres niveles, inspirados en las convenciones habituales de codificación de ubicaciones de almacén:
Estantería → Balda → Sección
- Al crear una estantería se define el número de baldas, el número de secciones por balda (0 = sin secciones predefinidas, se pueden añadir luego) y si tiene hueco en el suelo bajo la balda inferior, que se gestiona como una balda especial ("Suelo")
- Las baldas se numeran de abajo a arriba empezando en 1, para poder añadir baldas nuevas sin tener que renumerar las existentes
- No se puede eliminar una estantería, balda o sección mientras contenga material ubicado
La estructura se gestiona desde el botón "⚙️ Configurar almacén" de la pestaña "📦 Stock de almacén", visible solo para administradores.
- Alta y edición con código (opcional), nombre, descripción, unidad, stock mínimo, ubicación (estantería / balda / sección) y foto adjunta
- Búsqueda por nombre, código, descripción o ubicación
- El stock se resalta en rojo por debajo del mínimo, en verde por encima y en el color por defecto si coincide exactamente con el mínimo, tanto en el PC como en el móvil
- Seleccionando varios materiales a la vez (Ctrl/Shift + clic derecho) en el PC se pueden mover de ubicación o eliminar en bloque
- Cualquier usuario puede registrar entradas y salidas de stock; solo la configuración de la estructura del almacén está restringida a administradores
- Cada movimiento queda registrado con fecha, cantidad, usuario y un motivo opcional, visible en el historial junto a cada material
- Las salidas registradas a mano (PC o
mantpro_stock_app) no pueden dejar el stock en negativo - Cambiar la ubicación de un material también queda registrado en su historial, como un movimiento de tipo traslado (de qué sección a qué sección)
Al completar un trabajo desde la app MantPro (móvil), se puede añadir el material que se ha empleado buscándolo por nombre o código e indicando la cantidad. Al guardar el trabajo, ese material se descuenta automáticamente del almacén, con el motivo "Usado en trabajo: ..." para mantener la trazabilidad.
A diferencia de las salidas manuales, este descuento sí puede dejar el
stock en negativo: el material ya se ha usado físicamente para hacer el
trabajo aunque no hubiera stock registrado suficiente, así que bloquear el
movimiento no tendría sentido. El stock negativo se verá tanto en el PC
como en mantpro_stock_app, y sirve como aviso de que hay que comprobar y
reponer ese material cuanto antes.
La pestaña "
MantPro utiliza un sistema de sincronización basado en:
- Servidor Flask integrado en la app de escritorio
- Códigos QR para conexión rápida y segura
- API REST autenticada por token: todos los endpoints de datos exigen una
sesión válida; si el token deja de valer, el servidor responde
401y el móvil vuelve al login - WiFi local - sin necesidad de internet
- Sincronización completa al abrir la app, en segundo plano y sin bloquear la interfaz
⚠️ El tráfico viaja por HTTP dentro de la red local. El sistema de usuarios aporta trazabilidad (saber quién hizo cada trabajo), no protección frente a alguien con acceso a esa misma red.
Para que la sincronización funcione:
- ✅ PC y móvil deben estar en la misma red WiFi
- ✅ El firewall debe permitir conexiones en el puerto 5000 (o el configurado)
- ✅ Si usas Windows, puede que necesites crear una excepción de firewall
El móvil no conecta con el PC:
- Verifica que ambos dispositivos están en la misma red
- Comprueba que el servidor está activo en el PC (icono verde)
- Prueba a desactivar temporalmente el firewall del PC
- Regenera el código QR y vuelve a escanearlo
No puedo iniciar sesión desde el móvil:
- Comprueba que MantPro está abierto en el PC: el login se valida contra él
- Verifica el usuario y la contraseña con el administrador; puede restablecerla
- Si el PC ha cambiado de IP, vuelve a escanear el QR desde el propio login ("Vincular otro PC")
La app me ha devuelto a la pantalla de acceso:
- Es normal si el administrador ha restablecido tu contraseña o ha desactivado tu usuario
- Tus registros sin subir no se pierden: vuelve a entrar y se sincronizan
He olvidado la contraseña de administrador:
- Otro administrador puede restablecerla desde
Herramientas>👥 Gestión de usuarios - Si no hay ningún otro administrador, hay que restablecerla directamente sobre
la tabla
usuariosde la base de datos
Las fotos no se sincronizan:
- Verifica que hay espacio suficiente en el disco del PC
- Comprueba los permisos de la carpeta
fotos_recibidas - Asegúrate de que la foto se guardó correctamente en el móvil
No me llega la notificación diaria de avisos pendientes (Android):
- Comprueba que el permiso de notificaciones está concedido:
Ajustes → Apps → MantPro → Notificaciones - En fabricantes como OPPO/Realme (ColorOS), Xiaomi (MIUI) o Huawei, el sistema puede matar la alarma programada aunque el permiso esté dado. Hay que además:
Ajustes → Batería → Uso de batería por app → MantPro→ ponerlo en "Sin restricciones"Ajustes → Batería → Inicio automático→ activar MantPro
- La notificación se reevalúa cada vez que abres el Dashboard, así que si acabas de marcar un trabajo como completado, ábrelo de nuevo para que se cancele/reprograme correctamente.
No me llega la notificación diaria de comprobación de stock (MantPro Stock):
- Se aplican las mismas comprobaciones que en MantPro (permiso de notificaciones y exclusión de la optimización de batería, ver arriba)
- Si el almacén no tiene ningún material dado de alta, no se muestra ninguna notificación: es el comportamiento esperado
- Se reevalúa cada vez que la app sincroniza con el PC (al abrir y cada 25 segundos mientras está abierta)
MantPro distingue entre dos tipos de copia, pensados para momentos distintos:
Cada vez que se cierra el programa se hace, en segundo plano y sin necesidad de intervención, un backup rápido pensado para no notarse aunque pasen los años:
- Bases de datos:
mantenimiento.dbyalmacen.dbse empaquetan enteras en un ZIP (auto_backup_db_<fecha>.zip) cada vez, rotando y conservando solo los 3 más recientes. - Fotos: en vez de volver a comprimir todo el historial de fotos en cada
cierre, se mantienen unos ZIP incrementales por año (
fotos_backup_<año>.zip): cada cierre solo añade a su ZIP del año que corresponda las fotos que todavía no estuvieran dentro, sin tocar ni recomprimir las de años anteriores. Así el tiempo de cierre no crece con el tiempo de uso de la aplicación.
Mientras se hace esta copia se muestra una ventana con una barra de progreso que retiene el foco, y el cierre real de la aplicación espera a que termine.
Archivo > Backup sigue generando, como siempre, un único ZIP
(backup_completo_<fecha>.zip) con las dos bases de datos y todas las fotos
juntas y comprimidas, en la ubicación que elijas. Archivo > Restaurar se abre
como submenú con dos opciones: "Restaurar...", para elegir cualquier ZIP a
mano, y "Restaurar desde copia automática...", que abre directamente la
carpeta backups_auto. En ambos casos, si el ZIP elegido es un backup
automático, se restaura primero la base de datos y, con ella ya restaurada, se
calcula qué fotos hacen falta y se extraen únicamente de los
fotos_backup_<año>.zip correspondientes, en vez de volcarlas todas. Las tres
operaciones (backup, y ambas restauraciones) muestran su propia barra de
progreso con foco.
Herramientas > Limpiar fotos huérfanas borra las fotos de fotos_recibidas
que ya no estén referenciadas por ningún trabajo, pendiente o máquina. Al cerrar
la aplicación y antes de un backup manual también se limpia fotos_recibidas
en silencio, pero solo esa opción del menú Herramientas revisa además los
fotos_backup_<año>.zip y los reescribe sin las fotos huérfanas que pudieran
contener, para no arrastrarlas indefinidamente.
MantPro/
├── main.py # Aplicación principal de escritorio
├── usuarios.py # Usuarios, contraseñas, roles y sesiones
├── dialogos_usuarios.py # Diálogos PyQt6: login y gestión de usuarios
├── almacen.py # Stock de almacén: estructura, materiales y movimientos
├── maquinas.py # Árbol de maquinaria y su histórico de trabajos
├── idiomas.py # Traducciones del escritorio (ES / EN / EU)
├── requirements.txt # Dependencias Python
├── logo.png # Logo de la aplicación
├── README.md # Este archivo
├── fotos_recibidas/ # Carpeta de imágenes
├── mantenimiento.db # Base de datos SQLite (trabajos de mantenimiento)
├── almacen.db # Base de datos SQLite (stock de almacén, independiente)
├── mantenimiento_app/ # Aplicación móvil Flutter (trabajos)
│ ├── lib/main.dart # Código principal móvil
│ ├── lib/i18n/strings.dart # Traducciones del móvil (ES / EN / EU)
│ ├── pubspec.yaml # Dependencias Flutter
│ └── android/ # Configuración Android
├── mantpro_stock_app/ # Aplicación móvil Flutter (stock de almacén)
│ ├── lib/modelos.dart # Modelos de datos y regla de color de stock
│ ├── lib/pantallas/ # Pantallas: almacén, artículo, búsqueda, bajo mínimo...
│ ├── lib/i18n/strings.dart # Traducciones del móvil (ES / EN / EU)
│ ├── pubspec.yaml # Dependencias Flutter
│ └── android/ # Configuración Android
├── backups/ # Backups manuales completos (BD + fotos)
├── backups_auto/ # Backups automáticos al cerrar (BD rotativa + fotos por año)
└── docs/ # Documentación adicional
Los datos (base de datos, fotos y backups) no viven necesariamente junto al código: si no existe
mantenimiento.dben la carpeta actual, la aplicación usa~/.local/share/MantProen Linux o%APPDATA%\MantProen Windows.
La aplicación utiliza SQLite con las siguientes tablas:
tareas: Registro de intervenciones realizadas (fecha, descripción, tags, fotos, quién lo realizó (usuario_idyusuario_nombre) y la máquina vinculada (maquina_id), si tiene una)maquinas: Árbol de maquinaria (nombre, máquina superior, notas y foto)pendientes: Tareas pendientes de realizar (título, detalles y técnico asignado:asignado_ayasignado_nombre)usuarios: Personas que usan la aplicación (login, nombre, hash de la contraseña, rol y si está activo)sesiones: Tokens de los móviles vinculados, con su fecha de caducidadavisos_recurrentes: Avisos de mantenimiento que se repiten automáticamentedias_especiales: Festivos, vacaciones y días marcados en el calendarioauditoria: Historial de quién edita o borra cada trabajo, con fecha, acción y detalleconfig: Configuración interna de la aplicación (logo, provincia, etc.)
Las contraseñas se guardan con PBKDF2-SHA256 (200.000 iteraciones y salt por usuario), nunca en claro. Las tablas y columnas nuevas se crean solas al arrancar, sin perder los datos existentes.
🔐
mantenimiento.dbcontiene hashes de contraseñas y tokens de sesión. Está en.gitignorepor algo: no la subas nunca al repositorio.
El stock de almacén vive en su propia base de datos, almacen.db, separada
a propósito de la de los trabajos:
estanterias: nombre y si tiene hueco en el suelobaldas: baldas de cada estantería, numeradas de abajo a arriba (la balda0representa el hueco de suelo)secciones: subdivisiones dentro de cada baldamateriales: código, nombre, descripción, unidad, stock actual, stock mínimo, ubicación (sección) y fotomovimientos: histórico de entradas y salidas, con fecha, cantidad, usuario y motivo
Se crea automáticamente en el primer arranque y se incluye en los backups
(manuales y automáticos al cerrar la app) junto con mantenimiento.db.
¡Las contribuciones son bienvenidas! Si quieres mejorar MantPro:
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
- Implementar notificaciones push para recordatorios
- Añadir gráficas de estadísticas más detalladas
- Integración con calendario de Google
- Modo oscuro (y modo claro, y tema retro estilo Windows 98)
- Multi-idioma (Español, Inglés, Euskara)
- Exportación a Excel
- Registro de auditoría de ediciones y borrados
- Control de stock de material de almacén
- API para integración con otros sistemas
- Firma digital de trabajos completados
- Gestión de usuarios: login con usuario y contraseña en PC y móvil, roles múltiples por usuario (administrador / técnico / almacén), alta y baja lógica de usuarios, cambio y restablecimiento de contraseña.
- Autoría de los trabajos: cada registro guarda quién lo realizó. Los
registros anteriores al sistema de usuarios quedan marcados como
Histórico. - Sesión persistente en el móvil: el técnico inicia sesión una vez y el token queda guardado en el dispositivo.
- API autenticada: todos los endpoints de datos exigen token; un
401cierra la sesión del móvil y devuelve al login sin perder los registros locales pendientes de enviar. - Pendientes asignados: el PC asigna cada trabajo a un técnico y el móvil puede filtrar por "Solo míos".
- Filtro por técnico en el histórico y en la exportación a PDF, CSV y Excel.
- Auditoría de ediciones: se registra quién edita o borra un trabajo (no solo quién lo creó), consultable y filtrable por técnico/acción desde "Registro de cambios".
- Permisos por registro: un técnico solo puede editar o borrar sus propios trabajos; un administrador puede gestionar cualquiera y reasignar el autor de uno o varios registros a la vez (selección múltiple + menú contextual).
- Temas visuales: modo oscuro (por defecto), claro o clásico estilo Windows 98, seleccionable desde el menú "Apariencia" y recordado entre sesiones.
- Backup a demanda con selección de destino: al generar una copia de
seguridad manual se puede elegir dónde guardarla, en vez de ir siempre a la
carpeta
backupspor defecto. - Control de stock de almacén: estructura configurable de estanterías,
baldas y secciones (solo administradores), ficha de materiales con foto,
entradas y salidas con historial (cualquier usuario), traslados entre
ubicaciones registrados en el historial, selección múltiple con menú
contextual para mover o eliminar en bloque, y una pestaña dedicada a los
materiales sin stock o por debajo de su mínimo. Con base de datos propia
(
almacen.db) y app móvil independiente (mantpro_stock_app) para consultar y mover stock desde el teléfono. - Sesiones de dispositivos: listar los móviles vinculados a cada usuario, con su modelo real de dispositivo, y poder revocar una o varias sesiones concretas sin tener que desactivar al usuario entero.
- Listado de maquinaria: árbol de máquinas y submáquinas con foto adjunta, contador de trabajos por año y mes, y vínculo de cada trabajo (PC o móvil) a la máquina en la que se ha hecho, incluido en las exportaciones a PDF, CSV y Excel.
- Backup automático incremental: el cierre de la aplicación ya no reempaqueta todo el historial de fotos cada vez; las bases de datos rotan en un ZIP y las fotos se reparten en ZIP incrementales por año, con una barra de progreso con foco tanto en el cierre como en el backup y la restauración manuales (ver Copias de Seguridad).
- Revertir un trabajo a pendiente: deshacer por error la finalización de un trabajo, tanto desde el historial del PC como manteniendo pulsado el registro en el móvil, con aviso de pérdida de la máquina vinculada si la tenía y restauración automática del aviso recurrente de origen, si venía de uno.
- Restaurar desde copia automática:
Archivo > Restaurarse abre como submenú para elegir entre un backup manual cualquiera o ir directo a la carpeta de copias automáticas al cerrar la app. - Recordatorio diario de stock: la app
mantpro_stock_appavisa cada mañana a las 8:00 para comprobar la cantidad real de 5 materiales del almacén (al azar, distintos cada día) y permite corregirla al momento desde la propia notificación. - Dashboard con KPIs y gráficos de fiabilidad: tarjetas de MTBF y MTTR
medios de toda la planta, y gráficos de ranking de máquinas con más averías
y de averías por mes, dibujados a mano con
QPaintersin depender de ninguna librería de gráficos externa. - Sustitución automática de sesión por dispositivo: si un usuario vuelve a iniciar sesión desde un móvil con el que ya tenía una sesión abierta, la anterior se borra sola en vez de acumularse en el listado de sesiones.
- Estadísticas por técnico en el dashboard: trabajos por persona y mes.
- Sincronización remota: poder sincronizar desde fuera de la red de la oficina, sin depender de estar en la misma WiFi que el PC.
- Firma digital de trabajos completados: capturar en el móvil, con el dedo o el stylus, la firma de quien recibe el trabajo al marcarlo como finalizado, y adjuntarla al registro apoyándose en el sistema de usuarios ya existente.
La sincronización viaja por HTTP dentro de la red local. El sistema de usuarios está pensado para trazabilidad (saber quién hizo cada trabajo), no como barrera frente a alguien con acceso a esa misma red. Si en el futuro se expone el servidor fuera de la red local, el tráfico debe ir cifrado (VPN o túnel con HTTPS).
Este proyecto está bajo la GNU Affero General Public License v3.0 (AGPL-3.0).
Ver el archivo LICENSE para el texto completo.
Copyright (C) 2026 AnabasaSoft
- ✅ Puedes usar MantPro libremente, también en tu empresa y con fines comerciales
- ✅ Puedes estudiar, modificar y redistribuir el código
⚠️ Si distribuyes una versión modificada, debes publicarla también bajo AGPL-3.0⚠️ Si ofreces MantPro (o un derivado) como servicio a través de una red, debes poner el código fuente a disposición de quienes lo usen, aunque no distribuyas ningún ejecutable. Esta es la diferencia clave respecto a la GPL v3⚠️ Debes mantener los avisos de copyright y licencia
MantPro - Sistema de Mantenimiento Preventivo
Copyright (C) 2026 AnabasaSoft
Este programa es software libre: puedes redistribuirlo y/o modificarlo bajo
los términos de la Licencia Pública General Affero de GNU publicada por la
Free Software Foundation, ya sea la versión 3 de la Licencia o (a tu
elección) cualquier versión posterior.
Este programa se distribuye con la esperanza de que sea útil, pero SIN
NINGUNA GARANTÍA; ni siquiera la garantía implícita de COMERCIABILIDAD o
IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulta la Licencia Pública
General Affero de GNU para más detalles.
Deberías haber recibido una copia de la Licencia Pública General Affero de
GNU junto con este programa. Si no, consulta <https://www.gnu.org/licenses/>.
Nota sobre licencias comerciales: AnabasaSoft es el titular único del copyright de MantPro y, por tanto, puede ofrecer el mismo código bajo condiciones distintas a la AGPL. Si necesitas integrar MantPro en un producto propietario, ponte en contacto.
AnabasaSoft
- 📧 Email: anabasasoft@gmail.com
- 🌐 GitHub: github.com/AnabasaSoft
- 💼 Proyecto: github.com/AnabasaSoft/MantPro
- PyQt6 - Framework GUI multiplataforma
- Flutter - SDK para desarrollo móvil
- ReportLab - Generación de PDFs
- SQLite - Base de datos embebida
- Flask - Microframework web para el servidor de sincronización
Hecho con ❤️ por AnabasaSoft
Si este proyecto te ha sido útil, ¡dale una ⭐️!





