Saltar al contenido
Contabilidad Ver la maquetaMaqueta
Índice
  1. Alcance
  2. Conectividad
  3. Funcionalidades
  4. Automatizaciones
  5. Datos y reglas del sistema
  6. Lo que ya existe
  7. Por cerrar
  8. Fuentes

Contabilidad de Matriz, propuesta técnica

Concreto Abstracto, 14 de noviembre de 2026

Héctor: esto es lo que hay que programar para el segundo módulo de Matriz, el de contabilidad. Lee los bancos de una empresa, recoge sus facturas, propone a qué factura corresponde cada movimiento y deja la contabilidad lista para su ERP o para su gestoría; en una fase posterior emite facturas con Verifactu. Se instala por cliente, con varias sociedades dentro, y se conecta con MailDraft.

Alcance

El módulo cubre la contabilidad del día a día de una empresa de 20 a 200 personas. No presenta impuestos ni lleva almacén.

Cada empresa trabaja en uno de dos modos. Con ERP: su ERP sigue siendo el sistema fiscal, y el módulo concilia, prepara y le pasa asientos. Sin ERP: el módulo lleva el libro y emite las facturas.

FaseQué entraPiloto
1 · Con ERP, por ficheroEmpresas y usuarios, bancos, facturas recibidas, conciliación, libro diario, cierre y exportación a la gestoría, conexión con el correoCliente A, que lleva a3 en su gestoría
2 · ERP por APILeer maestros y facturas de a3ERP; escribirle asientos, cobros y pagosCliente B, que trabaja con a3ERP
3 · FacturarFacturas emitidas con Verifactu y sus vencimientos de cobroConcreto Abstracto
4 · Sin ERPCierre de ejercicio, carga inicial desde el ERP anterior y factura electrónica entre empresaspor elegir

El orden de las fases y los pilotos están propuestos, sin cerrar. Los dos clientes piloto van aquí sin nombre, como A y B.

Cómo se entrega. Una instalación por cliente, con su base de datos y su contrato de Enable Banking, y varias sociedades dentro. Se cobra una cuota al mes. El mismo código se usa solo o como sección de la plataforma que el cliente ya tiene.

Queda fuera:

  • presentar modelos fiscales (303, 111, 115, 347, 349), el SII y las cuentas anuales: los presenta la gestoría con las cifras que le da el módulo;
  • almacén, pedidos, albaranes y circuitos de venta;
  • calcular nóminas: solo se importa su resumen mensual;
  • ordenar pagos o remesas desde el módulo: el banco es de solo lectura;
  • TicketBAI, IGIC, recargo de equivalencia y cuentas en otra moneda;
  • otros ERP (Sage, Holded, Odoo): entran después, por la misma puerta que a3ERP.

Conectividad

El módulo habla con ocho sistemas y solo escribe fuera en tres: el ERP, la AEAT y el correo, donde deja borradores.

Entra por bancos, extractos y correo; sale hacia el ERP, la AEAT y la gestoría
Conexiones del módulo. Entran bancos, extractos y correo. Salen el ERP del cliente, la AEAT y la gestoría. Se apoya en la lectura con IA y en la plataforma del cliente. Bancos Enable Banking, solo lectura saldos y movimientos al día Extractos Norma 43 o Excel subidos o llegados por correo Correo MailDraft o el buzón propio facturas, extractos e hilos Contabilidad de Matriz empresas, terceros y cuentasmovimientos y conciliaciónfacturas que entran y salenlibro diario y cierrereglas y automatizaciones ERP del cliente a3ERP por API o por fichero lee maestros, añade asientos AEAT Verifactu, al expedir registro de cada factura Gestoría libros y cifras del periodo usuario de solo lectura Lectura con IA PDF y fotos de facturas con límite de gasto al mes Plataforma del cliente acceso único y enlaces el módulo como una sección

A la izquierda, lo que entra; a la derecha, lo que sale; abajo, los dos servicios en los que se apoya. Las flechas con dos puntas son conexiones de ida y vuelta.

