133 lines
4.7 KiB
Python
133 lines
4.7 KiB
Python
import os
|
|
import shutil
|
|
|
|
# ========================================================================
|
|
def tiene_datos_parciales(m):
|
|
"""True si el archivo tiene al menos un campo útil, aunque incompleto."""
|
|
if m['ruc'] not in ("N/A", "Desconocido"):
|
|
return True
|
|
if m['serie_numero'] not in ("No encontrado", "N/A"):
|
|
return True
|
|
if m['tipo'] != "99":
|
|
return True
|
|
return False
|
|
|
|
# ========================================================================
|
|
def renombrar_archivos_por_metadata(metadatos, ruta_base):
|
|
"""
|
|
Renombra cada archivo según su propia metadata extraída.
|
|
- XML/PDF con archivo_propuesto válido: se renombra a {archivo_propuesto}{extension}
|
|
- CDR (tipo 'CDR'): se renombra igual (archivo_propuesto ya incluye CDR)
|
|
- Sin metadata válida (archivo_propuesto is None): se deja intacto (será eliminado al limpiar)
|
|
Retorna la lista de metadatos actualizada con los nombres finales.
|
|
"""
|
|
for m in metadatos:
|
|
nombre_original = m['archivo']
|
|
extension = m['extension']
|
|
propuesto = m.get('archivo_propuesto')
|
|
|
|
if propuesto is None:
|
|
continue
|
|
|
|
nuevo_nombre = f"{propuesto}{extension}"
|
|
if nuevo_nombre == nombre_original:
|
|
continue
|
|
|
|
ruta_old = os.path.join(ruta_base, nombre_original)
|
|
ruta_new = os.path.join(ruta_base, nuevo_nombre)
|
|
|
|
try:
|
|
if os.path.exists(ruta_old):
|
|
if os.path.exists(ruta_new) and ruta_old != ruta_new:
|
|
os.remove(ruta_new)
|
|
shutil.move(ruta_old, ruta_new)
|
|
m['archivo'] = nuevo_nombre
|
|
except Exception as e:
|
|
print(f" ⚠️ Error renombrando '{nombre_original}': {e}")
|
|
|
|
return metadatos
|
|
|
|
# ========================================================================
|
|
def mover_validos_a_resultado(metadatos, ruta_origen, ruta_destino):
|
|
"""
|
|
Mueve solo los archivos que tienen metadata válida (archivo_propuesto no None)
|
|
desde la carpeta de descarga a la carpeta de resultados.
|
|
"""
|
|
if not os.path.exists(ruta_destino):
|
|
os.makedirs(ruta_destino)
|
|
|
|
movidos = 0
|
|
for m in metadatos:
|
|
if m.get('archivo_propuesto') is None:
|
|
continue
|
|
|
|
archivo = m['archivo']
|
|
ruta_old = os.path.join(ruta_origen, archivo)
|
|
ruta_new = os.path.join(ruta_destino, archivo)
|
|
|
|
try:
|
|
if os.path.exists(ruta_old):
|
|
if os.path.exists(ruta_new) and ruta_old != ruta_new:
|
|
os.remove(ruta_new)
|
|
shutil.move(ruta_old, ruta_new)
|
|
movidos += 1
|
|
except Exception as e:
|
|
print(f" ⚠️ Error trasladando '{archivo}' a resultado: {e}")
|
|
|
|
if movidos:
|
|
print(f" 📦 {movidos} archivo(s) movido(s) a resultado.")
|
|
|
|
# ========================================================================
|
|
def mover_a_evaluar(metadatos, ruta_origen, ruta_evaluar):
|
|
"""
|
|
Mueve archivos con metadata parcial a la carpeta evaluar/ para revisión.
|
|
Conserva el nombre original del archivo (sin renombrar).
|
|
"""
|
|
if not metadatos:
|
|
return
|
|
|
|
if not os.path.exists(ruta_evaluar):
|
|
os.makedirs(ruta_evaluar)
|
|
|
|
movidos = 0
|
|
for m in metadatos:
|
|
archivo = m['archivo']
|
|
ruta_old = os.path.join(ruta_origen, archivo)
|
|
ruta_new = os.path.join(ruta_evaluar, archivo)
|
|
|
|
try:
|
|
if os.path.exists(ruta_old):
|
|
if os.path.exists(ruta_new) and ruta_old != ruta_new:
|
|
os.remove(ruta_new)
|
|
shutil.move(ruta_old, ruta_new)
|
|
movidos += 1
|
|
except Exception as e:
|
|
print(f" ⚠️ Error moviendo '{archivo}' a evaluar: {e}")
|
|
|
|
if movidos:
|
|
print(f" 🔍 {movidos} archivo(s) movido(s) a evaluar (metadata parcial).")
|
|
|
|
# ========================================================================
|
|
def limpiar_carpeta_descarga(ruta):
|
|
"""
|
|
Elimina todos los archivos y subcarpetas dentro de la carpeta de descarga.
|
|
Omite la subcarpeta 'evaluar/' para no borrar archivos pendientes de revisión.
|
|
"""
|
|
if not os.path.exists(ruta):
|
|
return
|
|
|
|
print(f" 🧹 Limpiando carpeta de descarga")
|
|
for archivo in os.listdir(ruta):
|
|
if archivo == "evaluar":
|
|
continue
|
|
ruta_archivo = os.path.join(ruta, archivo)
|
|
try:
|
|
if os.path.isfile(ruta_archivo):
|
|
os.remove(ruta_archivo)
|
|
elif os.path.isdir(ruta_archivo):
|
|
shutil.rmtree(ruta_archivo)
|
|
except Exception as e:
|
|
print(f" ⚠️ No se pudo eliminar '{archivo}': {e}")
|
|
|
|
# ========================================================================
|