commit 22535b2682987786666d1318d925962dc487d1b9 Author: Tatiana Villa Ema Date: Sat Apr 19 18:39:02 2025 +0200 primer commit diff --git a/autocompra.py b/autocompra.py new file mode 100644 index 0000000..c7a4b89 --- /dev/null +++ b/autocompra.py @@ -0,0 +1,72 @@ +import re +import pandas as pd +import os +from datetime import datetime +from PyPDF2 import PdfReader +from collections import defaultdict + +# Carpeta con tus tickets PDF +ticket_folder = "tickets" + +def extract_data_from_pdf(file_path): + reader = PdfReader(file_path) + text = "" + for page in reader.pages: + text += page.extract_text() + "\n" + + date_match = re.search(r"(\d{2}/\d{2}/\d{4})", text) + fecha = datetime.strptime(date_match.group(1), "%d/%m/%Y") if date_match else None + + products = [] + for line in text.splitlines(): + match = re.match(r"\d*\s?(.*?)\s+(\d+,\d{2})\s+(\d+,\d{2})", line) + if match: + nombre = match.group(1).strip().upper() + unit_price = float(match.group(2).replace(",", ".")) + total_price = float(match.group(3).replace(",", ".")) + products.append((fecha, nombre, unit_price, total_price)) + else: + match_simple = re.match(r"(.*?)\s+(\d+,\d{2})$", line) + if match_simple: + nombre = match_simple.group(1).strip().upper() + total_price = float(match_simple.group(2).replace(",", ".")) + products.append((fecha, nombre, None, total_price)) + + return products + +# Recolectar todos los productos de todos los tickets +datos = [] +for file in os.listdir(ticket_folder): + if file.endswith(".pdf"): + path = os.path.join(ticket_folder, file) + datos.extend(extract_data_from_pdf(path)) + +# Crear DataFrame +columnas = ["fecha", "producto", "precio_unitario", "precio_total"] +df = pd.DataFrame(datos, columns=columnas) +df.dropna(subset=["fecha"], inplace=True) + +# Normalizar nombres de producto (puedes hacer un diccionario de equivalencias si quieres afinar más) +df["producto"] = df["producto"].str.upper().str.strip() + +# Guardar detalle completo +df.to_csv("detalle_productos.csv", index=False) + +# Agrupar por producto +resumen = df.groupby("producto").agg( + veces_comprado=("fecha", "count"), + gasto_total=("precio_total", "sum"), + primera_vez=("fecha", "min"), + ultima_vez=("fecha", "max") +).sort_values("gasto_total", ascending=False) +resumen.to_csv("resumen_productos.csv") + +# Gasto mensual +df["mes"] = df["fecha"].dt.to_period("M") +gasto_mensual = df.groupby("mes")["precio_total"].sum() +gasto_mensual.to_csv("gasto_mensual.csv") + +print("\n✅ Análisis completado. Archivos generados:") +print("- detalle_productos.csv") +print("- resumen_productos.csv") +print("- gasto_mensual.csv") diff --git a/autocompra2.py b/autocompra2.py new file mode 100644 index 0000000..104dafd --- /dev/null +++ b/autocompra2.py @@ -0,0 +1,99 @@ +import re +import pandas as pd +import os +from datetime import datetime +from PyPDF2 import PdfReader +from collections import defaultdict +import matplotlib.pyplot as plt +import seaborn as sns + +# Carpeta con tus tickets PDF +ticket_folder = "tickets" + +def extract_data_from_pdf(file_path): + reader = PdfReader(file_path) + text = "" + for page in reader.pages: + text += page.extract_text() + "\n" + + date_match = re.search(r"(\d{2}/\d{2}/\d{4})", text) + fecha = datetime.strptime(date_match.group(1), "%d/%m/%Y") if date_match else None + + products = [] + for line in text.splitlines(): + match = re.match(r"\d*\s?(.*?)\s+(\d+,\d{2})\s+(\d+,\d{2})", line) + if match: + nombre = match.group(1).strip().upper() + unit_price = float(match.group(2).replace(",", ".")) + total_price = float(match.group(3).replace(",", ".")) + products.append((fecha, nombre, unit_price, total_price)) + else: + match_simple = re.match(r"(.*?)\s+(\d+,\d{2})$", line) + if match_simple: + nombre = match_simple.group(1).strip().upper() + total_price = float(match_simple.group(2).replace(",", ".")) + products.append((fecha, nombre, None, total_price)) + + return products + +# Recolectar todos los productos de todos los tickets +datos = [] +for file in os.listdir(ticket_folder): + if file.endswith(".pdf"): + path = os.path.join(ticket_folder, file) + datos.extend(extract_data_from_pdf(path)) + +# Crear DataFrame +columnas = ["fecha", "producto", "precio_unitario", "precio_total"] +df = pd.DataFrame(datos, columns=columnas) +df.dropna(subset=["fecha"], inplace=True) + +# Normalizar nombres de producto +df["producto"] = df["producto"].str.upper().str.strip() + +# Guardar detalle completo +df.to_csv("detalle_productos.csv", index=False) + +# Agrupar por producto +resumen = df.groupby("producto").agg( + veces_comprado=("fecha", "count"), + gasto_total=("precio_total", "sum"), + gasto_promedio=("precio_total", "mean"), + primera_vez=("fecha", "min"), + ultima_vez=("fecha", "max") +).sort_values("gasto_total", ascending=False) +resumen.to_csv("resumen_productos.csv") + +# Gasto mensual +df["mes"] = df["fecha"].dt.to_period("M") +gasto_mensual = df.groupby("mes")["precio_total"].sum() +gasto_mensual.to_csv("gasto_mensual.csv") + +# Graficar precios por producto a lo largo del tiempo +plt.figure(figsize=(10, 6)) +for producto in df["producto"].unique(): + producto_df = df[df["producto"] == producto] + plt.plot(producto_df["fecha"], producto_df["precio_total"], label=producto) +plt.title("Evolución de los precios de los productos a lo largo del tiempo") +plt.xlabel("Fecha") +plt.ylabel("Precio Total") +plt.legend() +plt.xticks(rotation=45) +plt.tight_layout() +plt.savefig("grafico_precios_productos.png") +plt.show() + +# Crear una lista de la compra: productos más comprados en el último mes +ultimo_mes = df["fecha"].max().replace(day=1) # Primer día del mes actual +productos_ultimo_mes = df[df["fecha"] >= ultimo_mes].groupby("producto").agg( + cantidad_comprada=("producto", "count"), + gasto_total=("precio_total", "sum") +).sort_values("gasto_total", ascending=False) +productos_ultimo_mes.to_csv("lista_compra_ultimo_mes.csv") + +print("\n✅ Análisis completado. Archivos generados:") +print("- detalle_productos.csv") +print("- resumen_productos.csv") +print("- gasto_mensual.csv") +print("- grafico_precios_productos.png") +print("- lista_compra_ultimo_mes.csv") diff --git a/autocompra3.py b/autocompra3.py new file mode 100644 index 0000000..41f8a93 --- /dev/null +++ b/autocompra3.py @@ -0,0 +1,79 @@ +import re +import pandas as pd +import os +from datetime import datetime, timedelta +from PyPDF2 import PdfReader +from collections import defaultdict + +# Carpeta con tus tickets PDF +ticket_folder = "tickets" + +def extract_data_from_pdf(file_path): + reader = PdfReader(file_path) + text = "" + for page in reader.pages: + text += page.extract_text() + "\n" + + date_match = re.search(r"(\d{2}/\d{2}/\d{4})", text) + fecha = datetime.strptime(date_match.group(1), "%d/%m/%Y") if date_match else None + + products = [] + for line in text.splitlines(): + match = re.match(r"\d*\s?(.*?)\s+(\d+,\d{2})\s+(\d+,\d{2})", line) + if match: + nombre = match.group(1).strip().upper() + unit_price = float(match.group(2).replace(",", ".")) + total_price = float(match.group(3).replace(",", ".")) + products.append((fecha, nombre, unit_price, total_price)) + else: + match_simple = re.match(r"(.*?)\s+(\d+,\d{2})$", line) + if match_simple: + nombre = match_simple.group(1).strip().upper() + total_price = float(match_simple.group(2).replace(",", ".")) + products.append((fecha, nombre, None, total_price)) + + return products + +# Recolectar todos los productos de todos los tickets +datos = [] +for file in os.listdir(ticket_folder): + if file.endswith(".pdf"): + path = os.path.join(ticket_folder, file) + datos.extend(extract_data_from_pdf(path)) + +# Crear DataFrame +columnas = ["fecha", "producto", "precio_unitario", "precio_total"] +df = pd.DataFrame(datos, columns=columnas) +df.dropna(subset=["fecha"], inplace=True) + +# Normalizar nombres de producto +df["producto"] = df["producto"].str.upper().str.strip() + +# Calcular el tiempo entre compras para cada producto +df["diferencia_dias"] = df.groupby("producto")["fecha"].diff().dt.days + +# Calcular la frecuencia de compra (promedio de días entre compras) +frecuencia_compra = df.groupby("producto")["diferencia_dias"].mean().reset_index() + +# Estimación de la duración de los productos (cuánto duran en casa) +# Suponemos que compras aproximadamente la misma cantidad cada vez. +# Si se desea una estimación más precisa, se pueden agregar más datos sobre cantidad. +frecuencia_compra["proxima_compra_estimado"] = df["fecha"].max() + pd.to_timedelta(frecuencia_compra["diferencia_dias"], unit="D") + +# Ahora seleccionamos los productos que más frecuentemente compras +# y predecimos cuándo volverás a comprar basándonos en la frecuencia. +productos_estimados = frecuencia_compra.sort_values("diferencia_dias", ascending=True) + +# Listar la compra estimada +productos_estimados["producto"] = productos_estimados["producto"].str.title() # Capitalizar el nombre del producto +productos_estimados["fecha_estimada_proxima_compra"] = productos_estimados["proxima_compra_estimado"].dt.strftime("%d/%m/%Y") + +# Guardar la lista estimada de la compra +productos_estimados.to_csv("lista_compra_estimado.csv", index=False) + +# Mostrar los primeros resultados +print("\n✅ Lista de la compra estimada para la próxima compra:") +print(productos_estimados[["producto", "diferencia_dias", "fecha_estimada_proxima_compra"]]) + +print("\n✅ Archivos generados:") +print("- lista_compra_estimado.csv") diff --git a/autocompra4.py b/autocompra4.py new file mode 100644 index 0000000..37b6b58 --- /dev/null +++ b/autocompra4.py @@ -0,0 +1,147 @@ +import re +import pandas as pd +import os +from datetime import datetime, timedelta +from PyPDF2 import PdfReader +from collections import defaultdict + +# Carpeta con tus tickets PDF +ticket_folder = "tickets" + +def extract_data_from_pdf(file_path): + reader = PdfReader(file_path) + text = "" + for page in reader.pages: + text += page.extract_text() + "\n" + + date_match = re.search(r"(\d{2}/\d{2}/\d{4})", text) + fecha = datetime.strptime(date_match.group(1), "%d/%m/%Y") if date_match else None + + products = [] + for line in text.splitlines(): + match = re.match(r"\d*\s?(.*?)\s+(\d+,\d{2})\s+(\d+,\d{2})", line) + if match: + nombre = match.group(1).strip().upper() + unit_price = float(match.group(2).replace(",", ".")) + total_price = float(match.group(3).replace(",", ".")) + products.append((fecha, nombre, unit_price, total_price)) + else: + match_simple = re.match(r"(.*?)\s+(\d+,\d{2})$", line) + if match_simple: + nombre = match_simple.group(1).strip().upper() + total_price = float(match_simple.group(2).replace(",", ".")) + products.append((fecha, nombre, None, total_price)) + + return products + +# Recolectar todos los productos de todos los tickets +datos = [] +for file in os.listdir(ticket_folder): + if file.endswith(".pdf"): + path = os.path.join(ticket_folder, file) + datos.extend(extract_data_from_pdf(path)) + +# Crear DataFrame +columnas = ["fecha", "producto", "precio_unitario", "precio_total"] +df = pd.DataFrame(datos, columns=columnas) +df.dropna(subset=["fecha"], inplace=True) + +# Normalizar nombres de producto +df["producto"] = df["producto"].str.upper().str.strip() + +# Calcular el tiempo entre compras para cada producto +df["diferencia_dias"] = df.groupby("producto")["fecha"].diff().dt.days + +# Calcular la frecuencia de compra (promedio de días entre compras) +frecuencia_compra = df.groupby("producto")["diferencia_dias"].mean().reset_index() + +# Estimación de la duración de los productos (cuánto duran en casa) +frecuencia_compra["proxima_compra_estimado"] = df["fecha"].max() + pd.to_timedelta(frecuencia_compra["diferencia_dias"], unit="D") + +# Ahora seleccionamos los productos que más frecuentemente compras +productos_estimados = frecuencia_compra.sort_values("diferencia_dias", ascending=True) + +# Listar la compra estimada +productos_estimados["producto"] = productos_estimados["producto"].str.title() # Capitalizar el nombre del producto +productos_estimados["fecha_estimada_proxima_compra"] = productos_estimados["proxima_compra_estimado"].dt.strftime("%d/%m/%Y") + +# Generar la lista de la compra en formato HTML +html_content = """ + + + + + + Lista de la Compra Estimada + + + + +

Lista de la Compra Estimada