SistemaSentidoCómoCuándoSi falla
BancosleeEnable Banking: API REST con JWT firmado; el usuario autoriza en su bancacada día y a peticiónesa cuenta queda con su error y las demás siguen; se ofrece el extracto
ExtractosleeNorma 43, o Excel con asistente de columnasal subirlo o al llegar por correose rechaza el fichero que no cuadra y se dice por qué
Correolee y deja borradoreseventos y API entre módulos, con MailDraft o con el buzón propioal llegar cada correola factura se sube a mano
ERPlee; añade asientos, cobros y pagosa3ERP: API REST en el servidor del cliente, o fichero SUENLACE.DATprogramado y al cerrarcola con reintento; nada se duplica
AEATenvía registrosservicio web de Verifactu, con certificadoal expedir cada facturacola con reintento; la factura enseña su estado
GestoríaexportaCSV, ZIP y SUENLACE.DAT; además, un usuario de solo lecturaal cerrar mes o trimestreel paquete se vuelve a generar
IAenvía el documento y recibe camposAPI del modelo, con salida estructuradaal entrar una factura en PDF o en fotoalta a mano
Plataforma del clienteacceso único y enlacesAPI del módulo y sesión compartidasiempreel módulo sigue funcionando solo

Bancos: Enable Banking

  • Autenticación. Cada llamada lleva un JWT RS256 de una hora firmado con la clave privada de la aplicación: kid es el id de la aplicación, iss es enablebanking.com y aud, api.enablebanking.com.
  • Flujo. GET /aspsps?country=ES da los bancos; se enseñan los que admiten psu_type: business. POST /auth con el banco, valid_until, un state de un solo uso y la dirección de vuelta devuelve la URL del banco. El usuario autoriza allí y vuelve con un code. POST /sessions lo cambia por la sesión y sus cuentas. Después, GET /accounts/{uid}/balances y GET /accounts/{uid}/transactions, paginado con continuation_key.
  • Consentimiento. Dura lo que diga maximum_consent_validity de cada banco: 180 días en la mayoría. Un 401 o un 403 al leer significa sesión caducada. Renovar es volver a autorizar, y tiene que conservar la cuenta y sus movimientos.
  • Histórico. En la hora siguiente a la autorización la mayoría de los bancos dan un año o más; después, muchos limitan a 90 días. La primera lectura pide todo.
  • Límite. Sin el usuario delante, muchos bancos admiten unas cuatro consultas al día (429, ASPSP_RATE_LIMIT_EXCEEDED). Leer saldo y movimientos de una cuenta gasta dos.
  • Una sola vez. Cada movimiento se identifica por entry_reference o transaction_id. Si faltan, por una huella de fecha, importe, concepto e IBAN. Solo se guardan los movimientos firmes (BOOK).
  • Producción. La aplicación se activa con contrato y revisión de la empresa, o en modo restringido enlazando las cuentas propias. Pide política de privacidad, condiciones y un correo de protección de datos. Cobra por volumen, con un mínimo al mes que no publica.
  • Visto en el cliente A. CaixaBank, Bankinter, Banca March e Ibercaja conectan. Una cuenta de BBVA falla con «Error interacting with ASPSP». Santander y Sabadell, que pasan por Redsys, no dejan entrar al usuario de empresa. Para esos, extracto.

Extractos: Norma 43

  • Texto de ancho fijo en Windows-1252. Registros 11 (cabecera de cuenta), 22 (movimiento), 23 (conceptos), 33 (final de cuenta) y 88. Fechas AAMMDD; la clave 1 es un cargo.
  • Se comprueba que el saldo inicial más los movimientos da el final. Si no, no se carga.
  • La cuenta se localiza por entidad, oficina y número.
  • Un movimiento que ya entró por Enable Banking no puede entrar otra vez por el extracto: hace falta una identidad común a las dos vías. En lo que hay hecho no existe.

Correo: MailDraft

Es el contrato entre los dos módulos. La forma es una propuesta para cerrarla contigo.

SentidoQuéForma propuesta
Correo → contabilidadUn adjunto que parece una factura (PDF, o Facturae en .xml o .xsig) llega a un buzón marcado «de facturas»Evento con remitente, asunto, hilo, huella SHA-256 y el archivo
Correo → contabilidadUn adjunto en Norma 43El mismo evento; contabilidad lo valida y lo carga
Correo → contabilidadEl usuario pulsa «Pasar a facturas» en cualquier correoEl mismo evento, lanzado a mano
Contabilidad → correoLos hilos de un proveedor o de un clienteConsulta por dirección o por dominio
Contabilidad → correoUn borrador: enviar una factura, reclamar un cobro o pedir una factura que faltaAlta de borrador con destinatario, contexto y adjunto; el usuario lo revisa y lo envía
Los dosIdentidadUn solo inicio de sesión; cada buzón pertenece a una empresa

