5.5 KiB
5.5 KiB
🛒 CarritoIA
Aplicación web personal para automatizar y predecir la lista de la compra a partir de tickets de Mercadona. Procesa PDFs reales, aplica análisis de frecuencias y genera sugerencias de compra organizadas por periodicidad.
¿Qué hace?
A partir de los tickets de compra en PDF de Mercadona, la aplicación:
- Extrae los productos, cantidades y precios de cada ticket (PDF o foto)
- Analiza la frecuencia de compra histórica de cada producto
- Predice cuándo toca volver a comprar cada artículo
- Organiza los productos en grupos: semanal, quincenal, mensual, esporádico
- Genera una lista de la compra lista para copiar y pegar
Capturas
| Lista de la compra | Estadísticas |
|---|---|
| Productos agrupados por frecuencia, colapsables | Top productos, gasto mensual, evolución |
Funcionalidades
📋 Lista de la compra
- Grupos colapsables: semanal / quincenal / mensual / esporádico
- Contador de ítems por grupo visible aunque esté plegado
- Marca productos con un clic y copia la lista al portapapeles
- Añadir productos manualmente
- Indicador de productos de temporada 🌱
📄 Procesado de tickets
- Subir PDF directamente desde el navegador (drag & drop)
- Subir foto del ticket con OCR automático (EasyOCR, español + inglés)
- Importar desde correo — descarga automática de PDFs adjuntos via IMAP
- Pipeline completo: extracción → análisis → predicción en un solo paso
📊 Estadísticas
- Top productos más comprados
- Gasto mensual histórico
- Evolución del precio de cada producto
👥 Multi-usuario
- Registro e inicio de sesión con contraseñas hasheadas (bcrypt via Werkzeug)
- Datos completamente separados por usuario (
tickets/{usuario}/,datos/{usuario}/) - Panel de administración para gestionar usuarios
- Configuración IMAP personalizada por usuario desde el perfil
Stack técnico
| Componente | Tecnología |
|---|---|
| Backend | Python 3.12 + Flask 3.0 |
| Producción | Gunicorn + Nginx (reverse proxy) |
| OCR | EasyOCR (es + en) |
| Análisis | Pandas + NumPy |
| PDFs | PyPDF2 |
| Auth | Werkzeug (bcrypt) |
| Contenedor | Docker + Docker Compose |
Estructura del proyecto
autocompra/
├── app.py # Aplicación Flask principal
├── autocompra7.py # Parser de PDFs → CSVs
├── generar_lista.py # Generador de predicciones (datos.json)
├── importar_tickets_email.py # Importador IMAP de tickets
├── requirements.txt
├── Dockerfile
├── docker-compose.yml
├── config.ini # Configuración (no incluido en repo)
├── users.json # Usuarios y config por usuario (no incluido)
├── tickets/
│ └── {usuario}/ # PDFs de tickets por usuario
├── datos/
│ └── {usuario}/ # CSVs y datos generados por usuario
├── templates/
│ ├── index.html # Lista de la compra
│ ├── estadisticas.html # Dashboard estadísticas
│ ├── perfil.html # Perfil y config IMAP
│ └── admin.html # Panel de administración
└── static/
└── css/style.css
Instalación y puesta en marcha
Con Docker (recomendado)
git clone https://github.com/tu-usuario/autocompra.git
cd autocompra
# Crear config.ini con los datos de tu buzón IMAP
cp config.ini.example config.ini
nano config.ini
# Lanzar
docker compose up -d --build
La app queda disponible en http://localhost:8088.
Sin Docker (desarrollo)
python -m venv venv
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows
pip install -r requirements.txt
python app.py
Configuración (config.ini)
[email]
imap_host = imap.tu-proveedor.es
imap_port = 993
correo = tu@email.com
password = tu_password
remitente = noreply@mercadona.es
ssl_verify = true
ejecutar_pipeline = true
La contraseña se puede sobreescribir con la variable de entorno
EMAIL_PASSWORD.
Variables de entorno
| Variable | Descripción |
|---|---|
SECRET_KEY |
Clave secreta de Flask para sesiones |
ADMIN_PASSWORD |
Contraseña del usuario admin (primer arranque) |
EMAIL_CORREO |
Usuario IMAP (sobreescribe config.ini) |
EMAIL_PASSWORD |
Contraseña IMAP (sobreescribe config.ini) |
Pipeline manual
Si quieres reprocesar todos los tickets de un usuario:
# Dentro del contenedor
docker exec autocompra python autocompra7.py --usuario tatiana
docker exec autocompra python generar_lista.py --usuario tatiana
Importación automática desde el correo
El script importar_tickets_email.py se puede ejecutar como cron para importar tickets nuevos automáticamente:
0 * * * * docker exec autocompra python importar_tickets_email.py --usuario tatiana >> ~/logs/autocompra.log 2>&1
Notas de seguridad
- Las contraseñas se almacenan como hashes bcrypt, nunca en texto plano
config.iniyusers.jsonestán excluidos del repositorio (.gitignore)- Cambia
SECRET_KEYen producción
Licencia
MIT — siéntete libre de adaptarlo a tu supermercado favorito.