Accounts payable · Production deploymentCuentas a pagar · Implementación en producción
AP Control Tower
The Madrid based marketing consultant firm processed every supplier invoice by hand: reading, data entry, validation and accounting preparation. Determa rebuilt that workflow as one governed circuit from the inbox to a controlled ERP handoff. Human review fell from 88% to 9.2%, while uncertain or high-risk cases still stop for a named person. La consultora de marketing con sede en Madrid procesaba cada factura de proveedor a mano: lectura, carga, validación y preparación contable. Determa rediseñó ese trabajo como un circuito gobernado desde la casilla de correo hasta una carga controlada en el ERP. La revisión humana bajó de 88% a 9,2%, mientras los casos inciertos o de alto riesgo siguen frenándose para una persona identificada.
The problemEl problema
Accounts payable does not fail loudly. It fails on the boring things, and each one of them ends with money leaving the company: the same invoice paid twice, a proforma booked as final, a total that does not agree with base plus tax, a tax identifier whose check digit does not validate, a supplier bank account that quietly changed between one payment run and the next.Las cuentas a pagar no fallan a los gritos. Fallan en lo aburrido, y cada una de esas fallas termina con plata que sale de la empresa: la misma factura pagada dos veces, una proforma contabilizada como definitiva, un total que no coincide con base más impuesto, un identificador fiscal cuyo dígito de control no valida, una cuenta bancaria de proveedor que cambió sin ruido entre una corrida de pagos y la siguiente.
The volume was not the issue. The issue was that every invoice looked equally urgent. With 88 out of every 100 requiring human intervention, the attention that should go to the risky ones was spread evenly across all of them. The first job was not to read faster, it was to make the difference between a clean invoice and a suspicious one visible before a person spends time on it.El volumen no era el tema. El tema era que todas las facturas parecían igual de urgentes. Con 88 de cada 100 requiriendo intervención humana, la atención que debía ir a las riesgosas se repartía por igual entre todas. El primer trabajo no era leer más rápido, era hacer visible la diferencia entre una factura limpia y una sospechosa antes de que una persona gastara tiempo en ella.
The circuit, from email to a controlled ERP handoffEl circuito, del correo a una carga controlada en el ERP
An invoice now travels a fixed path, and each stage does one thing well. The split that governs everything: the AI reads and explains, the code computes and checks, a person approves.Una factura ahora recorre un camino fijo, y cada etapa hace una sola cosa bien. La división que gobierna todo: la IA lee y explica, el código calcula y controla, una persona aprueba.
- The mailbox is the entry point. Invoices arrive by email, as attachments, in whatever format the supplier felt like sending. That is where the process actually starts, so that is where the system starts.La casilla es la entrada. Las facturas llegan por correo, como adjuntos, en el formato que a cada proveedor se le ocurrió. Ahí arranca el proceso de verdad, así que ahí arranca el sistema.
- AI extraction reads, it does not decide. Google Document AI turns the document into fields. What is not on the page is not filled in from context.La extracción con IA lee, no decide. Google Document AI convierte el documento en campos. Lo que no está en la página no se completa con contexto.
- Controls are rules in code, not model confidence. Duplicate detection on every document, base plus tax recomputed against the printed total, tax identifiers and bank accounts validated by check digit, and the supplier master checked against the ERP. A bank account that differs from the one on file stops the invoice, because a changed account is the one thing you cannot undo once the payment has left.Los controles son reglas en código, no confianza del modelo. Detección de duplicados sobre cada documento, base más impuesto recalculado contra el total impreso, identificadores fiscales y cuentas bancarias validados por dígito de control, y el maestro de proveedores contrastado contra el ERP. Una cuenta bancaria distinta de la registrada frena la factura, porque una cuenta cambiada es lo único que no se puede deshacer una vez que el pago salió.
- A named person reviews and approves. Whatever fails a control arrives with the document rendered next to the extracted values, so the reviewer decides instead of reconstructing the case.Una persona identificada revisa y aprueba. Todo lo que no pasa un control llega con el documento renderizado al lado de los valores extraídos, así quien revisa decide en vez de reconstruir el caso.
- The output is an ERP-ready accounting entry. AP Tower prepares and validates the accounting data and tax detail. The ERP remains the system of record and handles posting and payment; AP Tower never releases funds.La salida es un asiento listo para el ERP. AP Tower prepara y valida los datos contables y el detalle fiscal. El ERP sigue siendo el sistema de registro y gestiona la contabilización y el pago; AP Tower nunca libera fondos.
Quality is measured, not promisedLa calidad se mide, no se promete
A system that reads documents is only as good as the last thing you can prove about it. There is a versioned golden dataset of 106 real invoices, each with the correct answer defined by hand, field by field, alongside cases built to fail: fraud attempts, duplicates, broken data, documents that are not invoices at all. Passing on clean invoices proves nothing. The dataset exists to make the system fail where failing is cheap.Un sistema que lee documentos vale lo que vale lo último que podés demostrar sobre él. Hay un golden dataset versionado de 106 facturas reales, cada una con la respuesta correcta definida a mano, campo por campo, junto a casos construidos para fallar: intentos de fraude, duplicados, datos rotos, documentos que directamente no son facturas. Aprobar con facturas limpias no prueba nada. El dataset existe para hacer fallar al sistema donde fallar sale barato.
On top of it run 37 regression eval groups covering the application, Document AI, ERP handoff, n8n and persistence. Any version that performs worse than the production baseline does not ship.Sobre él corren 37 grupos de evaluaciones de regresión que cubren la aplicación, Document AI, la salida al ERP, n8n y persistencia. Cualquier versión que rinde peor que la línea de base productiva no se publica.
Measured resultsResultados medidos
Measured on a versioned golden dataset of 106 real invoices and 37 regression eval groups during the production deployment. Medido sobre un golden dataset versionado de 106 facturas reales y 37 grupos de evaluaciones de regresión durante la implementación en producción.
Six weeks against real accounting recordsSeis semanas contra la contabilidad real
Determa ran a regression test of the automated AP Tower pipeline without the Human in the Loop review stage. This was deliberately different from the production operating flow, where flagged or uncertain invoices were reviewed by a named person before export. Across May and June, 58 AP Tower outputs were reconciled against the Madrid based marketing consultant firm's accounting records. Of the 54 with a matching record, 36 matched base and VAT to the cent, 10 reflected the expected ERP tax treatment for foreign services, six differed only by posting date, and two extraction errors were identified.Determa ejecutó una prueba de regresión del circuito automatizado de AP Tower sin la etapa de revisión Human in the Loop. Esto fue deliberadamente diferente del flujo operativo en producción, donde una persona identificada revisaba las facturas marcadas o inciertas antes de exportarlas. Durante mayo y junio, se conciliaron 58 outputs de AP Tower contra la contabilidad de la consultora de marketing con sede en Madrid. De los 54 con contraparte, 36 coincidieron al céntimo en base e IVA, 10 reflejaron el tratamiento fiscal esperado del ERP para servicios extranjeros, seis sólo presentaron diferencias de fecha de contabilización y se identificaron dos errores de extracción.
The final June batch imported 39/39 accounting movements, 14/14 supplier invoices and 14/14 VAT records into the ERP's demo company with zero import errors. Its accounting reconciliation closed at €0.00. One fiscal extraction issue reached the test batch; the reconciliation exposed it and the control was added after that load.El lote final de junio importó 39/39 movimientos contables, 14/14 facturas de proveedor y 14/14 registros de IVA en la empresa demo del ERP, sin errores de importación. La conciliación contable cerró en €0,00. Un error de extracción fiscal llegó al lote de prueba; la conciliación lo expuso y el control se agregó después de esa carga.
Supervised comparison using downloaded accounting records. No write was made to the firm's live ERP company.Comparación supervisada con registros contables descargados. No se realizó ninguna escritura en la empresa activa del ERP de la firma.
GovernanceGobernanza
The system has no route to release funds. A named person approves the ERP export, and the decision and rationale are recorded in a hash-chained audit trail: what was read, what was checked, what failed, who approved and when.El sistema no tiene camino para liberar fondos. Una persona identificada aprueba la exportación al ERP, y la decisión y su motivo quedan registrados en una trazabilidad hash-encadenada: qué se leyó, qué se controló, qué falló, quién aprobó y cuándo.
There is a review copilot, GPT-5 mini, and it is read-only by construction. It explains why an invoice was flagged so the reviewer does not have to reconstruct the reasoning. It cannot modify a field, override a control or approve a payment. On the data side, Determa acts as a processor under the GDPR, with documented sub-processors and certified deletion when the engagement ends. When the system is in doubt, it stops: fail-closed by design.Hay un copiloto de revisión, GPT-5 mini, y es de solo lectura por construcción. Explica por qué una factura fue marcada, así el revisor no tiene que reconstruir el razonamiento. No puede modificar un campo, saltear un control ni aprobar un pago. Del lado de los datos, Determa actúa como encargado del tratamiento según el RGPD, con subencargados documentados y borrado certificado al terminar el trabajo. Cuando el sistema tiene dudas, se detiene: fail-closed por diseño.
Control, not just automationControl, no solo automatización
The system does not pay anything on its own.El sistema no paga nada solo.
Deterministic code computes the figures, the AI explains them and routes exceptions, and a person approves every critical action. Speed is what a client notices first. The order of that circuit is what makes the speed safe to keep.El código determinístico computa las cifras, la IA explica y deriva excepciones, y una persona aprueba cada acción crítica. La velocidad es lo primero que nota un cliente. El orden de ese circuito es lo que hace que esa velocidad se pueda sostener.
n8n automation and production operationAutomatización n8n y operación en producción
n8n receives minimal events through HMAC-authenticated webhooks, routes exceptions and operational alerts, and exposes execution status. A durable outbox retries failed deliveries and retains exhausted events for manual replay. n8n cannot change accounting states, approve invoices or write to the ERP, and receives no PDFs, bank details, tax IDs, amounts, supplier names or invoice text.n8n recibe eventos mínimos mediante webhooks autenticados con HMAC, deriva excepciones y alertas operativas, y muestra el estado de las ejecuciones. Un outbox durable reintenta entregas fallidas y conserva los eventos agotados para replay manual. n8n no puede cambiar estados contables, aprobar facturas ni escribir en el ERP, y no recibe PDFs, datos bancarios, identificadores fiscales, importes, nombres de proveedores ni texto de facturas.
GitHub Actions runs evals, builds the container and performs a smoke test. Releases move through a zero-traffic QA revision, database migration, functional verification and controlled Cloud Run promotion, with structured logs, alerts and rollback procedures.GitHub Actions ejecuta evals, construye el contenedor y realiza un smoke test. Los releases pasan por una revisión QA sin tráfico, migración de base, verificación funcional y promoción controlada en Cloud Run, con logs estructurados, alertas y procedimientos de rollback.
Integrations and statusIntegraciones y estado
- Email mailbox through Gmail via IMAP, the real entry point of the process.Casilla de correo de Gmail vía IMAP, la entrada real del proceso.
- Google Document AI for extraction.Google Document AI para la extracción.
- The ERP, which receives an importable journal entry with its tax detail.El ERP, que recibe un asiento contable importable con su detalle fiscal.
- n8n for authenticated exception routing, retries and execution monitoring.n8n para derivación autenticada de excepciones, reintentos y monitoreo de ejecuciones.
- Google Cloud Run for deployment.Google Cloud Run para el deployment.
Production deployment completed. Determa built the application, the control model, the evaluation suite and the operating layer, and operated it as a managed system.Implementación en producción completada. Determa construyó la aplicación, el modelo de controles, la suite de evaluación y la capa operativa, y lo operó como sistema gestionado.
Stack
Python · FastAPI · Streamlit · PostgreSQL · Google Document AI · n8n · Docker · GitHub Actions · Google Cloud Run
The review copilot is read-only. Accounting logic remains deterministic, releases are evaluation-gated, and operational events are monitored independently from the accounting state.El copiloto de revisión es de solo lectura. La lógica contable sigue siendo determinística, los releases están bloqueados por evaluaciones y los eventos operativos se monitorean de forma independiente del estado contable.