Sin MailDraft, el módulo tiene su propio buzón de facturas: una dirección a la que reenviar.

ERP: a3ERP

  • API. Un servicio de Windows en el servidor del cliente; pide a3ERP 14 o posterior y el diccionario JNCAPI. POST /api/login con un usuario de a3ERP devuelve un token.
  • Qué ofrece. Maestros en /api/maestro/{clientes, proveedores, cuentas, bancos, formaspago}. Facturas en /api/documento/{tipo}. Asientos: GET /api/asientos y POST /api/asientos/crear, con fecha, tipo, diario y los apuntes (cuenta, debe y haber). Cobrar y pagar vencimientos en /api/cartera/cobrar y /api/cartera/pagar.
  • Solo se añade. La API también modifica y borra. El adaptador no tiene esas operaciones.
  • Destino explícito. Primero, la empresa de pruebas, que es una copia de la real dentro de a3ERP. Se asienta el mismo periodo a mano y con el módulo, y hasta que no dan lo mismo no se apunta a la real.
  • Sin duplicar. Cada asiento lleva la referencia del módulo, y el módulo guarda el identificador que devuelve a3ERP.
  • Por fichero. Para quien no tenga la API: SUENLACE.DAT, registros de 512 bytes en Windows-1252 (tipo 0, apunte; 1 y 2, factura y rectificativa; 9, detalle de IVA; C, alta de cuenta). Lo importa el a3 de la gestoría, no a3ERP.
  • Sin confirmar. De quién es esa API (Wolters Kluwer o un distribuidor), qué cuesta y cómo se llega al servidor del cliente sin abrirle puertos. Lo natural sería un agente local que llame hacia fuera.

AEAT: Verifactu

  • Por cada factura, un registro de alta, y uno de anulación si se anula, con huella SHA-256 encadenada al registro anterior.
  • En el modo VERI*FACTU el registro se envía a la AEAT al expedir. La factura lleva el código QR y la leyenda.
  • Una factura expedida no se edita ni se borra: se rectifica o se anula.
  • El productor del programa firma una declaración responsable, visible dentro de la aplicación.
  • Calendario. En el BOE, el uso obliga a las sociedades desde el 1 de enero de 2027 y al resto desde el 1 de julio de 2027. Hacienda anunció en octubre que lo llevaría a octubre de 2028; a primeros de noviembre no estaba publicado. Las obligaciones del productor ya están en vigor.

Plataforma del cliente

  • El módulo expone su propia API, documentada, para todo lo que hace su interfaz.
  • La plataforma de un cliente lo monta como una sección: acceso único, enlaces a cada pantalla y sus propias dimensiones de análisis (centro, proyecto, barco o puerto).
  • Avisos de salida para quien quiera reaccionar: factura confirmada, movimiento conciliado, mes cerrado.

Funcionalidades

Son doce áreas. Cada una tiene una regla que no se rompe, y esa regla es lo primero que hay que respetar al programarla.

El detalle, requisito a requisito y con su identificador, está en Requisitos.

