# 🛒 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. ![Python](https://img.shields.io/badge/Python-3.12-blue?logo=python&logoColor=white) ![Flask](https://img.shields.io/badge/Flask-3.0-black?logo=flask) ![Docker](https://img.shields.io/badge/Docker-Compose-2496ED?logo=docker&logoColor=white) ![License](https://img.shields.io/badge/license-MIT-green) --- ## ¿Qué hace? A partir de los tickets de compra en PDF de Mercadona, la aplicación: 1. **Extrae** los productos, cantidades y precios de cada ticket (PDF o foto) 2. **Analiza** la frecuencia de compra histórica de cada producto 3. **Predice** cuándo toca volver a comprar cada artículo 4. **Organiza** los productos en grupos: semanal, quincenal, mensual, esporádico 5. **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) ```bash 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) ```bash 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`) ```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: ```bash # 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: ```cron 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.ini` y `users.json` están excluidos del repositorio (`.gitignore`) - Cambia `SECRET_KEY` en producción --- ## Licencia MIT — siéntete libre de adaptarlo a tu supermercado favorito.