From 65897afcf81c0468d21511671b62b790febbcee1 Mon Sep 17 00:00:00 2001 From: admin Date: Mon, 19 May 2025 15:09:34 +0000 Subject: [PATCH] Primer commit --- 1234.png | Bin 0 -> 58476 bytes fact.py | 134 +++++++++++++++++++++++ facturas.db | Bin 0 -> 12288 bytes modelo-factura-es-moderno-rojo-750px.png | Bin 0 -> 24400 bytes 4 files changed, 134 insertions(+) create mode 100644 1234.png create mode 100644 fact.py create mode 100644 facturas.db create mode 100644 modelo-factura-es-moderno-rojo-750px.png diff --git a/1234.png b/1234.png new file mode 100644 index 0000000000000000000000000000000000000000..2ff32f3fcee01c0822e08db87383fc54e851893e GIT binary patch literal 58476 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
    @Xk(A+a{w_HR2))bGhD=k{jylmU9NY?Kd1S~j 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�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

    J2?(KzzO$ui=5nu2!}r(LxzKCCTRYKBQIxNCYl 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 cnWYuU!C%((Yz@qXg%{Aick2jevplmGw# literal 0 HcmV?d00001 diff --git a/fact.py b/fact.py new file mode 100644 index 0000000..8439386 --- /dev/null +++ b/fact.py @@ -0,0 +1,134 @@ +import tkinter as tk +from tkinter import filedialog, messagebox +from PIL import Image +import pytesseract +import hashlib +import sqlite3 +from cryptography.hazmat.primitives import hashes, serialization +from cryptography.hazmat.primitives.asymmetric import rsa, padding +from cryptography.hazmat.primitives.serialization import load_pem_private_key +import os +import re +import base64 +import datetime +import xml.etree.ElementTree as ET + +# Configuracion de OCR +pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' # Cambia si es necesario + +# Crear clave RSA para firmar +clave_privada = rsa.generate_private_key(public_exponent=65537, key_size=2048) +clave_publica = clave_privada.public_key() + +# Crear base de datos +conn = sqlite3.connect("facturas.db") +c = conn.cursor() +c.execute('''CREATE TABLE IF NOT EXISTS facturas ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + nombre_archivo TEXT, + datos_extraidos TEXT, + hash TEXT, + firma BLOB, + csv TEXT, + fecha TEXT, + nif_emisor TEXT, + nif_receptor TEXT, + total REAL +)''') +conn.commit() + +# Funciones del programa +def seleccionar_archivo(): + ruta = filedialog.askopenfilename(filetypes=[("PDF o Imagen", "*.png;*.jpg;*.jpeg;*.tiff;*.bmp")]) + if ruta: + texto = extraer_texto(ruta) + nif_emisor = extraer_nif(texto, emisor=True) + nif_receptor = extraer_nif(texto, emisor=False) + total = extraer_total(texto) + fecha = extraer_fecha(texto) + hash_valor = generar_hash(texto) + firma = firmar_texto(texto) + csv = generar_csv(hash_valor) + guardar_en_db(ruta, texto, hash_valor, firma, csv, fecha, nif_emisor, nif_receptor, total) + generar_facturae(ruta, nif_emisor, nif_receptor, fecha, total, csv) + messagebox.showinfo("Éxito", "Factura procesada y guardada.") + mostrar_resultado(texto, hash_valor, csv, fecha, nif_emisor, nif_receptor, total) + +def extraer_texto(ruta): + imagen = Image.open(ruta) + texto = pytesseract.image_to_string(imagen, lang='spa') + return texto + +def extraer_nif(texto, emisor=True): + nif_pattern = r'\b[A-Z]?[0-9]{7,8}[A-Z]?\b' + nifs = re.findall(nif_pattern, texto) + return nifs[0] if emisor and nifs else (nifs[1] if len(nifs) > 1 else "") + +def extraer_total(texto): + total_pattern = r'Total[:\s]*([0-9]+[.,][0-9]{2})' + match = re.search(total_pattern, texto, re.IGNORECASE) + return float(match.group(1).replace(',', '.')) if match else 0.0 + +def extraer_fecha(texto): + fecha_pattern = r'(\d{2}[\/\-]\d{2}[\/\-]\d{4})' + match = re.search(fecha_pattern, texto) + return match.group(1) if match else datetime.date.today().strftime("%d/%m/%Y") + +def generar_hash(texto): + return hashlib.sha256(texto.encode('utf-8')).hexdigest() + +def firmar_texto(texto): + firma = clave_privada.sign( + texto.encode('utf-8'), + padding.PKCS1v15(), + hashes.SHA256() + ) + return firma + +def generar_csv(hash_valor): + return "CSV-" + hash_valor[:10] + +def guardar_en_db(nombre_archivo, texto, hash_valor, firma, csv, fecha, nif_emisor, nif_receptor, total): + c.execute("""INSERT INTO facturas + (nombre_archivo, datos_extraidos, hash, firma, csv, fecha, nif_emisor, nif_receptor, total) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)""", + (nombre_archivo, texto, hash_valor, firma, csv, fecha, nif_emisor, nif_receptor, total)) + conn.commit() + +def generar_facturae(nombre_archivo, emisor, receptor, fecha, total, csv): + root = ET.Element("Facturae") + ET.SubElement(root, "Emisor").text = emisor + ET.SubElement(root, "Receptor").text = receptor + ET.SubElement(root, "Fecha").text = fecha + ET.SubElement(root, "Total").text = str(total) + ET.SubElement(root, "CSV").text = csv + + tree = ET.ElementTree(root) + nombre_xml = os.path.splitext(os.path.basename(nombre_archivo))[0] + "_facturae.xml" + tree.write(nombre_xml) + +def mostrar_resultado(texto, hash_valor, csv, fecha, nif_emisor, nif_receptor, total): + resultado.delete("1.0", tk.END) + resultado.insert(tk.END, f"📄 Texto extraído:\n{texto}\n") + resultado.insert(tk.END, f"\n🔐 Hash: {hash_valor}\n") + resultado.insert(tk.END, f"🧾 CSV generado: {csv}\n") + resultado.insert(tk.END, f"📅 Fecha: {fecha}\n") + resultado.insert(tk.END, f"🏢 NIF Emisor: {nif_emisor}\n") + resultado.insert(tk.END, f"👤 NIF Receptor: {nif_receptor}\n") + resultado.insert(tk.END, f"💰 Total: {total} €\n") + +# GUI +ventana = tk.Tk() +ventana.title("Digitalizador de Facturas AEAT - v2.0") +ventana.geometry("800x600") + +titulo = tk.Label(ventana, text="Digitalizador de Facturas (Cumplimiento AEAT)", font=("Arial", 16)) +titulo.pack(pady=10) + +boton = tk.Button(ventana, text="📤 Seleccionar factura", command=seleccionar_archivo, bg="#4CAF50", fg="white", font=("Arial", 12)) +boton.pack(pady=20) + +resultado = tk.Text(ventana, wrap="word", height=20) +resultado.pack(padx=10, pady=10, fill="both", expand=True) + +ventana.mainloop() diff --git a/facturas.db b/facturas.db new file mode 100644 index 0000000000000000000000000000000000000000..606f54fa642fdec63e1f91417557c596ad24a36d GIT binary patch literal 12288 zcmeI2e{2**6vywb{D{+*f`%VT&_@)dw0F0AcY8lTjd#aZ4z8u`9ko@lPIu>eTlRLZ zyL(M-Kmienm>3iO5r2e=k{IP@)kH)^&WH(0!~`M&5h4Bvpdo-p6H#ZcS5q1j|JKZ8 zciz02H}B?scJGgG?ousD#UhZ=jU2YX@0jdxIvw`_I2;Zay({QF(wuZKZp5M1_W!N9 z9G2-C^4hwgw z#Ozh6SnV`PZ-HpiShphHDn`>Hq@%H<2xDUBYB)#g>CW1rshHCaYxVJ-sN6d4jtY4KjM6`ETUjnUQ)SR!^nbXj_7qKR&76r0lZrASTBbs3}+ z8&X#3(;+RkmltGg>1HSCw+yVvx;bhki_PpPH=|HV4zc9Y*l>IsGq%0ogYf7e* z7y(A$zf52Q zIBOhhDxMm@rg~jf?dRNY-xI&NaR?HNPU-G<(y zyF&t(@Au@j?uKEZ1Y*j~aXdn;bQPL)m3Ek@Du#q6c@TbC0T`hqkukI>G>t*9irN&Tn`jVIu_j>%`Vkin2@!}DjBeemFI$8} ztxv&pKQxrokT2rpc(0G+BV+PG(>#y~Msd(Cp`bxt#RIw>$_pSD zw__8b7=4sFq$n)A4g)1((Wd$IW#WDG1VRu(;RuiJNZprcNPA<6_4r3qYx`d2`{b9}@A{iXy zAC2C!_{7&QME`Vcn*P|2-@J8jZ$7uDD!wjtz7FrZ_}t`oD-UlTKX@Sf)5?K4Z%^2G zzG`RBwDjrriL0d7*1q_9&B~#+1Fr;XrhMfZ`t8#lN4Q&I%TfQSmp<-TeEiEpR~BB_ zeg6Zy@b#N#FE~E$?3o3N#4lD9_bggHqwd0)Kb9=7I(hry3m;Co5&+NYmeT_HsAb!G z`-htMtvZ)Hw75<bE-!FbUb=}PV?DvD?kKMfEyY;_3?~$iH z)6)O)jdve?SU%Xa>irE<<1Kg1+;&^-{<$kRUFObhe`43OCw{o9ZmoUj>6=bISvdCd z*0UeXj_tg(t1kA**&FtL{?6n(7y(9r c5nu!u0Y-okU<4R}{||vmXT_}RM*i6F7wWb1hyVZp literal 0 HcmV?d00001 diff --git a/modelo-factura-es-moderno-rojo-750px.png b/modelo-factura-es-moderno-rojo-750px.png new file mode 100644 index 0000000000000000000000000000000000000000..102a98624d31110ca0e1bc34fa653bf7cea0031a GIT binary patch literal 24400 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 literal 0 HcmV?d00001