ÁreaQué haceLa regla que no se rompe
Empresas y usuariosVarias sociedades por instalación. Alta guiada: datos fiscales, ejercicio, modo, plan de cuentas, tipos de IVA y de retención con sus cuentas. Papeles de dirección, contabilidad, gestoría y consulta. Dimensiones de análisis que define cada empresaCada dato lleva su empresa. Nada del cliente vive en el código
BancosConectar, leer cada día, cargar extractos, renovar el consentimiento y ver la salud de cada conexiónUn movimiento entra una sola vez. Nunca se piden ni se guardan las claves del banco
Facturas recibidasEntran por correo, foto, PDF, Facturae o a mano. Se leen, se comprueban y se revisan con el documento al lado. Proveedor reconocido, vencimientos y aprobación opcional por importeNinguna se contabiliza sin que una persona la confirme. El original se guarda siempre
ConciliaciónCada movimiento llega con su propuesta y su motivo. Pagos y cobros, uno a varios y varios a uno. Reglas para lo que no es factura. Liquidaciones de TPV y pasarelas. Cola «Por resolver»Lo que una persona puso a mano no lo cambia ninguna regla
Libro diarioPartida doble. Asiento automático de cada factura, pago y cobro. Asientos a mano y plantillas. Mayor, balance de sumas y saldos y extracto de un terceroLo enviado al ERP o de un mes cerrado no se toca: se corrige con otro asiento
ERPUna puerta común y un adaptador por ERP. a3ERP por API o por fichero. Maestros desde Excel con pasada en seco y cola de dudososSolo se añade. El destino es explícito. Reenviar no duplica
FacturaciónSeries, facturas completas, simplificadas y rectificativas, Verifactu y vencimientos de cobro. Solo en el modo sin ERPUna factura expedida no se edita: se rectifica o se anula
Cierre y gestoríaCierre de mes y de trimestre. Libros de recibidas, emitidas, diario y banco. Cifras del periodo para los impuestos. Exportación de toda la empresaUn mes se cierra cuando ha terminado y no le queda nada pendiente
PanelLo de hoy, previsión de caja a 30, 60 y 90 días, ingresos y gastos frente al periodo anterior, rentabilidad por dimensión y preguntas a las cuentas en un chatToda cifra enlaza con los apuntes de los que sale
CorreoFacturas y extractos que llegan solos, hilos en la ficha de cada tercero y borradores desde contabilidadNingún correo sale sin que el usuario lo envíe
InterfazLa familia de MailDraft en la dirección Mesa: inicio por tareas, modo foco, chat y los movimientos en bandeja o en tabla. Todo con el teclado. Accesible según WCAG 2.2 AA. Español e inglésLo reversible se deshace. Solo lo irreversible pide confirmación
ImplantaciónPlantilla de instalación, versiones que se aplican a todos los clientes, lista de lo que hay que pedir al cliente y a su gestoría, carga inicial y cuotaEntorno de pruebas y real por cada destino. Ningún valor por defecto apunta al real

Cómo propone el cruce

Es el corazón del módulo. Así funciona lo que ya está en producción en el cliente A:

  1. Candidatas: las facturas contabilizadas con saldo pendiente, del mismo signo que el movimiento.
  2. Importe exacto, al céntimo: 50 puntos.
  3. Señal del proveedor, solo la mejor: el IBAN de la contraparte es el de su ficha (40), su NIF está en el concepto (35) o está su nombre (25).
  4. El número de la factura aparece en el concepto: 30.
  5. El pago cae a cinco días o menos del vencimiento: 10. A más de 120 días: se restan 15.
  6. Si ninguna llega a 75, se buscan combinaciones de facturas del mismo proveedor que sumen el importe exacto.
  7. Se enseñan las cinco mejores. La primera es «clara» si tiene 50 puntos o más y 20 de ventaja sobre la segunda.

Por añadir: los cobros de clientes, un margen para céntimos y comisiones, los traspasos entre cuentas propias y las liquidaciones agrupadas.

Automatizaciones

El módulo hace solo todo lo que no decide nada: leer, reconocer, proponer y avisar. Contabilizar y enviar lo confirma una persona, salvo lo que cada empresa ponga en automático.

