Go to file
Tatiana Villa Ema e34d855f7c Gestion de usuarios 2026-05-03 23:51:54 +02:00
apis/json_generados Poblando la base de datos 2025-04-19 19:29:38 +02:00
css Automatizacion de tareas 2026-04-24 23:32:18 +02:00
datos/tatvil gestion de usuarios 2026-05-03 23:50:15 +02:00
json_generados Poblando la base de datos 2025-04-19 19:29:38 +02:00
servidor Automatizacion de tareas 2026-04-24 23:32:18 +02:00
sql primer commit 2025-04-19 18:39:02 +02:00
static/css ui: grupos de compra colapsables con contador de items 2026-04-25 19:36:55 +02:00
templates rename: proyecto renombrado a CarritoIA 2026-04-25 19:58:53 +02:00
.env.example dockerizando 2026-04-24 23:51:14 +02:00
.gitignore Gestion de usuarios 2026-05-03 23:51:54 +02:00
Dockerfile fix: permisos 777 en tickets/ y datos/ para evitar Permission denied 2026-04-25 17:33:53 +02:00
README.md rename: proyecto renombrado a CarritoIA 2026-04-25 19:58:53 +02:00
app.py Gestion de usuarios 2026-05-03 23:51:54 +02:00
autocompra.py primer commit 2025-04-19 18:39:02 +02:00
autocompra2.py primer commit 2025-04-19 18:39:02 +02:00
autocompra3.py Subir tickets con foto de ticket 2026-04-25 13:17:38 +02:00
autocompra4.py primer commit 2025-04-19 18:39:02 +02:00
autocompra5.py primer commit 2025-04-19 18:39:02 +02:00
autocompra6.py primer commit 2025-04-19 18:39:02 +02:00
autocompra7.py fix: filtrar lineas de IVA (%) que se colaban como productos 2026-04-25 19:30:40 +02:00
compra_estimacion.csv primer commit 2025-04-19 18:39:02 +02:00
datos.js Automatizacion de tareas 2026-04-24 23:32:18 +02:00
detalle_productos.csv primer commit 2025-04-19 18:39:02 +02:00
docker-compose.yml fix: extra_hosts para acceder a Dovecot (host.docker.internal) 2026-04-25 18:21:55 +02:00
escanear_productos.html Automatizacion de tareas 2026-04-24 23:32:18 +02:00
gasto_mensual.csv primer commit 2025-04-19 18:39:02 +02:00
generar_lista.py fix: no fallar con usuario sin tickets 2026-04-25 13:37:25 +02:00
grafico_precios_productos.png primer commit 2025-04-19 18:39:02 +02:00
importar_tickets.py primer commit 2025-04-19 18:39:02 +02:00
importar_tickets_email.py feat: panel admin, perfil de usuario y config IMAP por usuario 2026-04-25 19:18:24 +02:00
index.html Automatizacion de tareas 2026-04-24 23:32:18 +02:00
lista_compra_estimada.html primer commit 2025-04-19 18:39:02 +02:00
lista_compra_estimado.csv primer commit 2025-04-19 18:39:02 +02:00
lista_compra_estimado.html primer commit 2025-04-19 18:39:02 +02:00
lista_compra_semanal_24_04_2025.html primer commit 2025-04-19 18:39:02 +02:00
lista_compra_ultimo_mes.csv primer commit 2025-04-19 18:39:02 +02:00
procesar tickets.py Poblando la base de datos 2025-04-19 19:29:38 +02:00
requirements.txt Subir tickets con foto de ticket 2026-04-25 13:17:38 +02:00
resumen_productos.csv primer commit 2025-04-19 18:39:02 +02:00
subir_ticket.html primer commit 2025-04-19 18:39:02 +02:00
users.json Gestion de usuarios 2026-05-03 23:51:54 +02:00
users20260503.json gestion de usuarios 2026-05-03 23:50:15 +02:00

README.md

🛒 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 Flask Docker License


¿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)

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.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.