Saltar a contenido

OBJETIVO DEL DESARROLLO

El objetivo de este desarrollo es construir un sistema que permita obtener y gestionar una colección estructurada de todas las facturas que describen las operaciones de tráfico de los clientes de la asesoría.

Estas facturas serán capturadas mediante la subida de documentos PDF, procesadas automáticamente mediante IA para su separación y extracción de datos fiscales, y almacenadas en el sistema para que puedan ser consultadas, validadas y procesadas posteriormente según las necesidades de la asesoría.

Todo el proceso será accesible y gestionable a través de una interfaz web.


CRITERIO DE DESARROLLO EN ESTA FASE

En esta fase inicial del proyecto, se considera que lo más adecuado es utilizar Django como solución integral, tanto para la lógica de negocio como para la interfaz web.

La razón principal es poder disponer cuanto antes de un sistema operativo, estable y funcional, sin introducir complejidad innecesaria en esta etapa temprana del desarrollo. En este momento no se prioriza el aspecto visual ni una experiencia de usuario avanzada, sino que la funcionalidad se cumpla correctamente.

Más adelante, si este desarrollo se consolida como un software con potencial para ser utilizado por otras asesorías o por terceros, se podrá abordar una evolución del frontend:

  • Separando el backend y el frontend.
  • Incorporando tecnologías como Next.js.
  • Contando con perfiles especializados en usabilidad y diseño.
  • Mejorando la experiencia de usuario y la presentación visual del producto.

En esta primera fase, el objetivo es que el sistema funcione bien, sea fiable y resuelva correctamente el problema.


FUNCIÓN PRINCIPAL DEL SISTEMA

La función principal del sistema en esta fase es:

  • Permitir la subida de documentos PDF.
  • Procesarlos de forma automática.
  • Devolver facturas separadas y leídas completamente, listas para su tratamiento fiscal y contable.

El sistema debe ser fiable, trazable y orientado a uso profesional, aunque la interfaz sea básica.


FASE 1: Subida y procesamiento de documentos (PDF)

1. Subida de documento

  • El usuario sube un archivo al sistema.
  • Solo se admiten archivos PDF.
  • Si no es PDF → error.
  • Restricción de páginas: 1 < n < 100.

2. Registro del documento original

Una vez validado, el sistema guarda:

  • PDF original
  • Usuario que lo sube
  • Fecha y hora de subida
  • Número de páginas
  • Estado inicial (Estado 1)

📌 El Documento Original es un objeto independiente, diferente del objeto Factura.
El documento original debe poder visualizarse / previsualizarse usando PyMuPDF.


3. Procesamiento con IA (OpenAI)

Tras guardarlo, el sistema envía el PDF a la IA para realizar dos tareas.


3.1 Separación de facturas (document splitting)

Objetivo

  • Si el PDF contiene M facturas, generar M PDFs individuales.
  • Ejemplo: PDF de 25 páginas con 14 facturas → 14 PDFs separados.

Método

  1. Convertir el PDF en imágenes por página.
  2. Utilizar OpenAI Vision para detectar el inicio y el fin de cada factura (rangos de páginas).
  3. Separar físicamente el PDF en documentos individuales usando pikepdf.

Resultado

  • Se generan objetos Factura, que nacen como consecuencia del procesamiento del Documento Original.
  • Se guardan los PDFs separados, asociados al documento original.
  • Cada factura separada debe poder visualizarse / previsualizarse usando PyMuPDF.

📌 Caso especial
Si el documento original contiene una sola factura, ese mismo PDF puede considerarse también como la factura generada.


3.2 Extracción de datos por factura (JSON)

Para cada PDF individual:

  1. Se extrae el texto con pdfplumber.
  2. Se envía el texto a OpenAI.
  3. OpenAI devuelve un JSON con los datos de la factura.

Datos a extraer

  • Emisor: nombre, NIF, domicilio
  • Receptor: nombre, NIF, domicilio
  • Fecha
  • Serie / Número
  • Bases imponibles (NO líneas de productos)

4. Validación del JSON antes de validar la factura

Cuando la factura ya ha sido procesada y leída, pasará al estado LEIDA.

Antes de validar definitivamente la factura en el sistema, el JSON recibido debe ser validado.

Método

  • Se utilizará Pydantic para validar estructura, tipos y campos obligatorios del JSON.
  • Si el JSON no cumple el esquema → error o pendiente de revisión.
  • Si el JSON es válido → se permite guardar y validar la factura.

📌 Pydantic garantiza coherencia y calidad de los datos fiscales.


5. Guardado final

El sistema guarda:

  • Documento original con su estado actualizado
  • Facturas individuales (PDF separados)
  • JSON por factura con los datos extraídos
  • Estados de cada objeto

6. Estados (pendiente de definir nombres)

📌 Los estados de Documento Original y Factura se definirán posteriormente.


MODELO DE DATOS (TABLAS BD)

Tablas

  • Contactos
  • Facturas
  • Bases_factura

Tabla: Contactos

Campos

  • NOMBRE
  • NIF
  • DOMICILIO

Tabla: Facturas

Campos

  • EMISOR → many2one Contactos
  • RECEPTOR → many2one Contactos
  • FECHA
  • SERIE / NUMERO
  • BASES → one2many Bases_factura

Tabla: Bases_factura

Campos

  • FACTURA → many2one Factura
  • BASE
  • TIPO_IVA
  • CUOTA_IVA
  • TIPO_RECARGO
  • CUOTA_RECARGO
  • TIPO_RETENCION
  • CUOTA_RETENCION
  • SUBTOTAL_BASE = CUOTA_IVA + CUOTA_RECARGO - CUOTA_RETENCION

EVOLUCIÓN FUTURA: MODELOS PROPIOS DE APRENDIZAJE AUTOMÁTICO

A medida que el sistema vaya acumulando miles de facturas procesadas, junto con sus datos fiscales ya validados, se podrá valorar el entrenamiento de modelos propios de aprendizaje automático.

El objetivo de esta evolución sería:

  • Detectar de forma automática el inicio y fin de facturas dentro de documentos PDF.
  • Mejorar la extracción de datos fiscales.
  • Reducir la dependencia de servicios externos.
  • Optimizar costes y tiempos de procesamiento.

Esta posibilidad se contempla como una fase futura, una vez el sistema esté consolidado, el volumen de datos lo justifique y se disponga de información suficiente y de calidad para el entrenamiento de dichos modelos.