AutomatizaciónSe disparaQué hace solaQué deja a una persona
Lectura de bancosCada madrugada y con «Leer ahora»Lee saldo y movimientos de cada cuenta, una a una, sin pasar del límite del bancoVolver a autorizar una conexión caída
Histórico inicialEn la hora siguiente a autorizar un bancoPide todo el histórico que dé el bancoNada
Aviso de caducidad15 días antes de que venza un consentimientoAvisa en el inicio y por correoRenovar en la banca
Carga de extractosLlega un Norma 43 al buzón de contabilidadLo valida y lo carga; si la cuenta no existe o no cuadra, lo anotaDar de alta la cuenta que falta
Detección de facturasLlega un adjunto a un buzón de facturasCrea la factura «por revisar», reconoce al proveedor y descarta la repetidaConfirmarla
Lectura de la facturaEntra el documentoFacturae sin IA; PDF y foto con IA. Comprueba que bases, cuotas y total cuadran y marca lo que noCorregir lo marcado
Lo habitual del proveedorSe abre la revisiónPropone cuenta de gasto, tipo de IVA, retención y dimensión de su última facturaAceptarlo o cambiarlo
Propuesta de cruceEntra un movimiento o se confirma una facturaPuntúa las candidatas y deja la mejor con su motivoConfirmar el cruce
ReglasEntra un movimientoAplica la regla de su contraparte o de su textoContabilizarlo
AprendizajeAlguien clasifica a manoPropone la regla para la próxima vezAceptar la regla
TraspasosEntran la salida y la entrada entre dos cuentas propiasLas emparejaNada
AsientosSe confirma una factura, un pago, un cobro o una reglaGenera el asiento, enlazado a su origenNada
VencimientosCada díaMarca lo vencido y prepara el borrador de la reclamaciónEnviar el correo
Factura que faltaUn pago a un proveedor sigue sin facturaPrepara el borrador pidiéndolaEnviar el correo
Envío al ERPAl validar o al cerrar, según la empresaCola con reintento que no duplica; registra cada intercambioPasar de la empresa de pruebas a la real
VerifactuSe expide una facturaGenera el registro, lo encadena, lo envía y reintentaExpedir
CierreTermina el mesPrepara la lista de lo que falta y el paquete de la gestoríaCerrar y reabrir
SaludSiempreAvisa de una conexión con error, de un saldo que no cuadra con el del banco y del límite de IA alcanzadoResolverlo
Previsión de cajaCada nocheRecalcula con los vencimientos y con lo que se repite cada mesNada

Cuánto se hace solo lo elige cada empresa. Hay dos niveles:

  1. Proponer. Es el que viene puesto. Nada se confirma sin una persona.
  2. Confirmar lo inequívoco. Se confirma sin preguntar el cruce que coincide en importe exacto y, además, en IBAN o en número de factura. Coincidir solo en importe no basta.

Todo lo que se hizo solo se distingue en pantalla, queda en el registro de actividad y se puede deshacer mientras el mes esté abierto.

La IA tiene interruptor por empresa, límite de gasto al mes y registro del coste de cada llamada. Con la IA apagada, todo lo demás funciona.

Datos y reglas del sistema

El modelo ya está probado en producción con una sola empresa; lo que falta es ponerle empresa a todo.

EntidadLo que guarda
EmpresaDatos fiscales, ejercicio, modo, dígitos del plan, cuentas de IVA y de retenciones, código en el ERP, nivel de automatismo
Usuario y papelQuién entra en qué empresa y con qué permiso: ver, editar, exportar o reabrir
TerceroUna ficha por NIF, cliente y proveedor a la vez: cuenta contable, IBAN, plazo de pago, operación y retención habituales
Cuenta contableCódigo como texto, nombre, origen (ERP o módulo) y si ya se dio de alta en el ERP
Conexión bancariaProveedor, entorno, banco, sesión cifrada, válida hasta, última lectura y último error
Cuenta bancariaIBAN, su cuenta 572, saldo del banco y su fecha, y de dónde llegan sus movimientos
MovimientoFecha, fecha valor, importe con signo, concepto, contraparte y su IBAN, identidad única, origen, estado (sin cruzar, cruzado o excluido)
ReglaTexto o contraparte, sentido, tramo de importe, cuenta de contrapartida, prioridad y usos
Documento entranteEl archivo, su huella, de dónde llegó, cómo se leyó y los campos leídos, hasta que una persona lo confirma o lo descarta
Factura recibida y sus líneasProveedor, número, fechas de expedición, de operación y de registro, tipo de operación, bases por tipo de IVA, retención, total, pagado, dimensiones y su asiento
Factura emitida y su registroSerie, número, cliente, líneas, y el registro de Verifactu con su huella y su estado en la AEAT
VencimientoDe qué factura, fecha, importe y estado
CruceQué movimiento con qué factura, por cuánto, y si lo propuso el módulo, lo eligió una persona o se hizo solo
Asiento y apuntesEjercicio y número, fecha, origen, estado (borrador, validado o enviado), y cada apunte con su cuenta, debe y haber
CierreQué mes, quién lo cerró y quién lo reabrió
Envío al ERPQué asientos, a qué destino, qué respondió y el identificador que devolvió
ActividadQuién, qué, cuándo y desde dónde. Solo se añade
Uso de IAModelo, tokens, coste y resultado de cada llamada