+ + + + + + + + + + +""" + +# Añadir filas con los productos +for _, row in productos_estimados.iterrows(): + html_content += f""" + + + + + + """ + +html_content += """ + +
ProductoDías Promedio entre ComprasFecha Estimada de la Próxima Compra
{row['producto']}{row['diferencia_dias']:.0f}{row['fecha_estimada_proxima_compra']}
+ + + +""" + +# Guardar el archivo HTML +with open("lista_compra_estimado.html", "w", encoding="utf-8") as file: + file.write(html_content) + +print("\n✅ Página HTML generada: lista_compra_estimado.html") diff --git a/autocompra5.py b/autocompra5.py new file mode 100644 index 0000000..37e072f --- /dev/null +++ b/autocompra5.py @@ -0,0 +1,176 @@ +import re +import pandas as pd +import os +from datetime import datetime, timedelta +from PyPDF2 import PdfReader +from collections import defaultdict + +# Carpeta con tus tickets PDF +ticket_folder = "tickets" + +def extract_data_from_pdf(file_path): + reader = PdfReader(file_path) + text = "" + for page in reader.pages: + text += page.extract_text() + "\n" + + date_match = re.search(r"(\d{2}/\d{2}/\d{4})", text) + fecha = datetime.strptime(date_match.group(1), "%d/%m/%Y") if date_match else None + + products = [] + for line in text.splitlines(): + match = re.match(r"\d*\s?(.*?)\s+(\d+,\d{2})\s+(\d+,\d{2})", line) + if match: + nombre = match.group(1).strip().upper() + unit_price = float(match.group(2).replace(",", ".")) + total_price = float(match.group(3).replace(",", ".")) + products.append((fecha, nombre, unit_price, total_price)) + else: + match_simple = re.match(r"(.*?)\s+(\d+,\d{2})$", line) + if match_simple: + nombre = match_simple.group(1).strip().upper() + total_price = float(match_simple.group(2).replace(",", ".")) + products.append((fecha, nombre, None, total_price)) + + return products + +# Recolectar todos los productos de todos los tickets +def load_and_process_data(): + datos = [] + for file in os.listdir(ticket_folder): + if file.endswith(".pdf"): + path = os.path.join(ticket_folder, file) + datos.extend(extract_data_from_pdf(path)) + + # Crear DataFrame + columnas = ["fecha", "producto", "precio_unitario", "precio_total"] + df = pd.DataFrame(datos, columns=columnas) + df.dropna(subset=["fecha"], inplace=True) + + # Normalizar nombres de producto + df["producto"] = df["producto"].str.upper().str.strip() + + return df + +# Calcular la frecuencia de compra y la fecha estimada de la próxima compra +def calculate_purchase_estimates(df): + # Calcular el tiempo entre compras para cada producto + df["diferencia_dias"] = df.groupby("producto")["fecha"].diff().dt.days + + # Calcular la frecuencia de compra (promedio de días entre compras) + frecuencia_compra = df.groupby("producto")["diferencia_dias"].mean().reset_index() + + # Estimación de la duración de los productos (cuánto duran en casa) + frecuencia_compra["proxima_compra_estimado"] = df["fecha"].max() + pd.to_timedelta(frecuencia_compra["diferencia_dias"], unit="D") + + # Ahora seleccionamos los productos que más frecuentemente compras + frecuencia_compra["producto"] = frecuencia_compra["producto"].str.title() # Capitalizar el nombre del producto + frecuencia_compra["fecha_estimada_proxima_compra"] = frecuencia_compra["proxima_compra_estimado"].dt.strftime("%d/%m/%Y") + + return frecuencia_compra + +# Generar la lista de la compra semanal +def generate_weekly_shopping_list(frecuencia_compra): + today = datetime.today() + # Calcular la fecha del próximo jueves + days_until_next_thursday = (3 - today.weekday()) % 7 + next_thursday = today + timedelta(days=days_until_next_thursday) + + # Filtrar los productos cuya próxima compra se estima para la próxima semana + productos_estimados = frecuencia_compra[frecuencia_compra["proxima_compra_estimado"] <= next_thursday] + + # Generar la lista de la compra en formato HTML + html_content = """ + + + + + + Lista de la Compra Semanal + + + + +

Lista de la Compra Semanal (Próximo Jueves)