Lo que vale para todo el sistema:

  • la empresa va en cada tabla y en cada consulta;
  • importes en céntimos enteros y porcentajes en puntos básicos (2100 es el 21 %);
  • fechas contables sin hora;
  • códigos de cuenta y de tercero como texto: en a3ERP hay proveedores «A160»;
  • cada asiento se puede seguir hasta su movimiento, su factura y su documento, y al revés;
  • el registro de actividad no se modifica ni se borra, tampoco desde la base de datos;
  • las sesiones del banco y las claves van cifradas; la clave privada de Enable Banking, solo en el entorno del servidor;
  • documentos y registros se conservan seis años;
  • verificación en dos pasos para dirección y contabilidad.

Pruebas. La lógica contable va en funciones puras, sin base de datos: Norma 43, cruce, asientos, validación de facturas, SUENLACE y Verifactu. En el portal del cliente A hay unas 95 comprobaciones de este tipo que valen como casos.

Lo que ya existe

Casi toda la fase 1 está programada y en uso en el portal del cliente A, para una sola empresa y con sus datos metidos en el código. Es TypeScript (Next.js y Prisma): vale como referencia de algoritmos y de casos de prueba, se programe en lo que se programe.

PiezaDóndeEstado
Enable Banking: conector y flujo completo, con lectura cuenta a cuentaCliente AEn producción, con cuatro bancos reales
Norma 43: lector, carga y carga automática desde el correoCliente AEn producción
Cruce de movimientos con facturas recibidas, con puntuación y combinacionesCliente AEn producción
Reglas de banco y asiento del movimientoCliente AEn producción
Facturas recibidas: validación, asiento, proveedores y lectura de FacturaeCliente AEn producción
Lectura de facturas en PDF con IA, con límite de gastoCliente AProgramada, apagada
Cierre de mes y de trimestre, libros en CSV y SUENLACE.DATCliente AEn producción
Facturas y extractos que llegan por correo, e hilos enlazados con tercerosCliente AEn producción, sobre IMAP
Interfaz de MailDraft llevada a ReactCliente AEn producción, solo en el correo
Categorización que aprende de lo puesto a manoCliente BEn producción, con datos de prueba
Previsión de caja por recurrentesCliente BEn producción, con datos de prueba
Importador de maestros de a3ERP con pasada en seco y cola de dudososCliente BEn uso

Lo que no existe en ningún sitio: la empresa en las tablas, los cobros y las facturas emitidas en el cruce, una identidad de movimiento común a la conexión y al extracto, la escritura en a3ERP y Verifactu.

Interfaz. La dirección elegida es Mesa: un inicio que resume lo pendiente y lo reparte en tareas, con los movimientos en bandeja o en tabla. La maqueta programada, con datos ficticios, está en matriz.concretoabstracto.com.

Por cerrar

Seis decisiones son para verlas contigo y cuatro datos dependen de terceros.

Contigo:

  • Pila y repositorio: ¿dentro de MailDraft (Python, FastAPI y PostgreSQL) o como un servicio aparte? La referencia que existe es TypeScript.
  • Instalación por cliente: una base de datos por cliente, con varias sociedades dentro. ¿Cómo encaja con el despliegue de MailDraft?
  • Lo que puede dar ya el backend de MailDraft: avisar de un adjunto nuevo, consultar los hilos de una dirección, crear un borrador y un inicio de sesión común.
  • Quién figura ante la AEAT como productor del programa de facturación y firma la declaración responsable.
  • Qué modelo de IA lee las facturas, y con qué contrato de encargo del tratamiento.
  • Reparto y estimación: quién hace la interfaz y quién el resto, y cuánto lleva cada fase.

Sin confirmar, con terceros:

  • Enable Banking: el mínimo mensual, el precio por cuenta y si un contrato vale para las instalaciones de varios clientes.
  • a3ERP: de quién es la API, qué cuesta, qué versión tiene el cliente B y cómo se llega a su servidor.
  • Verifactu: si el aplazamiento a octubre de 2028 llega al BOE.
  • El orden de las fases y los pilotos.

Fuentes

Consultadas el 14 de noviembre de 2026.