+ + + + + + + + + + + """ + + # Añadir filas con los productos + for _, row in productos_estimados.iterrows(): + html_content += f""" + + + + + + """ + + html_content += """ + +
ProductoDías Promedio entre ComprasFecha Estimada de la Próxima Compra
{row['producto']}{row['diferencia_dias']:.0f}{row['fecha_estimada_proxima_compra']}
+ + + + """ + + # Guardar el archivo HTML + file_name = f"lista_compra_semanal_{next_thursday.strftime('%d_%m_%Y')}.html" + with open(file_name, "w", encoding="utf-8") as file: + file.write(html_content) + + print(f"\n✅ Página HTML generada: {file_name}") + +# Función para actualizar la lista de la compra después de agregar un nuevo ticket +def update_shopping_list(): + # Cargar y procesar los datos + df = load_and_process_data() + + # Calcular las estimaciones de la compra + frecuencia_compra = calculate_purchase_estimates(df) + + # Generar la lista de la compra para la próxima semana (jueves) + generate_weekly_shopping_list(frecuencia_compra) + +# Llamar a la función para actualizar la lista de la compra +update_shopping_list() diff --git a/autocompra6.py b/autocompra6.py new file mode 100644 index 0000000..693f246 --- /dev/null +++ b/autocompra6.py @@ -0,0 +1,109 @@ +import re +import pandas as pd +import os +from datetime import datetime +from PyPDF2 import PdfReader +from collections import defaultdict + +# Carpeta con tus tickets PDF +ticket_folder = "tickets" + +# Palabras clave que indican líneas que no deben ser procesadas +exclude_keywords = [ + "TARJETA BANCARIA", "IVA BASE IMPONIBLE", "CUOTA", "TOTAL", + "SE ADMITEN DEVOLUCIONES CON TICKET", "N.C", "AUT", "AID", + "Verificado por dispositivo", "Visa Credit", "IMPORTE", "TARJ. BANCARIA" +] + +def extract_data_from_pdf(file_path): + reader = PdfReader(file_path) + text = "" + for page in reader.pages: + text += page.extract_text() + "\n" + + # Buscar la fecha en el ticket (formato dd/mm/yyyy) + date_match = re.search(r"(\d{2}/\d{2}/\d{4})", text) + fecha = datetime.strptime(date_match.group(1), "%d/%m/%Y") if date_match else None + + products = [] + # Procesar línea por línea del texto extraído + for line in text.splitlines(): + # Ignorar líneas que contienen palabras clave de exclusión + if any(keyword in line for keyword in exclude_keywords): + continue + + # Buscar productos con precio unitario y precio total + match = re.match(r"\d*\s?(.*?)\s+(\d+,\d{2})\s+(\d+,\d{2})", line) + if match: + nombre = match.group(1).strip().upper() # El nombre del producto + unit_price = float(match.group(2).replace(",", ".")) # Precio unitario + total_price = float(match.group(3).replace(",", ".")) # Precio total + products.append((fecha, nombre, unit_price, total_price)) + else: + # En caso de no encontrar el precio unitario, solo se extrae el precio total + match_simple = re.match(r"(.*?)\s+(\d+,\d{2})$", line) + if match_simple: + nombre = match_simple.group(1).strip().upper() + total_price = float(match_simple.group(2).replace(",", ".")) + products.append((fecha, nombre, None, total_price)) + + return products + +# Recolectar todos los productos de todos los tickets +datos = [] +for file in os.listdir(ticket_folder): + if file.endswith(".pdf"): + path = os.path.join(ticket_folder, file) + datos.extend(extract_data_from_pdf(path)) + +# Crear DataFrame +columnas = ["fecha", "producto", "precio_unitario", "precio_total"] +df = pd.DataFrame(datos, columns=columnas) +df.dropna(subset=["fecha"], inplace=True) + +# Normalizar nombres de producto (puedes hacer un diccionario de equivalencias si quieres afinar más) +df["producto"] = df["producto"].str.upper().str.strip() + +# Guardar detalle completo +df.to_csv("detalle_productos.csv", index=False) + +# Agrupar por producto +resumen = df.groupby("producto").agg( + veces_comprado=("fecha", "count"), + gasto_total=("precio_total", "sum"), + primera_vez=("fecha", "min"), + ultima_vez=("fecha", "max") +).sort_values("gasto_total", ascending=False) +resumen.to_csv("resumen_productos.csv") + +# Gasto mensual +df["mes"] = df["fecha"].dt.to_period("M") +gasto_mensual = df.groupby("mes")["precio_total"].sum() +gasto_mensual.to_csv("gasto_mensual.csv") + +# Lista de compra estimada +# Calcular la frecuencia de compra y la estimación del próximo producto necesario +df["dias_entre_compras"] = df.groupby("producto")["fecha"].diff().dt.days +df["promedio_dias_entre_compras"] = df.groupby("producto")["dias_entre_compras"].transform("mean") +df["proxima_compra"] = df["fecha"] + pd.to_timedelta(df["promedio_dias_entre_compras"], unit='D') + +# Crear la lista de la compra para la próxima semana +proxima_semana = datetime.now() + pd.Timedelta(weeks=1) +compra_estimacion = df[df["proxima_compra"] <= proxima_semana] + +# Guardar la lista de compra estimada +compra_estimacion.to_csv("compra_estimacion.csv", index=False) + +# Crear un archivo HTML visual para la lista de la compra +html = compra_estimacion[["producto", "precio_unitario", "precio_total", "proxima_compra"]].sort_values("proxima_compra").to_html(index=False) + +# Guardar el archivo HTML +with open("lista_compra_estimada.html", "w") as file: + file.write(html) + +print("\n✅ Análisis completado. Archivos generados:") +print("- detalle_productos.csv") +print("- resumen_productos.csv") +print("- gasto_mensual.csv") +print("- compra_estimacion.csv") +print("- lista_compra_estimada.html") diff --git a/autocompra7.py b/autocompra7.py new file mode 100644 index 0000000..45ad204 --- /dev/null +++ b/autocompra7.py @@ -0,0 +1,107 @@ +import re +import pandas as pd +import os +from datetime import datetime +from PyPDF2 import PdfReader + +# Carpeta con los tickets PDF +ticket_folder = "tickets" + +# Palabras clave que indican líneas que no hay que procesar +exclude_keywords = [ + "TARJETA BANCARIA", "IVA BASE IMPONIBLE", "CUOTA", "TOTAL", + "SE ADMITEN DEVOLUCIONES CON TICKET", "N.C", "AUT", "AID", + "Verificado por dispositivo", "Visa Credit", "IMPORTE", "TARJ. BANCARIA" +] + +def extract_data_from_pdf(file_path): + reader = PdfReader(file_path) + text = "" + for page in reader.pages: + text += page.extract_text() + "\n" + + # Buscar la fecha + date_match = re.search(r"(\d{2}/\d{2}/\d{4})", text) + fecha = datetime.strptime(date_match.group(1), "%d/%m/%Y") if date_match else None + + products = [] + + for line in text.splitlines(): + if any(keyword in line for keyword in exclude_keywords): + continue + + # Coincide con líneas tipo: "2 ROLLO HOGAR DOBLE 2,35 4,70" + match = re.match(r"(\d+)\s+(.*?)\s+(\d+,\d{2})\s+(\d+,\d{2})$", line) + if match: + cantidad = int(match.group(1)) + producto = match.group(2).strip().upper() + precio_unitario = float(match.group(3).replace(",", ".")) + precio_total = float(match.group(4).replace(",", ".")) + products.append((fecha, cantidad, producto, precio_unitario, precio_total)) + continue + + # Coincide con líneas tipo: "1 CROISSANT RELL CACAO 1,90" + match_simple = re.match(r"(\d+)\s+(.*?)\s+(\d+,\d{2})$", line) + if match_simple: + cantidad = int(match_simple.group(1)) + producto = match_simple.group(2).strip().upper() + precio_total = float(match_simple.group(3).replace(",", ".")) + precio_unitario = precio_total / cantidad + products.append((fecha, cantidad, producto, round(precio_unitario, 2), precio_total)) + continue + + return products + +# Recolectar todos los datos de los tickets +datos = [] +for file in os.listdir(ticket_folder): + if file.endswith(".pdf"): + path = os.path.join(ticket_folder, file) + datos.extend(extract_data_from_pdf(path)) + +# Crear DataFrame +columnas = ["fecha", "cantidad", "producto", "precio_unitario", "precio_total"] +df = pd.DataFrame(datos, columns=columnas) +df.dropna(subset=["fecha"], inplace=True) + +# Guardar detalle completo +df.to_csv("detalle_productos.csv", index=False) + +# Agrupar por producto +resumen = df.groupby("producto").agg( + veces_comprado=("fecha", "count"), + total_unidades=("cantidad", "sum"), + gasto_total=("precio_total", "sum"), + primera_vez=("fecha", "min"), + ultima_vez=("fecha", "max") +).sort_values("gasto_total", ascending=False) +resumen.to_csv("resumen_productos.csv") + +# Gasto mensual +df["mes"] = df["fecha"].dt.to_period("M") +gasto_mensual = df.groupby("mes")["precio_total"].sum() +gasto_mensual.to_csv("gasto_mensual.csv") + +# Calcular próxima compra estimada por media de días entre compras +df["dias_entre_compras"] = df.groupby("producto")["fecha"].diff().dt.days +df["promedio_dias_entre_compras"] = df.groupby("producto")["dias_entre_compras"].transform("mean") +df["proxima_compra"] = df["fecha"] + pd.to_timedelta(df["promedio_dias_entre_compras"], unit='D') + +# Crear la lista estimada para la próxima compra (esta semana) +proxima_semana = datetime.now() + pd.Timedelta(days=7) +compra_estimacion = df[df["proxima_compra"] <= proxima_semana] + +# Guardar lista estimada +compra_estimacion.to_csv("compra_estimacion.csv", index=False) + +# Generar HTML visual +html = compra_estimacion[["producto", "cantidad", "precio_unitario", "precio_total", "proxima_compra"]].sort_values("proxima_compra").to_html(index=False) +with open("lista_compra_estimada.html", "w") as file: + file.write(html) + +print("\n✅ Todo listo. Archivos generados:") +print("- detalle_productos.csv") +print("- resumen_productos.csv") +print("- gasto_mensual.csv") +print("- compra_estimacion.csv") +print("- lista_compra_estimada.html") diff --git a/compra_estimacion.csv b/compra_estimacion.csv new file mode 100644 index 0000000..6545d2f --- /dev/null +++ b/compra_estimacion.csv @@ -0,0 +1,20 @@ +fecha,cantidad,producto,precio_unitario,precio_total,mes,dias_entre_compras,promedio_dias_entre_compras,proxima_compra +2025-01-16,14,ESTACIONES,0.16,2.2,2025-01,,27.5,2025-02-12 12:00:00.000000000 +2025-01-23,11,CORAZON ROMANA,0.1,1.1,2025-01,,62.0,2025-03-26 00:00:00.000000000 +2025-01-23,14,ESTACIONES,0.16,2.2,2025-01,7.0,27.5,2025-02-19 12:00:00.000000000 +2025-01-23,112,HUEVOS CAMPEROS,0.02,2.72,2025-01,,5.928571428571429,2025-01-28 22:17:08.571428568 +2025-01-29,112,HUEVOS CAMPEROS,0.02,2.72,2025-01,6.0,5.928571428571429,2025-02-03 22:17:08.571428568 +2025-02-07,112,HUEVOS CAMPEROS,0.02,2.72,2025-02,9.0,5.928571428571429,2025-02-12 22:17:08.571428568 +2025-02-13,26,HUEVOS CAMPEROS,1.65,3.3,2025-02,6.0,5.928571428571429,2025-02-18 22:17:08.571428568 +2025-02-20,112,HUEVOS CAMPEROS,0.02,2.72,2025-02,7.0,5.928571428571429,2025-02-25 22:17:08.571428568 +2025-02-27,112,HUEVOS CAMPEROS,0.02,2.72,2025-02,7.0,5.928571428571429,2025-03-04 22:17:08.571428568 +2025-03-05,112,HUEVOS CAMPEROS,0.03,3.22,2025-03,6.0,5.928571428571429,2025-03-10 22:17:08.571428568 +2025-03-12,24,ESTACIONES,2.2,4.4,2025-03,48.0,27.5,2025-04-08 12:00:00.000000000 +2025-03-12,112,HUEVOS CAMPEROS,0.03,3.22,2025-03,7.0,5.928571428571429,2025-03-17 22:17:08.571428568 +2025-03-20,112,HUEVOS CAMPEROS,0.03,3.22,2025-03,8.0,5.928571428571429,2025-03-25 22:17:08.571428568 +2025-03-26,112,HUEVOS CAMPEROS,0.03,3.22,2025-03,6.0,5.928571428571429,2025-03-31 22:17:08.571428568 +2025-03-26,16,HUEVOS CAMPEROS,0.12,1.9,2025-03,0.0,5.928571428571429,2025-03-31 22:17:08.571428568 +2025-04-03,112,HUEVOS CAMPEROS,0.03,3.22,2025-04,8.0,5.928571428571429,2025-04-08 22:17:08.571428568 +2025-04-10,16,HUEVOS CAMPEROS,0.12,1.9,2025-04,7.0,5.928571428571429,2025-04-15 22:17:08.571428568 +2025-04-10,112,HUEVOS CAMPEROS,0.03,3.22,2025-04,0.0,5.928571428571429,2025-04-15 22:17:08.571428568 +2025-04-16,112,HUEVOS CAMPEROS,0.03,3.22,2025-04,6.0,5.928571428571429,2025-04-21 22:17:08.571428568 diff --git a/detalle_productos.csv b/detalle_productos.csv new file mode 100644 index 0000000..8fc4573 --- /dev/null +++ b/detalle_productos.csv @@ -0,0 +1,25 @@ +fecha,cantidad,producto,precio_unitario,precio_total +2025-01-02,1200,SERVIL. BLANCAS,0.0,1.25 +2025-01-09,230,B.ENVASES C.FÁCIL,1.65,3.3 +2025-01-09,340,B.MINI PAPELERA,1.35,4.05 +2025-01-16,14,ESTACIONES,0.16,2.2 +2025-01-23,11,CORAZON ROMANA,0.1,1.1 +2025-01-23,14,ESTACIONES,0.16,2.2 +2025-01-23,112,HUEVOS CAMPEROS,0.02,2.72 +2025-01-29,112,HUEVOS CAMPEROS,0.02,2.72 +2025-01-29,13,"RECIPIENTES 0,5L",0.16,2.05 +2025-02-07,112,HUEVOS CAMPEROS,0.02,2.72 +2025-02-13,26,HUEVOS CAMPEROS,1.65,3.3 +2025-02-20,112,HUEVOS CAMPEROS,0.02,2.72 +2025-02-27,112,HUEVOS CAMPEROS,0.02,2.72 +2025-03-05,112,HUEVOS CAMPEROS,0.03,3.22 +2025-03-12,24,ESTACIONES,2.2,4.4 +2025-03-12,112,HUEVOS CAMPEROS,0.03,3.22 +2025-03-20,112,HUEVOS CAMPEROS,0.03,3.22 +2025-03-26,11,CORAZON ROMANA,0.1,1.1 +2025-03-26,112,HUEVOS CAMPEROS,0.03,3.22 +2025-03-26,16,HUEVOS CAMPEROS,0.12,1.9 +2025-04-03,112,HUEVOS CAMPEROS,0.03,3.22 +2025-04-10,16,HUEVOS CAMPEROS,0.12,1.9 +2025-04-10,112,HUEVOS CAMPEROS,0.03,3.22 +2025-04-16,112,HUEVOS CAMPEROS,0.03,3.22 diff --git a/gasto_mensual.csv b/gasto_mensual.csv new file mode 100644 index 0000000..85f689a --- /dev/null +++ b/gasto_mensual.csv @@ -0,0 +1,5 @@ +mes,precio_total +2025-01,21.59 +2025-02,11.46 +2025-03,20.28 +2025-04,11.56 diff --git a/grafico_precios_productos.png b/grafico_precios_productos.png new file mode 100644 index 0000000..8fa3d11 Binary files /dev/null and b/grafico_precios_productos.png differ diff --git a/importar_tickets.py b/importar_tickets.py new file mode 100644 index 0000000..2d39a15 --- /dev/null +++ b/importar_tickets.py @@ -0,0 +1,94 @@ +import os +import re +from datetime import datetime +import mysql.connector +from PyPDF2 import PdfReader + +# Configura tu conexión +DB_CONFIG = { + 'host': 'tecnologia-facil.es', + 'user': 'tatvil', + 'password': 'Eavne,e1m', + 'database': 'autocompra' +} + +TICKETS_DIR = './tickets' + +def extraer_datos_pdf(ruta_pdf): + reader = PdfReader(ruta_pdf) + texto = "" + for page in reader.pages: + texto += page.extract_text() + "\n" + + # Fecha + match_fecha = re.search(r"(\d{2}/\d{2}/\d{4})", texto) + fecha = datetime.strptime(match_fecha.group(1), "%d/%m/%Y") if match_fecha else None + + # Total + match_total = re.search(r"TOTAL\s*\(?€?\)?\s*(\d+,\d{2})", texto) + total = float(match_total.group(1).replace(",", ".")) if match_total else 0.0 + + # Método de pago + metodo = "Tarjeta" if "TARJETA" in texto.upper() else "Efectivo" + + # Productos + productos = [] + for linea in texto.splitlines(): + linea = linea.strip() + if re.match(r".*TOTAL.*|TARJETA|IVA|CUOTA|BASE|AUT:|VERIFICADO|N\.C:|IMPORTE|DEVOLUCIONES", linea, re.IGNORECASE): + continue + + match = re.match(r"(\d+)\s+(.*?)\s+(\d+,\d{2})\s+(\d+,\d{2})", linea) + if match: + cantidad = int(match.group(1)) + nombre = match.group(2).strip().upper() + precio_unitario = float(match.group(3).replace(",", ".")) + precio_total = float(match.group(4).replace(",", ".")) + productos.append((nombre, cantidad, precio_unitario, precio_total)) + else: + match_simple = re.match(r"1\s+(.*?)\s+(\d+,\d{2})", linea) + if match_simple: + nombre = match_simple.group(1).strip().upper() + precio = float(match_simple.group(2).replace(",", ".")) + productos.append((nombre, 1, precio, precio)) + + return fecha, total, metodo, productos + +def insertar_en_bd(fecha, total, metodo, productos, cursor): + cursor.execute( + "INSERT INTO tickets (fecha, total, metodo_pago) VALUES (%s, %s, %s)", + (fecha, total, metodo) + ) + ticket_id = cursor.lastrowid + + for nombre, cantidad, precio_unitario, precio_total in productos: + cursor.execute( + "INSERT INTO productos (ticket_id, nombre, cantidad, precio_unitario, precio_total) VALUES (%s, %s, %s, %s, %s)", + (ticket_id, nombre, cantidad, precio_unitario, precio_total) + ) + +def procesar_todos_los_pdfs(): + conn = mysql.connector.connect(**DB_CONFIG) + cursor = conn.cursor() + + for archivo in os.listdir(TICKETS_DIR): + if archivo.lower().endswith(".pdf"): + ruta = os.path.join(TICKETS_DIR, archivo) + print(f"📄 Procesando: {archivo}") + try: + fecha, total, metodo, productos = extraer_datos_pdf(ruta) + if fecha and productos: + insertar_en_bd(fecha, total, metodo, productos, cursor) + print(f"✅ Insertado: {len(productos)} productos (fecha {fecha.strftime('%d/%m/%Y')})") + else: + print(f"⚠️ No se pudo extraer la información de {archivo}") + except Exception as e: + print(f"❌ Error procesando {archivo}: {e}") + + conn.commit() + cursor.close() + conn.close() + print("🎉 Proceso finalizado.") + +if __name__ == "__main__": + procesar_todos_los_pdfs() diff --git a/index.html b/index.html new file mode 100644 index 0000000..531243f --- /dev/null +++ b/index.html @@ -0,0 +1,128 @@ + + + + + Mi Lista de la Compra + + + +

Mi Lista de la Compra

+ +

Subir ticket PDF

+ + + + +

Productos frecuentes

+ + +

Añadir producto manualmente

+ + + + +

Lista generada

+ + + + +

Predicción de productos

+ + + + + + + diff --git a/lista_compra_estimada.html b/lista_compra_estimada.html new file mode 100644 index 0000000..6fcdcee --- /dev/null +++ b/lista_compra_estimada.html @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
productocantidadprecio_unitarioprecio_totalproxima_compra
HUEVOS CAMPEROS1120.022.722025-01-28 22:17:08.571428568
HUEVOS CAMPEROS1120.022.722025-02-03 22:17:08.571428568
ESTACIONES140.162.202025-02-12 12:00:00.000000000
HUEVOS CAMPEROS1120.022.722025-02-12 22:17:08.571428568
HUEVOS CAMPEROS261.653.302025-02-18 22:17:08.571428568
ESTACIONES140.162.202025-02-19 12:00:00.000000000
HUEVOS CAMPEROS1120.022.722025-02-25 22:17:08.571428568
HUEVOS CAMPEROS1120.022.722025-03-04 22:17:08.571428568
HUEVOS CAMPEROS1120.033.222025-03-10 22:17:08.571428568
HUEVOS CAMPEROS1120.033.222025-03-17 22:17:08.571428568
HUEVOS CAMPEROS1120.033.222025-03-25 22:17:08.571428568
CORAZON ROMANA110.101.102025-03-26 00:00:00.000000000
HUEVOS CAMPEROS1120.033.222025-03-31 22:17:08.571428568
HUEVOS CAMPEROS160.121.902025-03-31 22:17:08.571428568
ESTACIONES242.204.402025-04-08 12:00:00.000000000
HUEVOS CAMPEROS1120.033.222025-04-08 22:17:08.571428568
HUEVOS CAMPEROS1120.033.222025-04-15 22:17:08.571428568
HUEVOS CAMPEROS160.121.902025-04-15 22:17:08.571428568
HUEVOS CAMPEROS1120.033.222025-04-21 22:17:08.571428568
\ No newline at end of file diff --git a/lista_compra_estimado.csv b/lista_compra_estimado.csv new file mode 100644 index 0000000..53c4e86 --- /dev/null +++ b/lista_compra_estimado.csv @@ -0,0 +1,492 @@ +producto,diferencia_dias,proxima_compra_estimado,fecha_estimada_proxima_compra +1Champiñón Grande Ban,0.0,2025-04-16 00:00:00.000000000,16/04/2025 +%,2.0392156862745097,2025-04-18 00:56:28.235294116,18/04/2025 +1Champiñon Limpio Lam,4.9411764705882355,2025-04-20 22:35:17.647058820,20/04/2025 +Tarjeta Bancaria,5.777777777777778,2025-04-21 18:40:00.000000001,21/04/2025 +Total,5.777777777777778,2025-04-21 18:40:00.000000001,21/04/2025 +Total (€),5.777777777777778,2025-04-21 18:40:00.000000001,21/04/2025 +1Q. Lonchas Light,6.0,2025-04-22 00:00:00.000000000,22/04/2025 +1+Prot Pud Caramelo,6.933333333333334,2025-04-22 22:23:59.999999997,22/04/2025 +1+Prot Natilla Vaini,6.933333333333334,2025-04-22 22:23:59.999999997,22/04/2025 +1Girasoles Quesos,7.0,2025-04-23 00:00:00.000000000,23/04/2025 +1Q. Lonchas Cremoso,7.0,2025-04-23 00:00:00.000000000,23/04/2025 +1Frankfurt Viena Pavo,7.0,2025-04-23 00:00:00.000000000,23/04/2025 +1Yogur Limon,7.0,2025-04-23 00:00:00.000000000,23/04/2025 +1Griego Natural,7.0,2025-04-23 00:00:00.000000000,23/04/2025 +14 Estaciones,7.0,2025-04-23 00:00:00.000000000,23/04/2025 +1+Prot Natilla Choco,7.0,2025-04-23 00:00:00.000000000,23/04/2025 +Fritada Pisto,7.0,2025-04-23 00:00:00.000000000,23/04/2025 +112 Huevos Camperos,7.545454545454546,2025-04-23 13:05:27.272727268,23/04/2025 +1Cebolla Dulce,8.0,2025-04-24 00:00:00.000000000,24/04/2025 +1Burger Espinacas,8.0,2025-04-24 00:00:00.000000000,24/04/2025 +1Uva Roja S/S,8.0,2025-04-24 00:00:00.000000000,24/04/2025 +1Pan M. 55% Centeno,8.666666666666666,2025-04-24 16:00:00.000000002,24/04/2025 +Griego Limón,8.818181818181818,2025-04-24 19:38:10.909090907,24/04/2025 +1Queso Cheddar Loncha,8.857142857142858,2025-04-24 20:34:17.142857146,24/04/2025 +1Pan M 35% Avena,8.909090909090908,2025-04-24 21:49:05.454545453,24/04/2025 +1Cebolla Tubo,9.0,2025-04-25 00:00:00.000000000,25/04/2025 +1Zumo Fresco 1/2 L,9.7,2025-04-25 16:48:00.000000000,25/04/2025 +1Q Rallado Fundir,10.0,2025-04-26 00:00:00.000000000,26/04/2025 +1Hummus Clasico,10.25,2025-04-26 06:00:00.000000000,26/04/2025 +Rebuenas,10.375,2025-04-26 09:00:00.000000000,26/04/2025 +Griego Natural,10.4,2025-04-26 09:36:00.000000000,26/04/2025 +1Mantequilla Past.Con,10.5,2025-04-26 12:00:00.000000000,26/04/2025 +Café Cleche D.Gusto,10.88888888888889,2025-04-26 21:20:00.000000000,26/04/2025 +1Yogur Sabor Coco,10.88888888888889,2025-04-26 21:20:00.000000000,26/04/2025 +1Tortilla Pat C/Ceb,11.25,2025-04-27 06:00:00.000000000,27/04/2025 +1Patata Roja,11.857142857142858,2025-04-27 20:34:17.142857146,27/04/2025 +1Zanahoria Bolsa,12.0,2025-04-28 00:00:00.000000000,28/04/2025 +1Queso Vaca Havarti,12.25,2025-04-28 06:00:00.000000000,28/04/2025 +Yogur Limon,12.25,2025-04-28 06:00:00.000000000,28/04/2025 +Croissant Rell Cacao,12.4,2025-04-28 09:36:00.000000000,28/04/2025 +1Lenteja,13.0,2025-04-29 00:00:00.000000000,29/04/2025 +1Choc 85% Cacao,13.5,2025-04-29 12:00:00.000000000,29/04/2025 +1Limpiador Dentadura,13.5,2025-04-29 12:00:00.000000000,29/04/2025 +1Seta Laminada,13.75,2025-04-29 18:00:00.000000000,29/04/2025 +Tom. Receta Artesana,13.857142857142858,2025-04-29 20:34:17.142857146,29/04/2025 +1Queso Cottage,14.0,2025-04-30 00:00:00.000000000,30/04/2025 +1Judia Redonda 500 G,14.0,2025-04-30 00:00:00.000000000,30/04/2025 +1Griego Limón,14.0,2025-04-30 00:00:00.000000000,30/04/2025 +1Tiburon,14.0,2025-04-30 00:00:00.000000000,30/04/2025 +Digestive Avena Choc,14.0,2025-04-30 00:00:00.000000000,30/04/2025 +1Papel Higienico 4 Ca,14.5,2025-04-30 12:00:00.000000000,30/04/2025 +Leche Semi P6,14.857142857142858,2025-04-30 20:34:17.142857146,30/04/2025 +1Caldo Verduras 12 P.,15.0,2025-05-01 00:00:00.000000000,01/05/2025 +1Choco Gotas Fundir,15.0,2025-05-01 00:00:00.000000000,01/05/2025 +16 Huevos Camperos,15.0,2025-05-01 00:00:00.000000000,01/05/2025 +1Gall Digestive,15.5,2025-05-01 12:00:00.000000000,01/05/2025 +1Nuez Natural,15.666666666666666,2025-05-01 16:00:00.000000002,01/05/2025 +1Judía Plana 750 Gr,16.0,2025-05-02 00:00:00.000000000,02/05/2025 +1Calabaza Trozos,16.333333333333332,2025-05-02 07:59:59.999999997,02/05/2025 +Patata Roja,16.333333333333332,2025-05-02 07:59:59.999999997,02/05/2025 +Cafe Molido Natural,16.6,2025-05-02 14:24:00.000000000,02/05/2025 +1Cuidacol Natural,17.0,2025-05-03 00:00:00.000000000,03/05/2025 +1Solomillo Añojo,17.5,2025-05-03 12:00:00.000000000,03/05/2025 +1Esp Verde Fino,18.0,2025-05-04 00:00:00.000000000,04/05/2025 +1Zanahoria 500 G,18.2,2025-05-04 04:48:00.000000000,04/05/2025 +1Tofu,18.333333333333332,2025-05-04 07:59:59.999999997,04/05/2025 +1Digestive Avena Choc,18.333333333333332,2025-05-04 07:59:59.999999997,04/05/2025 +1Mandarina 2 Kg,19.4,2025-05-05 09:36:00.000000000,05/05/2025 +1Crema Tex-Mex,20.75,2025-05-06 18:00:00.000000000,06/05/2025 +1Pan De Pueblo,21.0,2025-05-07 00:00:00.000000000,07/05/2025 +Mozzarella Fresca,21.0,2025-05-07 00:00:00.000000000,07/05/2025 +1Burger Berenjena,21.0,2025-05-07 00:00:00.000000000,07/05/2025 +1Pan 12 Cereal/Semill,21.0,2025-05-07 00:00:00.000000000,07/05/2025 +Plátano Manzana 120G,22.0,2025-05-08 00:00:00.000000000,08/05/2025 +Fresa Arándanos Aven,22.0,2025-05-08 00:00:00.000000000,08/05/2025 +Fresa Platano 120G,22.0,2025-05-08 00:00:00.000000000,08/05/2025 +1Mezcla 4 Quesos,22.666666666666668,2025-05-08 16:00:00.000000002,08/05/2025 +1Pistacho Tost 0% Sal,23.333333333333332,2025-05-09 07:59:59.999999997,09/05/2025 +1Gall Digestive Avena,24.0,2025-05-10 00:00:00.000000000,10/05/2025 +1Pan Campeon Mundo,24.25,2025-05-10 06:00:00.000000000,10/05/2025 +1Q Mitad Semi,24.5,2025-05-10 12:00:00.000000000,10/05/2025 +1Margarina Con Sal,24.5,2025-05-10 12:00:00.000000000,10/05/2025 +1Pan Moño,25.0,2025-05-11 00:00:00.000000000,11/05/2025 +1Ajo Seco 250 G,25.666666666666668,2025-05-11 16:00:00.000000002,11/05/2025 +1Croissant Rell Cacao,26.0,2025-05-12 00:00:00.000000000,12/05/2025 +Soja Con Chocolate,27.0,2025-05-13 00:00:00.000000000,13/05/2025 +Burger Berenjena,27.0,2025-05-13 00:00:00.000000000,13/05/2025 +"0,400 Kg 2,10 €/Kg",27.0,2025-05-13 00:00:00.000000000,13/05/2025 +1Gall Digestive Choco,27.5,2025-05-13 12:00:00.000000000,13/05/2025 +1Dátil Sin Hueso,27.5,2025-05-13 12:00:00.000000000,13/05/2025 +1Leche Semi Calcio,28.0,2025-05-14 00:00:00.000000000,14/05/2025 +1Uva Blanca S/Sem,28.0,2025-05-14 00:00:00.000000000,14/05/2025 +1+ Proteínas Flan,28.0,2025-05-14 00:00:00.000000000,14/05/2025 +1Cebolla Roja,28.0,2025-05-14 00:00:00.000000000,14/05/2025 +1Atun Claro Natural,28.0,2025-05-14 00:00:00.000000000,14/05/2025 +1Mermelada Fresa,28.0,2025-05-14 00:00:00.000000000,14/05/2025 +1Queso Emmental Taco,28.666666666666668,2025-05-14 16:00:00.000000002,14/05/2025 +1Levadura Panaderia,29.0,2025-05-15 00:00:00.000000000,15/05/2025 +1Seta Bandeja,29.0,2025-05-15 00:00:00.000000000,15/05/2025 +Arroz Sos,30.333333333333332,2025-05-16 07:59:59.999999997,16/05/2025 +1Hogaza Centeno 50%,31.0,2025-05-17 00:00:00.000000000,17/05/2025 +Nata Para Cocinar,33.0,2025-05-19 00:00:00.000000000,19/05/2025 +1Crema 100% Cacahuete,33.0,2025-05-19 00:00:00.000000000,19/05/2025 +1Salsa De Soja Salada,34.0,2025-05-20 00:00:00.000000000,20/05/2025 +1Tortillas Mexicanas,34.0,2025-05-20 00:00:00.000000000,20/05/2025 +1P. Pav Red. Sal Bipa,35.0,2025-05-21 00:00:00.000000000,21/05/2025 +1Fresh 0%Alcohol Enj.,35.0,2025-05-21 00:00:00.000000000,21/05/2025 +1Pañuelo Locion,35.0,2025-05-21 00:00:00.000000000,21/05/2025 +1Cebolla 2 Kg,35.0,2025-05-21 00:00:00.000000000,21/05/2025 +1Leche Semi P6,35.0,2025-05-21 00:00:00.000000000,21/05/2025 +Ravioli Req.Espinaca,35.0,2025-05-21 00:00:00.000000000,21/05/2025 +Macarron,38.5,2025-05-24 12:00:00.000000000,24/05/2025 +Caramelo Eucaliptus,38.5,2025-05-24 12:00:00.000000000,24/05/2025 +1Croissant,41.0,2025-05-27 00:00:00.000000000,27/05/2025 +Fresh 0%Alcohol Enj.,41.5,2025-05-27 12:00:00.000000000,27/05/2025 +1Miel De Flores Kg,42.0,2025-05-28 00:00:00.000000000,28/05/2025 +1Azúcar Moreno 1Kg,42.0,2025-05-28 00:00:00.000000000,28/05/2025 +1Mozzarella Fresca,42.0,2025-05-28 00:00:00.000000000,28/05/2025 +Medialunas Calabaza,42.0,2025-05-28 00:00:00.000000000,28/05/2025 +1Batido Cacao Energy,42.0,2025-05-28 00:00:00.000000000,28/05/2025 +Azucar,42.0,2025-05-28 00:00:00.000000000,28/05/2025 +Leche Semi Calcio,55.0,2025-06-10 00:00:00.000000000,10/06/2025 +Tortilla Pat C/Ceb,55.0,2025-06-10 00:00:00.000000000,10/06/2025 +1Cacao Puro 0%,55.0,2025-06-10 00:00:00.000000000,10/06/2025 +1Espinaca Picada,56.0,2025-06-11 00:00:00.000000000,11/06/2025 +1Pan Sem Y P Calabaza,56.0,2025-06-11 00:00:00.000000000,11/06/2025 +11 Corazon Romana,62.0,2025-06-17 00:00:00.000000000,17/06/2025 +1Caramelos Lima 0%,62.0,2025-06-17 00:00:00.000000000,17/06/2025 +1Pan Tostado Clasico,62.0,2025-06-17 00:00:00.000000000,17/06/2025 +1Galleta Canela,69.0,2025-06-24 00:00:00.000000000,24/06/2025 +Spaghetti,70.0,2025-06-25 00:00:00.000000000,25/06/2025 +1Salsa Fresca Quesos,70.0,2025-06-25 00:00:00.000000000,25/06/2025 +1Vela Te Chai,76.0,2025-07-01 00:00:00.000000000,01/07/2025 +1Champu Extra Suave,76.0,2025-07-01 00:00:00.000000000,01/07/2025 +1Grana Padano Escamas,83.0,2025-07-08 00:00:00.000000000,08/07/2025 +1Coca-Cola 12 Latas,84.0,2025-07-09 00:00:00.000000000,09/07/2025 +1Vaselina Aroma Framb,84.0,2025-07-09 00:00:00.000000000,09/07/2025 +1Nidos Al Huevo,97.0,2025-07-22 00:00:00.000000000,22/07/2025 +1Spaghetti,104.0,2025-07-29 00:00:00.000000000,29/07/2025 +"0,064 Kg 5,00 €/Kg",,, +"0,190 Kg 2,70 €/Kg",,, +"0,202 Kg 2,39 €/Kg",,, +"0,220 Kg 2,90 €/Kg",,, +"0,234 Kg 3,40 €/Kg",,, +"0,242 Kg 2,29 €/Kg",,, +"0,242 Kg 3,40 €/Kg",,, +"0,242 Kg 5,10 €/Kg",,, +"0,250 Kg 2,70 €/Kg",,, +"0,258 Kg 5,00 €/Kg",,, +"0,260 Kg 5,10 €/Kg",,, +"0,272 Kg 2,39 €/Kg",,, +"0,324 Kg 1,94 €/Kg",,, +"0,336 Kg 2,19 €/Kg",,, +"0,352 Kg 2,45 €/Kg",,, +"0,354 Kg 3,16 €/Kg",,, +"0,354 Kg 5,10 €/Kg",,, +"0,356 Kg 1,94 €/Kg",,, +"0,358 Kg 2,45 €/Kg",,, +"0,390 Kg 5,00 €/Kg",,, +"0,402 Kg 2,19 €/Kg",,, +"0,410 Kg 2,10 €/Kg",,, +"0,488 Kg 2,70 €/Kg",,, +"0,504 Kg 2,19 €/Kg",,, +"0,512 Kg 3,16 €/Kg",,, +"0,518 Kg 2,19 €/Kg",,, +"0,552 Kg 2,55 €/Kg",,, +"0,610 Kg 2,19 €/Kg",,, +"0,632 Kg 5,00 €/Kg",,, +"0,668 Kg 3,20 €/Kg",,, +"0,678 Kg 1,75 €/Kg",,, +"0,688 Kg 2,29 €/Kg",,, +"0,694 Kg 1,94 €/Kg",,, +"0,694 Kg 2,05 €/Kg",,, +"0,694 Kg 2,29 €/Kg",,, +"0,696 Kg 2,29 €/Kg",,, +"0,730 Kg 2,59 €/Kg",,, +"0,746 Kg 3,20 €/Kg",,, +"0,748 Kg 2,29 €/Kg",,, +"0,802 Kg 2,29 €/Kg",,, +"0,806 Kg 2,20 €/Kg",,, +"0,830 Kg 2,60 €/Kg",,, +"0,872 Kg 1,75 €/Kg",,, +"0,874 Kg 1,65 €/Kg",,, +"0,882 Kg 2,60 €/Kg",,, +"0,884 Kg 1,75 €/Kg",,, +"0,888 Kg 2,28 €/Kg",,, +"0,896 Kg 2,90 €/Kg",,, +"0,914 Kg 2,60 €/Kg",,, +"0,916 Kg 2,59 €/Kg",,, +"0,918 Kg 2,90 €/Kg",,, +"0,922 Kg 2,14 €/Kg",,, +"0,936 Kg 2,00 €/Kg",,, +"0,948 Kg 1,89 €/Kg",,, +"0,952 Kg 2,10 €/Kg",,, +"0,954 Kg 2,05 €/Kg",,, +"0,958 Kg 1,31 €/Kg",,, +"0,960 Kg 2,90 €/Kg",,, +"0,984 Kg 2,59 €/Kg",,, +"0,986 Kg 1,89 €/Kg",,, +"0,988 Kg 2,00 €/Kg",,, +"0,990 Kg 1,75 €/Kg",,, +"0,992 Kg 1,75 €/Kg",,, +1+ Proteínas Fresa,,, +1+Prot Pla-Açaí,,, +1+Proteinas Stracciat,,, +"1,012 Kg 2,59 €/Kg",,, +"1,032 Kg 2,59 €/Kg",,, +"1,048 Kg 2,60 €/Kg",,, +"1,054 Kg 2,90 €/Kg",,, +"1,056 Kg 2,14 €/Kg",,, +"1,084 Kg 1,59 €/Kg",,, +"1,094 Kg 1,75 €/Kg",,, +"1,128 Kg 1,99 €/Kg",,, +"1,130 Kg 1,39 €/Kg",,, +"1,150 Kg 1,75 €/Kg",,, +"1,154 Kg 2,29 €/Kg",,, +"1,158 Kg 2,05 €/Kg",,, +"1,168 Kg 2,59 €/Kg",,, +"1,198 Kg 2,00 €/Kg",,, +"1,212 Kg 2,00 €/Kg",,, +"1,226 Kg 2,29 €/Kg",,, +"1,244 Kg 2,00 €/Kg",,, +"1,254 Kg 1,75 €/Kg",,, +"1,306 Kg 2,14 €/Kg",,, +"1,314 Kg 1,30 €/Kg",,, +"1,328 Kg 2,00 €/Kg",,, +"1,334 Kg 2,29 €/Kg",,, +"1,336 Kg 1,75 €/Kg",,, +"1,356 Kg 2,14 €/Kg",,, +"1,382 Kg 2,59 €/Kg",,, +"1,418 Kg 1,75 €/Kg",,, +"1,442 Kg 2,15 €/Kg",,, +"1,452 Kg 2,70 €/Kg",,, +"1,490 Kg 3,20 €/Kg",,, +"1,592 Kg 1,99 €/Kg",,, +"1,626 Kg 2,14 €/Kg",,, +"1,664 Kg 2,59 €/Kg",,, +"1,714 Kg 1,99 €/Kg",,, +"1,722 Kg 2,14 €/Kg",,, +"1,740 Kg 2,95 €/Kg",,, +"1,788 Kg 3,20 €/Kg",,, +"1,978 Kg 2,45 €/Kg",,, +1200 Servil. Blancas,,, +"13 Recipientes 0,5L",,, +1A. Negras S/Hueso,,, +1Aceite De Girasol,,, +1Aceite Ricino,,, +1Aceite V.Extra,,, +1Aceituna Chupadedos,,, +1Agua Facial Avena,,, +1Agua Oxigenada,,, +1Ajo Granulado,,, +1Albahaca,,, +1Allioli Tarrina,,, +1Alpro Skyr Fresa,,, +1Ambientador Conc.Del,,, +1Anacardo Natural,,, +1Apio Verde,,, +1Arena Aglomerante,,, +1Arroz Albufera,,, +1Atún Claro Oliva Pk6,,, +1Avena Molida,,, +1Azucar,,, +1Bayeta Microfibra Cr,,, +1Beber Fresa,,, +1Bicarbonato Kilo,,, +1Burrata,,, +1C. Eucalipto 0%,,, +1C. Vitamina K,,, +1Caballa Ft Oliva Bpk,,, +1Cacahuete Frito Miel,,, +1Café Soluble Classic,,, +1Carbon Vegetal,,, +1Cebolla Caramelizada,,, +1Cepillo Infantil,,, +1Cera Depil Cazuela,,, +1Cera Mate,,, +1Champú Family,,, +1Choco Fundir Blanco,,, +1Choco Fundir Negro,,, +1Chocodays,,, +1Chía,,, +1Cocktail Natural,,, +1Cola Cao,,, +1Comprimidos Dormir,,, +1Conos,,, +1Contra Des Certifica,,, +1Cortauñas,,, +1Cous Cous,,, +1Crema Avellana Cacao,,, +1Crema De Verduras,,, +1Cristales Multiusos,,, +1Cuidacol Fresa,,, +1Cápsulas Valeriana,,, +1Det Blanca Y Color,,, +1Det Polvo Mano,,, +1Doritos Bits,,, +1Encendedor Mini,,, +1Esponja Vegetal,,, +1Extrait De Ámbar,,, +1Fanta Limón X9,,, +1Fideo Cabello,,, +1Filete Salmón,,, +1Fingers De Queso,,, +1Fluido Hidrat Oil Fr,,, +1Fosforos Madera Gran,,, +1Galleta Rell Crema,,, +1Galletas Mantequilla,,, +1Garbanzo Pedrosillan,,, +1Gel Hidroalcohólico,,, +1Gel Hidrotermal,,, +1Gel Limpiador Facial,,, +1Gel Wc C/ Lejía,,, +1Gnocchi Quesos,,, +1Golosinas Mix Azúcar,,, +1Grana Padano Rallado,,, +1Guisante Fino,,, +1Guisantes,,, +1Hamburguesa,,, +1Hamburguesa De Lomo,,, +1Harina De Trigo 5Kg.,,, +1Helices Lenteja Roja,,, +1Higienico Doble Roll,,, +1Humus Kalamata,,, +1Impulsor,,, +1Infusion Dormir,,, +1Infusion Respir,,, +1Kéfir Vegetal Coco,,, +1Kétchup,,, +1Lasaña Precocida,,, +1Leche Entera P6,,, +1Leche Sem S/Lact P6,,, +1Limpiador Conc. Aloe,,, +1Limpiador Vitro,,, +1Loción Hidrata,,, +1Lote 3 Bayetas Peq.,,, +1Lote Cepillo Oral B,,, +1Ls Albondigas Patata,,, +1Lágrimas Hidratantes,,, +1M.Croiss Mantequilla,,, +1Manzana Golden Bolsa,,, +1Marias Doradas,,, +1Mascarilla Natural,,, +1Melocotón-Uva P6,,, +1Merm. Melocotón,,, +1Mermelada Albaricoqu,,, +1Mermelada Higo,,, +1Miel De Flores Dosif,,, +1Mini Taquitos Jamon,,, +1Mixtura Can/Jilguero,,, +"1Molde 1,5",,, +1Mousse Protein Choco,,, +1Muesli C/Chocolate,,, +1Multiusos,,, +1Nachos,,, +1Naranja 5 Kg.,,, +1Naranja Malla 3 Kg,,, +1Nata Para Cocinar,,, +1Negro 99% Cacao,,, +1Orégano,,, +1Pajaritas Vegetales,,, +1Palillos Redondos,,, +1Pan Blanco,,, +1Pan De Leche,,, +1Pan M. Brioche,,, +1Pan Pita,,, +1Pan Torrijas,,, +1Papel Vegetal 30H,,, +1Pastilla Cisterna,,, +1Patata Guarn. 1 Kg.,,, +1Patatas Corte Grueso,,, +1Pañuelo Caja,,, +1Pechuga De Pollo 92%,,, +1Perejil,,, +1Piadina 4 Unidades,,, +1Pimiento Semipicante,,, +1Pimiento Trico,,, +1Piña S/Az Añadido P6,,, +1Plumero Atra.3 Reca,,, +1Polvo Talco,,, +1Posavajillas,,, +1Pringles Onion,,, +1Pringles Original,,, +1Proteina 0% Natural,,, +1Q Rallado Emmental,,, +1Q. Lonchas Edam Tier,,, +1Q. Maasdam Tierno,,, +1Q. Untar Suave,,, +1Queso Blanco Natural,,, +1Queso Feta,,, +1Queso Fresco Burgos,,, +1Queso Gouda Lonchas,,, +1Queso Rallado Pizza,,, +1Queso Rallado Polvo,,, +1Recambio Antihumedad,,, +1Regaña,,, +1Remolacha En Tiras,,, +1Repollo Liso Partido,,, +1Repollo Rizado P,,, +1Roja Acidulce Bolsa,,, +1Rollo Hogar Doble,,, +1Ron Añejo,,, +1Rooibos Citrico,,, +1Roscón Relleno,,, +1Sal Yodada,,, +1Salsa Barbacoa,,, +1Salsa De Queso,,, +1Salsa De Trufa,,, +1Salsa Pesto,,, +1Salsa Pesto Fresco,,, +1Salsa Piri Piri,,, +1Salsa Ranchera,,, +1Salsa Soja S/Gluten,,, +1Sardinillas A.Oliva,,, +1Sazonador Pasta,,, +1Sirope C. Avellana,,, +1Soja Con Chocolate,,, +1Soja Mango,,, +1Spray Própolis,,, +1T. 100%Integrales,,, +1Te Matcha,,, +1Te Verde Hierbabuena,,, +1Tijera Uñas,,, +1Tiras Fritas,,, +1Toallitas Limpiagafa,,, +1Tomate Concentrado,,, +1Tortita Maiz C/Choco,,, +1Tortitas De Maiz,,, +1Tónico Árbol De Té,,, +1Vela Cifra 2 V2,,, +1Vela Cifra 4 V2,,, +1Vela Vainilla,,, +1Velas Toffee,,, +1Virgen Extra 500,,, +1Xuxes Top Ten,,, +1Yakisoba Clásico,,, +1Yogur Cabra,,, +1Yogur Fresa,,, +1Zumo Manzana Pack,,, +1Árbol Del Té,,, +"2,050 Kg 2,45 €/Kg",,, +"2,116 Kg 1,75 €/Kg",,, +"2,130 Kg 2,95 €/Kg",,, +"2,158 Kg 1,99 €/Kg",,, +"2,468 Kg 1,99 €/Kg",,, +Abrillantador Lavav.,,, +Amb C Fru Silvestres,,, +Arena Aglomerante,,, +Atún Claro Oliva Pk6,,, +Azúcar Moreno 1Kg,,, +B.Envases C.Fácil,,, +B.Mini Papelera,,, +Bastoncillo Famil,,, +Cacahuete Sin Sal,,, +Caldo Verduras 12 P.,,, +Cebolla Tierna,,, +Cepillo Pack-3 Medio,,, +Conejo Choco Leche,,, +Crema Calabaza,,, +Escobilla Wc,,, +Espinaca Cortada,,, +Estaciones,,, +Fosforos Madera Gran,,, +Frieg.Insecticida,,, +Fruta Variada 120G,,, +Garbanzo Pedrosillan,,, +Gnocchi Quesos,,, +Golác.Fresa-Plátano,,, +Higienico Doble Roll,,, +Huevos Camperos,,, +Judía Plana 350 Gr,,, +Lenteja Pardina,,, +Limpiador Wc Polvo,,, +Marias Doradas,,, +Mascarilla Quirúr.,,, +Mezcla 4 Quesos,,, +Minis Leche Avellana,,, +Noodle Sabor Picante,,, +Noodle Sabor Pollo,,, +Pastillas Desinfect,,, +Pizza Margarita,,, +Queso Blanco Natural,,, +Refill Dermo,,, +Rollo Hogar Doble,,, +Salsa Ligera,,, +Sardinilla Re. Sal O,,, +Tofu,,, +Tom.Frito Est.Casero,,, +Tortillas Mexicanas,,, +Yak Soja Cup,,, +Ñoquis De Patata,,, diff --git a/lista_compra_estimado.html b/lista_compra_estimado.html new file mode 100644 index 0000000..3665138 --- /dev/null +++ b/lista_compra_estimado.html @@ -0,0 +1,3006 @@ + + + + + + + Lista de la Compra Estimada + + + + +

Lista de la Compra Estimada

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ProductoDías Promedio entre ComprasFecha Estimada de la Próxima Compra
1Champiñón Grande Ban016/04/2025
%218/04/2025
1Champiñon Limpio Lam520/04/2025
Tarjeta Bancaria621/04/2025
Total621/04/2025
Total (€)621/04/2025
1Q. Lonchas Light622/04/2025
1+Prot Pud Caramelo722/04/2025
1+Prot Natilla Vaini722/04/2025
1Girasoles Quesos723/04/2025
1Q. Lonchas Cremoso723/04/2025
1Frankfurt Viena Pavo723/04/2025
1Yogur Limon723/04/2025
1Griego Natural723/04/2025
14 Estaciones723/04/2025
1+Prot Natilla Choco723/04/2025
Fritada Pisto723/04/2025
112 Huevos Camperos823/04/2025
1Cebolla Dulce824/04/2025
1Burger Espinacas824/04/2025
1Uva Roja S/S824/04/2025
1Pan M. 55% Centeno924/04/2025
Griego Limón924/04/2025
1Queso Cheddar Loncha924/04/2025
1Pan M 35% Avena924/04/2025
1Cebolla Tubo925/04/2025
1Zumo Fresco 1/2 L1025/04/2025
1Q Rallado Fundir1026/04/2025
1Hummus Clasico1026/04/2025
Rebuenas1026/04/2025
Griego Natural1026/04/2025
1Mantequilla Past.Con1026/04/2025
Café Cleche D.Gusto1126/04/2025
1Yogur Sabor Coco1126/04/2025
1Tortilla Pat C/Ceb1127/04/2025
1Patata Roja1227/04/2025
1Zanahoria Bolsa1228/04/2025
1Queso Vaca Havarti1228/04/2025
Yogur Limon1228/04/2025
Croissant Rell Cacao1228/04/2025
1Lenteja1329/04/2025
1Choc 85% Cacao1429/04/2025
1Limpiador Dentadura1429/04/2025
1Seta Laminada1429/04/2025
Tom. Receta Artesana1429/04/2025
1Queso Cottage1430/04/2025
1Judia Redonda 500 G1430/04/2025
1Griego Limón1430/04/2025
1Tiburon1430/04/2025
Digestive Avena Choc1430/04/2025
1Papel Higienico 4 Ca1430/04/2025
Leche Semi P61530/04/2025
1Caldo Verduras 12 P.1501/05/2025
1Choco Gotas Fundir1501/05/2025
16 Huevos Camperos1501/05/2025
1Gall Digestive1601/05/2025
1Nuez Natural1601/05/2025
1Judía Plana 750 Gr1602/05/2025
1Calabaza Trozos1602/05/2025
Patata Roja1602/05/2025
Cafe Molido Natural1702/05/2025
1Cuidacol Natural1703/05/2025
1Solomillo Añojo1803/05/2025
1Esp Verde Fino1804/05/2025
1Zanahoria 500 G1804/05/2025
1Tofu1804/05/2025
1Digestive Avena Choc1804/05/2025
1Mandarina 2 Kg1905/05/2025
1Crema Tex-Mex2106/05/2025
1Pan De Pueblo2107/05/2025
Mozzarella Fresca2107/05/2025
1Burger Berenjena2107/05/2025
1Pan 12 Cereal/Semill2107/05/2025
Plátano Manzana 120G2208/05/2025
Fresa Arándanos Aven2208/05/2025
Fresa Platano 120G2208/05/2025
1Mezcla 4 Quesos2308/05/2025
1Pistacho Tost 0% Sal2309/05/2025
1Gall Digestive Avena2410/05/2025
1Pan Campeon Mundo2410/05/2025
1Q Mitad Semi2410/05/2025
1Margarina Con Sal2410/05/2025
1Pan Moño2511/05/2025
1Ajo Seco 250 G2611/05/2025
1Croissant Rell Cacao2612/05/2025
Soja Con Chocolate2713/05/2025
Burger Berenjena2713/05/2025
0,400 Kg 2,10 €/Kg2713/05/2025
1Gall Digestive Choco2813/05/2025
1Dátil Sin Hueso2813/05/2025
1Leche Semi Calcio2814/05/2025
1Uva Blanca S/Sem2814/05/2025
1+ Proteínas Flan2814/05/2025
1Cebolla Roja2814/05/2025
1Atun Claro Natural2814/05/2025
1Mermelada Fresa2814/05/2025
1Queso Emmental Taco2914/05/2025
1Levadura Panaderia2915/05/2025
1Seta Bandeja2915/05/2025
Arroz Sos3016/05/2025
1Hogaza Centeno 50%3117/05/2025
Nata Para Cocinar3319/05/2025
1Crema 100% Cacahuete3319/05/2025
1Salsa De Soja Salada3420/05/2025
1Tortillas Mexicanas3420/05/2025
1P. Pav Red. Sal Bipa3521/05/2025
1Fresh 0%Alcohol Enj.3521/05/2025
1Pañuelo Locion3521/05/2025
1Cebolla 2 Kg3521/05/2025
1Leche Semi P63521/05/2025
Ravioli Req.Espinaca3521/05/2025
Macarron3824/05/2025
Caramelo Eucaliptus3824/05/2025
1Croissant4127/05/2025
Fresh 0%Alcohol Enj.4227/05/2025
1Miel De Flores Kg4228/05/2025
1Azúcar Moreno 1Kg4228/05/2025
1Mozzarella Fresca4228/05/2025
Medialunas Calabaza4228/05/2025
1Batido Cacao Energy4228/05/2025
Azucar4228/05/2025
Leche Semi Calcio5510/06/2025
Tortilla Pat C/Ceb5510/06/2025
1Cacao Puro 0%5510/06/2025
1Espinaca Picada5611/06/2025
1Pan Sem Y P Calabaza5611/06/2025
11 Corazon Romana6217/06/2025
1Caramelos Lima 0%6217/06/2025
1Pan Tostado Clasico6217/06/2025
1Galleta Canela6924/06/2025
Spaghetti7025/06/2025
1Salsa Fresca Quesos7025/06/2025
1Vela Te Chai7601/07/2025
1Champu Extra Suave7601/07/2025
1Grana Padano Escamas8308/07/2025
1Coca-Cola 12 Latas8409/07/2025
1Vaselina Aroma Framb8409/07/2025
1Nidos Al Huevo9722/07/2025
1Spaghetti10429/07/2025
0,064 Kg 5,00 €/Kgnannan
0,190 Kg 2,70 €/Kgnannan
0,202 Kg 2,39 €/Kgnannan
0,220 Kg 2,90 €/Kgnannan
0,234 Kg 3,40 €/Kgnannan
0,242 Kg 2,29 €/Kgnannan
0,242 Kg 3,40 €/Kgnannan
0,242 Kg 5,10 €/Kgnannan
0,250 Kg 2,70 €/Kgnannan
0,258 Kg 5,00 €/Kgnannan
0,260 Kg 5,10 €/Kgnannan
0,272 Kg 2,39 €/Kgnannan
0,324 Kg 1,94 €/Kgnannan
0,336 Kg 2,19 €/Kgnannan
0,352 Kg 2,45 €/Kgnannan
0,354 Kg 3,16 €/Kgnannan
0,354 Kg 5,10 €/Kgnannan
0,356 Kg 1,94 €/Kgnannan
0,358 Kg 2,45 €/Kgnannan
0,390 Kg 5,00 €/Kgnannan
0,402 Kg 2,19 €/Kgnannan
0,410 Kg 2,10 €/Kgnannan
0,488 Kg 2,70 €/Kgnannan
0,504 Kg 2,19 €/Kgnannan
0,512 Kg 3,16 €/Kgnannan
0,518 Kg 2,19 €/Kgnannan
0,552 Kg 2,55 €/Kgnannan
0,610 Kg 2,19 €/Kgnannan
0,632 Kg 5,00 €/Kgnannan
0,668 Kg 3,20 €/Kgnannan
0,678 Kg 1,75 €/Kgnannan
0,688 Kg 2,29 €/Kgnannan
0,694 Kg 1,94 €/Kgnannan
0,694 Kg 2,05 €/Kgnannan
0,694 Kg 2,29 €/Kgnannan
0,696 Kg 2,29 €/Kgnannan
0,730 Kg 2,59 €/Kgnannan
0,746 Kg 3,20 €/Kgnannan
0,748 Kg 2,29 €/Kgnannan
0,802 Kg 2,29 €/Kgnannan
0,806 Kg 2,20 €/Kgnannan
0,830 Kg 2,60 €/Kgnannan
0,872 Kg 1,75 €/Kgnannan
0,874 Kg 1,65 €/Kgnannan
0,882 Kg 2,60 €/Kgnannan
0,884 Kg 1,75 €/Kgnannan
0,888 Kg 2,28 €/Kgnannan
0,896 Kg 2,90 €/Kgnannan
0,914 Kg 2,60 €/Kgnannan
0,916 Kg 2,59 €/Kgnannan
0,918 Kg 2,90 €/Kgnannan
0,922 Kg 2,14 €/Kgnannan
0,936 Kg 2,00 €/Kgnannan
0,948 Kg 1,89 €/Kgnannan
0,952 Kg 2,10 €/Kgnannan
0,954 Kg 2,05 €/Kgnannan
0,958 Kg 1,31 €/Kgnannan
0,960 Kg 2,90 €/Kgnannan
0,984 Kg 2,59 €/Kgnannan
0,986 Kg 1,89 €/Kgnannan
0,988 Kg 2,00 €/Kgnannan
0,990 Kg 1,75 €/Kgnannan
0,992 Kg 1,75 €/Kgnannan
1+ Proteínas Fresanannan
1+Prot Pla-Açaínannan
1+Proteinas Stracciatnannan
1,012 Kg 2,59 €/Kgnannan
1,032 Kg 2,59 €/Kgnannan
1,048 Kg 2,60 €/Kgnannan
1,054 Kg 2,90 €/Kgnannan
1,056 Kg 2,14 €/Kgnannan
1,084 Kg 1,59 €/Kgnannan
1,094 Kg 1,75 €/Kgnannan
1,128 Kg 1,99 €/Kgnannan
1,130 Kg 1,39 €/Kgnannan
1,150 Kg 1,75 €/Kgnannan
1,154 Kg 2,29 €/Kgnannan
1,158 Kg 2,05 €/Kgnannan
1,168 Kg 2,59 €/Kgnannan
1,198 Kg 2,00 €/Kgnannan
1,212 Kg 2,00 €/Kgnannan
1,226 Kg 2,29 €/Kgnannan
1,244 Kg 2,00 €/Kgnannan
1,254 Kg 1,75 €/Kgnannan
1,306 Kg 2,14 €/Kgnannan
1,314 Kg 1,30 €/Kgnannan
1,328 Kg 2,00 €/Kgnannan
1,334 Kg 2,29 €/Kgnannan
1,336 Kg 1,75 €/Kgnannan
1,356 Kg 2,14 €/Kgnannan
1,382 Kg 2,59 €/Kgnannan
1,418 Kg 1,75 €/Kgnannan
1,442 Kg 2,15 €/Kgnannan
1,452 Kg 2,70 €/Kgnannan
1,490 Kg 3,20 €/Kgnannan
1,592 Kg 1,99 €/Kgnannan
1,626 Kg 2,14 €/Kgnannan
1,664 Kg 2,59 €/Kgnannan
1,714 Kg 1,99 €/Kgnannan
1,722 Kg 2,14 €/Kgnannan
1,740 Kg 2,95 €/Kgnannan
1,788 Kg 3,20 €/Kgnannan
1,978 Kg 2,45 €/Kgnannan
1200 Servil. Blancasnannan
13 Recipientes 0,5Lnannan
1A. Negras S/Huesonannan
1Aceite De Girasolnannan
1Aceite Ricinonannan
1Aceite V.Extranannan
1Aceituna Chupadedosnannan
1Agua Facial Avenanannan
1Agua Oxigenadanannan
1Ajo Granuladonannan
1Albahacanannan
1Allioli Tarrinanannan
1Alpro Skyr Fresanannan
1Ambientador Conc.Delnannan
1Anacardo Naturalnannan
1Apio Verdenannan
1Arena Aglomerantenannan
1Arroz Albuferanannan
1Atún Claro Oliva Pk6nannan
1Avena Molidanannan
1Azucarnannan
1Bayeta Microfibra Crnannan
1Beber Fresanannan
1Bicarbonato Kilonannan
1Burratanannan
1C. Eucalipto 0%nannan
1C. Vitamina Knannan
1Caballa Ft Oliva Bpknannan
1Cacahuete Frito Mielnannan
1Café Soluble Classicnannan
1Carbon Vegetalnannan
1Cebolla Caramelizadanannan
1Cepillo Infantilnannan
1Cera Depil Cazuelanannan
1Cera Matenannan
1Champú Familynannan
1Choco Fundir Blanconannan
1Choco Fundir Negronannan
1Chocodaysnannan
1Chíanannan
1Cocktail Naturalnannan
1Cola Caonannan
1Comprimidos Dormirnannan
1Conosnannan
1Contra Des Certificanannan
1Cortauñasnannan
1Cous Cousnannan
1Crema Avellana Cacaonannan
1Crema De Verdurasnannan
1Cristales Multiusosnannan
1Cuidacol Fresanannan
1Cápsulas Valeriananannan
1Det Blanca Y Colornannan
1Det Polvo Manonannan
1Doritos Bitsnannan
1Encendedor Mininannan
1Esponja Vegetalnannan
1Extrait De Ámbarnannan
1Fanta Limón X9nannan
1Fideo Cabellonannan
1Filete Salmónnannan
1Fingers De Quesonannan
1Fluido Hidrat Oil Frnannan
1Fosforos Madera Grannannan
1Galleta Rell Cremanannan
1Galletas Mantequillanannan
1Garbanzo Pedrosillannannan
1Gel Hidroalcohóliconannan
1Gel Hidrotermalnannan
1Gel Limpiador Facialnannan
1Gel Wc C/ Lejíanannan
1Gnocchi Quesosnannan
1Golosinas Mix Azúcarnannan
1Grana Padano Ralladonannan
1Guisante Finonannan
1Guisantesnannan
1Hamburguesanannan
1Hamburguesa De Lomonannan
1Harina De Trigo 5Kg.nannan
1Helices Lenteja Rojanannan
1Higienico Doble Rollnannan
1Humus Kalamatanannan
1Impulsornannan
1Infusion Dormirnannan
1Infusion Respirnannan
1Kéfir Vegetal Coconannan
1Kétchupnannan
1Lasaña Precocidanannan
1Leche Entera P6nannan
1Leche Sem S/Lact P6nannan
1Limpiador Conc. Aloenannan
1Limpiador Vitronannan
1Loción Hidratanannan
1Lote 3 Bayetas Peq.nannan
1Lote Cepillo Oral Bnannan
1Ls Albondigas Patatanannan
1Lágrimas Hidratantesnannan
1M.Croiss Mantequillanannan
1Manzana Golden Bolsanannan
1Marias Doradasnannan
1Mascarilla Naturalnannan
1Melocotón-Uva P6nannan
1Merm. Melocotónnannan
1Mermelada Albaricoqunannan
1Mermelada Higonannan
1Miel De Flores Dosifnannan
1Mini Taquitos Jamonnannan
1Mixtura Can/Jilgueronannan
1Molde 1,5nannan
1Mousse Protein Choconannan
1Muesli C/Chocolatenannan
1Multiusosnannan
1Nachosnannan
1Naranja 5 Kg.nannan
1Naranja Malla 3 Kgnannan
1Nata Para Cocinarnannan
1Negro 99% Cacaonannan
1Oréganonannan
1Pajaritas Vegetalesnannan
1Palillos Redondosnannan
1Pan Blanconannan
1Pan De Lechenannan
1Pan M. Briochenannan
1Pan Pitanannan
1Pan Torrijasnannan
1Papel Vegetal 30Hnannan
1Pastilla Cisternanannan
1Patata Guarn. 1 Kg.nannan
1Patatas Corte Gruesonannan
1Pañuelo Cajanannan
1Pechuga De Pollo 92%nannan
1Perejilnannan
1Piadina 4 Unidadesnannan
1Pimiento Semipicantenannan
1Pimiento Triconannan
1Piña S/Az Añadido P6nannan
1Plumero Atra.3 Recanannan
1Polvo Talconannan
1Posavajillasnannan
1Pringles Onionnannan
1Pringles Originalnannan
1Proteina 0% Naturalnannan
1Q Rallado Emmentalnannan
1Q. Lonchas Edam Tiernannan
1Q. Maasdam Tiernonannan
1Q. Untar Suavenannan
1Queso Blanco Naturalnannan
1Queso Fetanannan
1Queso Fresco Burgosnannan
1Queso Gouda Lonchasnannan
1Queso Rallado Pizzanannan
1Queso Rallado Polvonannan
1Recambio Antihumedadnannan
1Regañanannan
1Remolacha En Tirasnannan
1Repollo Liso Partidonannan
1Repollo Rizado Pnannan
1Roja Acidulce Bolsanannan
1Rollo Hogar Doblenannan
1Ron Añejonannan
1Rooibos Citriconannan
1Roscón Rellenonannan
1Sal Yodadanannan
1Salsa Barbacoanannan
1Salsa De Quesonannan
1Salsa De Trufanannan
1Salsa Pestonannan
1Salsa Pesto Fresconannan
1Salsa Piri Pirinannan
1Salsa Rancheranannan
1Salsa Soja S/Glutennannan
1Sardinillas A.Olivanannan
1Sazonador Pastanannan
1Sirope C. Avellananannan
1Soja Con Chocolatenannan
1Soja Mangonannan
1Spray Própolisnannan
1T. 100%Integralesnannan
1Te Matchanannan
1Te Verde Hierbabuenanannan
1Tijera Uñasnannan
1Tiras Fritasnannan
1Toallitas Limpiagafanannan
1Tomate Concentradonannan
1Tortita Maiz C/Choconannan
1Tortitas De Maiznannan
1Tónico Árbol De Ténannan
1Vela Cifra 2 V2nannan
1Vela Cifra 4 V2nannan
1Vela Vainillanannan
1Velas Toffeenannan
1Virgen Extra 500nannan
1Xuxes Top Tennannan
1Yakisoba Clásiconannan
1Yogur Cabranannan
1Yogur Fresanannan
1Zumo Manzana Packnannan
1Árbol Del Ténannan
2,050 Kg 2,45 €/Kgnannan
2,116 Kg 1,75 €/Kgnannan
2,130 Kg 2,95 €/Kgnannan
2,158 Kg 1,99 €/Kgnannan
2,468 Kg 1,99 €/Kgnannan
Abrillantador Lavav.nannan
Amb C Fru Silvestresnannan
Arena Aglomerantenannan
Atún Claro Oliva Pk6nannan
Azúcar Moreno 1Kgnannan
B.Envases C.Fácilnannan
B.Mini Papeleranannan
Bastoncillo Familnannan
Cacahuete Sin Salnannan
Caldo Verduras 12 P.nannan
Cebolla Tiernanannan
Cepillo Pack-3 Medionannan
Conejo Choco Lechenannan
Crema Calabazanannan
Escobilla Wcnannan
Espinaca Cortadanannan
Estacionesnannan
Fosforos Madera Grannannan
Frieg.Insecticidanannan
Fruta Variada 120Gnannan
Garbanzo Pedrosillannannan
Gnocchi Quesosnannan
Golác.Fresa-Plátanonannan
Higienico Doble Rollnannan
Huevos Camperosnannan
Judía Plana 350 Grnannan
Lenteja Pardinanannan
Limpiador Wc Polvonannan
Marias Doradasnannan
Mascarilla Quirúr.nannan
Mezcla 4 Quesosnannan
Minis Leche Avellananannan
Noodle Sabor Picantenannan
Noodle Sabor Pollonannan
Pastillas Desinfectnannan
Pizza Margaritanannan
Queso Blanco Naturalnannan
Refill Dermonannan
Rollo Hogar Doblenannan
Salsa Ligeranannan
Sardinilla Re. Sal Onannan
Tofunannan
Tom.Frito Est.Caseronannan
Tortillas Mexicanasnannan
Yak Soja Cupnannan
Ñoquis De Patatanannan
+ + + diff --git a/lista_compra_semanal_24_04_2025.html b/lista_compra_semanal_24_04_2025.html new file mode 100644 index 0000000..4f01629 --- /dev/null +++ b/lista_compra_semanal_24_04_2025.html @@ -0,0 +1,187 @@ + + + + + + + Lista de la Compra Semanal + + + + +

Lista de la Compra Semanal (Próximo Jueves)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ProductoDías Promedio entre ComprasFecha Estimada de la Próxima Compra
%218/04/2025
1+Prot Natilla Choco723/04/2025
1+Prot Natilla Vaini722/04/2025
1+Prot Pud Caramelo722/04/2025
112 Huevos Camperos823/04/2025
14 Estaciones723/04/2025
1Burger Espinacas824/04/2025
1Cebolla Dulce824/04/2025
1Champiñon Limpio Lam520/04/2025
1Champiñón Grande Ban016/04/2025
1Frankfurt Viena Pavo723/04/2025
1Girasoles Quesos723/04/2025
1Griego Natural723/04/2025
1Q. Lonchas Cremoso723/04/2025
1Q. Lonchas Light622/04/2025
1Uva Roja S/S824/04/2025
1Yogur Limon723/04/2025
Fritada Pisto723/04/2025
Tarjeta Bancaria621/04/2025
Total621/04/2025
Total (€)621/04/2025
+ + + + \ No newline at end of file diff --git a/lista_compra_ultimo_mes.csv b/lista_compra_ultimo_mes.csv new file mode 100644 index 0000000..d86f12e --- /dev/null +++ b/lista_compra_ultimo_mes.csv @@ -0,0 +1,136 @@ +producto,cantidad_comprada,gasto_total +TARJETA BANCARIA,3,480.01 +TOTAL (€),3,480.01 +%,9,35.31 +TOTAL,3,35.31 +LECHE SEMI P6,2,21.12 +1ACEITE V.EXTRA,1,15.85 +1RON AÑEJO,1,15.15 +1Q MITAD SEMI,1,13.69 +TOM. RECETA ARTESANA,2,12.600000000000001 +1PATATA ROJA,3,11.399999999999999 +MINIS LECHE AVELLANA,1,11.0 +1COCA-COLA 12 LATAS,1,10.8 +CAFÉ CLECHE D.GUSTO,1,10.4 +GRIEGO LIMÓN,3,10.2 +112 HUEVOS CAMPEROS,3,9.66 +1EXTRAIT DE ÁMBAR,1,9.0 +1ZUMO FRESCO 1/2 L,3,8.95 +LENTEJA PARDINA,1,8.4 +CONEJO CHOCO LECHE,1,8.0 +1TORTILLA PAT C/CEB,3,7.800000000000001 +1UVA ROJA S/S,3,7.62 +1MANDARINA 2 KG,2,6.79 +1Q. LONCHAS LIGHT,2,5.8 +"1,788 KG 3,20 €/KG",1,5.72 +1+PROT PUD CARAMELO,3,5.699999999999999 +1CHAMPIÑÓN GRANDE BAN,2,5.52 +1+PROT NATILLA VAINI,3,5.25 +1LECHE SEMI P6,1,5.1 +1BURGER BERENJENA,2,4.8 +BURGER BERENJENA,1,4.8 +"1,490 KG 3,20 €/KG",1,4.77 +1CALABAZA TROZOS,2,4.720000000000001 +1CARBON VEGETAL,1,4.7 +1ESP VERDE FINO,2,4.6 +GRIEGO NATURAL,1,4.54 +1GRIEGO NATURAL,2,4.54 +1PAN M. 55% CENTENO,3,4.41 +MEDIALUNAS CALABAZA,1,4.4 +1CACAO PURO 0%,1,4.15 +1QUESO CHEDDAR LONCHA,2,4.1 +1CHAMPIÑON LIMPIO LAM,2,4.039999999999999 +1HAMBURGUESA DE LOMO,1,4.0 +1PAN CAMPEON MUNDO,2,3.98 +CARAMELO EUCALIPTUS,1,3.9 +1CEBOLLA 2 KG,1,3.9 +ARROZ SOS,1,3.76 +1ARENA AGLOMERANTE,1,3.75 +1CHOC 85% CACAO,2,3.7 +1AJO SECO 250 G,2,3.7 +1Q. MAASDAM TIERNO,1,3.62 +1SPRAY PRÓPOLIS,1,3.6 +1PISTACHO TOST 0% SAL,1,3.55 +"1MOLDE 1,5",1,3.15 +1QUESO EMMENTAL TACO,1,3.15 +SOJA CON CHOCOLATE,1,3.1 +MASCARILLA QUIRÚR.,1,3.0 +YOGUR LIMON,2,3.0 +1GALLETAS MANTEQUILLA,1,2.85 +1JUDIA REDONDA 500 G,1,2.8 +1GRANA PADANO ESCAMAS,1,2.75 +1PAN M 35% AVENA,2,2.74 +"1,048 KG 2,60 €/KG",1,2.72 +"0,918 KG 2,90 €/KG",1,2.66 +"0,896 KG 2,90 €/KG",1,2.6 +1PATATA GUARN. 1 KG.,1,2.55 +1MINI TAQUITOS JAMON,1,2.55 +1SIROPE C. AVELLANA,1,2.5 +1MASCARILLA NATURAL,1,2.5 +"1,212 KG 2,00 €/KG",1,2.42 +"1,198 KG 2,00 €/KG",1,2.4 +"0,746 KG 3,20 €/KG",1,2.39 +1PAN M. BRIOCHE,1,2.35 +"0,882 KG 2,60 €/KG",1,2.29 +1DÁTIL SIN HUESO,1,2.25 +1M.CROISS MANTEQUILLA,1,2.15 +"0,668 KG 3,20 €/KG",1,2.14 +1GNOCCHI QUESOS,1,2.1 +"0,952 KG 2,10 €/KG",1,2.0 +1PIADINA 4 UNIDADES,1,1.99 +1MERMELADA HIGO,1,1.95 +1YAKISOBA CLÁSICO,1,1.95 +1CROISSANT RELL CACAO,1,1.95 +16 HUEVOS CAMPEROS,1,1.9 +"0,986 KG 1,89 €/KG",1,1.86 +1AZÚCAR MORENO 1KG,1,1.85 +"0,802 KG 2,29 €/KG",1,1.84 +1MEZCLA 4 QUESOS,1,1.83 +1GRANA PADANO RALLADO,1,1.8 +1ZANAHORIA 500 G,2,1.8 +"1,314 KG 1,30 €/KG",1,1.71 +1CEBOLLA CARAMELIZADA,1,1.7 +1PAN TOSTADO CLASICO,1,1.7 +1HELICES LENTEJA ROJA,1,1.66 +1PAN SEM Y P CALABAZA,1,1.65 +1SALSA DE QUESO,1,1.65 +1PAN 12 CEREAL/SEMILL,1,1.61 +1VASELINA AROMA FRAMB,1,1.6 +1GALL DIGESTIVE,1,1.6 +1CREMA TEX-MEX,1,1.6 +1TOALLITAS LIMPIAGAFA,1,1.6 +1PAN DE PUEBLO,1,1.58 +"1,130 KG 1,39 €/KG",1,1.57 +1MERMELADA FRESA,1,1.55 +1LEVADURA PANADERIA,1,1.5 +1CARAMELOS LIMA 0%,1,1.5 +1MARGARINA CON SAL,1,1.5 +1YOGUR SABOR COCO,2,1.5 +1+PROTEINAS STRACCIAT,1,1.5 +1SALSA FRESCA QUESOS,1,1.45 +1PASTILLA CISTERNA,1,1.45 +"0,874 KG 1,65 €/KG",1,1.44 +1NIDOS AL HUEVO,1,1.41 +1ESPONJA VEGETAL,1,1.4 +1POSAVAJILLAS,1,1.35 +"0,488 KG 2,70 €/KG",1,1.32 +1MOUSSE PROTEIN CHOCO,1,1.3 +1SPAGHETTI,1,1.25 +1PALILLOS REDONDOS,1,1.25 +"0,958 KG 1,31 €/KG",1,1.25 +1SALSA DE SOJA SALADA,1,1.25 +1FOSFOROS MADERA GRAN,1,1.2 +1SALSA BARBACOA,1,1.15 +1TORTILLAS MEXICANAS,1,1.13 +1PAN TORRIJAS,1,1.13 +1ALLIOLI TARRINA,1,1.1 +1AZUCAR,1,1.05 +1DORITOS BITS,1,0.95 +1NACHOS,1,0.9 +1GUISANTES,1,0.9 +1CEPILLO INFANTIL,1,0.9 +"0,242 KG 3,40 €/KG",1,0.82 +"0,234 KG 3,40 €/KG",1,0.8 +1CONOS,1,0.8 +1TIRAS FRITAS,1,0.75 +1AGUA OXIGENADA,1,0.65 diff --git a/resumen_productos.csv b/resumen_productos.csv new file mode 100644 index 0000000..01d44ae --- /dev/null +++ b/resumen_productos.csv @@ -0,0 +1,8 @@ +producto,veces_comprado,total_unidades,gasto_total,primera_vez,ultima_vez +HUEVOS CAMPEROS,15,1402,43.24,2025-01-23,2025-04-16 +ESTACIONES,3,52,8.8,2025-01-16,2025-03-12 +B.MINI PAPELERA,1,340,4.05,2025-01-09,2025-01-09 +B.ENVASES C.FÁCIL,1,230,3.3,2025-01-09,2025-01-09 +CORAZON ROMANA,2,22,2.2,2025-01-23,2025-03-26 +"RECIPIENTES 0,5L",1,13,2.05,2025-01-29,2025-01-29 +SERVIL. BLANCAS,1,1200,1.25,2025-01-02,2025-01-02 diff --git a/servidor/db.php b/servidor/db.php new file mode 100644 index 0000000..bce53ab --- /dev/null +++ b/servidor/db.php @@ -0,0 +1,12 @@ +getMessage()); +} +?> diff --git a/servidor/subir_ticket.php b/servidor/subir_ticket.php new file mode 100644 index 0000000..6cddff5 --- /dev/null +++ b/servidor/subir_ticket.php @@ -0,0 +1,55 @@ +beginTransaction(); + +try { + $stmt = $pdo->prepare("INSERT INTO tickets (fecha, total, metodo_pago) VALUES (?, ?, ?)"); + $stmt->execute([$fecha, $total, $metodo]); + $ticketId = $pdo->lastInsertId(); + + foreach ($productos as $producto) { + // Buscar o crear producto + $nombre = strtoupper(trim($producto["nombre"])); + $stmt = $pdo->prepare("SELECT id FROM productos WHERE nombre = ?"); + $stmt->execute([$nombre]); + $prod = $stmt->fetch(); + + if ($prod) { + $productoId = $prod["id"]; + } else { + $stmt = $pdo->prepare("INSERT INTO productos (nombre, ultima_compra) VALUES (?, ?)"); + $stmt->execute([$nombre, $fecha]); + $productoId = $pdo->lastInsertId(); + } + + // Insertar línea de ticket + $stmt = $pdo->prepare("INSERT INTO lineas_ticket (ticket_id, producto_id, cantidad, precio_unitario, precio_total) + VALUES (?, ?, ?, ?, ?)"); + $stmt->execute([ + $ticketId, + $productoId, + $producto["cantidad"], + $producto["precio_unitario"], + $producto["precio_total"] + ]); + + // Actualizar última compra + $stmt = $pdo->prepare("UPDATE productos SET ultima_compra = ? WHERE id = ?"); + $stmt->execute([$fecha, $productoId]); + } + + $pdo->commit(); + echo json_encode(["status" => "ok"]); + +} catch (Exception $e) { + $pdo->rollBack(); + echo json_encode(["status" => "error", "message" => $e->getMessage()]); +} diff --git a/sql/consultas.sql b/sql/consultas.sql new file mode 100644 index 0000000..461d1d8 --- /dev/null +++ b/sql/consultas.sql @@ -0,0 +1,5 @@ +SELECT supermercados.nombre, direcciones.direccion, poblaciones.nombre + FROM tiendas + JOIN supermercados ON tiendas.supermercado_id = supermercados.id + JOIN direcciones ON tiendas.direccion_id = direcciones.id + JOIN poblaciones ON direcciones.codigo_postal = poblaciones.id; diff --git a/sql/creacionbbdd.sql b/sql/creacionbbdd.sql new file mode 100644 index 0000000..71d58b6 --- /dev/null +++ b/sql/creacionbbdd.sql @@ -0,0 +1,122 @@ +CREATE TABLE productos ( + id INT AUTO_INCREMENT PRIMARY KEY, + nombre VARCHAR(255) NOT NULL, + marca_id INT FOREIGN KEY REFERENCES marcas(id), + codigo_barras VARCHAR(13) NOT NULL UNIQUE +); + +CREATE TABLE marcas ( + id INT AUTO_INCREMENT PRIMARY KEY, + nombre VARCHAR(255) NOT NULL +); + +CREATE TABLE tickets ( + id INT AUTO_INCREMENT PRIMARY KEY, + tienda_id INT, + fecha DATE NOT NULL, + total DECIMAL(10, 2), + metodo_pago VARCHAR(50) +); + +CREATE TABLE supermercados ( -- Solo la cadena de supermercados, no la tienda + id INT AUTO_INCREMENT PRIMARY KEY, + nombre VARCHAR (50) NOT NULL + ); + +CREATE TABLE tiendas ( -- La tienda concreta, con su dirección + id INT AUTO_INCREMENT PRIMARY KEY, + nombre VARCHAR(255) NOT NULL, + supermercado_id INT, + direccion_id INT, -- Relaciona con la tabla direcciones + FOREIGN KEY (supermercado_id) REFERENCES supermercados(id) ON DELETE CASCADE, + FOREIGN KEY (direccion_id) REFERENCES direcciones(id) ON DELETE CASCADE +); + +CREATE TABLE direcciones ( + id INT AUTO_INCREMENT PRIMARY KEY, + direccion VARCHAR(255) NOT NULL, + codigo_postal VARCHAR(5) +); + +CREATE TABLE poblaciones ( + id INT AUTO_INCREMENT PRIMARY KEY, -- Codigo postal de la poblacion + nombre VARCHAR(255) NOT NULL +); + +CREATE TABLE provincias ( + id INT AUTO_INCREMENT PRIMARY KEY, -- Los dos primeros digitos del codigo postal de la provincia + nombre VARCHAR(255) NOT NULL +); + +INSERT INTO provincias (id, nombre) VALUES +(1, 'Álava'), +(2, 'Albacete'), +(3, 'Alicante'), +(4, 'Almería'), +(5, 'Ávila'), +(6, 'Badajoz'), +(7, 'Islas Baleares'), +(8, 'Barcelona'), +(9, 'Burgos'), +(10, 'Cáceres'), +(11, 'Cádiz'), +(12, 'Castellón'), +(13, 'Ciudad Real'), +(14, 'Córdoba'), +(15, 'La Coruña'), +(16, 'Cuenca'), +(17, 'Gerona'), +(18, 'Granada'), +(19, 'Guadalajara'), +(20, 'Guipúzcoa'), +(21, 'Huelva'), +(22, 'Huesca'), +(23, 'Jaén'), +(24, 'León'), +(25, 'Lérida'), +(26, 'La Rioja'), +(27, 'Lugo'), +(28, 'Madrid'), +(29, 'Málaga'), +(30, 'Murcia'), +(31, 'Navarra'), +(32, 'Ourense'), +(33, 'Asturias'), +(34, 'Palencia'), +(35, 'Las Palmas'), +(36, 'Pontevedra'), +(37, 'Salamanca'), +(38, 'Santa Cruz de Tenerife'), +(39, 'Cantabria'), +(40, 'Segovia'), +(41, 'Sevilla'), +(42, 'Soria'), +(43, 'Tarragona'), +(44, 'Teruel'), +(45, 'Toledo'), +(46, 'Valencia'), +(47, 'Valladolid'), +(48, 'Vizcaya'), +(49, 'Zamora'), +(50, 'Zaragoza'), +(51, 'Ceuta'), +(52, 'Melilla'); + + +CREATE TABLE lineas_ticket ( + id INT AUTO_INCREMENT PRIMARY KEY, + ticket_id INT, + producto_id INT, + cantidad INT, + precio_unitario DECIMAL(10, 2), + FOREIGN KEY (ticket_id) REFERENCES tickets(id) ON DELETE CASCADE, + FOREIGN KEY (producto_id) REFERENCES productos(id) ON DELETE CASCADE +); + +-- OPCIONAL: Si en el futuro quiero tener varios perfiles o compartir la app +CREATE TABLE usuarios ( + id INT AUTO_INCREMENT PRIMARY KEY, + nombre VARCHAR(100), + email VARCHAR(100), + password_hash VARCHAR(255) +); diff --git a/subir_ticket.html b/subir_ticket.html new file mode 100644 index 0000000..2c89711 --- /dev/null +++ b/subir_ticket.html @@ -0,0 +1,119 @@ + + + + + Subir Ticket + + + +

Subir Ticket

+
+ + + + + + +

Productos

+
+ + + +
+ + + + diff --git a/tickets/20250102 Mercadona 111,58 €.pdf b/tickets/20250102 Mercadona 111,58 €.pdf new file mode 100644 index 0000000..229dcaa Binary files /dev/null and b/tickets/20250102 Mercadona 111,58 €.pdf differ diff --git a/tickets/20250109 Mercadona 170,12 €.pdf b/tickets/20250109 Mercadona 170,12 €.pdf new file mode 100644 index 0000000..bcdfa71 Binary files /dev/null and b/tickets/20250109 Mercadona 170,12 €.pdf differ diff --git a/tickets/20250114 Mercadona 6,02 €.pdf b/tickets/20250114 Mercadona 6,02 €.pdf new file mode 100644 index 0000000..8ab57ed Binary files /dev/null and b/tickets/20250114 Mercadona 6,02 €.pdf differ diff --git a/tickets/20250116 Mercadona 1,41 €.pdf b/tickets/20250116 Mercadona 1,41 €.pdf new file mode 100644 index 0000000..5f4d6b8 Binary files /dev/null and b/tickets/20250116 Mercadona 1,41 €.pdf differ diff --git a/tickets/20250116 Mercadona 145,05 €.pdf b/tickets/20250116 Mercadona 145,05 €.pdf new file mode 100644 index 0000000..b4609b5 Binary files /dev/null and b/tickets/20250116 Mercadona 145,05 €.pdf differ diff --git a/tickets/20250123 Mercadona 173,05 €.pdf b/tickets/20250123 Mercadona 173,05 €.pdf new file mode 100644 index 0000000..30a54ed Binary files /dev/null and b/tickets/20250123 Mercadona 173,05 €.pdf differ diff --git a/tickets/20250129 Mercadona 197,27 €.pdf b/tickets/20250129 Mercadona 197,27 €.pdf new file mode 100644 index 0000000..fd64cd4 Binary files /dev/null and b/tickets/20250129 Mercadona 197,27 €.pdf differ diff --git a/tickets/20250207 Mercadona 158,19 €.pdf b/tickets/20250207 Mercadona 158,19 €.pdf new file mode 100644 index 0000000..9e135c2 Binary files /dev/null and b/tickets/20250207 Mercadona 158,19 €.pdf differ diff --git a/tickets/20250213 Mercadona 154,63 €.pdf b/tickets/20250213 Mercadona 154,63 €.pdf new file mode 100644 index 0000000..f19534d Binary files /dev/null and b/tickets/20250213 Mercadona 154,63 €.pdf differ diff --git a/tickets/20250220 Mercadona 166,99 €.pdf b/tickets/20250220 Mercadona 166,99 €.pdf new file mode 100644 index 0000000..989d49a Binary files /dev/null and b/tickets/20250220 Mercadona 166,99 €.pdf differ diff --git a/tickets/20250227 Mercadona 168,62 €.pdf b/tickets/20250227 Mercadona 168,62 €.pdf new file mode 100644 index 0000000..1f2690a Binary files /dev/null and b/tickets/20250227 Mercadona 168,62 €.pdf differ diff --git a/tickets/20250227 Mercadona 3,61 €.pdf b/tickets/20250227 Mercadona 3,61 €.pdf new file mode 100644 index 0000000..4e54c79 Binary files /dev/null and b/tickets/20250227 Mercadona 3,61 €.pdf differ diff --git a/tickets/20250305 Mercadona 129,33 €.pdf b/tickets/20250305 Mercadona 129,33 €.pdf new file mode 100644 index 0000000..101293c Binary files /dev/null and b/tickets/20250305 Mercadona 129,33 €.pdf differ diff --git a/tickets/20250312 Mercadona 193,95 €.pdf b/tickets/20250312 Mercadona 193,95 €.pdf new file mode 100644 index 0000000..9197c37 Binary files /dev/null and b/tickets/20250312 Mercadona 193,95 €.pdf differ diff --git a/tickets/20250320 Mercadona 144,50 €.pdf b/tickets/20250320 Mercadona 144,50 €.pdf new file mode 100644 index 0000000..64fc9db Binary files /dev/null and b/tickets/20250320 Mercadona 144,50 €.pdf differ diff --git a/tickets/20250326 Mercadona 162,57 €.pdf b/tickets/20250326 Mercadona 162,57 €.pdf new file mode 100644 index 0000000..cb521b3 Binary files /dev/null and b/tickets/20250326 Mercadona 162,57 €.pdf differ diff --git a/tickets/20250403 Mercadona 104,58 €.pdf b/tickets/20250403 Mercadona 104,58 €.pdf new file mode 100644 index 0000000..8431a75 Binary files /dev/null and b/tickets/20250403 Mercadona 104,58 €.pdf differ diff --git a/tickets/20250410 Mercadona 190,44 €.pdf b/tickets/20250410 Mercadona 190,44 €.pdf new file mode 100644 index 0000000..eb6be8a Binary files /dev/null and b/tickets/20250410 Mercadona 190,44 €.pdf differ diff --git a/tickets/20250416 Mercadona 184,99 €.pdf b/tickets/20250416 Mercadona 184,99 €.pdf new file mode 100644 index 0000000..f27ab6c Binary files /dev/null and b/tickets/20250416 Mercadona 184,99 €.pdf differ